pywcs-1.11-4.8.2/0000775000076400007640000000000011701362314014034 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/doc/0000775000076400007640000000000011701362314014601 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/doc/make.bat0000664000076400007640000000557311421352016016215 0ustar mdboommdboom00000000000000@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.11-4.8.2/doc/docstrings.py0000664000076400007640000016117711701360111017340 0ustar mdboommdboom00000000000000# 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``, and the deprecated ``CDi_ja`` and ``CROTAia`` keywords. Although the deprecated versions 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``, and the deprecated ``CDi_ja`` and ``CROTAia`` keywords. Although the deprecated versions 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 deprecated ``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 deprecated ``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``, and the deprecated ``CDi_ja`` and ``CROTAia`` keywords. Although the deprecated versions 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. - *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. - 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.11-4.8.2/doc/source/0000775000076400007640000000000011701362314016101 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/doc/source/index.rst0000664000076400007640000000115611421352016017742 0ustar mdboommdboom00000000000000.. 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.11-4.8.2/doc/source/api.rst0000664000076400007640000000073011700600600017374 0ustar mdboommdboom00000000000000.. include:: references.rst API documentation ================= :mod:`pywcs` ------------ .. automodule:: pywcs.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.11-4.8.2/doc/source/api_sip.rst0000664000076400007640000000017311421352016020255 0ustar mdboommdboom00000000000000.. include:: references.rst `Sip` ````` .. autoclass:: pywcs.Sip :members: :inherited-members: :undoc-members: pywcs-1.11-4.8.2/doc/source/references.rst0000664000076400007640000000045611421352016020756 0ustar mdboommdboom00000000000000.. _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.11-4.8.2/doc/source/api_wcsprm.rst0000664000076400007640000000056211435244054021006 0ustar mdboommdboom00000000000000.. 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.11-4.8.2/doc/source/api_wcs.rst0000664000076400007640000000026511435244054020267 0ustar mdboommdboom00000000000000.. include:: references.rst `WCS` ````` .. autoclass:: pywcs.WCS :members: :inherited-members: :undoc-members: functions ````````` .. autofunction:: pywcs.find_all_wcs pywcs-1.11-4.8.2/doc/source/api_units.rst0000664000076400007640000002746111464772035020653 0ustar mdboommdboom00000000000000.. 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.11-4.8.2/doc/source/examples/0000775000076400007640000000000011701362314017717 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/doc/source/examples/from_file.py0000664000076400007640000000212311421352020022221 0ustar mdboommdboom00000000000000# 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.11-4.8.2/doc/source/examples/programmatic.py0000664000076400007640000000255111421352020022751 0ustar mdboommdboom00000000000000# 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.11-4.8.2/doc/source/conf.py0000664000076400007640000001503411700600600017373 0ustar mdboommdboom00000000000000# -*- 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 # 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 = pywcs.__version__ # The full version, including alpha/beta/rc tags. release = pywcs.__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.11-4.8.2/doc/source/api_distortion.rst0000664000076400007640000000026111421352016021656 0ustar mdboommdboom00000000000000.. include:: references.rst `DistortionLookupTable` ``````````````````````` .. autoclass:: pywcs.DistortionLookupTable :members: :inherited-members: :undoc-members: pywcs-1.11-4.8.2/doc/source/relax.rst0000664000076400007640000003423611464772035017771 0ustar mdboommdboom00000000000000.. 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. pywcs-1.11-4.8.2/doc/source/examples.rst0000664000076400007640000000117511421663616020465 0ustar mdboommdboom00000000000000Example 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.11-4.8.2/doc/Makefile0000664000076400007640000000563611421352016016250 0ustar mdboommdboom00000000000000# 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.11-4.8.2/wcslib/0000775000076400007640000000000011701362314015317 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/config/0000775000076400007640000000000011701362314016564 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/config/missing0000775000076400007640000002466611644623434020212 0ustar mdboommdboom00000000000000#! /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.11-4.8.2/wcslib/config/config.guess0000775000076400007640000012675511700600600021114 0ustar mdboommdboom00000000000000#! /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.11-4.8.2/wcslib/config/elisp-comp0000775000076400007640000000405611644623434020600 0ustar mdboommdboom00000000000000#!/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.11-4.8.2/wcslib/config/move-if-change0000775000076400007640000000037311644623434021313 0ustar mdboommdboom00000000000000#!/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.11-4.8.2/wcslib/config/config.sub0000775000076400007640000010503411700600600020542 0ustar mdboommdboom00000000000000#! /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.11-4.8.2/wcslib/config/mdate-sh0000775000076400007640000001013011644623434020220 0ustar mdboommdboom00000000000000#!/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.11-4.8.2/wcslib/config/mkinstalldirs0000775000076400007640000000530011644623434021401 0ustar mdboommdboom00000000000000#! /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.11-4.8.2/wcslib/config/install-sh0000775000076400007640000002017411644623434020605 0ustar mdboommdboom00000000000000#!/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.11-4.8.2/wcslib/COPYING.LESSER0000664000076400007640000001672511644623434017372 0ustar mdboommdboom00000000000000 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.11-4.8.2/wcslib/wcsconfig_f77.h.in0000664000076400007640000000210511700600600020530 0ustar mdboommdboom00000000000000/*============================================================================ * * wcsconfig_f77.h is generated from wcsconfig_f77.h.in by 'configure'. It * contains C preprocessor definitions for building the WCSLIB 4.8 Fortran * wrappers. * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig_f77.h.in,v 4.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ /* 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.11-4.8.2/wcslib/configure.ac0000664000076400007640000004032311700600600017577 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # 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.8.1.5 2011/10/04 08:01:03 cal103 Exp cal103 $ #----------------------------------------------------------------------------- AC_INIT([WCSLIB], [4.8.2], [mcalabre@atnf.csiro.au], [wcslib-4.8.2]) AC_PREREQ([2.53]) AC_REVISION([$Revision: 4.8.1.5 $]) 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 $LIBS]) AC_CHECK_LIB([cpgplot], [cpgbeg], [PGPLOTLIB="-lcpgplot $PGPLOTLIB"], [PGPLOTLIB=], [$PGPLOTLIB $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.11-4.8.2/wcslib/README0000664000076400007640000000402611700600600016171 0ustar mdboommdboom00000000000000------------------------------------------------------------------------------ WCSLIB 4.8 and PGSBOX 4.8 ------------------------------------------------------------------------------ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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. ./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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ pywcs-1.11-4.8.2/wcslib/html/0000775000076400007640000000000011701362314016263 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/html/fitshdr_8h.html0000664000076400007640000005473111700600600021215 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x64.html0000664000076400007640000001443011700600600022767 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- d -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_65.png0000664000076400007640000000047611700600600020245 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_0x6f.html0000664000076400007640000000670211700600600022021 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- o -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_30.png0000664000076400007640000000026011700600600020224 0ustar mdboommdboom00000000000000‰PNG  IHDR Þ¹°0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf.IDAT™c`@LA¢@J…Ï{JàgR‰ÚA$+A*>cRŒG̃ຣöígQ(6IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/wcshdr_8h-source.html0000664000076400007640000036420411700600600022341 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcshdr.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_48.png0000664000076400007640000000063011700600600020236 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_vars_0x77.html0000664000076400007640000000766211700600600023004 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- w -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x6e.html0000664000076400007640000001073611700600600023055 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- n -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_42.png0000664000076400007640000000050711700600600020233 0ustar mdboommdboom00000000000000‰PNG  IHDR*’ ð£0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfÅIDAT•c` Px `ŠÝ€¡Á&Êk¦¸€Ø—Ï*Ê¡4€¸ƒ}„'l˨ ¤'20^f`üdk¼Á>ÍiÃiU Ð1°¨/Ãe£k X®0_``˜ }ÎðáË e,8XëÁ¢Ÿ™0?à `bà¸ÀÀÁ“ýÈ9•}?;C1û~6Ö ¬@¢ånmÜ<Á@Ë·x'é•!y©[ p(`åÂf•õ'•ÒÍë±IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_vars.html0000664000076400007640000000737711700600600022222 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- a -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_34.png0000664000076400007640000000054611700600600020237 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_22.png0000664000076400007640000000031511700600600020226 0ustar mdboommdboom00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfKIDAT™c`€F†r Ãþn—ó Ã"‰‹¡È0c`àV<dX¹0v*‚ _ ºnA7 ™>A³ ÔD îî› IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x6f.html0000664000076400007640000000674611700600600023064 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- o -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_73.png0000664000076400007640000000035611700600600020241 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/cel_8h.html0000664000076400007640000010776111700600600020317 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x74.html0000664000076400007640000000765311700600600023001 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- t -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/prj_8h.html0000664000076400007640000055020311700600600020340 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_56.png0000664000076400007640000000032111700600600020232 0ustar mdboommdboom00000000000000‰PNG  IHDR a)ÛE0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfOIDAT™c`ÀX ò?¢ð? )ÓÊÆÆÆ \›xÀ\·´´´>9dÅü ‘`:sæÌ™| ÉNgø€Ä]Ä0Óm–B' ‹ýèIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x72.html0000664000076400007640000001026311700600600022766 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- r -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcsmath_8h.html0000664000076400007640000001716611700600600021221 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/structs.html0000664000076400007640000001530311700600600020652 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_12.png0000664000076400007640000000036711700600600020234 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/fortran.html0000664000076400007640000002134611700600600020622 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x7a.html0000664000076400007640000001016711700600600021430 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_31.png0000664000076400007640000000027511700600600020233 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_0x63.html0000664000076400007640000001320311700600600021730 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- c -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_68.png0000664000076400007640000000031211700600600020235 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x66.html0000664000076400007640000001515111700600600021352 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/spx_8h.html0000664000076400007640000015466011700600600020366 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/memory.html0000664000076400007640000002120411700600600020450 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_33.png0000664000076400007640000000027711700600600020237 0ustar mdboommdboom00000000000000‰PNG  IHDR  ®‘é0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf=IDAT™c`€ƒŒŽvͽPøˆæ`¸¢å¾è8é zýÌÉ`õß Ú˜>BhŽzÖ $€ žé»áÜIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/getwcstab_8h-source.html0000664000076400007640000005170111700600600023025 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: getwcstab.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcs_8h.html0000664000076400007640000026454411700600600020353 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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, 0, 0, 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, 0, 0, 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.)

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.
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 != 0. 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. 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.

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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x77.html0000664000076400007640000000761611700600600021750 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- w -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x76.html0000664000076400007640000001012411700600600021733 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- v -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x6b.html0000664000076400007640000000764111700600600022020 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- k -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x74.html0000664000076400007640000000760711700600600021745 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- t -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/lin_8h-source.html0000664000076400007640000014306611700600600021632 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: lin.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_1.png0000664000076400007640000000044611700600600020150 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/log_8h.html0000664000076400007640000003324711700600600020332 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/index.html0000664000076400007640000000612511700600600020254 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: WCSLIB 4.8.2 and PGSBOX 4.8.2

WCSLIB 4.8.2 and PGSBOX 4.8.2

Bonne.gif

Bonne's projection

Contents

Copyright

  WCSLIB 4.8 - an implementation of the FITS WCS standard.
  Copyright (C) 1995-2011, 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x75.html0000664000076400007640000000674511700600600023003 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- u -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_47.png0000664000076400007640000000033711700600600020241 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x72.html0000664000076400007640000000677311700600600021361 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_19.png0000664000076400007640000000043411700600600020236 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_0x70.html0000664000076400007640000001257411700600600021740 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- p -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x62.html0000664000076400007640000000670011700600600021733 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- b -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcslib_8h-source.html0000664000076400007640000003240311700600600022323 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcslib.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x64.html0000664000076400007640000000727311700600600021356 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/log_8h-source.html0000664000076400007640000004466611700600577021654 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: log.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_61.png0000664000076400007640000000063211700600600020233 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_72.png0000664000076400007640000000135511700600600020240 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_41.png0000664000076400007640000000031611700600600020230 0ustar mdboommdboom00000000000000‰PNG  IHDRíÝâR0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfLIDAT™c`@Œ0¿”¡)Ì † @Œ´©Ò  FÆ>° WCSLIB 4.8.2: Data Fields - Variables
 

- g -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/intro.html0000664000076400007640000000626611700600600020306 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x77.html0000664000076400007640000004444211700600600021361 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_59.png0000664000076400007640000000073211700600600020243 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x70.html0000664000076400007640000001526011700600600021346 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions.html0000664000076400007640000000733311700600600021157 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- a -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_29.png0000664000076400007640000000047211700600600020241 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/spc_8h-source.html0000664000076400007640000030100711700600600021624 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: spc.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/fitshdr_8h-source.html0000664000076400007640000014124411700600600022507 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: fitshdr.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_0.png0000664000076400007640000000044511700600600020146 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_vars_0x70.html0000664000076400007640000001264011700600600022765 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- p -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_52.png0000664000076400007640000000047511700600600020240 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/structspcprm.html0000664000076400007640000004325511700600600021723 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/tab_8h.html0000664000076400007640000013063511700600600020316 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x66.html0000664000076400007640000001020411700600600021731 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- f -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcshdr_8h.html0000664000076400007640000042505311700600600021043 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_63.png0000664000076400007640000000032211700600600020231 0ustar mdboommdboom00000000000000‰PNG  IHDR?6:º0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfPIDAT™c`Àò~2ø†0y’¡¢üj0þ¬0æÜÜ0æ¦ ~`æ'†W | Ë(³ïÃüC¦ ñ!¬´7„3ŒÁ™¾vIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/globals_0x62.html0000664000076400007640000000741311700600600021350 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_62.png0000664000076400007640000000031311700600600020230 0ustar mdboommdboom00000000000000‰PNG  IHDR6ÝšÀ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfIIDAT™c`@L ÂpŽÿoÖÿ`œ <ñ áR,¯‘u}#“UrÜÌÎüÛÀ`åp‰Ìa`àex`cS)ͼ #Õ™;µÏü¬IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/globals_vars.html0000664000076400007640000001014311700600600021616 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
 


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/cel_8h-source.html0000664000076400007640000014217111700600600021607 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: cel.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x6c.html0000664000076400007640000001033611700600600023047 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- l -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_67.png0000664000076400007640000000043311700600600020240 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/getwcstab_8h.html0000664000076400007640000002304711700600600021531 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x63.html0000664000076400007640000002137211700600600021351 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcstrig_8h.html0000664000076400007640000004202411700600600021224 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x7a.html0000664000076400007640000000670111700600600022014 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- z -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcsfix_8h-source.html0000664000076400007640000013167411700600600022355 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcsfix.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x6c.html0000664000076400007640000001475011700600577021450 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_54.png0000664000076400007640000000034511700600600020236 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x6b.html0000664000076400007640000000714111700600600021426 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x62.html0000664000076400007640000000674411700600577023013 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- b -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_40.png0000664000076400007640000000027711700600600020235 0ustar mdboommdboom00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf=IDAT™c`@£Ƈ1¸  Ö0¡Pšã”15Bsð ôä³8'é‚D€(¦o’ì  \w3ÈuIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/structfitskey.html0000664000076400007640000005260111700600600022070 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_39.png0000664000076400007640000000027711700600600020245 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/wcsutil_8h-source.html0000664000076400007640000005526111700600600022541 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcsutil.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/structcelprm.html0000664000076400007640000004174311700600600021701 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x79.html0000664000076400007640000000653611700600600021752 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- y -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x6d.html0000664000076400007640000001630011700600600023045 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- m -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x6d.html0000664000076400007640000001003211700600600021421 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcsunits_8h-source.html0000664000076400007640000013666211700600600022733 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcsunits.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x69.html0000664000076400007640000001030611700600600022772 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- i -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/annotated.html0000664000076400007640000000637011700600600021124 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/structpscard.html0000664000076400007640000001037611700600577021706 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x71.html0000664000076400007640000000741111700600600021346 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_25.png0000664000076400007640000000027211644623434020254 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_66.png0000664000076400007640000000036111700600600020237 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_defs.html0000664000076400007640000003755311700600600021602 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
 

- c -

- d -

- e -

- f -

- k -

- l -

- n -

- p -

- r -

- s -

- t -

- u -

- w -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/software.html0000664000076400007640000001341411700600600020776 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 (2011/08/05) 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_35.png0000664000076400007640000000054711700600600020241 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_38.png0000664000076400007640000000026411700600600020240 0ustar mdboommdboom00000000000000‰PNG  IHDR r¢É0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf2IDAT™c`@¦ ’3` ªað3Rßì €ÔG{ õˆ!Ÿ H©¹©Á4äÇÃÑ[…xIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/globals_0x69.html0000664000076400007640000000677511700600600021371 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_8.png0000664000076400007640000000025311644623434020174 0ustar mdboommdboom00000000000000‰PNG  IHDR Olú×0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf)IDAT™c```H`€‚F\ŒÌ™¯fN  &£ãfGˆÁ((((À€&V ‘=JgDIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x79.html0000664000076400007640000000660211700600600022777 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- y -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_55.png0000664000076400007640000000041211700600600020232 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/pgsbox.html0000664000076400007640000000670011700600600020446 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcslib_8h.html0000664000076400007640000000575611700600600021040 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_51.png0000664000076400007640000000030511700600600020227 0ustar mdboommdboom00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfCIDAT™c`@c†r Í­²€Ëy±‚a;C#ñ¡—[ñ˜ÑÏØ©a@4Á×fCÙ —! ¶ôd|@…M@~IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/form_18.png0000664000076400007640000000027211644623434020256 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_24.png0000664000076400007640000000030111644623434020244 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_0x64.html0000664000076400007640000001436411700600600021742 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- d -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/pages.html0000664000076400007640000000223311700600600020240 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Page Index

Related Pages

Here is a list of all related documentation pages:

Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_type.html0000664000076400007640000000354611700600600021635 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
 


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/doxygen.png0000664000076400007640000000240111644623434020454 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/spx_8h-source.html0000664000076400007640000017623711700600600021670 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: spx.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x67.html0000664000076400007640000000654211700600600021744 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- g -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_69.png0000664000076400007640000000045711700600600020250 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/sph_8h-source.html0000664000076400007640000006476111700600600021646 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: sph.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_58.png0000664000076400007640000000037411700600600020244 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_14.png0000664000076400007640000000025511700600600020232 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/functions_0x75.html0000664000076400007640000000670111700600600021740 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- u -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/sph_8h.html0000664000076400007640000005225011700600600020336 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_46.png0000664000076400007640000000033111700600600020232 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/doxygen.css0000664000076400007640000002161011700600600020442 0ustar mdboommdboom00000000000000BODY,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.11-4.8.2/wcslib/html/functions_vars_0x63.html0000664000076400007640000001324711700600600022773 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- c -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x7a.html0000664000076400007640000000674511700600600023057 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- z -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x73.html0000664000076400007640000001122511700600600021733 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- s -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/threads.html0000664000076400007640000000751211700600600020600 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Thread-safety

Thread-safety

With the following exceptions WCSLIB 4.8 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_23.png0000664000076400007640000000036111700600600020230 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_10.png0000664000076400007640000000030311700600600020220 0ustar mdboommdboom00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfAIDAT™c`@€Œ6ÆŽƒó#Ã1°ãWvˆÜ¾ÉPEúP†ÿÍâúÂpaø¦Ù&0Ì3f-`YÓÙŽ ¸Ì?¬9IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x65.html0000664000076400007640000001120311700600600022763 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- e -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcsunits_8h.html0000664000076400007640000015634711700600600021437 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/structlinprm.html0000664000076400007640000004337211700600600021720 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x76.html0000664000076400007640000000771311700600600021360 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x6e.html0000664000076400007640000000677511700600600021445 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/structfitskeyid.html0000664000076400007640000001203711700600600022404 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_9.png0000664000076400007640000000030011700600600020145 0ustar mdboommdboom00000000000000‰PNG  IHDR  ®‘é0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf>IDAT™c`€‰ŽŽ]­(3D70¬‹p]€(ˆ…P¬Ÿ ´¿+ˆbúÄ ¢õX誙³&  ›*‚ö¥IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/form_2.png0000664000076400007640000000046111700600600020146 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/tab_r.gif0000664000076400007640000000503111644623434020051 0ustar mdboommdboom00000000000000GIF89a,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ,,ÿ@’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.11-4.8.2/wcslib/html/form_44.png0000664000076400007640000000053011700600600020231 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_60.png0000664000076400007640000000025511644623434020254 0ustar mdboommdboom00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`ÀX¡4ûͱÊŸ •ØW9ÎBˆMƒ±˜Q H\XQÔ™¸IIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/form_71.png0000664000076400007640000000025511700600600020235 0ustar mdboommdboom00000000000000‰PNG  IHDR Þ¹°0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`@,ª *ðA<ˆ ÝÀ ¢x ØA?CˆâeHQl)]¡¤u½§ö€IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_0x6e.html0000664000076400007640000001067211700600600022021 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- n -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_16.png0000664000076400007640000000034711700600600020236 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/structwcsprm.html0000664000076400007640000024511211700600600021726 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_26.png0000664000076400007640000000057011700600600020235 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x74.html0000664000076400007640000001467711700600600021365 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_70.png0000664000076400007640000000057311700600600020237 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/testing.html0000664000076400007640000001777011700600600020632 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_49.png0000664000076400007640000000063211700600600020241 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/wcsmath_8h-source.html0000664000076400007640000002121511700600600022505 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcsmath.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_50.png0000664000076400007640000000040011700600600020222 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_27.png0000664000076400007640000000057211700600600020240 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/wcsfix_8h.html0000664000076400007640000013727211700600600021057 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 CELFIX   3
 Index of celfix() status value in vector returned by wcsfix().
#define SPCFIX   4
 Index of spcfix() 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_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 celfix (struct wcsprm *wcs)
 Translate AIPS-convention celestial projection types.
int spcfix (struct wcsprm *wcs)
 Translate AIPS-convention spectral 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'.

  • celfix(): translate AIPS-convention celestial projection types, NCP and GLS, in ctype[] as set from CTYPEia.

  • spcfix(): translate AIPS-convention spectral types, 'FREQ-LSR', 'FELO-HEL', etc., 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 CELFIX   3

Index of the status value returned by celfix() in the status vector returned by wcsfix().

#define SPCFIX   4

Index of the status value returned by spcfix() 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_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 datfix(), unitfix(), celfix(), spcfix() 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, CELFIX, SPCFIX 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, CELFIX, SPCFIX 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.
  • 1: Null wcsprm pointer passed.

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 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.

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 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/lin_8h.html0000664000076400007640000012313411700600577020343 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x78.html0000664000076400007640000000660211700600600022776 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- x -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_21.png0000664000076400007640000000036211700600600020227 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_7.png0000664000076400007640000000032011700600600020145 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/structtabprm.html0000664000076400007640000006444311700600600021706 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_43.png0000664000076400007640000000024711644623434020256 0ustar mdboommdboom00000000000000‰PNG  IHDR ÒŽ0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf%IDAT™c`@Ì @‚s™¬ üš"?‚Ù›Á¤D¸T1ˆ2X}IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/structpvcard.html0000664000076400007640000001037111700600600021667 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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.

int pvcard::m

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

double pvcard::value

(Given) Parameter value.


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_0x73.html0000664000076400007640000002220411700600600021345 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_64.png0000664000076400007640000000025511644623434020260 0ustar mdboommdboom00000000000000‰PNG  IHDRÔ¹0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf+IDAT™c`ÀX¡4ûͱÊŸ •ØW9ÎBˆMƒ±˜Q H\XQÔ™¸IIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x66.html0000664000076400007640000001025011700600600022765 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- f -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals.html0000664000076400007640000001233611700600600020571 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcstrig_8h-source.html0000664000076400007640000005241611700600600022530 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcstrig.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_4.png0000664000076400007640000000032411700600600020146 0ustar mdboommdboom00000000000000‰PNG  IHDRíf0â0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfRIDAT™c`€&=e˜bkèÓü]`º–á&˜¾?óƒþÆðQ]B€á#놅, @šWá"ó†Å© `šEaKX‹„9Ô ­Í­r‚‰ÛIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/structwtbarr.html0000664000076400007640000002621611700600600021716 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_3.png0000664000076400007640000000032411700600600020145 0ustar mdboommdboom00000000000000‰PNG  IHDR¨‚!0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfRIDAT™c`À` &‹Æ`©*…²¦²s ƒÌT8R'Y ¼: Í@[BA$CHzÙŠ(‹¹€‡aØ8æä°yè–íx !½”9IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/Bonne.gif0000664000076400007640000002221411644623434020025 0ustar mdboommdboom00000000000000GIF87a ëòÿÿÿÿÿ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.11-4.8.2/wcslib/html/form_37.png0000664000076400007640000000030011700600600020226 0ustar mdboommdboom00000000000000‰PNG  IHDR Oï0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf>IDAT™c`ÀªÌ!, Fêž"ÃsŸƒ<ˆÁkÀÏbð3ø262l:>$á ‹¦"™e° t ¯IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/form_11.png0000664000076400007640000000031611700600600020225 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_13.png0000664000076400007640000000040511700600600020226 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_45.png0000664000076400007640000000053411700600600020236 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x65.html0000664000076400007640000000713111700600600021350 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/tab_b.gif0000664000076400007640000000004311644623434020027 0ustar mdboommdboom00000000000000GIF89a€„°Ç,D;pywcs-1.11-4.8.2/wcslib/html/wcsutil_8h.html0000664000076400007640000004172111700600600021237 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_15.png0000664000076400007640000000026311644623434020253 0ustar mdboommdboom00000000000000‰PNG  IHDR À(0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf1IDAT™c`@\JYŒ­L%x)iчê˜dÙ¦8@d./˜cÙ„0ðÒù½³IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/form_17.png0000664000076400007640000000105311700600600020232 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/structspxprm.html0000664000076400007640000010663411700600600021751 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x78.html0000664000076400007640000000653611700600600021751 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- x -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_28.png0000664000076400007640000000057511700600600020244 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/globals_0x68.html0000664000076400007640000000741011700600600021353 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/files.html0000664000076400007640000001047411700600600020251 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: File Index
Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_20.png0000664000076400007640000000027011644623434020245 0ustar mdboommdboom00000000000000‰PNG  IHDR ™É ²0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf6IDAT™c`@F†r -~‹ËyH¤‹‹¡ÂàV<a0v*@P€É˜ ¥%WM`@5Ñ Â/IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_0x6d.html0000664000076400007640000001623411700600600022020 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- m -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x72.html0000664000076400007640000001021711700600600021732 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- r -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/structprjprm.html0000664000076400007640000005771311700600600021735 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/tabs.css0000664000076400007640000000334211700600600017720 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/wcslib/html/tab_8h-source.html0000664000076400007640000020240111700600600021603 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: tab.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/spc_8h.html0000664000076400007640000024172511700600600020340 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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_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 keywords, CTYPEn and VELREF, into CTYPEia and SPECSYSa.

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_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 keywords, CTYPEn and VELREF, into CTYPEia and SPECSYSa.

Parameters:
[in] ctypeA CTYPEia keyvalue (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 is denoted by adding 256 to VELREF, otherwise an optical velocity is indicated (not applicable to 'FELO' axes). Unrecognized values of VELREF are simply ignored.
VELREF takes precedence over CTYPEia in defining the Doppler frame, e.g. if
                          CTYPEn = 'VELO-HEL'
                          VELREF = 1

the Doppler frame is set to LSRK.
[out] ctype Translated CTYPEia keyvalue, or a copy of ctypeA if no translation was performed (null-filled).
[out] specsys Doppler reference frame indicated by VELREF or else by CTYPEn.
Returns:
Status return value:
  • -1: No translation required (not an error).
  • 0: Success.

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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/prj_8h-source.html0000664000076400007640000031331411700600600021636 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: prj.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_36.png0000664000076400007640000000031111700600600020227 0ustar mdboommdboom00000000000000‰PNG  IHDR Olú×0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfGIDAT™c`@UÓXÁ´_ËwÍò‰áˆÁŸÀÀ°Ä¨‡)½ËÀhlbÜb`ª/1æ20øƒ¥ä΀Œ«ÛY·¨ j¼ŸÁIEND®B`‚pywcs-1.11-4.8.2/wcslib/html/form_57.png0000664000076400007640000000030111700600600020231 0ustar mdboommdboom00000000000000‰PNG  IHDR \Gƒ[0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØf?IDAT™c` L€„²±±±WÀ Ç----!‡áBÕ70™9sæÌ ‘õ?b(DpÄ]PM´Ž ßä$Ì·IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_0x69.html0000664000076400007640000001024211700600600021736 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- i -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x76.html0000664000076400007640000001017011700600600022767 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- v -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_vars_0x6b.html0000664000076400007640000000770511700600600023054 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- k -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/wcs_8h-source.html0000664000076400007640000052774111700600600021652 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: wcs.h Source File
Generated on Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/functions_0x6c.html0000664000076400007640000001027211700600600022013 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- l -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/tab_l.gif0000664000076400007640000000130211644623434020040 0ustar mdboommdboom00000000000000GIF89a ,Õö÷ùñô÷öøúüýþúûüùúûøùúêïóïóöÆÕßÒÞæØâéÞçíÝæìåìñèîòô÷ùóöø³ÈÕÁÒÝËÙâÏÜäÖá薴ŹɯÂÍ»ÎÙÃÔÞÂÓÝÈ×àÌÚâÕáèÙäê×âèåìðëðó„°ÇÑÞåÜæëãëïëñôîóõ÷úûûüüÿÿÿþþþ, ,ÿ@–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.11-4.8.2/wcslib/html/globals_0x75.html0000664000076400007640000001324111700600600021350 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_32.png0000664000076400007640000000030311700600600020224 0ustar mdboommdboom00000000000000‰PNG  IHDR  ®‘é0PLTEÿÿÿàààÐÐÐÀÀÀ°°°   €€€ppp```PPP@@@000 4ŸtRNS@æØfAIDAT™c`€–™¡`z&ƒ?ˆbüÀÀ¢™?20ƒÅÿ‡¨c]¿D11°~Ñn ¬@ôl9]2sÂLæ ¡Ì *)IEND®B`‚pywcs-1.11-4.8.2/wcslib/html/functions_0x65.html0000664000076400007640000001113711700600600021736 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- e -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_53.png0000664000076400007640000000043211700600600020232 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/form_6.png0000664000076400007640000000032511700600600020151 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/formula.repository0000664000076400007640000000303511644623434022103 0ustar mdboommdboom00000000000000\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.11-4.8.2/wcslib/html/functions_vars_0x73.html0000664000076400007640000001127111700600600022767 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields - Variables
 

- s -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/globals_func.html0000664000076400007640000001166111700600600021604 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: Data Fields
 

- a -


Generated on Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/form_5.png0000664000076400007640000000033211700600600020146 0ustar mdboommdboom00000000000000‰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.11-4.8.2/wcslib/html/deprecated.html0000664000076400007640000003471611700600600021254 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/overview.html0000664000076400007640000003031211700600600021006 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:30 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/html/vector.html0000664000076400007640000003176111700600600020453 0ustar mdboommdboom00000000000000 WCSLIB 4.8.2: 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 Tue Oct 4 19:02:31 2011 for WCSLIB 4.8.2 by  doxygen 1.5.6
pywcs-1.11-4.8.2/wcslib/C/0000775000076400007640000000000011701362314015501 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/C/getwcstab.h0000664000076400007640000001641611700600576017651 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/lin.h0000664000076400007640000004112111700600576016437 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/flexed/0000775000076400007640000000000011701362314016750 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/C/flexed/wcsutrn.c0000664000076400007640000066232411700600576020642 0ustar mdboommdboom00000000000000#line 2 "wcsutrn.c" #line 4 "wcsutrn.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 33 #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 __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; #endif /* ! C99 */ /* 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 /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_CONST #endif /* __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 #define YY_BUF_SIZE 16384 #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) ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef unsigned int 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() 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.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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 4024 "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 ); /* 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 #define YY_READ_BUF_SIZE 8192 #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 (void) fwrite( wcsutrntext, wcsutrnleng, 1, wcsutrnout ) #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 4195 "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 4609 "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; (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*) ); 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*) ); /* 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 bytes the byte buffer to scan * @param 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.11-4.8.2/wcslib/C/flexed/README0000664000076400007640000000040511644623434017640 0ustar mdboommdboom00000000000000This directory contains C code generated from the Flex description files (*.l) in the parent directory by flex 2.5.33 under Debian etch. 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.11-4.8.2/wcslib/C/flexed/wcsulex.c0000664000076400007640000134446111700600576020627 0ustar mdboommdboom00000000000000#line 2 "wcsulex.c" #line 4 "wcsulex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 33 #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 __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; #endif /* ! C99 */ /* 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 /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_CONST #endif /* __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 #define YY_BUF_SIZE 16384 #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) ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef unsigned int 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() 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.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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 6913 "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 ); /* 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 #define YY_READ_BUF_SIZE 8192 #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 (void) fwrite( wcsulextext, wcsulexleng, 1, wcsulexout ) #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 7096 "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 8352 "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; (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*) ); 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*) ); /* 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 bytes the byte buffer to scan * @param 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.11-4.8.2/wcslib/C/flexed/wcsbth.c0000664000076400007640000334004011700600576020416 0ustar mdboommdboom00000000000000#line 2 "wcsbth.c" #line 4 "wcsbth.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 33 #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 __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; #endif /* ! C99 */ /* 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 /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_CONST #endif /* __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 #define YY_BUF_SIZE 16384 #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) ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef unsigned int 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() 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.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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 16826 "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 ); /* 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 #define YY_READ_BUF_SIZE 8192 #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 (void) fwrite( wcsbthtext, wcsbthleng, 1, wcsbthout ) #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 17093 "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 19531 "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; (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*) ); 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*) ); /* 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 bytes the byte buffer to scan * @param 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.11-4.8.2/wcslib/C/flexed/fitshdr.c0000664000076400007640000200570711700600576020576 0ustar mdboommdboom00000000000000#line 2 "fitshdr.c" #line 4 "fitshdr.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 33 #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 __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; #endif /* ! C99 */ /* 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 /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_CONST #endif /* __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 #define YY_BUF_SIZE 16384 #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) ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef unsigned int 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() 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.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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 10150 "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 ); /* 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 #define YY_READ_BUF_SIZE 8192 #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 (void) fwrite( fitshdrtext, fitshdrleng, 1, fitshdrout ) #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 10339 "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 10899 "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; (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*) ); 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*) ); /* 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 bytes the byte buffer to scan * @param 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.11-4.8.2/wcslib/C/flexed/wcspih.c0000664000076400007640000155455311700600576020437 0ustar mdboommdboom00000000000000#line 2 "wcspih.c" #line 4 "wcspih.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 33 #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 __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; #endif /* ! C99 */ /* 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 /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_CONST #endif /* __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 #define YY_BUF_SIZE 16384 #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) ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef unsigned int 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() 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.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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 8259 "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 ); /* 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 #define YY_READ_BUF_SIZE 8192 #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 (void) fwrite( wcspihtext, wcspihleng, 1, wcspihout ) #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 8473 "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 9623 "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; (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*) ); 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*) ); /* 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 bytes the byte buffer to scan * @param 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.11-4.8.2/wcslib/C/wcsutrn.l0000664000076400007640000001507611700600576017400 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/sph.h0000664000076400007640000002334011700600576016452 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/wcsunits.h0000664000076400007640000004115611700600576017544 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/wcserr.c0000664000076400007640000000645411700600576017167 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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_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; } /*--------------------------------------------------------------------------*/ 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 = ""; 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); } return 0; } pywcs-1.11-4.8.2/wcslib/C/log.h0000664000076400007640000001352111700600576016441 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/wcs.h0000664000076400007640000017431211700600576016462 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.) * * 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. * * 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 != 0. 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. 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. * * * 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. * * 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, 0, 0, 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.11-4.8.2/wcslib/C/wcsulex.l0000664000076400007640000004444611700600576017370 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/wcshdr.c0000664000076400007640000007400711700600576017153 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcsutil.h0000664000076400007640000001703611700600576017357 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/wcsmath.h0000664000076400007640000000406211700600576017326 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/spx.h0000664000076400007640000004713211700600576016477 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/wcserr.h0000664000076400007640000002075111700600576017170 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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; = if (prjini(&prj)) { = // Print the error message to stderr. = wcsprintf_set(stderr); = wcserr_prt(prj.err); = } * * 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_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, returns 1. * * 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); /* 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.11-4.8.2/wcslib/C/spc.c0000664000076400007640000010440011700600576016435 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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 0; } /*--------------------------------------------------------------------------*/ int spcfree(spc) struct spcprm *spc; { if (spc == 0x0) return SPCERR_NULL_POINTER; if (spc->err) free(spc->err); spc->err = 0x0; return 0; } /*--------------------------------------------------------------------------*/ 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 0; } /*--------------------------------------------------------------------------*/ 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 0; } /*--------------------------------------------------------------------------*/ 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 = 0, 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 = 0, 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 0; } /*--------------------------------------------------------------------------*/ 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 0; } /*--------------------------------------------------------------------------*/ 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 0; } /*--------------------------------------------------------------------------*/ 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 0; } /*--------------------------------------------------------------------------*/ 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; /* 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? */ 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 -1; } *fcode = '\0'; } /* VELREF takes precedence if present. */ ivf = velref%256; if (1 <= ivf && ivf <= 7) { strcpy(specsys, frames[ivf-1]); } 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. */ if (velref&256) { strcpy(ctype, "VRAD"); } else { strcpy(ctype, "VOPT"); } } } 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"); } return 0; } return -1; } pywcs-1.11-4.8.2/wcslib/C/spx.c0000664000076400007640000006124711700600576016475 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcslib.h0000664000076400007640000000415611700600576017147 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/lin.c0000664000076400007640000004062411700600576016441 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/test/0000775000076400007640000000000011701362314016460 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/C/test/tspx.c0000664000076400007640000002211011700600576017622 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tlin.c0000664000076400007640000001024111700600576017574 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tlog.c0000664000076400007640000000740211700600576017600 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tprj1.c0000664000076400007640000002307311700600576017675 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/twcsmix.c0000664000076400007640000005571111700600576020337 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tcel1.c0000664000076400007640000002255311700600576017647 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/ttab3.c0000664000076400007640000001224211700600576017646 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/pih.keyrec0000664000076400007640000005160011700600576020452 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # WCSLIB 4.8 - an implementation of the FITS WCS standard. # Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/C/test/twcs.c0000664000076400007640000003271311700600576017616 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/units_test0000664000076400007640000000016111644623434020613 0ustar mdboommdboom00000000000000km/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.11-4.8.2/wcslib/C/test/twcssub.c0000664000076400007640000001267211700600576020332 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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. */ nsub = 3; wcsext.flag = -1; axes[0] = WCSSUB_LONGITUDE; axes[1] = WCSSUB_LATITUDE; axes[2] = -(WCSSUB_SPECTRAL | WCSSUB_STOKES); 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.11-4.8.2/wcslib/C/test/wcstab.keyrec0000664000076400007640000001606111700600576021157 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # # WCSLIB 4.8 - an implementation of the FITS WCS standard. # Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/C/test/tunits.c0000664000076400007640000001031011700600576020151 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/ttab1.c0000664000076400007640000002502111700600576017643 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tpih2.c0000664000076400007640000001306211700600576017660 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tbth1.c0000664000076400007640000002025511700600576017656 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tsph.c0000664000076400007640000001065011700600576017610 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tpih1.c0000664000076400007640000001407411700600576017663 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tofits.c0000664000076400007640000000471611700600576020150 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/ttab2.c0000664000076400007640000001761211700600576017653 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tspc.c0000664000076400007640000003045611700600576017611 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tprj2.c0000664000076400007640000002655411700600576017705 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/twcstab.c0000664000076400007640000003063011700600576020301 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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. * Implemented in such a way that the Fortran test programs can emulate it. * It produces a fixed sequence of uniformly distributed numbers in [0,1]. */ double lcprng() { static int next = 137; while ((next = next * 1103515245 + 12345) < 0); return (double)(next % 1073741824) / 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.11-4.8.2/wcslib/C/test/twcsfix.c0000664000076400007640000001250211700600576020317 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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 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"; int main() { char ctypeS[9]; int i, stat[NWCSFIX], status; struct wcsprm wcs; printf("Testing WCSLIB translator for non-standard usage (twcsfix.c)\n" "------------------------------------------------------------\n\n"); wcs.flag = -1; parser(&wcs); /* Print the unmodified struct. */ wcsprt(&wcs); printf("\n------------------------------------" "------------------------------------\n"); /* Fix non-standard WCS keyvalues. */ if ((status = wcsfix(7, 0, &wcs, stat))) { printf("wcsfix error, status returns: ("); for (i = 0; i < NWCSFIX; i++) { printf(i ? ", %d" : "%d", stat[i]); } printf(")\n"); return 1; } wcsprt(&wcs); printf("\n------------------------------------" "------------------------------------\n"); /* Should now have a 'VOPT-F2W' axis, translate it to frequency. */ strcpy(ctypeS, "FREQ-???"); i = -1; if ((status = wcssptr(&wcs, &i, ctypeS))) { printf("wcssptr ERROR %d: %s.n", status, wcs_errmsg[status]); return 1; } if ((status = wcsset(&wcs))) { printf("wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); return 1; } wcsprt(&wcs); wcsfree(&wcs); return 0; } /*--------------------------------------------------------------------------*/ 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. */ 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; strcpy(wcs->dateobs, DATEOBS); /* Translate non-standard units specifications before wcsset(). */ for (i = 0; i < NAXIS; i++) { wcsutrn(7, wcs->cunit[i]); } /* Extract information from the FITS header. */ if ((status = wcsset(wcs))) { printf("wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); } return; } pywcs-1.11-4.8.2/wcslib/C/test/tsphdpa.c0000664000076400007640000000412511700600576020275 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/twcshdr.c0000664000076400007640000001334111700600576020310 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/tcel2.c0000664000076400007640000004356111700600576017652 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/test/bth.keyrec0000664000076400007640000005363611700600576020462 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # WCSLIB 4.8 - an implementation of the FITS WCS standard. # Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/C/test/tfitshdr.c0000664000076400007640000002011011700600576020451 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/getwcstab.c0000664000076400007640000001037411700600576017641 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcsprintf.h0000664000076400007640000001220311700600576017673 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/tab.c0000664000076400007640000012073511700600576016427 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcsunits.c0000664000076400007640000001307411700600576017535 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/log.c0000664000076400007640000000553711700600576016444 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcstrig.c0000664000076400007640000001056711700600576017344 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcsbth.l0000664000076400007640000015347211700600576017170 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/cel.h0000664000076400007640000004262211700600576016427 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/fitshdr.l0000664000076400007640000003053311700600576017331 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/prj.c0000664000076400007640000052601211700600576016452 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcspih.l0000664000076400007640000006261611700600576017172 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/sph.c0000664000076400007640000002610111700600576016443 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/fitshdr.h0000664000076400007640000004324311700600576017327 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/spc.h0000664000076400007640000011144411700600576016450 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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 keywords, CTYPEn and * VELREF, into CTYPEia and SPECSYSa. * * 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 keywords, CTYPEn and VELREF, * into CTYPEia and SPECSYSa. * * Given: * ctypeA const char[9] * CTYPEia keyvalue (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 * is denoted by adding 256 to VELREF, otherwise an * optical velocity is indicated (not applicable to * 'FELO' axes). Unrecognized values of VELREF are * simply ignored. * * VELREF takes precedence over CTYPEia in defining the * Doppler frame, e.g. if * = CTYPEn = 'VELO-HEL' = VELREF = 1 * * the Doppler frame is set to LSRK. * * Returned: * ctype char[9] Translated CTYPEia keyvalue, or a copy of ctypeA if no * translation was performed (null-filled). * * specsys char[9] Doppler reference frame indicated by VELREF or else by * CTYPEn. * * Function return value: * int Status return value: * -1: No translation required (not an error). * 0: Success. * * * 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_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.11-4.8.2/wcslib/C/wcsprintf.c0000664000076400007640000000656511700600576017704 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/wcsutil.c0000664000076400007640000001021311700600576017340 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/tab.h0000664000076400007640000005622111700600576016432 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/wcstrig.h0000664000076400007640000001426411700600576017347 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/C/wcsfix.h0000664000076400007640000004005511700600576017165 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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'. * * - celfix(): translate AIPS-convention celestial projection types, NCP and * GLS, in ctype[] as set from CTYPEia. * * - spcfix(): translate AIPS-convention spectral types, 'FREQ-LSR', * 'FELO-HEL', etc., 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 datfix(), * unitfix(), celfix(), spcfix() 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, CELFIX, SPCFIX 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, CELFIX, SPCFIX 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. * 1: Null wcsprm pointer passed. * * * 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(). * * * 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. * * 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(). * * * 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 CELFIX 3 #define SPCFIX 4 #define CYLFIX 5 #define NWCSFIX 6 extern const char *wcsfix_errmsg[]; #define cylfix_errmsg wcsfix_errmsg enum wcsfix_errmsg_enum { 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 celfix(struct wcsprm *wcs); int spcfix(struct wcsprm *wcs); int cylfix(const int naxis[], struct wcsprm *wcs); #ifdef __cplusplus } #endif #endif /* WCSLIB_WCSFIX */ pywcs-1.11-4.8.2/wcslib/C/wcshdr.h0000664000076400007640000015022611700600576017156 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/prj.h0000664000076400007640000006632011700600576016460 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *============================================================================= * * WCSLIB 4.8 - 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.11-4.8.2/wcslib/C/wcs.c0000664000076400007640000025022711700600576016455 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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 { 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. */ for (i = 0; i < naxis; i++) { map[i] = 0; } for (i = 0; i < *nsub; i++) { 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++) { k = axes[j] - 1; *(dstp++) = *(srcp+k); } srcp = wcssrc->pc; dstp = wcsdst->pc; for (i = 0; i < *nsub; i++) { for (j = 0; j < *nsub; j++) { k = (axes[i]-1)*naxis + (axes[j]-1); *(dstp++) = *(srcp+k); } } srcp = wcssrc->cdelt; dstp = wcsdst->cdelt; for (i = 0; i < *nsub; i++) { k = axes[i] - 1; *(dstp++) = *(srcp+k); } /* Coordinate reference value. */ srcp = wcssrc->crval; dstp = wcsdst->crval; for (i = 0; i < *nsub; i++) { k = axes[i] - 1; *(dstp++) = *(srcp+k); } /* Coordinate units and type. */ for (i = 0; i < *nsub; i++) { 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++) { for (j = 0; j < *nsub; j++) { k = (axes[i]-1)*naxis + (axes[j]-1); *(dstp++) = *(srcp+k); } } srcp = wcssrc->crota; dstp = wcsdst->crota; for (i = 0; i < *nsub; i++) { 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++) { 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. */ 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.11-4.8.2/wcslib/C/wcsfix.c0000664000076400007640000004366011700600576017165 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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[CELFIX] = celfix(wcs)) > 0) { status = 1; } if ((stat[SPCFIX] = spcfix(wcs)) > 0) { status = 1; } if (naxis) { if ((stat[CYLFIX] = cylfix(naxis, wcs)) > 0) { status = 1; } } else { stat[CYLFIX] = -2; } return status; } /*--------------------------------------------------------------------------*/ int wcsfixi(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[], struct wcserr info[]) { int status = 0; struct wcserr *err; err = info + CDFIX; if ((stat[CDFIX] = cdfix(wcs)) > 0) { wcserr_copy(wcs->err, err); status = 1; } else { wcserr_copy(0x0, err); } err = info + DATFIX; if ((stat[DATFIX] = datfix(wcs)) > 0) { wcserr_copy(wcs->err, err); status = 1; } else { wcserr_copy(0x0, err); } err = info + UNITFIX; if ((stat[UNITFIX] = unitfix(ctrl, wcs)) > 0) { wcserr_copy(wcs->err, err); status = 1; } else { wcserr_copy(0x0, err); } err = info + CELFIX; if ((stat[CELFIX] = celfix(wcs)) > 0) { wcserr_copy(wcs->err, err); status = 1; } else { wcserr_copy(0x0, err); } err = info + SPCFIX; if ((stat[SPCFIX] = spcfix(wcs)) > 0) { wcserr_copy(wcs->err, err); status = 1; } else { wcserr_copy(0x0, err); } err = info + CYLFIX; wcserr_copy(0x0, err); if (naxis) { if ((stat[CYLFIX] = cylfix(naxis, wcs)) > 0) { err = info + CYLFIX; wcserr_copy(wcs->err, err); status = 1; } } else { stat[CYLFIX] = -2; } if (wcs->err) free(wcs->err); wcs->err = 0x0; 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 *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; 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); } } return FIXERR_SUCCESS; } } 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] == ' ') { if (sscanf(dateobs+11, "%2d:%2d:%lf", &hour, &minute, &sec) == 3) { dateobs[10] = 'T'; } else { hour = 0; minute = 0; sec = 0.0; } } } 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] == ' ') { if (sscanf(dateobs+11, "%2d:%2d:%lf", &hour, &minute, &sec) == 3) { dateobs[10] = 'T'; } else { hour = 0; minute = 0; sec = 0.0; } } /* 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); } } } return FIXERR_SUCCESS; } /*--------------------------------------------------------------------------*/ int unitfix(int ctrl, struct wcsprm *wcs) { int i, status = FIXERR_NO_CHANGE; if (wcs == 0x0) return FIXERR_NULL_POINTER; for (i = 0; i < wcs->naxis; i++) { if (wcsutrne(ctrl, wcs->cunit[i], &(wcs->err)) == 0) { status = FIXERR_SUCCESS; } } return status; } /*--------------------------------------------------------------------------*/ 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 spcfix(struct wcsprm *wcs) { char ctype[9], specsys[9]; int i, status; /* Initialize if required. */ if (wcs == 0x0) return FIXERR_NULL_POINTER; if (wcs->flag != WCSSET) { if ((status = wcsset(wcs))) return status; } if ((i = wcs->spec) < 0) { /* Look for a linear spectral axis. */ for (i = 0; i < wcs->naxis; i++) { if (wcs->types[i]/100 == 30) { break; } } if (i >= wcs->naxis) { /* No spectral axis. */ return FIXERR_NO_CHANGE; } } /* Translate an AIPS-convention spectral type if present. */ if ((status = spcaips(wcs->ctype[i], wcs->velref, ctype, specsys))) { return status; } strcpy(wcs->ctype[i], ctype); if (wcs->specsys[1] == '\0') strcpy(wcs->specsys, specsys); wcsutil_null_fill(72, wcs->ctype[i]); wcsutil_null_fill(72, wcs->specsys); return 0; } /*--------------------------------------------------------------------------*/ 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 (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.11-4.8.2/wcslib/C/cel.c0000664000076400007640000003031511700600576016416 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:06 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/C/GNUmakefile0000664000076400007640000003121211700600576017556 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile for building WCSLIB 4.8 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 # # gmake MODE=interactive check # # to run them interactively with full diagnostic output. # # 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.8.1.2 2011/09/16 04:41:29 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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 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 "$(PGPLOTINC)" "" ifneq "$(PGPLOTLIB)" "" TESTS += $(TEST_P) $(TEST_B) 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 ; \ if [ '$<' = tunits ] ; then \ $(VALGRIND) ./$< < test/units_test ; \ else \ $(VALGRIND) ./$< ; \ fi ; \ else \ if [ '$<' = tcel2 ] ; then \ echo N | ./$< ; \ elif [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \ if [ '$<' = tunits ] ; then \ ./$< < test/units_test > $<.out 2>&1 ; \ else \ ./$< < /dev/null > $<.out 2>&1 ; \ fi ; \ if grep 'PASS:' $<.out > /dev/null ; then \ head -2 $<.out ; \ grep 'PASS:' $<.out ; \ 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 \ head -2 $<.out ; \ echo 'PASS: Output agrees with C/test/$<.out' ; \ else \ cat $<.out ; \ echo '' ; \ echo 'FAIL: Output disagrees with C/test/$<.out' ; \ fi ; \ else \ cat $<.out ; \ fi ; \ else \ ./$< < /dev/null 2>&1 ; \ 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 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) $(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.11-4.8.2/wcslib/pgsbox/0000775000076400007640000000000011701362314016621 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/pgsbox/lngvel.f0000664000076400007640000001225611700600577020272 0ustar mdboommdboom00000000000000*======================================================================= * * PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * * 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.11-4.8.2/wcslib/pgsbox/pgcrvl.f0000664000076400007640000000362011700600577020273 0ustar mdboommdboom00000000000000*======================================================================= * PGSBOX 4.8 *----------------------------------------------------------------------- * * 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/pgsbox/cpgsbox.c0000664000076400007640000001032311700600577020436 0ustar mdboommdboom00000000000000/*============================================================================ PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/pgsbox/pgwcsl.h0000664000076400007640000001245511700600577020305 0ustar mdboommdboom00000000000000/*============================================================================ PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/pgsbox/fscan.f0000664000076400007640000001156411700600577020076 0ustar mdboommdboom00000000000000*======================================================================= * * PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * * 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.11-4.8.2/wcslib/pgsbox/pgtest.f0000664000076400007640000012116711700600577020313 0ustar mdboommdboom00000000000000*======================================================================= * * PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/pgsbox/pgsbox.f0000664000076400007640000025561311700600577020313 0ustar mdboommdboom00000000000000*======================================================================= * * PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * * 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.11-4.8.2/wcslib/pgsbox/pgwcsl.c0000664000076400007640000001544411700600577020301 0ustar mdboommdboom00000000000000/*============================================================================ PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/pgsbox/cpgsbox.h0000664000076400007640000000676411700600577020461 0ustar mdboommdboom00000000000000/*============================================================================ PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/pgsbox/pgcrfn.f0000664000076400007640000001403411700600577020256 0ustar mdboommdboom00000000000000*======================================================================= * * PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. * Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * * 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.11-4.8.2/wcslib/pgsbox/cpgtest.c0000664000076400007640000011417311700600577020452 0ustar mdboommdboom00000000000000/*============================================================================ PGSBOX 4.8 - draw curvilinear coordinate axes for PGPLOT. Copyright (C) 1997-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/pgsbox/GNUmakefile0000664000076400007640000001344111700600577020703 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile for building PGSBOX 4.8 # # 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 # # gmake 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.8 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.8.1.2 2011/09/16 04:41:29 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/wcsconfig_utils.h.in0000664000076400007640000000251111700600600021266 0ustar mdboommdboom00000000000000/*============================================================================ * * wcsconfig_utils.h is generated from wcsconfig_utils.h.in by 'configure'. * It contains C preprocessor macro definitions for compiling the WCSLIB 4.8 * utilities. * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig_utils.h.in,v 4.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/COPYING0000664000076400007640000010451311644623434016367 0ustar mdboommdboom00000000000000 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.11-4.8.2/wcslib/configure0000775000076400007640000130406011700600600017222 0ustar mdboommdboom00000000000000#! /bin/sh # From configure.ac Revision: 4.8.1.5 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for WCSLIB 4.8.2. # # 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.8.2' PACKAGE_VERSION='4.8.2' PACKAGE_STRING='WCSLIB 4.8.2' 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.8.2 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.8.2] --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.8.2:";; 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.8.2 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.8.2, 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 $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 $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.8.2, 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.8.2 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.11-4.8.2/wcslib/Fortran/0000775000076400007640000000000011701362314016732 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/Fortran/cel_f.c0000664000076400007640000001527011700600600020143 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/wcshdr_f.c0000664000076400007640000001037311700600600020671 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/sph_f.c0000664000076400007640000000557311700600600020177 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/prj.inc0000664000076400007640000001347111700600600020216 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/tab_f.c0000664000076400007640000001672611700600600020155 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/spc.inc0000664000076400007640000000624311700600600020207 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/spx.inc0000664000076400007640000001271211700600600020232 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/wcsunits_f.c0000664000076400007640000000771111700600600021260 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/wcs.inc0000664000076400007640000001507711700600600020223 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/wcsunits.inc0000664000076400007640000001021711700600600021275 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/test/0000775000076400007640000000000011701362314017711 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/Fortran/test/tspc.f0000664000076400007640000004025011700600600021022 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/ttab3.f0000664000076400007640000001445111700600600021072 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/twcssub.f0000664000076400007640000001475011700600600021551 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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. NSUB = 3 AXES(1) = WCSSUB_LONGITUDE AXES(2) = WCSSUB_LATITUDE AXES(3) = -(WCSSUB_SPECTRAL + WCSSUB_STOKES) 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.11-4.8.2/wcslib/Fortran/test/tcel1.f0000664000076400007640000002641011700600600021063 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tprj1.f0000664000076400007640000002625211700600600021117 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tfitshdr.f0000664000076400007640000002341711700600600021706 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/twcsmix.f0000664000076400007640000006471611700600600021564 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/twcs.f0000664000076400007640000003467311700600600021045 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:43:12 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/twcsfix.f0000664000076400007640000001575211700600600021551 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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) * Print the unmodified struct. CALL FLUSH(6) STATUS = WCSPRT (WCS) WRITE (*, 20) 20 FORMAT (/,'------------------------------------', : '------------------------------------') * Fix non-standard WCS keyvalues. STATUS = WCSFIX (7, 0, WCS, STAT) IF (STATUS.NE.0) THEN WRITE (*, 30) (STAT(I), I=1,WCSFIX_NWCS) 30 FORMAT ('WCSFIX ERROR, status returns: (',(I2,:,','),')') GO TO 999 END IF CALL FLUSH(6) STATUS = WCSPRT (WCS) WRITE (*, 20) * 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 (*, 40) STATUS 40 FORMAT ('WCSPTR ERROR',I2,'.') GO TO 999 END IF STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 50) STATUS 50 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) * Translate non-standard units specifications. STATUS = WCSUTRN (7, CUNIT(I)) 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) * Extract information from the FITS header. STATUS = WCSSET (WCS) IF (STATUS.NE.0) THEN WRITE (*, 30) STATUS 30 FORMAT (/,'WCSSET ERROR',I3,'.') END IF RETURN END pywcs-1.11-4.8.2/wcslib/Fortran/test/tprj2.f0000664000076400007640000003065211700600600021117 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tsph.f0000664000076400007640000001212211700600600021024 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/ttab1.f0000664000076400007640000002171611700600600021072 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tpih1.f0000664000076400007640000001426211700600600021102 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/twcstab.f0000664000076400007640000001424411700600600021524 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tlin.f0000664000076400007640000001170111700600600021016 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tpih2.f0000664000076400007640000001421111700600600021075 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tunits.f0000664000076400007640000001267211700600600021406 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tlog.f0000664000076400007640000001046611700600600021024 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/ttab2.f0000664000076400007640000002243711700600600021074 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.2 2011/08/16 01:34:41 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/test/tspx.f0000664000076400007640000002437211700600600021056 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= 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.11-4.8.2/wcslib/Fortran/log.inc0000664000076400007640000000361611700600600020204 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/wcs_f.c0000664000076400007640000004362311700600600020177 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/lin.inc0000664000076400007640000000541411700600600020203 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/wcsfix_f.c0000664000076400007640000000555511700600600020710 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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[]) { 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.11-4.8.2/wcslib/Fortran/spx_f.c0000664000076400007640000000744111700600600020213 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/lin_f.c0000664000076400007640000001555411700600600020167 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/tab.inc0000664000076400007640000000614611700600600020172 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/wcshdr.inc0000664000076400007640000000644211700600600020715 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/wcsfix.inc0000664000076400007640000000562311700600600020726 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/fitshdr_f.c0000664000076400007640000001466211700600600021047 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/prj_f.c0000664000076400007640000002014111700600600020164 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/spc_f.c0000664000076400007640000002640011700600600020162 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/fitshdr.inc0000664000076400007640000000517011700600600021063 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/log_f.c0000664000076400007640000000413511700600600020157 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/sph.inc0000664000076400007640000000275011700600600020213 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * Functions. EXTERNAL SPHDPA, SPHPAD, SPHS2X, SPHX2S INTEGER SPHDPA, SPHPAD, SPHS2X, SPHX2S pywcs-1.11-4.8.2/wcslib/Fortran/cel.inc0000664000076400007640000000612111700600600020160 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * 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.11-4.8.2/wcslib/Fortran/getwcstab.inc0000664000076400007640000000267611700600600021413 0ustar mdboommdboom00000000000000*======================================================================= * * WCSLIB 4.8 - an implementation of the FITS WCS standard. * Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *======================================================================= * Functions. EXTERNAL FTWCST INTEGER FTWCST pywcs-1.11-4.8.2/wcslib/Fortran/getwcstab_f.c0000664000076400007640000000407211700600600021361 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/Fortran/GNUmakefile0000664000076400007640000002122111700600600020772 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile for building the WCSLIB 4.8 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 # # gmake MODE=interactive check # # to run them interactively with full diagnostic output. # # 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.8 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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 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 "$(PGPLOTINC)" "" ifneq "$(PGPLOTLIB)" "" TESTS += $(TEST_P) $(TEST_B) 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 ; \ if [ '$<' = tunits ] ; then \ $(VALGRIND) ./$< < test/units_test ; \ else \ $(VALGRIND) ./$< ; \ fi ; \ else \ if [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \ if [ '$<' = tunits ] ; then \ ./$< < ../C/test/units_test > $<.out 2>&1 ; \ else \ ./$< < /dev/null > $<.out 2>&1 ; \ fi ; \ if grep 'PASS:' $<.out > /dev/null ; then \ head -2 $<.out ; \ grep 'PASS:' $<.out ; \ 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 \ head -2 $<.out ; \ echo 'PASS: Output agrees with Fortran/test/$<.out' ; \ else \ cat $<.out ; \ echo '' ; \ echo 'FAIL: Output disagrees with Fortran/test/$<.out' ; \ fi ; \ else \ cat $<.out ; \ fi ; \ else \ ./$< < /dev/null 2>&1 ; \ 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 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.11-4.8.2/wcslib/VALIDATION0000664000076400007640000001457111700600600016674 0ustar mdboommdboom00000000000000Platforms on which the installation procedures and test suite were exercised 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ pywcs-1.11-4.8.2/wcslib/utils/0000775000076400007640000000000011701362314016457 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/utils/HPXcvt.c0000664000076400007640000006623011700600577020013 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/utils/wcsware.c0000664000076400007640000002472611700600577020316 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * 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.11-4.8.2/wcslib/utils/wcsgrid.c0000664000076400007640000002312711700600577020277 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * * 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.11-4.8.2/wcslib/utils/fitshdr.c0000664000076400007640000002214411700600577020276 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * 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.11-4.8.2/wcslib/utils/GNUmakefile0000664000076400007640000000770211700600577020544 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile for WCSLIB 4.8 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.8 # 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.8.1.2 2011/10/04 07:54:06 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/makedefs.in0000664000076400007640000002021111700600600017412 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile definitions for building WCSLIB 4.8 # # 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.8 or libwcs.4.8.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.8. # # 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.8.1.3 2011/10/04 07:55:20 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/flavours0000664000076400007640000001046611700600600017102 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/wcsconfig_tests.h.in0000664000076400007640000000130011700600600021263 0ustar mdboommdboom00000000000000/*============================================================================ * * wcsconfig_test.h is generated from wcsconfig_test.h.in by 'configure'. It * contains C preprocessor definitions for compiling the WCSLIB 4.8 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ #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.11-4.8.2/wcslib/CHANGES0000664000076400007640000017766611700600600016331 0ustar mdboommdboom00000000000000WCSLIB 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 Droetboom: 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.8.1.3 2011/10/04 08:01:03 cal103 Exp cal103 $ pywcs-1.11-4.8.2/wcslib/doxygen/0000775000076400007640000000000011701362314016774 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/wcslib/doxygen/spc.sed0000664000076400007640000000236611644623434020276 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/wcs.sed0000664000076400007640000000200511644623434020273 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/spx_extras.dox0000664000076400007640000001171411644623434021725 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/prj.sed0000664000076400007640000000272011644623434020276 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/fitshdr.sed0000664000076400007640000000043011644623434021142 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/wcsfix_extras.dox0000664000076400007640000000262111644623434022413 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/cel.sed0000664000076400007640000000076611644623434020256 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/wcshdr_extras.dox0000664000076400007640000002202411644623434022401 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/spx.sed0000664000076400007640000000105311644623434020313 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/README0000664000076400007640000000273611700600600017654 0ustar mdboommdboom00000000000000Overview 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ pywcs-1.11-4.8.2/wcslib/doxygen/lin_extras.dox0000664000076400007640000000343511644623434021676 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/wcstrig.sed0000664000076400007640000000027511644623434021170 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/wcstrig_extras.dox0000664000076400007640000000045211644623434022572 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/getwcstab.sed0000664000076400007640000000015011644623434021461 0ustar mdboommdboom00000000000000/^[^*]/{p;d;} /^\*/s| wtbarr| #wtbarr|g /^\*/s| #wtbarr_s| wtbarr_s|g s|'TAB'|'TAB'|g pywcs-1.11-4.8.2/wcslib/doxygen/tab.sed0000664000076400007640000000036511644623434020254 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/tab_extras.dox0000664000076400007640000000212411644623434021654 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/sph.sed0000664000076400007640000000066111644623434020277 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/wcsunits_extras.dox0000664000076400007640000001015511644623434022770 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/lin.sed0000664000076400007640000000005111644623434020260 0ustar mdboommdboom00000000000000/^[^*]/{p;d;} /^\*/s| linprm| #linprm|g pywcs-1.11-4.8.2/wcslib/doxygen/wcsunits.sed0000664000076400007640000000014311644623434021357 0ustar mdboommdboom00000000000000/^[^*]/{p;d;} s|offset is|offset is| s|power is|power is| s|1e6|@f$10^6@f$| pywcs-1.11-4.8.2/wcslib/doxygen/wcsmath_extras.dox0000664000076400007640000000135611644623434022562 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/wcs_extras.dox0000664000076400007640000000525111644623434021706 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/cel_extras.dox0000664000076400007640000000150311644623434021651 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/doxextr.sed0000664000076400007640000000340311644623434021177 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/fitshdr_extras.dox0000664000076400007640000000306611644623434022557 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/wcsfix.sed0000664000076400007640000000143511644623434021010 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/Bonne.gif0000664000076400007640000002221411644623434020536 0ustar mdboommdboom00000000000000GIF87a ëòÿÿÿÿÿ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.11-4.8.2/wcslib/doxygen/wcshdr.sed0000664000076400007640000001260711644623434021002 0ustar mdboommdboom00000000000000/^[^*]/{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.11-4.8.2/wcslib/doxygen/doxextr.l0000664000076400007640000004252511700600600020646 0ustar mdboommdboom00000000000000/*============================================================================ WCSLIB 4.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *============================================================================= * * 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
  1. ", 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("
  2. %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
  3. ", 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("*
  4. "); 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.11-4.8.2/wcslib/doxygen/mainpage.dox0000664000076400007640000013204011700600600021261 0ustar mdboommdboom00000000000000/** @mainpage WCSLIB 4.8.2 and PGSBOX 4.8.2 @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.8 - an implementation of the FITS WCS standard. Copyright (C) 1995-2011, 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 (2011/08/05) 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.8 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.8.1.3 2011/10/04 08:01:19 cal103 Exp cal103 $ */ pywcs-1.11-4.8.2/wcslib/doxygen/spc_extras.dox0000664000076400007640000000150111644623434021671 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/Doxyfile0000664000076400007640000014427611700600600020510 0ustar mdboommdboom00000000000000# 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.8.2" # 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.11-4.8.2/wcslib/doxygen/prj_extras.dox0000664000076400007640000007616411644623434021720 0ustar mdboommdboom00000000000000/** @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.11-4.8.2/wcslib/doxygen/GNUmakefile0000664000076400007640000000444211700600600021042 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile for building the documentation for WCSLIB 4.8 # # 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # 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.11-4.8.2/wcslib/wcsconfig.h.in0000664000076400007640000000123611700600600020051 0ustar mdboommdboom00000000000000/*============================================================================ * * wcsconfig.h is generated from wcsconfig.h.in by 'configure'. It contains * C preprocessor macro definitions for compiling WCSLIB 4.8 * * Author: Mark Calabretta, Australia Telescope National Facility * http://www.atnf.csiro.au/~mcalabre/index.html * $Id: wcsconfig.h.in,v 4.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ *===========================================================================*/ /* 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.11-4.8.2/wcslib/wcslib.pc.in0000664000076400007640000000041411644623434017543 0ustar mdboommdboom00000000000000prefix=@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.11-4.8.2/wcslib/INSTALL0000664000076400007640000003105211700600600016341 0ustar mdboommdboom00000000000000------------------------------------------------------------------------------ WCSLIB 4.8 and PGSBOX 4.8 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.8.tar.gz | tar pvxf - cd wcslib-4.8 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.8.1.1 2011/08/15 08:07:07 cal103 Exp cal103 $ ============================================================================== 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.11-4.8.2/wcslib/wcslib.pdf0000664000076400007640000706562411700600600017311 0ustar mdboommdboom00000000000000%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.\0008\000.\0002\000\040\000a\000n\000d\000\040\000P\000G\000S\000B\000O\000X\000\040\0004\000.\0008\000.\0002) 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 226 /Filter /FlateDecode >> stream xÚP;O1 ÞïWd¼jlÇÎ% ¥!u bè#t¢H¨•è¿ÇלªP†OÎ÷ðƒÚ#—ÐõÚCòê6_ ºý.Yaoxƒ˜°&èÙ0 ÄÈךZÝDR¨~ÐÎrs÷ÈìHÀKpùÓ±Fà`-GQÞ¾·o÷¯/O³Î°0¾ûÈÏÕGTŸ‘Ô&tö-ʾü¬e[­ëSŇïßÓ®ìkA`¾K^„êH2ìÄ霖;ÑöXªm¹9ŒóŒ1iŠ<õX+F¢!³™çËúva»•ªüëÀTßU endstream endobj 590 0 obj << /Type /Page /Contents 592 0 R /Resources 591 0 R /MediaBox [0 0 595.276 841.89] /Parent 598 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 << /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 601 0 obj << /Length 2121 /Filter /FlateDecode >> stream xÚí\Í“Û4½ç¯ð19¬Ð—?ı-íÀ0º;3ÐÃ’uK`›.ÙèlI–¬H¯© ðÎ6ÿö÷žŸŸô,Û «¨þa•¢U[·D‰ºÚ¾YÑêµ~÷ي٭zóE°ýÑÕê³§BÿQ¨®^ÿÞ0RsV]Ýü¸~üü›«/¾¹ºÜ¼¼úª’œ.tŸaËnxkõÅÕÔÚ×¢ÿ¾úñ%­n4¯V”ÕUê×”0¥ª7+9´_ß®.WßM=ÌûB¿Ÿâ^3‘$Ï$²qì¹ ´© û·ûc¿?Þ'¨6ª&ºÝ3¼uxm·½ˆÄò…)­ìÖŒm.¥týýã˯¿|´¹à5]KÒn^^ïoÌ‹oŸ]>z¾‘lýCX1ä5#\Ö3š‘®1¬iG(Ssš£’()«¦ÕÖÄU_å#,ç6n9â’Q ½Ã¹£ÂAxWωD;íj0|ÓNÕ žl.j}pþÝ_R©ÿè_gšÉGàиxhâFIGã!É¡IÝh7´¤áòlÇÖŠtÃŽµ5Ʊ|rì݆ÑõûÃîõ/ÇSÛvD;® Ú'lkj0‡V’Fo 9<øõ<ò9¿‚câý ŽIÜ(ïW€4¤Ú×~îÚsGp•Ì&ŽÝ<0á6ržôw‡ ëÖýöúØÛ˜ùzwjÕ–“º®„S§šÈbeF%‘±zPµô¬}ö•É}¶› áöùúxmöôòxx·=¾3 ˜·¾Üßôì½ÁZŠ­x÷m d4í@KæbUtB;qî$”g')W3Ê1Åê© ýiÄvJÝfN*–ÀÖ`*JoSíŒÊÃ$unŒ"ù§i É7J:p˜–ÒÇMKµžà¤jrCÔm6LÌ}º»…ãQ¶¤“¢ :ŸšÑÖ@øI‡Üx”Œt-;{<úòüx´5#î4ýÞ'§b½È5ŸÓ99k05˜„=Ù I<œìþ'»èÐøQ MÜ(?JÒGŽR½æ]öäÁm˜Ôçé“·ÛwoôbmÃÖ×ÇÝÛýÉ:U4D¶U{ºN5%Ú¤ÔŒ_fë!NšæÜ쫳ã×–Œ ÓðÝö·w‡7¡0æõ‹þUè÷[­H¢Îàç c5l âÅ…$R'pÀkiC93$°ÓˆÂFm’.Æ#€¶ˆävíùÁ«%zàvu§IµŠP‘¹\a‹\õáèD>žÝ¯u–Øóú'ýýö°»KFɉԫÌìÔ¶2âRéŒÏÿßx9Ç-½å€–q£¼éÒÜuòl×éÉv­q®ãÖuOwýíÍ<Ò õ)dU€•0©„¬é:Ë5ÐÒ›h7Ôl’¦H…—Ù¤¤íZœ¸¶Æ˜Î]fû‰R~¼ÿm¸ÔÖoX½~ŸOßDô "„ªôDöšH‘ó†¨nNq¡'Ò9w‰½;Äq£Aâ6éN€TÄúð²†ã)ÑÖXw~B{0Ä€‘>Ë–Þu@˸Ѡf—t@* b]‹»ÎÖ8×±ÇA YÓt–k: ¥7Ð2n”7@* b¡(QL v5Æt"Ä»›lëup"#TUƒÄe±²t áåâWÂB¯Z(­«ÚÆÆ;[É[[ª0…E;ÜÆWp>t5Öšå)€åS12bÈg¢u ÐÒÛh7¶P…1,êš4 ¾ ãjœíJc8ÀÊÇ0"d]ÐY®ë€–Þu@˸p€šçðÙOJ ¡ÿí1lJŒç¤MáÛÝ¾à ´ u×U3¹ J/·x=¬gŽÌëë ™×7j3Ú‘'í˜Ç)9%’5x´5ÖŸ½ D/`d'Á€Ïr'A ¥÷Ð2n\ JmG9i¾îâjœíŠ£×c脬ë:ËuÐÒ»h7]'’®P…Ñ˳6øZ´«1®«møÞ~…᛼÷ËDSÉ›¿C äå²7äõ¾¡'‘Ä“'‘Äq£Ñ“É›rªp&äMKj)àLèj¬'Ë8Ë0bd¦ÂÏb§B¤¥·Ð2nl Jm§¤bø’‹«q¶+ à+Àˆu]@g¹®Zz×-ãF£ë’7ƒTiG‘'8xŒ\/¾]ßo¯7y˜òŠƒ‡Ûm d5ÅoÀê!~gŽ {G‰ãF£#UÒ‘ªtd’äÎÝ4hJ¬?!|'(½y:vôd–;æ…ô†Ë µvËãºmüœ„ÄW[\ó[iêXùÔE„ŒáB:‹uÒr²Ò2n”7‚*L]ÖêÉñ‡\q]ëR÷N]m,ÞTdzÙËÌËånÈë!wgž{O‰ãFÀ“ªt&li^Wc=Yž¼X>z#;|–;-½í€–q#`;Uø¤‚¯Å×]³]q{,À€u]@g¹®Zz×-ãF㇔iÒuªðÑ+v¤–`[c\×Ù¾¿ÛÜômˆÐÔD›HÍ=oR{xÞÊØhëý´?¨ÒðÕ6V\âYÐÖX?~Bøz0¾€‘>Ë–Þv@˸°€* _ÅWø’³-q¦+^”O^ÀÆ8.à²XÃ!'¿!£6y·œñÏBŸ ÊäcXT£1ó„VÙ—Œ™oéH\0¬ÒËÏVºÏI_a˳~ßüתh Ž¿¯6НßÙOI?w)-Í/¦>§üsAÍ_œ2f^½Úðzýö`þ¾'L§yâ«Â~~ïœÿ×û×ý>ù‰qC0ço÷¯}~ endstream endobj 600 0 obj << /Type /Page /Contents 601 0 R /Resources 599 0 R /MediaBox [0 0 595.276 841.89] /Parent 598 0 R /Annots [ 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R ] >> endobj 606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 694.014 252.241 702.99] /Subtype /Link /A << /S /GoTo /D (section.1) >> >> endobj 607 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 608 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 609 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 610 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 611 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 612 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 613 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 614 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 615 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 616 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 617 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 618 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 619 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 620 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 621 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 622 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 623 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 624 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 625 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 626 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 627 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 628 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 629 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 630 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 631 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 632 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 633 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 634 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 635 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 636 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 637 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 638 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 605 0 obj << /D [600 0 R /XYZ 90 712.582 null] >> endobj 599 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 641 0 obj << /Length 2298 /Filter /FlateDecode >> stream xÚíœ_s5Åßý)ö1~ˆÐÿ]ñH) ÍÀð8nÉLêÇÒov%­dE:IÊ@7Ó‡¸öõ½Ç'?ëê®å°ŽÚ¬3´ëUOŒPÝæõŠv¯ì½_¯˜ôÔ>|š<þÅÙ곯„}1Ztg/§§kFgÝÙå¯'Ï~øþìù÷g/Ö¿Ÿ}ÛIÖ©ÇTãCWWã«çgsr_Z =¦þsõëï´»´¾]Q"Ìн··)aÆt¯W’ ûzõbõãœÃÝ/ìý%õ’„*Ý I†Þ…Œì_ùˆŸ’`F%1RÚ×Ë¡:¾^Îãë A!f|eŠ˜µ}¶¢'7oÿz»½>åöö‹ÃþÝæànÿ´}¹Ýow›5;Ùæ.p®‰¡ºKªÞz!JãöEJ¥¤‘õ©¢ôcýÆ|ä ý‘y«¨µBôÐÛ½ÍÞrq«°”a’[Ôz¢¹¼‹GÞ“A VUDJVæÑ…Ï#a–Hn-ùr{8¿ºÞ^:¿ÜÞlöWoWov·0”ܾYû.)vCqiˆ<ÒóéÓWÃx±^æ‰&ìd;Pª;=ج‡Ø…˜€÷Ø}uµ½̽ټ{½ÝÎËÔI+uI­u. rÔ¥rKòr¦y™'ªS‡Jͽw¢NÝ·ùê~ló6ßã¨cÔbA;œ_44_EìªÖ%U Í×Å@i¡ù¦Òžš¯ÃxyÞæ‰&û" Të*¨8QzÀ«  <ŽÝ·oi¾I±zóEŠü2˜èYî2¼ŒØ/óDvC;Pª;á–:ˆ™±ã»7ßX 4_ ÈS—ÈY.uÀËHð2O¨¥Z›¯ Ìàæëc¿&Åêó+Räæ×TÏbçWäeÄx™'š°+ž›@¥Û07”0†/›„˜€Ý#æ×¤\}~EšÂüšjZÞüŠlœ™C6æ‰&æŠßE¥Z™ëí cðëbÄÌ\˜`ÃÀz¹}y/ì´Ý&ôs¶Ú®oŒ9M‚ª»¾TÖ‚v}È¿Èð/Ox¥ZyS’ 8bom“ŠõÑÉšyKd-‰7à_ä ø—'šx+†@¥Zy=á_J 1·`´MÊÖG[¤m†.Ѷ$è€:à_žh‚®ø¡4*ÕøE(ÎŒ ‡“­qÈ ?ؾÚÞonçkI«ƒ­å®4Û E´],}›;‚äqɈáC*o1ƒm ꣑ĺ£YÀa½NëÚGí/Óh¼öùbû›«±H‘cS=ËEx™^æ‰&ꊟþ£RرÁ¶®_= 1;þ¨-^R±¾ÅC²B·Me-¨Û"ÿfÞy¢:o¨Tc·eZ“^â É!Æñ&}¿½¾Ú=è,”ÍÁX—Ô+œ…r1P”? •jz: è~G:ßy¢‰Îâ¡Tªu5´mqWCãéloÂI±zFŠ\Nõ,¶ #/#vÀË<Ñ„]ñ*ÕŠ`D|%Äìq-9)W¿–Œ4…kÉ©¦å]KF6Fæ€y¢‰¹â1Tªñc3Æ„ýâkÉ!&0÷Ÿ†J$ÔC!á> endobj 643 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 644 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 645 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 646 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 647 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 648 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 649 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 650 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 651 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 652 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 653 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 654 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 655 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 656 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 657 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 658 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 659 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 660 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 661 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 662 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 663 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 664 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 665 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 666 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 667 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 668 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 669 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 670 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 671 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 672 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 673 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 674 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 675 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 676 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 677 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 678 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 642 0 obj << /D [640 0 R /XYZ 90 757.935 null] >> endobj 639 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 681 0 obj << /Length 2215 /Filter /FlateDecode >> stream xÚíœKs7…÷ó+féY èÙÝbɳB¥ ®dAX3€S`;Æðï£né¶dY:`“*Ü®,<Ø×÷ž9þ"õÑôŒXs÷ŸX[¾îMϬ2ëÃ+¾~ç¾ûx%ÂOï¸ßI~~oõË#å~‹ÙN­÷ßN¿Þ f¤Xï¿y¹wÿÙÓý‡O÷_l^í?Yk¡YgÇVãŽŽŽÆï®îÏÝÃl£º±÷?«—¯øúÓðdÅ™²Ãú‹{Ì™°výq¥¥ ?¬^¬~Ÿ{øï+÷ý’|5&´t4z_2þàì]¨xž Ù³Á î KÅxŸ°”ñ SÕŒO­cš™û}Î÷þØ!öÎŽ^ØnîHÃ÷œ~þ¸=>?8?Úˆ½“ãÜi:×R­“±—žÕ@m²ÓLiuAÛÜ1NÖûE[ûÿ ò_2ÿ wOWõÐ?ªþ妿­º4Nà?•æã¦s<õ¬“ú{ÐqͬÖN7LkQ†.Q‡nDŽ;¾>œ¼cï=jŽºçÛ·Û³íñáömNžuÿÓ$ó.Ój ()$ã5ÝDØ®Nàw¤ø7t‚QóŠøctÒ’Ø îèá’H5N&Â’ø`{~à¸|VÃí§Ã³£Óó£ÂB¨%Ó]¿N†]F3Ô@ER[¦/è¹ù,V°C^ÎØ!/óFÓ_W—°C£.bg~»~Üó%Æ.Ôv2`÷ðØíºghyû›ï};Mwe·û¹£í™tW/‰„Ë0†¨SqÁz®.èüép¬Ñ̉tsòF€.0ªuQ3’™nÀt…¢Kº}>>Œh}ÿÏ2>˜u2±p‰çk ,ºÄKe-èùyþåo`T+oÊ_ÆAÞB ñ¦wÏÉØz®@ÚfèmK‚ø¡þ妿­)BF]ÌæGsEçÊ•°0WP‡® ¹âôìï+å ·»Nær…¯¢B®H5Ýæ @'ð;Ò üÎ:Á¨Æ%ÑXË:‹Z¨&ÐÙž+’aõ\ù\‘êYl®@^ÎØ!/óF£›½,a‡F5æ 3¸5§ÙPBÐɺ¿8—Ç—·àÒþË™s§òöëK i‹îE*诇5ÜêFÚêfm&ÖŠW}`Në ç.ž´î0k¡†`S×a õ‹tR„MuÞ”‹Ì‰hsòF\Åýj¥K»ÅAâª!ºôN6™X°H¥‰TÖ‚Òò/òüËM¼uEÞÀ¨ÖSZ&ìwvÎPC¼]ÃKcÉØz„EÚfèmK‚ø¡þåFÿ†¾ÕøÒ˜‚™^ÁK5º>DØO§‡Wаîò~¼ÒŠó Ö×@Q!¦šn#, øé~ç&:‡"`T㬭rZ¸$RM ³=Â&Ãê)ò6ճ؋¼œ±C^æF7-/a‡F5îĺw9AâÃdª!ìv±É¸zŠEš(Ʀš–—c‘‘9`cÞhb®xl‚Fµ.uf`øÚÏWoלcçñõ[WH6*¼) ¶nK$ªjËÅ&MÅ{JêCZ×/-ïñÉ/ÕO»%×db=¹"Y"RY È¿Hð/oh£Z×.©˜6ójˆ·kH®ÉØzrEÚfèmK‚ø¡þå&èl:0ª1¹jnØ {˜\©ÆC7ÌÉõýU’«àŒK»Næ]¦-Ô@QRXf„¼ jÙÑ5sZ[ršj Óy£ÑiÁËéÌjÜ}Õ00Éñ¹1Õ0ÛCk2¬Z‘"ZS=‹ ­„ òræy™7Ü¡Y»°ê93=¾åŽjˆ;¹ÓU_2±~Õ‡dÑœÊZÀ¦za‘—‘;àeÞhâNNЬÖ4Á;—ñ™2ÕÌܵGØd\=Â"MaSMË‹°Èư1oä¡+¾£Î?®Uw¬3ÅÛ§¸(üÖ¶}ÎòôIÐÝà.=múAг½í®L¸æñöx ·´ÆŒkåÞç@é³Ãsÿ@û/ÂÞåò®âþ_’ÛýøèíFš½“3ÿ?ï¿øÍ]Uþz/üª¿=p|øúÁÿõÛ»íqùƒd&‰=ÿ%æ endstream endobj 680 0 obj << /Type /Page /Contents 681 0 R /Resources 679 0 R /MediaBox [0 0 595.276 841.89] /Parent 598 0 R /Annots [ 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 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R ] >> endobj 683 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 684 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 685 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 686 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 687 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 688 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 689 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 690 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 691 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 692 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 693 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 694 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 695 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 696 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 697 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 698 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 699 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 700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 422.236 257.849 431.202] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.7.5) >> >> endobj 701 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 702 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 703 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 704 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 705 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 706 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 707 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 708 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 709 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 710 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 711 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 712 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 713 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 714 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 715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 157.99 257.849 166.836] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.10.5) >> >> endobj 716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 140.365 212.679 149.212] /Subtype /Link /A << /S /GoTo /D (subsection.6.11) >> >> endobj 717 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 718 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 682 0 obj << /D [680 0 R /XYZ 90 757.935 null] >> endobj 679 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 721 0 obj << /Length 2225 /Filter /FlateDecode >> stream xÚíœMsE†ïú{”æsw‡#PPćÀÁq”DU±È¿g¤ùjg_Ç£ÀÁëâµÕî~õúa¦{w,Ñq÷Ÿè,ï30«LwyµàÝk÷Ýo"¼zæ^>#¯u¾øâ©r?Ål¯ºóW‡ï3Rtç/Ÿ/¿þéÇó'?ž?[ýqþ}§…aJ[—hÿÒf%øò¯ý ‹'ç©@(oT¿Oÿçâù¼{éd|¿àLÙ±ûÛ]s&¬í®ZªpývñlñsÊ`Ü÷kï@† -Ý…fãàCö/ì^‡ˆ_H°ÍèÞ³TŒ÷ù=K™ßs Š1ûw×3!˜Z œ/Ÿlo®Ö»‹ëÍ»íêL¾<_|ùñýÚõͻ˛«•X®·×>¦°DÚI+:"áÖ›Š1P§â‚ \éd«3ã$~î´µÿQêÂmGÆM͉1М2ÑÞ!uYÏk%ºÄÀz©?/n˜Öãb^Úãõôf{™Ù:ÐäQrLUh2–ñÑt¤âmšB ”%{íþoVG²þ#šþ/¶îð/ü+!à@­FàúÑ]ˆcpÆ÷ëJ±¼Øm.^¼]*u½K©:R¶BÚ"uTÛŒ¨Cþ%êe¢uJÖ¨ƒµx¨u ÎÜE×Ìjí” ûýZÖ© A1&P'#°¿/?¬w»•1KöÆ#÷táûeýj½[o/×·¨“Ò¥R){›ºµIÙ3;k{P¸&°8ƒ ,.!0A­ÖåÐHfú/‡!&‚É„_¿Y__8_†•pýár·y_mä´dº:Rì6Ž!*’Ú2}¤çáS8Åð2s¼,!î@­Vî”_ô w!&q'#w¿s.··wàÚöË™9U}ûõ1PÓaÄ‘¦‡¸ýÞ°1Cl,yèT:Pë:óÉйp%,†.Ä$èÔ)é8=l Y©í#²æÔöÿ2pÀ¿2Õ:jûô§¶}ÆZÖ[Û¾€S©íÛ/rÿܳé“\u¤hµéÛÇ@e±é£Ê›>Š%²8a‰,.y,M KT«q4£dÀ!$BÙÜòåRÓã>"f¶ý027md‘ÆóÖWy›.ÔØë·‡iÝcÞBL®½×#å¦{=¤)özTÓüz=dc&ØX&òÌ Uæ@­Vè´û%J‰¡ 1 ºÏûÜ‚H˜~ntÆçTçCynÌÉxsÊD¯±Š¨Õº…JË„½c 1 ¯“ž[ŠÓ£’G *kF£ò/ü+!à@­ÖõlÿbP¸“€;ý¹);ýÜiKÔms¢ø—©þ•‰Ôéêm:X«m€ÕV¹ بÓi€}óòþÏ-\ LGÊVFXµÅ–j{a)˜Èâ&²¸LÀDµ÷_=ôLI|ÿ8ÆD0›‡XRlzŠEŠüKõÌvŽE^fe"Ï]õøªÕ¸ k32ÜõùˆÄ\û›JMO±Ójâ ›ÕÌo‚60ƒ6iàqYõþÜt•Ö¥M Æ|â.Æ$Ì>ïäJ$LO®Hgœ\©Î‡2¹"s2XÀœ2‘‡«:H Z­+˜tƒ¨Á'îbLÂë¤É•Tœž\‘¬8CPY3š!8à_™Èg«ÀZ­ÀqÃFyǦbp§O®¤ìô䊴%ꈶ9QüËÔÿÊDêúú€€jµ¸SãÈ$Ç'îbL Î¤ÉõíæÅJóûM®‚Üt¤lerõ1P[œ\©¶ÇÉ•‚‰,N`"‹ËDLT«q9TgfÀ'îbL³yr%Ŧ'W¤ÈO®TÏl'WäeæxY&òÜUÏ¢ÀZm·ò”‘ÌĸëÓ‚xuqýfr5tÛpeAT‚õ|ìHÙÛ†¨M*×~î]#Úæ¶ N ¼ÍDoËDˆHP«qÐUÊ0%ñq¼‰l_ s1°Ea%$zæ»/3wÀË2âÔjÝ]øÀñ –“¸k¿GÊMßÉCšâ½<ªi~wó:`c™A‡j5n¿œ3> ¼ý†˜Ý¶ß÷»ÍöúÕÔìößÚD¢…íHáÊìc :©³rMCµZ;íºã¸{ŒIÐôW?¤âô$+Þz¦²ftëù—þ•‰p¨V[«'¥efT°Õ‹1¸1µz×»ÍëéûÎûg··o=›ÃÇβ•[Ï>j‹wZ¨¶Ç;-$àm&x[&òDVÿÕjÝw…ká ¾Óc"‘íý^.ú= (ô{DÏ|û=àeæxY&òÜUÿÕjÜz…uû˜Â§ôbL⮽ß#å¦û=¤)ö{TÓüú=dc‚ÙX&СZ‹z6àó-!$!wR·—ëM7{@Sìõˆ¦µzÀ¼ŒÚ´yE(ÔÖæ‰Ã/·‡m^Œ ¤ÙÔæÝl7×îÿD÷)[} Æ{,-vyTÚc—ç)Öf·e"Ïcõ ªÕºÛjáš«;V¾lîòH±é.)ò]Õ3Û.y™¹^–‰Ü ¢Ê¨ÕºáJÅF…o°Ä˜ÄÝ ]^.º< )uyDÓ »<`c†ØX&òÐUQ¡Z­‹ïÝoßJŽ1 ºÏ{JžH˜>%tÆSòTçC9%ÌÉxsÊD¯êãZXKîùö¬7ÕÓTÜþ#mÛ>sùðÁÐýèzKK?ºgvÐás¡ÝNoÂášo×Û=xqŸÍüY¹¼ øýtyí/´ÿGØ/¹üRqÿ•äBø«W+i–ïvþ‹ß¾~öƒCö»¯Â²Ã½¿|ñ1RýÏÇ×ëmý#f‰=ÿgš#ù endstream endobj 720 0 obj << /Type /Page /Contents 721 0 R /Resources 719 0 R /MediaBox [0 0 595.276 841.89] /Parent 598 0 R /Annots [ 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R ] >> endobj 723 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 724 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 725 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 726 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 727 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 728 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 729 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 730 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 731 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 732 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 563.35 251.215 572.197] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.13.2) >> >> endobj 733 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 734 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 735 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 736 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 737 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 738 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 739 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 740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 422.236 260.081 431.202] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.14.4) >> >> endobj 741 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 742 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 743 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 744 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 745 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 746 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 747 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 748 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 749 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 750 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 751 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 752 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 753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 193.238 251.215 202.085] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.18.2) >> >> endobj 754 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.18.3) >> >> endobj 755 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 756 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 757 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 758 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 722 0 obj << /D [720 0 R /XYZ 90 757.935 null] >> endobj 719 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 761 0 obj << /Length 2104 /Filter /FlateDecode >> stream xÚåZÛrã¸}×WèQªZÂxwR©È·YmylG’3™ÚÙš‚$V$R!)kô÷i ‹2茒<ìÖT A²Ù}ppÐ@C&} ÿH?Ä}ßõQh»ýxÓÃý%<ýÔ#ò­¯-íýÕ¬wqgÃW(ôìþlQ}îäRÒŸÍ¡E]<ør=½_‰¶ƒDE3Jç¢ñôizõ8tðàpçR|ü6û¥w;«AHˆ®íqÿêýúîÏê/=Œì0èï¡ Ãþ¦çP[¶×½iïoµñ܆ç§zi."… ñ… ‘/¥ÅD3&ÔG/ÔFØkx¡´áE)Nޏ3´|Œw»4.“,|ÜdñnÃÒ2*“!ÀÓ#¨"¸}-b«ÊÆ‹z²û ,4´\@ô¿½8aøÿ $.Gü9a€°ëùS6FþŽUš÷ãx.±±j½yÔù°à°‹‡˜'mjÁ¹BpBQžD/köQÕyàÒîkaO¨NرժӰý‘Tgà¯Q¿cGBuþIÕ™baëcªÃ §oy(‹ø§U'”PÅÀl»2Y£•ÐÛ]¢”7a –³4Ù±–ê(¸ôí¾¶­:icÄF!™;Ð]ÛïJn?®H·µ"MÜ;Š O)Òëmt?š=Ÿ/ñÔ˜•R$""Þ°2ÊÈ +â<ÙV+ñ±ŠÏïkÁÚ:”6FD°ÁAÎ<¿ù½§;—î \;2éÎë×_Øž"× Ìº“6µîè9>-âû>,µôê°þ@K¯‰¿FpþŽ™gˆÅß·â@Eøèx²òˆ¨ïªBŠ`üVRµ  î ]—»‡2ŽB§¨ìRþ¯³´'j.× Pï–…Úûû9vPûàA¿Qê‡!˜ƒrM±`¥(´:æ(0b¿•4ÒQÓ2Ïæ»øÔ@`ò™ð…‰ExG¼÷ɲa²úÔL–´é$«ñu.Y&TŠ, ÕÝx6µ@’G"ÌÙ:*Õ’Zd Hiå~HÀ"ooï–LÛÔ ‹¸ÂFúþÁ„ ï‰ã›I•6¤6¾Î%Õ„J‘ª¡z|wÀòׄ ©;Ø Eý(å˜EØwû84¡®q›.!S#JÍÒT6],j¾ÎdшJé¨ôD9ÊHбÌajïrÖJp”Ðj½6 †…_ØtMnÇ¡gfPÚt2Øø:—A*Å †ê3ÛdùAð¶‰ÒhÉø¥­<Š<â›paÓ©<ØÁØ>1ó&m:yk|Ë› •âMCu“DË4+Ê$–3wWnw-ÞHà!LCN+&´Aêtœ¹I›NÚ_çÒfB¥hÓP‰)—Y.x=[(]nšPZž0é$…Ñ­I›NÒ_ç’fB¥HÓPÍV9‹æV-XyhÁƒŠ‡r‰½Ï „IWF³!+º¡kdKÙt±¥ù:“-#*i¤£ºým¶êÌ)Îæì'Ñ,ÌÖt©ïbœp —áäÆ4ŽN x>òaÏbèT”¦K6äOϼu‘&ü֞Υ×I±Û@ÒÜ;N]–—y$ëÛ}m·,o¯ºJj€l»²è¤2ƒïtTÚtØø:—A*E¡†J«ÞZ™ÏF!&l–²i…}Sù[6uÔ0²ô£ué·=äÉrÕZªaöml#ïífít"L-ͶBàà¾B¿ŠsÅsjoºt<\¬¢a‰ W¿&|æÊ#’L>ã{b~-WL4x="ZUQÂE :ÊçÕ‘/{ay€ðÂQ©QOòMVùVƒß"-Je?xQûú š1•Ô$éàU¶eê‘‚¨F~Ÿ¬å¼H›]Á»µì¸•šóÍ~~|ž‰£‡¯íî|M&£‡Ù×?)çå*SØ+;Æç]¢`ÃAJ/oYÿ|;¹þ\Ž®Æ÷ãÙWùRc¦åÃítÚö»Ç‰D*6šÌÆ×Ï÷#ùøéyòô8½Eà‹Âí”±sEËQ5Â]€2ZAÕ#_ϫߊS£üUÍÜØ[KzVÑ+SÓ8fÉ«¢-’“òÍaò‘zòµøŒÖ߯¨q­S!Rq8–¡Ó¬”ú)«^•åöòâb¿ß£eºCY¾¼X‹PÅÅ_N±påPJo3H;iÌT/¡™§‰¢Ï‡Mtx+äyLÕ³¢Ì.« b…ІdœÂÌK™RéFEfÐM,’ñ_£2] ¸Hò E»63OP)*£ùPÒÃMŽ:¼ï¡ê¼¶Á3ÚÁ|ŽÖ‰Ø[³"®gðC•ºT´»(NÖIyl_OÇ“ÇøÅë«ì»hø^[™·ÛmMëÃô‹\§|‚ÛþFÏÓÙdt?:È~]çÔõDüÂýYMµóä“Pß}x°ö;ró!£sBàõI¡ú1d6 é`'·éq)O²Å…„—˜^ÚXÜñõY´ü¬L•Ž\sC28qPþrP?¸|?,YzêܾMÏ¿•-® endstream endobj 760 0 obj << /Type /Page /Contents 761 0 R /Resources 759 0 R /MediaBox [0 0 595.276 841.89] /Parent 598 0 R /Annots [ 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R ] >> endobj 762 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 763 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 764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.948 686.601 225.969 695.567] /Subtype /Link /A << /S /GoTo /D (subsection.6.20) >> >> endobj 765 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 766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.862 651.352 260.081 660.319] /Subtype /Link /A << /S /GoTo /D (subsubsection.6.20.2) >> >> endobj 769 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 770 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 771 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 772 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 773 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 774 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 775 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 776 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 777 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 778 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 779 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 [760 0 R /XYZ 90 636.658 null] >> endobj 767 0 obj << /D [760 0 R /XYZ 90 602.791 null] >> endobj 768 0 obj << /D [760 0 R /XYZ 90 602.791 null] >> endobj 10 0 obj << /D [760 0 R /XYZ 90 602.791 null] >> endobj 780 0 obj << /D [760 0 R /XYZ 90 349.683 null] >> endobj 14 0 obj << /D [760 0 R /XYZ 90 345.075 null] >> endobj 759 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 797 0 obj << /Length 1818 /Filter /FlateDecode >> stream xÚµ›Ûn7†ïõº”€šáù»$vÒ¤Š:Š"[Zj}ª¤ öÛwVKZ\ŠÒR_X^Žæÿgö—K­ÙÂ::4Ê'Ôpz; Ãk8úaÀüè ŸDão'ƒW+8-†“«õÛ5#гádöuÄÇ'\ÑÑió°3;j¦«fÖû<_®Æß&Ÿ†’YB™ƒüÝ;àØàlò,é )¡[Á_¿Ñá Œ}P"œþ„×”0熷É…}3ø2øã9Gw\Àñ\MЉlQL!u¨Š Bµ U1Jñ²â¬Z¨" •³à#N6!¹ÎúÑÖ‡›ûË‹›TˆqF¸å=¥öøâÚœGš!M¶ÊÓæf~7ÿÞ,·Ëë-Æa%R*'²=Õ¹&0ˈ5rËç‘!«‰U:6ôf6 Í¿º_t/./¦ÿü3:ºXÌ–Ý¡éýíÃŘVóËùÍ|õ4ÖjôK7ôcÙ¤…i —®®“!3ž$ôÜÑFá8QŒcÄ„T†(±æl¾h¦«›§®ð»û1W£ŸÝó»åª¹˜‘]ôªöcjq|71Y~ýpÀ±XÁˆnšÒwþa±ÚÅ0`¨¬Â n!f;)–„½mª±#T™ž©—p¼†`.s¬(‘ŠU64D£ÞÓ”%”%1L¢ø„\Ö©êÉ@3§ÄQÓ¼‰ÉÒì‡+hŽÅ*hFtÓ”¾ùËf…ÌÈŽs¬`tJ†A–ñÔ‡ÙÀµUö<mR6ÖTö3D£ÞÓ”%˜a Px|. ó±’¬'º?ÊÊ b ýÊQLå0\F¹'VFÓMSúÖ?òåΉ™&VpibÖBn›J'fÍTÏÔK'fโeÅàÚì*¢QïiÊËŠpÃQ|B . ³Ñ¢'{ÍRmñUr“¥ÙWЋUÐŒè¦)ÃÄÌK4ï.¸ŽæÄT–æÈÔqi®jè†fÄ{š²’fŸ ͘l 9’=€fêˆ2 §y“¥ÙWЋUÐŒè¦)[ñ÷'_~==ÿþîÍùé–÷}x½ÌœÂÛ¶ŸN5L/¬gé…,· æ<˯ÞËøc£,h„ß‘uÿvö×ùÙ».:6ç–£]li  Ê¡8D19Âp‡žXL7MÙŠ·»È>€%Vj¬àÂF€zÛSº  ñ±§#­:aF`¬²Ÿ!õž¦ôýÜ9·QbEé 1¸,¬M…v=Ùýç6)å3ó&& ³®€9«€ÑMSúæOž+õúlí.¿RÃe‡fLõh†óÇàr›úßf·ôJ­Œ®lhˆF½§)K4Ã;”(>!—m7„êÉîO³p²áQLŽæ0\¦¹'V¦ÓMSúæ_uÓÍN¤%apʪÑùÖFZoë͈†Ó{Ñ-ÏUó³‚;nÉ*›¢QïiÊÑ>à8B!—…1í\Oö¢aÃ8¾/Åd‰öÃDÇbD#ºiJß||ÖJƒŒÏÏ‚(a·MõW–¨¨©Ç»“’ ÉDeCC4ê=MY¢Ø·(=>m÷¸`™‹À2—ð›ã,ob²,ûá –c± –Ý4¥o=¾]Û~†\ó Zê)÷Zìé¨ß¡ÕõóùK4Ì{š²„2#’i”žƒËðŽšžìþ0s8Žâ›QLæ0\†¹'V†ÓMS†‰Ùâ„k´àÒ¹]{¦žÒu³+uìéHëfN˜•ý Ѩ÷4e fXæRŽÒbpÙv‡Ë‰žì0ÃÅÅX|K#ŠÉÂì‡+`ŽÅ*`FtÓ”¾ùü¡óî‚«`N> endobj 800 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 801 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 803 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 804 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 806 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 807 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 809 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 810 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 812 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 813 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 815 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 820 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 821 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 823 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 824 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 826 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 827 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 829 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 830 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 832 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 833 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 835 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 836 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 838 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 839 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 841 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 842 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 844 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 845 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 847 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 848 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 850 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 851 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 18 0 obj << /D [796 0 R /XYZ 90 733.028 null] >> endobj 798 0 obj << /D [796 0 R /XYZ 90 709.842 null] >> endobj 799 0 obj << /D [796 0 R /XYZ 90 709.842 null] >> endobj 802 0 obj << /D [796 0 R /XYZ 90 683.229 null] >> endobj 805 0 obj << /D [796 0 R /XYZ 90 646.117 null] >> endobj 808 0 obj << /D [796 0 R /XYZ 90 609.006 null] >> endobj 811 0 obj << /D [796 0 R /XYZ 90 571.894 null] >> endobj 814 0 obj << /D [796 0 R /XYZ 90 534.782 null] >> endobj 819 0 obj << /D [796 0 R /XYZ 90 497.671 null] >> endobj 822 0 obj << /D [796 0 R /XYZ 90 460.559 null] >> endobj 825 0 obj << /D [796 0 R /XYZ 90 423.447 null] >> endobj 828 0 obj << /D [796 0 R /XYZ 90 386.335 null] >> endobj 831 0 obj << /D [796 0 R /XYZ 90 349.224 null] >> endobj 834 0 obj << /D [796 0 R /XYZ 90 312.112 null] >> endobj 837 0 obj << /D [796 0 R /XYZ 90 275 null] >> endobj 840 0 obj << /D [796 0 R /XYZ 90 237.888 null] >> endobj 843 0 obj << /D [796 0 R /XYZ 90 200.777 null] >> endobj 846 0 obj << /D [796 0 R /XYZ 90 163.665 null] >> endobj 849 0 obj << /D [796 0 R /XYZ 90 126.553 null] >> endobj 852 0 obj << /D [796 0 R /XYZ 90 89.441 null] >> endobj 795 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 876 0 obj << /Length 2246 /Filter /FlateDecode >> stream xÚµœKoã·Å÷úZÚ@ÍòýÈ®iÚ A€¢‰.Ò °eÍ@­_•4˜ñ·/©?)‘uH[faY¼ºçÜëŸ)>4fsêÿ±¹£s£ qBÍO3:ÿìŸýqÆâè¾ÉÆ¿¿ýñ¯Â¿Š8-æ·Ÿv/׌(Îæ·¿]ñë®èÕË×õ5³WËÅÝvù0=÷ój³½þýö§¹d–Pæ|þð ž›ýåv/ )¡ƒàÿf¿ýNçÞØO3J„³ó¯þ1%̹ùÓLr?Î~ýcŸcz^øç[5Iîë±þÄšfˆU;‹7† BõéÒãp(äÇÇ—û»ÇºÆá–ϳDÓÀúsŒø%“MÑP·NÄ_×ÿÙðoÿ^®×O›ÏG¬ –šÒCY0'Ò…Ç­^0« ÷?2ÅyfÊySƦþôð~øŸ^ÖÓƒû»Å¿^3zu·~ØLO-^ž^ï¶«ûÕ5»z\mß®µºúÃ4ôe³¬‹ŠmÄ`CS4ô^§Œ =ÑMá4Ö¢nÞ¤,ë¬Ç¯lÙÃj½\lߦòŸ_®¹ºú:}³zÞl—w¤öQÕN¡9¤9‹iÑœ†û4b}š‘n2ˆo^«çÕIšÑT¡‚1Í’P§M4[G¨1…© ÑL‰4l°¡)z¯SƆ"šý/7Â'Å`Ù@³µ…ì4kE´r˜æCL“æ8<@s.6@3ЭSÆæ¿®·¹<47צZssnê4{˜W£sóhCS4ô^§ìÑl‰†ðLPRRægˆBñ …&Ni ò!¦ r9èÖ)cß7ËÓ s¤@÷¦e-䱩zZÖL¦.4-{¨lhІÞë”ýiÙù0Â'Å`Yçˆäº=ƒfj WÓ|ˆiÒ‡hÎÅhºuÊØüo|s’æð.¦PÁ½iÙ*}lªž–­0…© MË‚ø ÑX?c0t^%ì¡ìS²“b j˜—µ´…ìÇQVÆ¥ ɇÈq´Ïq®ÔLjV Ó” ö}ħKb¸rÔB8stI‚‡:™¶Ëtcø^öôÉo¦y»~‰o%>¹ÈbšôÆá|s±~n2ˆoïîû{=PðÐ^¯6ÕÚëå¦.º×kè~¯‡¼×)cCO¢¬üfC|R –u†+ Ù3hæaå(1͇˜&Íqx€æ\l€f [§ŒÍ_¼¾¤YM?­Ócš—n˜*gdNœ_†ç¦ÞG³gù~hJöo.~õ9ÖÐ ½×){4ljàs˜™ì~jÎd?N³t‚HÉ ÍYL‹æ4ܧ¹ëÓŒtë”±ùŸ¦süåI¤õîjT‘žv'GÎJ¤%‘ÔÎÞ;A?†uFiE,eƒ]MÑÐ{#-)%šsÈPв’ ˜(dÏ@ZKb„ÅHbšHÇá¤s±¤n26¿ :Œ«MµãrS½(kèþ¢y¯Sö&hã›%!>)ËúYÜYUÈžA³Ð„ ¼óËbš4Çášs±šn26¿" :‘«MµNärS=‘kèþDy¯SöÏ6ó&†`Qg‰à¬=ƒejüŠ _úe1M–ãð˹ØË@·N[ß?eÔ¦Z‡¹©KžfŒõ3g çUÂÈ–PÅ!;)ª†•ˆ’¥ìÇQÆúu ¾ñËbZ(§á>Ê…Xe¤[§LÓr÷T<„rmª…rnê’(õ3¡ŒœW ÇPFììQFª å\ö ”¥OÌñ_ÓD9 œ‹   të”AüëbƒŽçüKÁ‚1ÊŠuì©$™ú5+<]ìîšq9ØÏ ½×)c?Áæû"zR ”•”û¶–²gÀ àøÊ/‹i‡`ÎÅ`ºuÊØüÍ—û“0ÂüŠ `'š«cOõI†öûËÜÓ{`ö$ï3`Öƒ½»·à9OÕXúbbR ””Tïfá\öãsljÂKäCH ß8Ú§7Wêà D«„±í‹—Ó'Ë>Q j…ó°ÇR9sd©D×elné2Ó°¦Ä6ÖËŒŒW {;ÂB&F EÉÂ¥U¡x½ZËðU_Óä7œ‹  të”±ïÝãdK”…UcýŽÞ+AöoÍ c:±0Dú·á±¦¦hè½NÙƒYù_kJ1PVR¿„¶¥ìD åƒðu_Ó$:‹  të”±ùè4YH;]p÷ºO5L]÷ Q˜ºÜuŸ_LŽ54ECïuÊ;Y~ÛŒðI1P6,AÂ'árÙ3hök•Îmß!¤Éò4:€r¦4@òiÑ*aZ/Ñ­ˆñ˃ӥv/EÂ…¨݉h—;ºÜç“õ`+S02^%ìoðÂ] @&… Íp·>¡‘i~_f 1//²˜Ài¸Op!ÖGéÖ)Ód µ_¿TpgwGµ9öTïî¨t…§wa ›‹ý‹ígІÞë”=’…_¦1HOвa§GM){ÌÒÿ”(^Yd1M˜ãð̹ØÌ@·N™fdþÚƒùtÁC0Wžš0gž. óP?0ïuÊA˜=˜ìæLö ˜9%‚â•EÓ„9Àœ‹ À të”±ùO«o`ÏÇC#˜Ãù0gÇžJ˜•Ÿ^DáéBçnf÷Ó±~¦hè½NÙßóù…-¤'Å@Ùp©g¸*d?³_ß)‡?@ti¡Gû$çJ}h•0(/ÞÿEéé‹=ãˆðÛäÓÅâu2#6܆TžÊO[Lw™§Ëlö¤ÿ•”n¬™)¯F†Q3Ãdê($'… áp\þ @&üŠÃ'ŒÃÇö›oN¦ÿâý±?V°û ÚÊf_œ‘éóÍ“úÿåór}ø« /ÏÓ×Ûkǯ¾,§oþ¾ØNäô…¹ï(ÿNÐé;N‹Ä„Ú5ÿüó¯?{>þö}|)ñ?²ÈSìÕ/ßÞ>/Ÿëî(&íù?ú_½Š endstream endobj 875 0 obj << /Type /Page /Contents 876 0 R /Resources 874 0 R /MediaBox [0 0 595.276 841.89] /Parent 853 0 R /Annots [ 877 0 R 878 0 R 880 0 R 881 0 R 883 0 R 884 0 R 886 0 R 887 0 R 889 0 R 890 0 R 892 0 R 893 0 R 895 0 R 896 0 R 898 0 R 899 0 R 901 0 R 902 0 R 904 0 R 905 0 R 907 0 R 908 0 R 910 0 R 911 0 R 913 0 R 914 0 R 916 0 R 917 0 R 919 0 R 920 0 R 922 0 R 923 0 R 925 0 R 926 0 R 928 0 R 929 0 R 931 0 R 932 0 R 934 0 R 935 0 R 937 0 R 938 0 R 940 0 R 941 0 R 943 0 R 944 0 R ] >> endobj 877 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 878 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 880 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 881 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 883 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 884 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 886 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 887 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 889 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 890 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 892 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 893 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 895 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 896 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 898 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 899 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 901 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 902 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 904 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 905 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 907 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 908 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 910 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 911 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 913 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 914 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 916 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 917 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 919 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 920 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 922 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 923 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 925 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 926 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 928 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 929 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 931 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 932 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 934 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 935 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 937 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 938 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 940 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 941 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 943 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 944 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 879 0 obj << /D [875 0 R /XYZ 90 715.369 null] >> endobj 882 0 obj << /D [875 0 R /XYZ 90 686.666 null] >> endobj 885 0 obj << /D [875 0 R /XYZ 90 657.963 null] >> endobj 888 0 obj << /D [875 0 R /XYZ 90 629.26 null] >> endobj 891 0 obj << /D [875 0 R /XYZ 90 600.557 null] >> endobj 894 0 obj << /D [875 0 R /XYZ 90 571.854 null] >> endobj 897 0 obj << /D [875 0 R /XYZ 90 543.151 null] >> endobj 900 0 obj << /D [875 0 R /XYZ 90 514.448 null] >> endobj 903 0 obj << /D [875 0 R /XYZ 90 485.745 null] >> endobj 906 0 obj << /D [875 0 R /XYZ 90 457.042 null] >> endobj 909 0 obj << /D [875 0 R /XYZ 90 428.339 null] >> endobj 912 0 obj << /D [875 0 R /XYZ 90 399.636 null] >> endobj 915 0 obj << /D [875 0 R /XYZ 90 370.933 null] >> endobj 918 0 obj << /D [875 0 R /XYZ 90 342.23 null] >> endobj 921 0 obj << /D [875 0 R /XYZ 90 313.527 null] >> endobj 924 0 obj << /D [875 0 R /XYZ 90 284.823 null] >> endobj 927 0 obj << /D [875 0 R /XYZ 90 256.12 null] >> endobj 930 0 obj << /D [875 0 R /XYZ 90 227.417 null] >> endobj 933 0 obj << /D [875 0 R /XYZ 90 198.714 null] >> endobj 936 0 obj << /D [875 0 R /XYZ 90 170.011 null] >> endobj 939 0 obj << /D [875 0 R /XYZ 90 141.308 null] >> endobj 942 0 obj << /D [875 0 R /XYZ 90 112.605 null] >> endobj 874 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 974 0 obj << /Length 1921 /Filter /FlateDecode >> stream xÚÍZMsÛ6½ëWð(Œà“$r«Ó$MêiÒÚÓÒL‡–h›‰>\ŠŽíßJ ­¨Ì„ÓÉ!4¹Ü}xo±\b…,Ò4JTB´PÑ|5¡Ñ-Ü};aîé<>óžŸ_M^¼ðѱˆ®nê×cFgÑÕâÓTÌθ¢ÓŸ³*³W—Uù0¯ÊK§¹½õn½ÈŸfg‚3¦¦röùêýäõÕ.¢Ã£Dlâý;ùô™F Àõ~B‰Ðiô×”0­£ÕDrá®—“ËÉï;ö¾€û¡!)&‚cb’7ƒâ‚ÐX5ƒb” ÆúbD+e|Øâ©uEîlk]p¾§Øx0Ðtíá—¼t³æ¢ºs‹Ï­ó þàe=},ª;ûäº,ògžoçeq_›õöeOI@ (–1I“ÌŒJÁe0mjðSÞºGxVŒJÂPc¥—`31Ìóå}¹êfBª0Äg OÄDIæÇû›*ú*_æÛªÈ–Žò2[oof\M7å*3 Úû÷È8ÍVy•—[{ Þf]¬Š¦„2ÝÂz¥ÆCÝqhP«^P&0r$KI’B¹ËÒ.9ä´V×ÜÙX(¯¶_gŒNóç¾öŒ$0A<§ñ­ 2„ËN`E5JçÏ&ú¦\¼øf.²åƒ›wź› 0åPÝ}œ„Gw]ÈIPz„›¶ö?~ºS(®>(;íMOûbÑS_R˜Öiä¹í«ïlðØ’ÃÜר=ùÑ¡àë[l–7I¢¶µFv]„ŒåFÈyª«”ÆðòÞØ˜-‹u°¾ bæy Ìqkƒ‡„ Oi;¤Qù¢XçP¾Õ÷lþh}·2µ°WCÝuY+ÏCÊc­¼Òu{†*ïlÌ€îË/AåI˜ŠÝ’>=Ph"8kì+oתe‘]/s§p¶^ìwŽØ´(›ý ²0ÆöjÉ 02W×e"˜ƒcg†Ô$Æ[ gb†Se×kÂÎðpI8¯©ûx&-®fšO³ë§Ó‡å…¤Æàºà! þa쇵ôÁí „£±•ç ‰5¾“ÕØ˜ñ<ηyY»_X¯{ÞÂÝ/Øà!M÷ËãVH#ÿëÒ®rœð«|»Ín]Orai÷2î\9]|x”F€v]ÖûãÁ½ Œ“±Å¦°ÎL$.¶³qb'zâÈóÛÚà!%%Z?d½]½^®XgUŽLsú”Un ìéØ]—µôÁÍ Œ¡‘û>‘ ’*|«±©¥¯®³Ð<·gž·ÃçhÈú ‚·BÖóü Äö626î´gî§H¿Ül¾>Ü»ôðšƒ[&Vö¯ów¿ÁwƒN:¿x}iØŽi˜ .mDc3ÍR 7Þó465Ó›ÛS¡´†ìIÒ8òöÙN Wl8Û¸ÆÈ÷D£³­ \‚—56î¸,Ä4¬ÿÒ½aé„(%O`¶cÚ+‚ht¦ÍöÚ‘íšÆÆíá†˜Ž •,òœõ™Ž‰Ö'T ØŽiXš™>Œhì–„A«­%¾`nl,Ów!¦Âà£è9ë3MIªõQ`R§°¶Šq`‘ :¤ Õ‡!ÔÒƒãçÎÄmM‡SZ‹{W}žt^ÉpžT‡ŠÑ`‘>ŒçÌüØóL"“à‘9c±úþ“Ö?…?a­úóÚl\Ô H¥ërjð¿Í×y kl·ÁÞ,Âë½×æçbæne'íL¿¤ü¥ ö/N œþõêòVzïÎÝ«>–nÑ÷ì~t»yz¾Í×ÁÓ3 Уç?VsCÅ endstream endobj 973 0 obj << /Type /Page /Contents 974 0 R /Resources 972 0 R /MediaBox [0 0 595.276 841.89] /Parent 853 0 R /Annots [ 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 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R ] >> endobj 975 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 976 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 977 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 978 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 979 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 980 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 981 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 982 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 983 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 984 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 985 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 986 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 987 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 988 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 989 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 990 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 991 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 992 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 993 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 994 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 995 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 996 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 997 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 998 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 999 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 1000 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 1001 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 1002 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 1003 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 1004 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 1005 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 1006 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 1007 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 1008 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 1009 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 1010 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 1011 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 1012 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 1013 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 1014 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 1015 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 1016 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 1017 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 1018 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 22 0 obj << /D [973 0 R /XYZ 90 733.028 null] >> endobj 26 0 obj << /D [973 0 R /XYZ 90 712.582 null] >> endobj 30 0 obj << /D [973 0 R /XYZ 90 366.143 null] >> endobj 34 0 obj << /D [973 0 R /XYZ 90 334.08 null] >> endobj 972 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1043 0 obj << /Length 2149 /Filter /FlateDecode >> stream xÚ½šËŽã¶†÷~ ÙØ 3¼K ‚,’9  83 d13 ·­îV`[Ž,'™·?E‘’(‰*¹¤1‹‘ÍRýÅÅ[µYBáK MR•#T²?­hò ßþ´b¾u ÍÛ ýû‡Õ×? x‹-’‡§æu͈â,y8|\«Í–+º~·«wîéC]Ýöõ­Ú°lûÆr;åg°`ëº(ÏðmF©†w??ü²úÏC'îCSB[é?V?Óä!þ²¢D˜,ù ž)aÆ$§•äÂ?WVÿë|¸ï|ëdI3“l…$Y3aÐS®à1 §¡àÛì7Õ³ozX1* Kpä‚PçØµ6f½{ÜHº&/c0Œ+¢eo‰M¤œH¶œ4¡JãÁµFapŒ±qXŠ¡!õ´9#†ýû¸)#Lf8noc{ô×þCmT8›¢†Ó쨑À:ÔA`ŒeQÔó!Pgÿ6j #íM<輂Fs[ØWMÒ»œðV€fëݼ‘èZ› :&xŒö|Ò[WŽp ß*[Oü´«_bé Ë…àIàp‚[¢Ãåý¸±àZ£08¦E 7Ò[ŸL”†ŒƒEÅím<îKUœë§ S±WpÖS< ÜN¡Ã‰‘¾:b=‘i…>Ò›ç¸LIºpHim<ôº*žgK8æŠ4 œÆrÊÌ+#vȃ™ÖQäó!½9r¸§d¿ð´6ùí\Ô±c8,)\AÓ7DðW,ãXtï :¦M”÷|HoΛ ’¹{ì?^ªSèÖ=¿ÏŸrçÿ¼Ï?Î{Ö×4î~Èùµ.vG÷n]íÎ×§²:í|á¾»lØzWíNyWWâJ:pÈàË]—¿*Îûãíà…Y0JÔd`n;úUEß }sI3t²¬uñ]ǪkßÂ,ao'̸YÕ³ÿ±È‡k¤$D ‡ 1[Ÿ Ú›!q2ªA2ë|XÉOœOyˆiµ6¸ d›¡é@¶îX]Á®½ùî­qå‘˦«”ŠÝslzgš¡UΤ!Ñù<{HÖ,c8{o³È¾÷…°Ç[ö Æ>Ô»ƒ=¦ @Q"”@;¬‰ãÏæùÛ…h!õÉ"ýÎQkÙ÷j‡òöx̧É 0êÍÃ÷ƨòСU¾¼t¢«áæÍ ÖÏÔY,1ç°]™Ô Ð[›%ê¯y쨠ç âà’ËäQñ‘˦jý’×»ý Ö‰ö7u&KKÏ4¡<Åñ{›Eü½/?&Øâð‡’wàÇÄG.­x•?M—ET*ñÎz\ÏV^µè}”Ÿ#[6Oá~4SÛhưoŸCo³8†ˆV?†˜`;†àÕØ"Åi%äPr~ ½5.>rÙ,_Õïöè8™Bšh˜H9‘fùØ…¸¼Ñ(®IP%΀ø€7&‹ó¶<Æ%žÞf1'z_HN`‚mN‚ ó:”¼c^câ#—V<¿áÚ0I Iìa½u&¸d–«s¨÷QEçµL›[äìöíócèmÇÑêÇlÇ0DŽƒ½åã ª­ 1Hy™õU8LúOBx#?ù·‚¦ë}y†`ÎWûIÃjTm3ìN·¢²¡Úæºtßv5GïÃV$›_nÙ¢¤óZV@wWçW²ÙÊŒ®îõ®ÅµözåS롲QظmÍèZ̾ž ŸòÓc^ÁKܸMîlÝÔÈõ DoWÿá1wͶ¸Ò<<~q pût_Ü`åqOŸ¨¢¾œ9¸Ëh’Âfê(=摹«RÓå¯bÎãî|pj%È#…æ*wÍ£èD\ÿöÇÿB~þÞ}¬Ê[]œó+0§Žÿ>–j#Òu^ߪs~ˆ$€lÜ}ØÄÁ– VÃ=mw¦ÿPž|¡ÛŽOSd~ñ_ÀŽY7áÙõ ®·ËåX@ìmJCj¸‡ ŸÚzõåV]ÊkÓ/ëãì_é°…Ž? ê\HcÇÑ¿t>~Ùhµv}VµßP„ö$ÊÄò„ÚŒ&ŒÕìSÑ~pÙOç²vÁ=úØNå¡°¿±i™4ã¢l²QùàGgj{ÂPÑû­¾3÷cºöëÇfÿ€m2®[pÚ‡«¾[·¼ºíùOù9¯`·£äÿÀð°1|}óùµE#ÝÌ|Cù7‚ºOœ2æGÓÖ>Û ³Ý¾J2‡ Þ•yv3púwû1žÿº+; endstream endobj 1042 0 obj << /Type /Page /Contents 1043 0 R /Resources 1041 0 R /MediaBox [0 0 595.276 841.89] /Parent 853 0 R /Annots [ 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 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1085 0 R 1086 0 R ] >> endobj 1045 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 1046 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 1047 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 1048 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 1049 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 1050 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 1051 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 1052 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 1053 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 1054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 634.398 513.996 643.255] /Subtype /Link /A << /S /GoTo /D (subsection.6.14) >> >> endobj 1055 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 1056 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 1057 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 1058 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 1059 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 1060 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 1061 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 1062 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 1063 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 1064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.06 524.689 513.996 533.666] /Subtype /Link /A << /S /GoTo /D (subsection.6.19) >> >> endobj 1065 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 1066 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 1071 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 1072 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 1073 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 1074 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 1075 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 1076 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 1077 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 1078 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 1079 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 1080 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 1081 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 1085 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 1086 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 1044 0 obj << /D [1042 0 R /XYZ 90 757.935 null] >> endobj 38 0 obj << /D [1042 0 R /XYZ 90 488.077 null] >> endobj 1019 0 obj << /D [1042 0 R /XYZ 90 454.111 null] >> endobj 42 0 obj << /D [1042 0 R /XYZ 90 454.111 null] >> endobj 1070 0 obj << /D [1042 0 R /XYZ 90 353.654 null] >> endobj 46 0 obj << /D [1042 0 R /XYZ 90 191.591 null] >> endobj 1041 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1111 0 obj << /Length 2982 /Filter /FlateDecode >> stream xÚ½ZK“Û6¾Ï¯ÐQªµ<>fkIl§œrÙY{6{°§R 1+‰ Iy<ùõi ¾ θR[:šÝ ôd ?¶Hè"’I„\lŽWtq½?]1]Ãðº5þÃÍÕw¯¼E’P,nvæõÉÙâfûi) [­¥t¹Q‡sq\­¹¤ËUqÙT¶ýAíT±bñRV ¨ 7áq¸ W·7?_½º©E£bR„ZðWŸnéb þ|E‰HâÅ´)aI²8^\`ûpõñêß5Û/ ln’‰ùÉqAh(ÝäÇé½ÎÔakgô2ß\ŽêT¥U–Ÿô,€ûšDIóZKvB ,@×ן)é½~ï»×œ7 ‹HÈÃä3•ô§lÅåòËŠI ÞšÇt™j·¶]¨êRœÔH™í¹Ùg%´¢d‰BLïñRV¶÷NÙžRaG•ÛŽ?U­‡½:©Qlш•ËGûïðå=²Ûå‡C®U}ÈN8±6ª‚Ç$Nô*艡 ¦/8 ÉJg@Z}˜±:Þ©¢4X¯…6?)-FiW*-”ÙÎ y¨ïÓÓ½Ú^X[p"øô6hKikËhH×<Ì’q.ûb…W`Ü#+ IÌ¡e†tGq#Z 1t4šÑ ‰ÚZ9³ƒUƒÚi€ú:F”È òâáhüâ{Œ´øcÀsN"šLߌO4³ÀOËz.ð>­ð-­ðç}FÚ…’Ä~íÖŽÆ/¸Çhr ÇZLCÞŒOCŽ4³OËz.ä>­ä-­äp2Uéôˆ“ ôB$~Á]6SˆËX š6òÖø$âŽfq¬g"îÕ ‰ÚZ9Ä µ('Â"/Hâ—Úe£…~ nG‰á¥IÄ›ñiÄ‘fñiYÏEܧ•C¼¥U}¬¿"{q@¿Ô.-tà>kÍ‚€ð —UO±!„\Œ‡ …׌øAtÈ#q |5ðlx!ÈhÕ‰ÚZàøM¾Uíâ˜pq¼p _pÑèéRƒUÈæÀoˆ¦ÁGšYð§>üžV£à·´rà#§zD¢Ø…%ñ í²ñãÎ8Ìv÷†hw¤™Å}Zàsqïi5Š{K+‡ûùË÷„Aàiüb{ŒÌ ; ~DDÈð[D“à;š9ð=Ÿ ~_«1ðÛZÕàEqù¯ôÃ4~Á=F^ËbF"Í€ßMƒ4³àO |.ø=­FÁoiåÀŸˆ%pŽÂ‡%ñ î²Ñr‰Írµok¼7#6»›—Ùý)=àƒIÃu#;eU–²?maÂôù¥ÊNj° <„Æ0c 029¢£^·Èsé³Ä`N]Ë0EоQ@*ºJôPt4~Ñ=FÖ†×"¦Âa€P›üx¾Tªš+¢Ø§#̃®s8ÚAQƒÅÔèLQCëÚ.j‘È5€„9 gA‡° ჆Í<ðŒ%D°¤#w°›-‰O$ã°IY[ìCv8غK¡êRL]‹‚¶)8I]Ûf›´ÂªMµ_±eZ¹SÄ‚Ö>ÅÆ2õ/hmó“"ÃÕX £ ,¡²U¼«Ëwƒ*\¾s¥¹*œ¥ Ú« ȸEý)û¢NC6\¨.yÙàtùfgÿÁ´ý±ÄH8å§µ®Ài:m¶"Ò7Cتژg °nÝ!ƒô|>dÖ~ ¼F•¸}ÄH0Ô–*8!֮Б8r¥·¯ÿÈÂpù8ä$‰¨+tάºÓŽ (»ótu°Ø¨3‡³ZI§ˆQ,šRLÛìÑõ¤h‡ШڪÓŸuÚ¾sNƒñ‰Â@7•ÿfKÕ%K7åVUÖ‘Ãà(€Ð;n•Žüg»'qŒ©ì–M ÙÀP#½Ëõ>µÞGÁ2Û¡V.HêÇ1©v‚ƒ¥õB7d \z9J{^M¼iº2üžŽiäEÐM+ •ÚcÛxÎ=tŽ=ê‹9˜õ ±%és¯m—f= Y©Fœ-ÄÛQ+“ÿæêILEëhþ‡ÕƒÅÔ6jŸ§C.*Í‚áÇ“ziÊ^È Ž SxÜåE‡ ^;í¤4BH]ïÙ A©°,üg§  ]š^nB(3ºG2ë#uk›õúÁ£v™Ê>òº¯kEú­ª÷VÇŠàÙX±v„ c»OüÖŽSã¨LûÎ駪z>ƒ K;~ì?ï^¾zýæÝ«—Ó!…­ ‚îŠü8¼r† ƒE¬/ŒgËH¼n¨G®ž; M·)iµ'ûÁeÄÀBŠŽðþ]’øDöØtkŽî£Õ$Iõ_˜4·%º+HÀF mƒìÓQL©ìm ö]îJm•ÚŽ]JÉ„H9ú™œ^`ÊoÿLÛ~r¨ó¤}K\oñFºÉ9ÕI0uTßeP7«„//8—÷næýcÉ5å×AäºÛ–¹Nq0ÿ÷ÇoÁ ßü€¯’Xßµs«—ù×Ç{u–Ä<ˆð­ endstream endobj 1110 0 obj << /Type /Page /Contents 1111 0 R /Resources 1109 0 R /MediaBox [0 0 595.276 841.89] /Parent 853 0 R /Annots [ 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1135 0 R 1136 0 R 1137 0 R 1139 0 R ] >> endobj 1114 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 1115 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 1116 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 1117 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 1118 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 1119 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 1120 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 1121 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 1122 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 1123 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 1124 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 1125 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 1135 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 1136 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 1137 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 1139 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 1112 0 obj << /D [1110 0 R /XYZ 90 757.935 null] >> endobj 50 0 obj << /D [1110 0 R /XYZ 90 733.028 null] >> endobj 1098 0 obj << /D [1110 0 R /XYZ 90 716.221 null] >> endobj 1113 0 obj << /D [1110 0 R /XYZ 90 716.221 null] >> endobj 1099 0 obj << /D [1110 0 R /XYZ 319.148 442.96 null] >> endobj 1126 0 obj << /D [1110 0 R /XYZ 90 426.372 null] >> endobj 1100 0 obj << /D [1110 0 R /XYZ 204.056 381.325 null] >> endobj 1133 0 obj << /D [1110 0 R /XYZ 90 364.957 null] >> endobj 1101 0 obj << /D [1110 0 R /XYZ 276.145 331.646 null] >> endobj 1134 0 obj << /D [1110 0 R /XYZ 90 315.058 null] >> endobj 1102 0 obj << /D [1110 0 R /XYZ 265.38 258.056 null] >> endobj 1138 0 obj << /D [1110 0 R /XYZ 90 241.468 null] >> endobj 1109 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F8 1129 0 R /F11 1069 0 R /F7 1132 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1149 0 obj << /Length 2954 /Filter /FlateDecode >> stream xÚ½ZmÛ¸þ¾¿Â@¿Èh¬¢HI‹¦@¹—k²h‹&ÁA+ѶR[òê%›í¯ï ‡”%KëÍ%¹b?¬Ä·Îë3#óƒ?¾HØ"’‘Ÿ¹Èöl±ÑÜή`z5˜ÿáêâñs»üD‰ÅÕÚlWÜ—_\åï<éËgŒyï Úæ?KÎ<}·\’yoÛºËZz~£×º^òØÓe¶äž†ÑDòÈ‹–®~ºxvÕs`ù“B!ý›‹wØ">º`¾HâÅ-<3Ÿ'ÉbÂ>ï.Þ^ü½?ƒÆŒÏ]Qr1½#?¹c |¦¤¹ã{ÈåãçÑBùIâšÐWQ´Xq?LB³ê@K‚àxNèÇÀðqÉ£åJ€¤Ú­¹=÷Ê´-–ô>-¹$‰0ocm—Û·jMÿû-™Þé¦-Òª]ùžIVÕô¬oºt·»£v+;Ý:Gh°zŽ7¤öˆ®9—P‘G1—¤ÅÕŒ´Â þÒ‚q¢[4Ä\µnu‰++?Š8’û‰$=åºÕõ¾(uËEâueq¦Öi# ¸¾#ª#{†sËúo–RzÿXr!½§¯hmÈ`÷¡]\¤Ó+ðÐÂ-HË|JŽ90+ZñêõÏ¿¼~õlJ(ŒýˆGîœ)ØR9>JºÜí¶È¶ø{YÚè)i©|ŽôÓe"½«{È+_©ð‘·GÎÌø òŠÏœ>\ä­ìQ[»?×kt´ÛYŠõqÅÄ8˜½¯úVÁ…s (Ÿ;räuÄÉBµ/ÚVÛÁu]íi˜nCÏ_^½¥¡­Nsˆ3ÂQ,ñžã±Fà ÍAg& ⨠•fø–b -%„‚ÏkòÎmP‹²µœ­­9HH!jdD X8ÔÕGY°˜nãiKÿOÓ,Ž33îø¯®+4šÌ±µ»3ô˜>›ŸîIz*ý^1‚$8f¿¯ÎF‰Ï¤ËOl€ ‡±J%ÇðÊÔLÚd~8{±6܃K÷dBI#‚ñØûÐÖPmzØ…S™; …O$;gUKCXï×w'硉ÔMëFkmÇk„¼wí«ÍMnè}V#x;!ãï‘¥W!|HgãôŠÆ ›” ¸¼°ø<«0:µˆ•:Ê]>òU@íÊ@C‰÷j»šP–\ëÑ)’ç xóR Ò€p_7ÂWœnϦ´@L8®Y9£œ‚ABïrBØ C¡U¸r~ «k½O‹²(7v¼¯ Oåi° U5Õ©œÌQ—€\¤¥OÓ&±ÁdV=ºG®õ×4á®9ëœ!”“Ö5ÃkÆÖ5 ú¥I„¦Évs¿kÊßÅ5‹nSØ…êj!@¾¦ã„·«XºÙÚ‚LÕFËó"/;I§ca +®D}÷Ì:[Ž £”k*ÉißD¾ûÚªÇé)¶a |2v'¹œ *À! (ð !·ä,5e>Ôåjì’Zm?#ê 8zÓMWÔ:Ÿ JúRŠon˜Œ[}ìÉ“)%š“ê¡Æâ—´a“ic.yT*¼XœùÂ$¢mÂÛµý?k\Ÿ‡Áwì$²þæ÷õ’Â8úöN"‹ÎØ~ãϘ¹H?Ô½v>˜¿×ÐÝš‡,ý­ÞÔÏ´¶>$È/±€Çodã=$lŤÃÁØ5ÃÜîé1©+ŸÂî6%³Ý“ GÿV×9í”Ï*)†LÁƒû•tœ¿_Iv̓J:C먤s’ƒË™x`V$ß¡UãÁ(´+»£Zµ+®f? „¾ì{þß”‡$\¹êàØc%8‚ä>@P÷iûÆP{xWKˆ|µéÀ"_Ó(µLà¡9l€g¦aƒ¨ºjSÛ#ƒÉ¶ekBæÍh£òöé¦t½$¢ÞÎ#–°c®û0`®û.bVgYWÛ%ðÞ5ÚÎBvNúÙ1D!ÀÈö¦ñaò,LÂäð“¾öÅ„=`©™)ʬÈuÙ┘›4N4Åð“[^Z&‡ªn!9µw–›Ê“f[ËCÑ=­î›9ƒŽYºËº]:ˆWYµß»’Ú…Ât‡œ‡‰÷Øs͸¤N]Ä«g­ƒ~ØJêH¡þlyRkr6Óƒ¸ÍÀ êi?‚Mމ)‘È#—‹û¢Õ6ôIÀøA¬ì](°r‘ü¾µ­ð^š°¡§ËJîÜ|.±1]Ò¼Ñ?Î×5}ê °´íz¦Ï¤¡éš€?Ø]â>ŽÐr+_xΪ²…‚Énô“;Ú!†èÝ’¾®:»ïœ³göKŸÉ¥z’4‚ÄçƒP€èj¯¸Õ«Áòiú89Òuc=¿’(QWF̧¼$ /ÈÇ#^N˜]sžƒ“ƒúŽ Ðî\@Š|jÜó“Ûgÿ£õÒ<§ŠWÒOžZ×ìJû9°Ç)u‘ö}Ô:öoZ·dí|à̦DW—lÒ”¶;ìd‰BnÔÈ1^ìªkØÃÀ‘b†:à.HºhyôýÊðm:çâ\B­ÌÃÀÅmï›Í»tîŠè¿µîϦ™ˆèž^÷ºiÒnNò“úò£ikòÑ4î¼ôŒªãão§}[g®qn»Mð¤SóåÇ:óë˜ß:¹ Ÿ 2³)Åý /—ζÜbw/ˆ‡ jolœ 4íèë¤g‘ Ø”sêßP€ã’äñ‰P¡ÊŸÆ÷1ÐùdÙ‚‡ ²”"² ÜšžùQßq[m³ÍkêÞž9æÏ3°\&P;ÏVîHŒ+ùõ?z2°^a½— ¹ÕCã#u㥺ÔuÚ—ù¯–Ià9Ѿv: éO.Yp)½ŒÛÆR.‚üóÇ·¯À„_þ`·ú1Z†EÏæÿ_ªÏwú!ÏP:h£Sñü$Xý endstream endobj 1148 0 obj << /Type /Page /Contents 1149 0 R /Resources 1147 0 R /MediaBox [0 0 595.276 841.89] /Parent 853 0 R /Annots [ 1151 0 R 1153 0 R 1161 0 R ] >> endobj 1151 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 1153 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 1161 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 1150 0 obj << /D [1148 0 R /XYZ 90 757.935 null] >> endobj 1103 0 obj << /D [1148 0 R /XYZ 422.918 609.8 null] >> endobj 1152 0 obj << /D [1148 0 R /XYZ 90 593.933 null] >> endobj 1104 0 obj << /D [1148 0 R /XYZ 403.123 560.841 null] >> endobj 1154 0 obj << /D [1148 0 R /XYZ 90 544.974 null] >> endobj 1105 0 obj << /D [1148 0 R /XYZ 179.035 487.971 null] >> endobj 1158 0 obj << /D [1148 0 R /XYZ 90 472.104 null] >> endobj 1106 0 obj << /D [1148 0 R /XYZ 90 374.214 null] >> endobj 1159 0 obj << /D [1148 0 R /XYZ 90 360.504 null] >> endobj 1107 0 obj << /D [1148 0 R /XYZ 337.828 304.195 null] >> endobj 1160 0 obj << /D [1148 0 R /XYZ 90 288.328 null] >> endobj 1108 0 obj << /D [1148 0 R /XYZ 230.89 196.077 null] >> endobj 1162 0 obj << /D [1148 0 R /XYZ 90 182.267 null] >> endobj 1020 0 obj << /D [1148 0 R /XYZ 90 162.72 null] >> endobj 54 0 obj << /D [1148 0 R /XYZ 90 149.009 null] >> endobj 1147 0 obj << /Font << /F31 604 0 R /F11 1069 0 R /F7 1132 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R /F42 818 0 R /F13 1157 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1166 0 obj << /Length 2333 /Filter /FlateDecode >> stream xÚ½Z]oã6}÷¯ð£ T,?DJÊÛt’éN;í`ï‹Ì`¡Øt"Œ#{%¹©±èßK‘´¨/ÊØ‡"L‹G<ä¹—÷^J&K d™âeÌc”2¾Ü¼.ðò®þ¸ ¦7„îÐéÿa½øþƒ»P*Ør½knqJ–ëícÀ]…c|Á˜ÖÕ·Á<¯BÊqðP—§M­Û÷r'ËIYlV$p5å$’Õ×õO‹»õef~œ ÅÿŸÅãW¼ÜÂ<Z`ÄÒdùmŒHš._e¦½_<,þ~C_gp}l‰œ°ù5R†°àÍo³:Ó‹øËý¶›1Æ(šÖÓö6L”¶L ±ÄܯȾPÊûà ”{X,ÂGE"”âØ¡Ê‹zÀDA’¸Lêrùlúï]Nƒõqv†SœÚ?V„çâ0`ça{Ö)4¸xϤà"‰Q¥^É-fNtg¬iÙ½„Fx—Ð#}‡o^|/soÈžòí`QŠì_3×YÄŠ`»zM`0³&hÇò˜ÀGhMàúLàò]asoHÅ\ÕY}ª†Î‘ Ô»X¡!Z{:­½ Бðko0³Ú·cy´÷ZíÂÍKVYý¬K8-¾Aû©{CöüÿM5åpˆaÎüK7?¬ú¢ÿ#¡_GˆˆÄÓé”ìôO›Ô`fMêájMê#´&u}ÛÉå»b;ù˜{C*æú|”Ã@ÆŽ™w©\Cf7ãH€y•7˜YåÛ±<Êû­ò¡Oy—ï å}̽!ó1Ûnóây¸p“¥}«ñu‰œR$Rêß`fÅoDz\ýÏcø&`áLàTä‡B‹ÿUiÐ*bXçôNa1J`%£˜Å³¡¯‡z$òulh‡{² ï’öeà(Nˆ™ýlH¦JDª*„¤¹mÜ4ÈbŒ "ÛÁ ¶¥3Xzò¤jÏL+)T¦ðNË€Üi}+Où¦ZÌu"$ÀbÆ+,ê:¯pÐS^áÒî'¼¢CÚ_£†ø©"†HÔ¡zLšÄ÷'ˆÆ¤³'¶‡ÓÓ~Å9”B1LJ¢$&s tèÀ‡óê ©ÈwCÞÅ©èò ­1~6kh8·¤D\³Tƒ¼v©-|z©ùfÈ›@ #]ÞÁR5ÆÏ5ƒ è²=Rcq&§¬cñÑ0‚z ÎJáTÌÚÛ C>â‡Ý!›ú{È› {µÃ;pzñ³AŸò—í1¾¨ÀábÔQáÏa榈Äà1 êK<r5:tà#NزWÿ¾¢<Èö'9¶ T­©ô$R §Ò8‡L‰SÿyÜbæÒ¸3ÖtÚöš´ízj¨ß| åeî Ù {YLU¯¾¥vª×éŠcqØ ·˜YåÛ±<Êû­ò¡ï(Ø!œ? z©{C6Ô‡×W9bx8µ ÊüË5?'d¢’ Ãù˜DM4è>p  lUs¬áÚæÙê­¬³|/·º°¼•զ̵ª4‡'É"žÀsï”o8ÈÁÜ·hî¾lË/˜cø'cqK¹j‡½/šÁx‰ å€öRÖ§²¨V!Ã,È õYYfg}é°JÃVƒÂ;ӷϦ¬ËÉ0Sƒ­š‡ÖÕw04‰™m^.$ÍçÛK®/Eà@ØÅN¬~‘ºQÊê´¯5ÄÞuÌÊJ•ôÅB?Wí×ò"³­,M‰哈âN®pbv)7‡r‹Ôqðn¿×~ñ*_ŸdYé/ŠX}Ö/ ×@Ÿ¦4áäj°ˆ;éѳRê†6‘õЧsß?x6càð)fŸnZtèÀžÒò*?e"jb^g=?µ?{o Åþ^}q(dOžç\eÙß•ñdqÑÈÈ`NXŸóÄ›)õ„}ùÒ¼˜0Ñá°9©°–Ùø‹Rù™™I6·]"‹J|Ím¸¹1 ýŒ¾»r¬ÂD?ó  „Ö˜ÈUÁæ1þro]cèVJhzqA°,4 ~VZ¹Ž®/'åÞªjV°”{Xh+®%…•éÛ´¾Ð0C5YUI3lVYüñT›[o&XÂPÕ>ƒRx6!YpØ¢‡îÓð*ßà8ž‚ñÝIô\×B|Ô½aµŠ$)Ö/y¥xË› ­'£^Ñäyµb­¥Év¦°¥†Õ‰V·{àªÃUVo^lÄ€¨®úKu”›Ì«±€¼èm—΋Œêñ«…m›kŒì"l¶OäìzÝ>È·õ>€©|´k±K¿ìj &[Vfæ°çËsW,«‘èhô–CRÐ-˦t½ì¾‹µ*âä¾2ðŒÅ«#¨Gôf3z·ïFþB±Áƒ&†v¬æÄ²g}ý)¯CZ6õ¡Ô×v¶¡S>ÜarwsqD@uY¾÷ÕuÖu€{ûœý°‡nˆco¦;VÔ÷šUß*ÝÜJ%X“hÕ׬Ò;ÐêílÀc)åa#«JÍV›pSª›‘š‘âòÃôÛ§òa1s§×åá%4§—PUQ»½ÿ÷ÏwÿúMiüùþöÆl"d$hƒ×~&*UgH:zôD"ê¥èô{‚¶{R"™SÈCtÈÇfôqØyþ¹"Œï>ýãîjÚ's `L§áôOkd0³"y¸Z•|„V&‡Ðêôþó/¿Üýº^Áj/*H{ŸJö49§Q#.ÒiÚþi fV#W«‘Ðjä:¾t÷¾u¢V¥ÔD.±é=›ÃKVŒMR†h™}÷ëí0ˆSÖü Œúi®.áô܄տ›Nªõ¨u¨z åñà¶Ú:3kWk¡µŽCh­³¾÷ñÓݽ1O§¢ó´"íºi§)Åô‡Ùõ¶òq Dq‚0If D§ „tÖ¢S§\XOôkªµ­ClJõÔ$yåì6õ«²:ßdû½)‚`³!ó=›™ÓW^W½3Z%G]‚§ˆóQ+aX.üÿÿ™šù­ŠIêþM 4ŽÌCî”ùQ²4Å·:à›o½Ji`cóg»ÞHôÓ†õ7Љ)-wʸ¶.øíýÃ'ïãæV”¨²Ø=£Þþ8?ŸSªÒ åù(´èO endstream endobj 1165 0 obj << /Type /Page /Contents 1166 0 R /Resources 1164 0 R /MediaBox [0 0 595.276 841.89] /Parent 1195 0 R /Annots [ 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1189 0 R ] >> endobj 1169 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 1170 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 1171 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 1172 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 1173 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 1174 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 1175 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 1176 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 1177 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 1178 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 1179 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 1180 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 1181 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 1182 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 1183 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 1184 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 1185 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 1186 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 1189 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 1167 0 obj << /D [1165 0 R /XYZ 90 757.935 null] >> endobj 1168 0 obj << /D [1165 0 R /XYZ 90 716.221 null] >> endobj 58 0 obj << /D [1165 0 R /XYZ 90 484.978 null] >> endobj 62 0 obj << /D [1165 0 R /XYZ 90 415.921 null] >> endobj 1187 0 obj << /D [1165 0 R /XYZ 90 393.61 null] >> endobj 1188 0 obj << /D [1165 0 R /XYZ 90 393.61 null] >> endobj 1190 0 obj << /D [1165 0 R /XYZ 319.906 346.525 null] >> endobj 1191 0 obj << /D [1165 0 R /XYZ 90 329.798 null] >> endobj 1192 0 obj << /D [1165 0 R /XYZ 452.955 296.706 null] >> endobj 1193 0 obj << /D [1165 0 R /XYZ 90 279.979 null] >> endobj 1194 0 obj << /D [1165 0 R /XYZ 340.448 100.057 null] >> endobj 1164 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1211 0 obj << /Length 2013 /Filter /FlateDecode >> stream xÚ½Ymã¶þî_a(NzÙ¶šk.¸4HÑ»mòá²(´6m «•\I¾½òã;C%ùEò"r‹ƒiÎ3ópf8‹9‡?1Où<Ö1K•ž¯g|¾…Ùïf‚¨K /ôong_¿S°Š¥‘šßnìòH0-Åüvý)ÐL.–‚sü¹l›‡…ày^,¥æÁǶ>¬Z7þ`6¦^ˆ$0åj!³©q.în¿Ÿ}{Ûi@úi¡üÿÍ>Ýñùôü~Æ™J“ùŒ9i:œ…RѸ˜}œý»ÛÃÍ+˜¿d¢êºR1io#ü…dçj—ÕΤ#‹onhð„U½F»¾~'e¿- +bÉÐîú ×Üñ„Å”H€9>˜öP—æÂN*bq*ˆ 6 Pÿ\H ÈŠ(èµ°„2{4oñ0(E±DÍ‹ÂuS¡A‰œ ¡ûõc©àÈ6nX˜¦qìí.+ݜɷ»ÖM"<Ùª55­D3Û:Ë‹¼Ü:Žû"+ˆZ›=ì\d+gå|Âqò€,Õþ{ò&Ô¼Ac™eõh:¦ÿ4æÔ‘͸Hç,òÈÙÏ<‚X—^ë!8Kc„\È„IwÛ¡Ðf_çe»A×M Gà_ý‰%ÍWôåüP´GtvŠKå¶\ʘIÛ-ÛÊ»ªöxdzNAä©1y¬i¶®3\¦ÁSÞîzÔ–Àò˜—Y›Wå7 G~.¦LDâEp xÇàò,p%¿^֩ȯ±ò¾Ùã…éǺ'Lmª¢¨0lžl4àNÏ—cN¡ažT’A6鳄¦,†^LíóÞüÑ™´ð™"û3³â`eµäM¨ÚÍ…l¦Kb5z[ èÖ †ê±P%ÝV+)õ©ˆy–BTMÉò<ÓEÈR ä7‹¥ü$¤¹ vÉð8f<•ã†÷ôqÉçªá²zçzÃþCµÍWYA¡9·6)[ïñYã’øìEà¦Tb…Ž<‚c¹ŠÁ¸ ‚ i^š$”\ÞûÚäÛÒ[[?ØB Õ:¸h½‚ZD¦ãæ÷ôqû‰ç*²z¦za…×1 Œ¥9ܦ®FÄh(Cvwï)D»â0‡¨§CDñ\…kBV×”@×@`BpÁ#Àºh¢€Ò9¿™ôq‰çª‰²z§z“ׂ ]öœ’3É®„åê¼Ê…­ÏQNo«¼êॱ°õ~´6ͪÎÁ›î»BßßkäYew!ž‚€: (&@@B½%Ž8<÷$§[’­ðTØ­kÔ×?ŽôМÉXN†ç™–®%‹#y$½¬ZºÏdÿÈ^ÊÈq)îÞ\Ç·» J—ìP@·9ù¿G´ï;ÊË5Ÿ­iˆ°ƒ3ÈZ÷%sÍsÙf_ÜØÔµkG¨Àö 2ZgÊUu€ë2Rw¦¤]ÚÖ<î)¥ ˆÊ}î3xå ¯ɺTü;Jµñš®ÁÐw!`³6_ ßüA.˽­¡¶¦4U•”åNVë aè·j.½¼$¦ƒ‰Âj@ pÏs-À§du>)|(ð5'Uää|¢„{±dåÖŒ*.4‹¢d²aÑÐ3Ÿu,bx¿ÃÓÙ³ø—ø2•R©Xr%^W:á‰kVüõoBš‚ç¿„OBu©÷G⯿Z ã*…d!5QÌënE|¼Õpwøú\¥x¤e"8gØ Åø cáã?(OÂçü)Sgg]0ãèL8¸§‰µÁ¬e¿~Î3·x¯Ìješ£Ù-]Õ•þüöãï¿ùïûoѲ³mbLÁvúiµ¼ŠÍª*‘}Ëvø¤Ua`\KÅC—.”^a˜àK®†WÂWó0D_ý‡1¸Xnðà)·#%¬iø‰V¯ $x¾Z`Ð:N›^P„=™Wnr‰‰Tx¿qt´è µ²I?ȶnacÚ7ll]vÓÝùÛaÓ'Œ3Í-/Cí'uçwhZ“­ûkî$’d’²> endobj 1215 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 1216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.842 153.669 358.162 164.573] /Subtype /Link /A << /S /GoTo /D (structfitskey_a914a7430a2746de8ceb641321842784) >> >> endobj 1212 0 obj << /D [1210 0 R /XYZ 90 757.935 null] >> endobj 1213 0 obj << /D [1210 0 R /XYZ 90 733.028 null] >> endobj 1196 0 obj << /D [1210 0 R /XYZ 335.237 571.934 null] >> endobj 1214 0 obj << /D [1210 0 R /XYZ 90 555.272 null] >> endobj 1209 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1219 0 obj << /Length 2219 /Filter /FlateDecode >> stream xÚÅZ[oãÆ~÷¯ ºádîCºÈC“vƒA‹îíƒãY¢$feÒ%©MŒ"ÿ½gxf¤áE”l·î^SÃ3g¾9s¾s!Åf~Ø,¥3£ I…š-®èl£ß_1w7†ÛqpÿÛ›«¯ß ˜ER-f7ëvºfDq6»YÝFŠðyÌ(¥ÑÏ”ò¦þ4g4Êžæ1W4úØTûeƒ×²uVÍYeÅr΢ FSÊLÄèüîæÇ«¿Ü 8€Jh à_W·wt¶ ?^Q"Òdö+\SÂÒtöp%¹p×»«W?èÀqãc{”TjÔ,’$&ˆ2 ;ç j8ÌÑG›H@IRcMÂŒuræE¬]òõ<Ö­Uý”=}^ìöùtËï`€á­Ûƒa•–`v"áùXåE³¶ó¾ørõ%MÛß/¾Â9Unlq_÷Vaí*_µúálˆµF»bN íûûÇvnLàúWËvuv¿Ç?‚Æ>€20Ðïvüë÷œ2Öœ0 p¹")­Ø¯Û¬ÊÐ÷Ð)çLEOŸç\E‡¥ðö¢XGõ€Q¢Z§t]•x§þ~nJüûî0NF|\s€ÏN“0¸ß:\¸_F5‘"9è°ûý™sÕ_Æ{ïÔZŸ\I0¬é,ø9c@äª%{íÊ̵Áà­7YUÃQsM£ý£½eœu’ÈPü¼Ê–ùÃb‡ƒ«|“7µ×»¬Ø4[§egjl)WÙª+:zÐNõ©µ‡Z¸ËªZ8ôå5ðÛ䩇ÀIn7[,·x®(KÁÃr?T7e•Õxí¼Àî –r[£nkOà:!\Î4ƒh¢ñ€ìpµq÷?Gådã£ðà ºêZ¿ârk™ëë13õq ¡€x¦¬ç9^d  ¡Ê„€òºK“{G¨eùð¸o2ÇE8®άRI”¼0lÂÃ°Í OÙAKÑS¿‡ µ»5Æ1¾B ¤–„tƒêA`<ŽÚ$‰ÿ0ô½Ãð–0¡Âø¬£ëFŒ`¸Œ]F]ºŒê/£Æ—ùoïF¾ÍnÄÿd™ÁnøÛ솽Ín S”¢”Š“)*¸2Ey™s)jj­#›§t)*\ð»²hòb߯&!JCm²±á‡ —I`´(¼¨²eYÔmÍš­l¾á,j¶'qN•=,Ú\c•=îr7±´"ŸíPââÍýr™Õun£+ÞÀ¢%¬¤!öÉì&ûaúiXá@Þ5eP1Ö¸”ÇÓl]Y ×A€¯oïðøg„1ÓÉi>j[kö•M­±`àþipT‰&‚ÏdJÛ“ÎUN8¤‡GÖUx4ÃvU¹¨Ëù’%`µ´‹¢ç/^frñ¾"»ú0;sIDµÓùÙIO¯ÛSùŠm=HK5m '3 R —¢ƒiµhè ÍÓcÖ–_"JpäcŒí¸uÂU¾\Øš/ªÝ¤m†5‚YÑà¬bÿp<‘4r“ §<›“!tÇSQ][%´”^4yY!©bŽQz<è”ïQáG»>5/\GÚaÜõõãbµ‚è0¤ž- Ñ\*„?¨a_ìk_¯à!Uùâ~çæEUXÏÈ4Z—•+lvù¦pÖ€û걬}íX»§¹Vñ®ßݵ4†vWû2gö•_²#”‘aáNš¸xóÁÆš„&&=†0ÛÚ ££ŸÊMn»|[ûÚÏ~‰N41’hHDÂPhÂå¹pâ¤ã@|Oz*OPËúóè‚h“vÑô©äd&1pn ßf ß|ƒf`ÞB {N;&x|oóˆ¬Á327tPxs̆BK"áÔ.³¡—žÄßWù J&ˆTɤ ½Ì$ ÞÉG-ÈÄød-–m2l‡¶ÙH=#TÝkzÆL¶² $èE¯ˆÝLÈ}¦‹©_÷8™I8L¥$ª†˜öʼnè¨QvE’cÑr4Ž|zã8b!h‰äh[lG ­9ë6ÑRH#ªGvAæ¶²ñAx4oÕ='´-0qô‹“˜ZÝ@¯-y°º¥„ݺ8šË¥lÛ[[ÎTndÈ¡•ì"yÙ ˆ]u¯ †ŒPžLÌKL ‘BÅ’ÍIR‰¢ÈаfHÏäÖÝiNÈ3œ0—q‚8ÑyìFíc·ÍsHÁ(1RÏ8D žœ¥…“Žñ‘Bº«ò9Ô€)Fó.š>9œÌ4 Ç¥xƒ'ˆ|9Am;´ËŒå¥'öU¾†&àgŠõ)ãy™IL’SÂyÒÁtš,…‡daÔ±eUîEp0ë—æÅIäý®„nÁ³ä± È> endobj 1221 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 1222 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 1223 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 1226 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 1227 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 1228 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 1230 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 1231 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 1233 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 1234 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 1236 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 1237 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 1239 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 1240 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 1242 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 1243 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 1220 0 obj << /D [1218 0 R /XYZ 90 757.935 null] >> endobj 1197 0 obj << /D [1218 0 R /XYZ 90 470.413 null] >> endobj 1224 0 obj << /D [1218 0 R /XYZ 90 455.843 null] >> endobj 1198 0 obj << /D [1218 0 R /XYZ 327.378 420.693 null] >> endobj 1225 0 obj << /D [1218 0 R /XYZ 90 403.966 null] >> endobj 1200 0 obj << /D [1218 0 R /XYZ 188.091 358.919 null] >> endobj 1229 0 obj << /D [1218 0 R /XYZ 90 342.192 null] >> endobj 1201 0 obj << /D [1218 0 R /XYZ 461.792 309.1 null] >> endobj 1232 0 obj << /D [1218 0 R /XYZ 90 292.373 null] >> endobj 1202 0 obj << /D [1218 0 R /XYZ 448.502 259.281 null] >> endobj 1235 0 obj << /D [1218 0 R /XYZ 90 242.554 null] >> endobj 1203 0 obj << /D [1218 0 R /XYZ 435.67 209.462 null] >> endobj 1238 0 obj << /D [1218 0 R /XYZ 90 192.735 null] >> endobj 1204 0 obj << /D [1218 0 R /XYZ 118.274 147.688 null] >> endobj 1241 0 obj << /D [1218 0 R /XYZ 90 133.018 null] >> endobj 1205 0 obj << /D [1218 0 R /XYZ 468.307 97.869 null] >> endobj 1217 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1246 0 obj << /Length 2237 /Filter /FlateDecode >> stream xÚ½ZYoÛH~÷¯°¡«ÓOïì$“9vf‚I ž<ÐTËâ†"’ŠãýõSÕų5° ?°Ù]¬ªþê誖يÂ[%tID°ÊŽWtu³ß]1³ºåMoý›íÕË7¾"I(VÛ½úå»õ†Ô{ßÖ§¬Õãwr/ë5‹=¹f^™I˜Y,<ÆÖ¶?^}»í”0*"D>]Ý~ «¨úã%"‰W0¦„%ÉêxåsaÆÅÕû«_;z^ÀüÜ.&.o“ BÃÀl“ó{=•yUê] ¶}scŸñ‘Â>‹“Äݽ|Ãù™9@Ì"r_ñþTÓø=A‹)ÞÉöT—r7å$B%Ì#¦•ú§~ôÔ̪ãC7ÒØ¥ÚÏ`Æœ„Ѳ[ôÖ^}E ‰/⎇҇ó`,†Qø„.Y>Ib#µ„õ½Yy×Sˆ1 £Ñ­ Ñ@«žÁÖ,ðÀhùDK?QÞçBÄÒ¸1B®ç }X—¡?¯/Coh.B¿,ë¹Ð»´²Ð÷µšBÿq¢eÀHäÇND,[£Eèý€y–¡?¯/Coh.B¿,ë¹Ð»´²Ð÷µšB_,z½‘³×»1Z„žÇ°îH8çõeè ÍEè—e=z—Vú¾VSè÷S¯§„ƾKãV`ÄhzFaÝ‘pÎëËК‹Ð/Ëz.ô.­,ô}­¦Ðgs ‡%N@ ‰[üÍîAœØK¸÷Öq·4—pwÈz&îN­ Ñ@«)î͜ˇPñ¸±4nFŒ:èÁ`æsÎId*¹SWÝ=ég{0%Z¿þó#G]]Õ+ñfj0ˆ¸ÐÒ6½‚·­líU¶i^ž¥©Áç5¼ëCõš6P-6U–§­Uð1ofQ?z€>â°ªwdªú&²¬&<êׯ¾©_ó²­^O…,—ËÕàR®†Ôûí k©‡j§I§P¹¥Ò7ì lÄPæ¶fàÏË{=Vˆ‡â ,¦å.­wzz_ÕÇkrO’{²ÞŸz·Ç—Í3«¿J…бu9ÞA£Üˇƃ&'$ 4:y¹Ë30a£ñÕŠÁXÜ·‡k3[fÅ í£|ÆmÊ®.WÏæÓ)­ÍÜ]f¶A5aôt«¡œ7u¾V9qÿ•u5ãtÎ)ãÙ!­g½BY{¶öÿÝÊø÷/„hà ¢z9‘ˆ½³‡}Úô‚ÞfGð¢M ƒ™HÒ U½70"ÀE&äµÌ€¸ÑóµüÌ:Qw2K•YÝdͺIó~üE£-뺪›ëQzÀ†M¶røÀ^«Ð9˜,öã|QžŠbÓÊú˜—i = r…Q¿Ò¨áNâÐÓÞGÃOÕÎ`Õp†Q[§y¡C ˆ›‡4“†C-j¨ÝÓÆçÔûI¦;CÈ;iÑT³ôò¾®Žz¹¦ÛÏÒ¬Û Ly¢ö?€j…±‚ 9PíÐ?Š'=±¯Š¢B'{Tzâ”2^LCˆSJâÎO_NýŽ{¼Ð\0°Rp“½ú#Ø÷îÖΩÕeej³‘ŒDÄ¡aúêíÏ?ûËv*8ˆ¡ªê>Œð$1ßÿð~‹—1oß­Eàý{Ên#à b6y60oÕG¬£mÕŽ{Úè 4ɳêÒP@¡¾ñgŒÀ8¡T˜­ü}ª|LXhwªXþ6¶ŠÓ±4ª%›˜¢aÎéÒîw…Än„À$–|ý•ÞwÍ%Oîák¾½L×ËI5ýÔhéÓ¥ãù/êpÙi¬Z ÁÚ<ü·)ŸÚe‹ÙòÊaW“Ã6ÿ˜)?„ü`pÔ¼N[cò7¹,vÍLeÌ£˜ð`¹#é­/VÆ–æReì’eiÜMÑÛ¨Îϱ@á“ÀCËõ¶¡v‹±DÑez”Óú:$ >tîÕиÐJ2>xËø‡9†!‹/š°[^¶ &¹hÀeAgû9¤Yó¥åººãPH³x lÙv†Ø)vÈPŸZ§ÁØÄ¾k—¡¦P¹9v ø„Ç ¹¡¹ˆù™—t—@‹zO  ö¾¼?»Kòˆ¥’¼û2½ƒ~ñÂF5‰[š/ Õ»Õá2Ê”¢–ä0eN—×ZÂ6ƒ¯e“ÕùVs3LjQzÉGÑ#z”Å{ŒÎ}/ê ÆŠ|b)8†¡¢Hfhœ‚ƒ<éШã Ít8#Îuèù\sÅ㛞µêKô¸ÞÚìU)­'tgƒæAf9ŠWvâ³=ºêÚÀ [UÛs:P ëhU«€1I!žû5W{¨¥êDcè?±ùT½B$lƒ«í×M«_T ÏÇCž&WP"!fq~Ì/8Œ¥ÞôÈ'Ƴœ½Êw77s§•ÈúŒ\ÈÒ¸µ1Ò·@ §ãÉbsgk¤xÒÏJð:´l˜`É ëA¿tëУ¤èµ}5í¬å6š‘OÂäO…æ™r64ÍòóB³/}14‚ÇŒPúÜ¥“0¼FÉŒ›d¦Ê>“ɪì„ZjsÙ¨VŸuYpáV¢ïO_w#a›´ïòÏs—^\L®#„ Þ/(6›¨8ÃÝ, L!ŸNy¾€oÃ<Àô]Ý&0 à- Òäxåg¸Túyg˜)E1è¡1è¡…a„sú²§_5̼Ð"TÇ kØtêåcú4 ïAQ¾2×YÇŒÆ&÷„jãy±ËÒz§:uõ´Åvñ| €÷SEZ~T"4EafMOWˇºþÝÜECfoÈIq<ã°Ø«°0øúÿ 0¿bÃÁ‘ôôIù&ÈŒtå²”õù6Öþ’¾]'ܳë[Û陓%7”ߪß8eæù=öv¶¯ýíÕûŸÀ8?|c>%1†IÿJúuõåé^Nzü¯…)<„öÈd endstream endobj 1245 0 obj << /Type /Page /Contents 1246 0 R /Resources 1244 0 R /MediaBox [0 0 595.276 841.89] /Parent 1195 0 R /Annots [ 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R ] >> endobj 1249 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 1250 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 1251 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 1252 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 1253 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 1254 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 1258 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 1259 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 1260 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 1261 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 1262 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 1263 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 1247 0 obj << /D [1245 0 R /XYZ 90 757.935 null] >> endobj 1248 0 obj << /D [1245 0 R /XYZ 90 733.028 null] >> endobj 1206 0 obj << /D [1245 0 R /XYZ 383.755 569.926 null] >> endobj 1255 0 obj << /D [1245 0 R /XYZ 90 554.066 null] >> endobj 1207 0 obj << /D [1245 0 R /XYZ 380.666 509.019 null] >> endobj 1256 0 obj << /D [1245 0 R /XYZ 90 493.16 null] >> endobj 1021 0 obj << /D [1245 0 R /XYZ 393.828 406.578 null] >> endobj 66 0 obj << /D [1245 0 R /XYZ 90 390.719 null] >> endobj 1257 0 obj << /D [1245 0 R /XYZ 90 293.114 null] >> endobj 70 0 obj << /D [1245 0 R /XYZ 90 238.982 null] >> endobj 74 0 obj << /D [1245 0 R /XYZ 90 159.211 null] >> endobj 1264 0 obj << /D [1245 0 R /XYZ 90 136.526 null] >> endobj 1265 0 obj << /D [1245 0 R /XYZ 90 136.526 null] >> endobj 1266 0 obj << /D [1245 0 R /XYZ 317.195 89.441 null] >> endobj 1244 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1270 0 obj << /Length 2262 /Filter /FlateDecode >> stream xÚ½Z]oã¸}÷¯0Ðsù)‰ƒ¢Ûé,f±Ø¢3ú0;X(¶’µ­¬$O’ß˯ˆ’ìK·A‹<„¢®Î¹<——¤¬Ë–þØRÓe®r¢…Zn º¼‡ÞŸÌßÝÀíMtÿÇ›ÅGÓ-Xo"s;åbß§nƒ~ÖÏ™…"ŒG~L&{°ÁÙ‹œ±w6{;§AëD‡ÔݹŽÛ™3"ãPüJQ‚5êÖråaך™bƒ<õC+BCE 68ûȰ˜&š¯~mz?Oú‡²­ª«Ü$+[—nÚj_öõš«ÕwÂÊx üÔó3F´rIägœIœÚÍØw>«›~– mµ…ô Ya1‰ßÙt}M(û ÖØ™mgÒÜݨ;÷ß/¶ë8yø¨ªrg™Q¿‰JÛõá©Åv—Oõ~ïZ·Þº«¼¥ÉÅŽá JãÇQ÷ÖM9¦l¶ÛSÛVÇmõîUƒAÚðÛ§ºó ]íõtޙ֭¿c³‹bãþo`¼l,«|••K±:œö}ý¸· ,\6¾Û-ªRÎÕ@8¸g§‰±¶Š¿s¯OvFêmsôÆ‘æï;´n=ˆóÝp7ÂÌ‚¾ Jp׊jû²ó(ÿ{Eí¾0í> $aEñŸŸ(¶ÕÙm…K"¤¶p¿ÔǪ ^[;Øþ`g¬›£ë{,Ûò`ïCÁD/mRªÛýiçYY´;*[PØ©þ<ÇÉI¹Û00ò0‡à–âñ—3°fDÂÁ%Þ€?”}éò±®ö»îÌ™J‚k²È/žö¢û³•Ñ (‹W »s®¦4p.€½F¡\Á'd’hškw¶ñq8ñbÌwqË Ö8óÒo9¢¼Ÿ‘KNŠŒ¡ƒUΨa–³ËÚÙʟw/kïm’ÚXˆöaÐ>"Ä´ù®Ðcž@æcù\wsé ¢eŽU9“¤ôÀ© …Kïm’ÒXˆôa>"Ü5§Û}Xiäh™ÈhñzØ¥bæ•‚¥µÈÇ^]·Æý›@êmûX?ϸsNd† RX ~9< H&o“ Ï€…„# á‰ßžØ«+ƒù74ÔÛ1¼· ÍQ9rg’LÊHVp<:Þ& ‰F¢¾=:±WWDóoi“gWíç+«Q_IT‘™¤ÒGÉñìñ&©ð H—£ƒ±ùàDloŽMìR:4˜sc@›6õs}˜où%œ3L í,R™#rEò\ã‘ñ6ÉÐ XHl0œˆðíщ½º"<˜H{"9ÜŸÛwB€IFBR'ƒ³ÇÏÃÁ&¡ ‰F""g²_úL†2O óéX÷/çÎd°b¡cUÎ$™^rü8l’ÒXˆôa>"Ĥù®cž@Úu©Üíêã|aÊ(¡,GG›;“伈"qñ½MRü # âG„îwÉ¥Ðð* Ç”—õ÷Ö8ùÒ?m»ªmçòg„¯·™QÆ«+Ë ¢r5øÜ"›˜Ì¯­·ÆG;4Ôç†Zä„Q<´Ú™$Óœ ¢S§o“œi2Ó0Â0Ó"B,Íc¾+Òcž@ZæßÏ¿÷ªŒdZ££ÍœIR|ÆåøÑ=Ø$Űñ1 ~Dˆ‰ó]!>Æ<4̇ß/üà£QZ¢ÃÍœIj‘åº ?[x“”öÒeé16¯|Ć“¥uÇhÇ€NõóS>3/A gî,R3Þ|c ?r›¤ê";Ft1ác¾+”ǘ'NûK犜Û¬±ñÎ$9åŠe‰9ïm’òXˆüa?"|óÏÈ«ôêßÒéüOm&4Z šhg’Ì¥ gø¹;Ø$C4`!!ÂCˆ"·‡(öêŠaþM }ÍnË%apPÂ)œI2…dFx†̓M2>Œ0Ä'"|{|b¯®ˆæßÒ§ÐÙÜ@:eŸêïL’)$L© ~¦ 6É XHˆ0¢ˆðûšÓUSïÎ ÞáÔŽIr"à fä×å ykÜà dôŠË牤‰Ì$.‹·™‘Nª»8e°Ÿ½~i&ÌkþPõe½¯|aŇªÛ¶õ£ýJœø¾lJ°f_jYAd1|ì5_±ç5K FþÕv#À•ms_Ž»*íwu­]õU[ÂV[EŸ²MG[ýqª[3k׸ÿUkìHéúöþ£¸µ}'ëÌèêÓàKWw}çŠW%-ÆåÆ+˜XÛª5N» û=ÝÖ¥¸kW*cïœ:ßr!ÚW„˜Ž—`\¹Æ©³Å&œ^( 㔈¸ð¾þ^‰gðV­G…a°´e.&L5Cç<¼´å¦1vÎÚø;ÿüë—_>ýèÚmsêAP/ç–{=R)]ÛÖ®E¾º\ß&2®o#g¾óÃ6£ÔÙ5Ì”!°Lý÷U•v…Ë ’GGKSï¢Ò'–g7þT«¶ìC2…J‹›µæ«“¯ù{(æîÓï)/¨»‚,õŽw¦€*,ÑajÝí£¤0µ™¶èÄ×O}hž_îÝDˆÕ1uŸsyþ -Hp‚ endstream endobj 1269 0 obj << /Type /Page /Contents 1270 0 R /Resources 1268 0 R /MediaBox [0 0 595.276 841.89] /Parent 1195 0 R /Annots [ 1274 0 R 1275 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R ] >> endobj 1274 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 1275 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 1277 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 1278 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 1279 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 1280 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 1281 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 1282 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 1283 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 1284 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 1285 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 1286 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 1287 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 1288 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 1289 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 1290 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 1291 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 1292 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 1293 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 1294 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 1295 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 1271 0 obj << /D [1269 0 R /XYZ 90 757.935 null] >> endobj 1272 0 obj << /D [1269 0 R /XYZ 90 733.028 null] >> endobj 1267 0 obj << /D [1269 0 R /XYZ 327.348 705.441 null] >> endobj 1273 0 obj << /D [1269 0 R /XYZ 90 688.714 null] >> endobj 1022 0 obj << /D [1269 0 R /XYZ 209.909 584.508 null] >> endobj 78 0 obj << /D [1269 0 R /XYZ 90 569.838 null] >> endobj 1276 0 obj << /D [1269 0 R /XYZ 90 469.308 null] >> endobj 82 0 obj << /D [1269 0 R /XYZ 90 216.586 null] >> endobj 1268 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F11 1069 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1316 0 obj << /Length 2205 /Filter /FlateDecode >> stream xÚµYYÛ8~ï_áGyqxˆ:z°;¹Á éM Ì,2A Ë´[»¶Ô‘¥>f0ÿ}‹dQ¦,ÙîÙ `Å*²Î¯ÔlFá›et–È„dBΊÝm`õíÃݶCoÿ‡ÅÕwoœ"Y,f‹µ93"9›-VŸI¢yÈ(¥Á¶¬îšÝ<ä’ŸÚ¦+Z;þ¨Öª™³4PÕœ…‚Õ4hÀÄüËâǫ׋^6ÞLŠXKþvõù ­à†?^Q"²töcJX–ÍvW8Þ^}ºú{Ïî XŸzœdâòë¸ 4–îu„ãûÞ”j»²OzUÝNUmÞ–u¥_ÜCe‡c„áÁ²BMX ]_ÿJ©È7úÜwo8?&,!1 “_©¤oË9—ÁýœI­½'qWúI4ªí­RµRf·åÞÒ¡3ÞuûÖî/•]Ù«ÖÚÚnü¦šÚ®<ܪJÄ6N¬ž=Yâz‡o‘ݺÞnk}桬œLµ[ªf?>`žíë\d‚Ä1¼^¿½h¤›©BÆH&­uöž—å²û2ÔýÝÕ«”ÁÕêzÂáâHÊ¢“¡àígñïÄhL"‘ö<ŒÕ8—Çb…#\ž“‘,å02[z¡ÙàÎGïBŒM.Ü ‰ü[9Ï«òGðãëÅ)¡Q|VŽæ¼ä„Bð%k/þFîç± È kªnÝ ÙåÛíÓ‘á–¸`½ Ý^{y£½üÅ” 9˜!9ͼýÓ&Dš‹&<-ëÏšðÜ­œ ½[9Þ£»I âgÕ€$ç…Ùh™“Ú¦çk‡·ZÛHsQÛ§eýYmŸ»•Ó¶w+§íb¥¶í8`b"RqVŽæ¼ä#FZ21õ$Lð8TGôŽÍíB$Á¾ÜTùÖLR&zµ¬Ê¶Ì·åo¶,™µ¦îÚ²R#CrÑ8‰g2$…¢x^Ž:ôÈG9f‰j„°Ö9À”¨ãK$@ •zp‰#=:šó¢Yß …ÌL}ÓZjTQïîºuÕ+ÍVQµ²T}ÑÒ[ºh9ÚQÑb)#IÂ/T-ÁIB‘-Wd"¦dÂH*“ VÐÑåQŽ´à1º¬{ÆRÂi Dû0Òœ•Ê8% ‹¢ÊíÖ¦îFõi½$:µ×ö·¬Ve‘·Ê%ü}ë&ÉÀè6ÇÁR£U])26J(ì]|uóÓë¿}z­Ag¼ÿ0à¹x}=¶Tb—bÑ«™ýmÝÜ—Q‹žôšyS†ï€…Ù¹ÆN#/OB(K  P\ 5¤=ò±¿±DsÿSæL&³á%ŽÌíhΊ, 0m ¯/ÀzPÏjkmhÇò̸o Õ«åNæv~—7mYtÛ¼™ˆ»LË’ÿ-r~gëfe. )ÍfQeçpI²yÂi^å¥Á?ì@YðY"Ɔч÷?Íøÿ°Ó%2êöF1Z*J·zÁA/Þ@¬ËäæP7å^¹~Ã{¤-{AÝd¨ü_/»ü©ÂnÛN ÕV'º^ÛÂOµ-=xœîZäÉ®Åã.ÝbÇ+ï;r‘J· QÜ•æ0&ÛòÀàô ¬\VÔ`¿²êó‡ÚÃìI¯¢Cx·å݌ϢXI/…%‡õ8ÿ^JP+KÙð Ç9iÎJf<#±äÑ&(ãÔ¹ŒŒ‡ÃïÀÃãtº¾AüPùŒòF”7ËR¿8Ç X£Ù SôÃléÝÁ Š|¯Ð9ìr…—FÎXZ`d“°æhüÒ ×M½³ø‰Å”9“¾¡¸×þ™o;œÞå{«$¿2¹¾c)·?ë²*0,Mß©?ml:—à­‹Cßâ»/"~û³ï–{õ­ƒƒ®Ò­êúÉÆ@ùÜx¯«º[nÑ’Pû3йÅ÷*Û˜mˆhk@¾¶›ŽÄqvpÊú2{ˆ{KùBK‘ñÛòÞÇ£Z&H’õ·Ó†Œ75¤­==1Ža¾Ô }¾ÔŒz;1˜ ~óÊÉ›F'A õdÆE]µ¹ŽÑ Jºí7©EóiÔÚô ª*p¥ÏQ/&¾h$)a©{øË¡õɈJ³aUºy÷ ªú4bFþ™•† è¡c8BcÞý¼Åv¥çÜ$ú_» hÞ»‰ž˜Ðu ‘^8”U˜ônÂÚ;Ò1Ä)‰zíÞ¼œ° ™Œ~ƺHê—C¸üÁ7Šh›¼Ú¯ujÅÔk0nÊGSbLJZšÕã*ZHyÆ-9µ=¦uËØˆuÀHgÂÑ£TÞÉf‚j(6hGå ICÖT/P´¼‰-^Ðe@ãàHüZ{ß•qü½+î‰â¾Y'à€†â¯öç÷›—ì+{a'zÌû1÷ÖùWþÇ÷SðÑ^ÉvßÂë¾°j©©ì…UL*ÝhX¤ Fé%yS£üšÂÃW®–4Žõ}™ŸÐ:—ò³øYZ÷hOiÝ‘è'ºÌ¨u³ûÌ¿Àÿ¡RÇZýÃd¿Y Mx¼g“ßÇŠžÔ4ÓŸÍE4PõÃmYÜöÎg¡Ý·A¥©ÜÊaSˆùi5± rh’> endobj 1319 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 1320 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 1321 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 1322 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 1323 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 1324 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 1326 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 1317 0 obj << /D [1315 0 R /XYZ 90 757.935 null] >> endobj 86 0 obj << /D [1315 0 R /XYZ 90 733.028 null] >> endobj 1296 0 obj << /D [1315 0 R /XYZ 90 716.221 null] >> endobj 1318 0 obj << /D [1315 0 R /XYZ 90 716.221 null] >> endobj 1297 0 obj << /D [1315 0 R /XYZ 196.021 530.323 null] >> endobj 1325 0 obj << /D [1315 0 R /XYZ 90 514.219 null] >> endobj 1298 0 obj << /D [1315 0 R /XYZ 450.495 451.548 null] >> endobj 1327 0 obj << /D [1315 0 R /XYZ 90 435.444 null] >> endobj 1299 0 obj << /D [1315 0 R /XYZ 124.69 390.397 null] >> endobj 1328 0 obj << /D [1315 0 R /XYZ 90 374.916 null] >> endobj 1300 0 obj << /D [1315 0 R /XYZ 174.472 89.441 null] >> endobj 1314 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1333 0 obj << /Length 1269 /Filter /FlateDecode >> stream xÚÅXKoÛ8¾ûWè(1˧$æ¶M›¢Eí&ö Åb-lÊKÉyüûФ-Yvê]Ô-|0Ãy~œ‘D~$’8JEŠ$Ñl9ÂÑV?ˆßÀö¤³ÿ~:zwÉà’ ‹¦íñ„ AI4-nbøxB0Æñ¢Ô+³O¨ÀñucֳƯԃ2c’ÅJIÆ3„7.¾øðñëXÒxê]‚;„ qÌ=]™B’Bx4”4á#% 8"]$§AÁª|)—óƒ+Õ¬VÅK ´‡&È LÐ v± ’]Ø Á®n`'6ÜíGJâeÞ˜òÅ»Aï­LU´‰a—ÅÀUTJ”ù#"áÁ?E™Ï+/,Y4aÄ,ƒX{TXŠ`‡M]¹.Ü`¯Š LÉß.†ª†h4žH¦aûnxš#™…›û÷>»8â<ñNë}x–J)˜È(dË.žÓÓàÀ þ%x¶‘Úf6¶j¾v°Íl0qx†TåçmëR—z uêiLD¬L­†T;õ‹QRÎ"‘”Iæ*Ý0sOqÕ©EzÒ!oëQÏÊ–û3GO‰,A8KúJì”Á@ó¶h¸"M{¢ÃŒJG=ÄYæqVjïç ÿZ—Íë0°øHˆdÇA„ 23›uònÔA=•™\×´5$Λ²Òn¹›#ÊÚý;k±¿¨@«‚÷]ByÈ9«¼€êbçÇxè7”X×Ê笧1P ËÜÞnçZ™¦Ýç2³|–[”síkÏ@¶f ìä¹ãÓ̆Y7eBc—ò€‹£òâvO""I‚(&Þ‰â$0“,þl%9´½6Å;ÌãçG¥Ý~ÛCÙ}cÚHÀRÝäͺvãW°m@.À Ý.4eȽaìK®?T(˜,Ü `¥-„~­èûjíÏù4¶…h§:Í ž¹Öjò•Ð%±ÈvMàù·3^ žl©Yg‡¡UÃAçÎùÑ*@±§ˆ„`QÒSd'ë’7Å÷Ùj ö¬Zðó.øÉ¡]ÞéüBwð:o‘xiKN¸žm=³-‹»á›:tÜÅìéFé¶¼³7/ŸÿJåØaå¬ãàülßõ’?¬äjЮ°íî¹úT ~ï+5e­ÿ5Ñ.ïfðõeaoS½–ÉO³19•«Ù‰Ûyç Á÷¥)[ÎH"þÿ Hû‚Í»ýzê> endobj 1338 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 1342 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 1334 0 obj << /D [1332 0 R /XYZ 90 757.935 null] >> endobj 1335 0 obj << /D [1332 0 R /XYZ 90 733.028 null] >> endobj 1301 0 obj << /D [1332 0 R /XYZ 90 693.486 null] >> endobj 1336 0 obj << /D [1332 0 R /XYZ 90 678.916 null] >> endobj 1302 0 obj << /D [1332 0 R /XYZ 220.32 631.712 null] >> endobj 1337 0 obj << /D [1332 0 R /XYZ 90 615.607 null] >> endobj 1303 0 obj << /D [1332 0 R /XYZ 420.168 581.893 null] >> endobj 1339 0 obj << /D [1332 0 R /XYZ 90 565.165 null] >> endobj 1304 0 obj << /D [1332 0 R /XYZ 329.489 532.074 null] >> endobj 1340 0 obj << /D [1332 0 R /XYZ 90 515.346 null] >> endobj 1305 0 obj << /D [1332 0 R /XYZ 327.378 482.255 null] >> endobj 1341 0 obj << /D [1332 0 R /XYZ 90 465.527 null] >> endobj 1306 0 obj << /D [1332 0 R /XYZ 198.901 420.48 null] >> endobj 1343 0 obj << /D [1332 0 R /XYZ 90 404.127 null] >> endobj 1307 0 obj << /D [1332 0 R /XYZ 184.156 370.661 null] >> endobj 1344 0 obj << /D [1332 0 R /XYZ 90 353.934 null] >> endobj 1308 0 obj << /D [1332 0 R /XYZ 184.156 320.842 null] >> endobj 1345 0 obj << /D [1332 0 R /XYZ 90 304.115 null] >> endobj 1309 0 obj << /D [1332 0 R /XYZ 184.156 271.023 null] >> endobj 1346 0 obj << /D [1332 0 R /XYZ 90 254.296 null] >> endobj 1310 0 obj << /D [1332 0 R /XYZ 184.156 221.204 null] >> endobj 1347 0 obj << /D [1332 0 R /XYZ 90 204.477 null] >> endobj 1311 0 obj << /D [1332 0 R /XYZ 184.156 171.385 null] >> endobj 1348 0 obj << /D [1332 0 R /XYZ 90 154.658 null] >> endobj 1312 0 obj << /D [1332 0 R /XYZ 184.156 121.566 null] >> endobj 1331 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1352 0 obj << /Length 2366 /Filter /FlateDecode >> stream xÚ­š[oã¸Çßó) ôÅ~—‘”En§3ØAÑN'A»@:X(¶âx`K^Iž™ôÓ÷P$#êvè]y°"Ïÿð*‘­(ü±UFWZj’ ¹Úžnèjwßß0Wz Å·Aù÷7?¼ðÉ”XÝ?u+F$g«ûÝÃZ¹¹e”Òõ¹þr®O›[.éú®­/ÛÖ^*žŠzÃÒuQnØz[ÀÝT±lÍäæóý‡›¿Þ¿²]ͤP†üëÍÃgºÚA ?ÜP"²tõ ®)aY¶:Ý$\¸ëãÍÝÍ?_}ØûîÏ'™ˆGÇ¡Jºè Ó.Ä]uy<¦Ú?¼cIÿ”Dñæ™ÿP*¬IèX“Dsgq<” Ô›7§_¶»âØZcÎ{ãÛ”š©Õ-ÓcëVÒw&×Umu=”mQ—ùÑþwi {Q•Ç—’k°Í­`týuÃáþa7­8c aŠMjV&!Yê-Îùnw(÷Ü¢~_•&ÒÜ2––ðÕ­­³ò©Sþë†-„ (1Yý­Ú¿Fâ­#™”]}´TBu@œTÿöf¾-¦*B¯â IÖ¹ûXW_Šm{¨Jûð9¯óSâ5Ä>šÐÁ£A;øÃ¡Ü/;ß ƒ0¥ z‰óS?šhÀ»DÖ_ÈóÔÏHšzšIUÆH"ä Soó6·Q¼;Ç]3Ó«e çjq¼ Ê» Ǩdúê£K3ç“ÁƒQx„K”åmp ô‰Œêö„Ç¡•°tÈ3õÞY| ÉÎ'\úï'p°€A VZ@CÃfËÚCι–¸öÎ&ª}ï Ñzíàö9¯'@èš2Cà²øÎG\vèÊö³º™ÕÙà@)I:>$ŸçºSDÀ¼¶˜Â¾|9…Î&šB„Õ§úÀ~Þ6bPœËItÖ8|äÒÀk:M!t ˜C°X•5‰ö ™†É•ÞÙD¥ï}!Òc@/}ŒH"¯ƒ\v³Ìשô LÆ)«³ÁqRÁe6À=|ü×ßçúO’Q’ðÅöÅ‹)t&± " ×b4—¿€†§/äų‡‘‡»Ü=¦G™é&ÃâÔÖ"Öo ‹2•á¢;›¨ê½/Dv èu€áCäÊcð‘KoŸ‹6ŸQ?…=AãÕÖÄÊ4ye —ßÙDåï}!òc@/D\^|Á…’G. ù±º”ÓE¬n4ª2Ñf/aç¬ð…®·‰êÞûBtÇ€^÷ˆ-¶Àøb E\t ; 9Ù<ˆÆêlp L‰b||Hèìl!ŒéòË‘ |9‡Î&šC„Õçú@¬ï„¼+úF¹ìZOÞæ}À¾ª_ææ £²¶&ÑÑ‹K¢¾Þõ6Ñ ô¾ `@Ÿˆe ä]‘Œß2ñ-3 ¹4ðïtéU«rošb#°6œÞ&*}ï ‘zé`Dúy…ô|äÒÀ_–¥GbH´z{‰/7½MTúÞ"=ôÒÀÆ~œì™3"E2D"{fkÃG. üÛ¶)êé†])BÓ×ÙLƒÏÃ0‰K-‡»O¬ g‰¾6ZgG;rÙ-ôfBM5aOmfM¢ZÃÛYgmeÞÒÆ–Q¾…½¢–?Þs³a“£/ß㯄´ƒ¾FHï·¶XÝî‚ãÓæ};ˆ©5ˆu~ž)Â|áímbi |-'ºÔ„@|Ü ãã. ¹ì:ÿtØeDÓÕÙà4¿ÍÑšöÀfß–ñT€©^Na_¾œBgM!ÂêSˆ}  ²€ðâ H”ýwüçAúG‡ß´}xxLQæN¾-Úüp,vö0ÜÛ¢ÙÖ‡swÆ/rðþ¹˜ÒXJ¸NûãzæÐáÄ'Ü5þ4bJÍ{¹6ß0HxcoäÇ£½8Øvîì¡ÎÖeQìºJCa[Ù{g{>ÑÞìNwÂï®èn›C¼®¤7ýK{¯9?õaÛOÛªªa˜·EC6æÅîú§nàïΧ)j^x³×M<Ôº94-TYp±®žÌ/_o‹„-íÍSqz,êÆ–´Ïyën_wõXز¦ð7^ìoûìJ.°g²·ú¾¢r3 g~a½?|-f2È쌲×Óµy¹³ puãɾšy­Ý¿ÿr÷·Ÿ~´u£”NÕÕ¥=”…I«P M´ögbëÐ뢽Ôe±›mAœ± “%*×wÕÉ$5i0¨®†æÆ1o[£ ¹Ùd.šËù|W @¯¿=C—±^²ÀïÀ“;[Ü)£At(Ìô¸ñÜQ:ØCËÙùÔeJþþ“çÝ fͲðh¹"dÐ-wtSÛ÷EYÔÐ+v¾Îö÷~“Auüß-NìËÞPþFPû§ŒÙ«'ÓýlÓ~ ‹B²Gì¥ijÝÈT}ÙO?R™SÔSyþJðPt endstream endobj 1351 0 obj << /Type /Page /Contents 1352 0 R /Resources 1350 0 R /MediaBox [0 0 595.276 841.89] /Parent 1349 0 R /Annots [ 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R ] >> endobj 1357 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 1358 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 1359 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 1360 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 1361 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 1362 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 1363 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 1364 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 1365 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 1366 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 1367 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 1368 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 1369 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 1370 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 1371 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 1372 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 1373 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 1374 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 1375 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 1376 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 1377 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 1378 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 1379 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 1380 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 1381 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 1353 0 obj << /D [1351 0 R /XYZ 90 757.935 null] >> endobj 1354 0 obj << /D [1351 0 R /XYZ 90 733.028 null] >> endobj 1313 0 obj << /D [1351 0 R /XYZ 342.87 705.441 null] >> endobj 1355 0 obj << /D [1351 0 R /XYZ 90 688.714 null] >> endobj 1023 0 obj << /D [1351 0 R /XYZ 90 671.224 null] >> endobj 90 0 obj << /D [1351 0 R /XYZ 90 656.654 null] >> endobj 1356 0 obj << /D [1351 0 R /XYZ 90 558.047 null] >> endobj 94 0 obj << /D [1351 0 R /XYZ 90 227.616 null] >> endobj 1350 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1403 0 obj << /Length 2595 /Filter /FlateDecode >> stream xÚ½ZmoÜ6þî_±eÀËòE¤¤EЦ—"Å]›«}W ‰qµôZí®´•´qÜ_Cr¨÷Õ&MÆRÒœy8>3[Qøc«„®"‘DÈU¶¿ «-Üýá‚áÓ5<^÷žwsñÕK½H¢ÄêæÞvWŒHÎV7›7$òrÍ(¥Á¡úýPí/×\ÒຩŽYãÚ¿è{]]²8ÐÅ% 2 wcÅ’€©ËÛ›/þqÓΚI¡ÌÌ^¼¹¥« høã%"‰WЦ„%ÉjríÝÅõÅ¿Û1Ü}÷猓Lœ·Ž B•ôÖŽö½ÌõnãLú¾ÌŽ{]4i“—…±F_óˆ0麆ó‘p={ö–R‘nM¿¯^rÞMƒ°ˆ(ÚAÞRIÈ/¹ Þ]2iÐ[óˆia”PIPéæXzrÌ=ºyÈk×Âl{¬×ãN»;µn\£)Ýï_º*Èãƒ.t7gåç4WOÇÎÚõ¹/w»ÒôyÌ ´ª©à±«b­B/™Ø.BÒÊÔÞ{Œöz§«Ú‚¼àxJÂ2Fé–(­´C×Y²r¿ÙCZlõæÙŒ›©0$Jñ“ ÷ܺH_SF EÜŽa׊s9ž†QèÂåÒ\!Ib-ûÈܨ¶øä—žBŒÎh…B}­¼¿eåFO´SŠˆH,"áe–' d&¾šƒœK°–†¼{~r”9 ùé¹>ò%­<ä=­<äè&%‰Ÿ%¼Ìò´£NN#"èàÝóÓ€£ÌYÀOÏõ±€/iåïiå?¼›G W‹8x™åiG™ißÜÎA.ã˜,D•îñIÀQäÞ§'úH¸—TB™žJ-ØùÔ¿œyQ´„Yœu8Ì)ç– z„§‘nŸFÚ‰œEúäD‹ô‚JéN%4²M:Å:‚óñ%¼Èâ¼Ãa̼Ä´1vNFîœuäBŸ©óm‘îð²aYNÞäé.ÿË‘"{¯*M^ €á3cC8!OV2”$Tò –^zÝŸ5Ñv`°di¬D$‡}=Pb§—Yž:RÀHÙ`j #Fìt\çùóç#ÕF¼HÀ…Õ³°—ˆ°ÎÊýáØèÁj0¸\ÛñCwxܱTÊ^ç{LŒ²Ž²]Š(X;Ï%4N‚)+0ÏèÀw¨J”ŽÀœ¬ÇN¤=æ»k&…kÝ!£«tËéP¾tͼØäYÚhß+õ"ŽýBë!­ý@~ÈMYhômÔ«Oµ*§Ãõ•,´Fæ_”ÍDGPÍ«ièóÔÇ)‘,\Içv|ÞÇôº'>ããÃ!ûã®<›z¬,9,—*1òq/³8µ °½ÂáÔw$ÜdêPkÎ\7X¢D/¹jÓ+è\ Ó$O[Ï%IN&ì+I‹Ñó~Èß¹5A(H” ¶•™úæ¡Òz½ÓM£[eÊßuæBšµ±Ü˜õF¯Òà%¼ðÎq÷Ôz²k¼|usÉIy[ZÍcFc„&ìA#šMy¼Ûé!8= üìÐ(M÷ ´¤›üX»›6„{˜ Ò` éc'@±u×õáAWØñÞ&fªÍY\Ç<Ü ƒÔÉìàÜHQ¾Îà\q#BŸ´J÷Ú¬” (! ^Ýû­+‚TŽ šÌÖ,‚¼Áýp÷rÈ.Í…wšÚ¯úý%D±ô¸3a¹2$¿éîˆ}‹iÜ ¨"&”2•Ÿ0bI¢ÐŠ€ "ˆb~ý\…ÄzÞi\¥•úæ-3ÇDÒ¸[DÚúäHÙ{Ÿ-w¾úë‹k³ìs®jbf‡ ¾ê¸ù—ÚÆŠ¯û›®ÑgÌÆ­jë3Êøs­Ý㬬`½¥«¬p·âæwölL ~)_ÿÕ¦ì¹W;ŸY[äÿoÚ;´I{¼OgV<@yBð‡qDm‹3¦YV›Ú鞣éfY¯\³Æ3Ôòî ½EÁzÆFÎHÆçldËFFÞH:íïîùŒ‘ýîWH<8œy4ì[0ƒ3X4k†àD†Ÿ¸R­ìo·F¬9À2b›aëØØ8VÃr¨Vܘ0¡ðñF#Ñf͙¸ `ì 7Ç œd9zˆ}ž¾Ï÷ó$ þÕ•ô@¾‹Ã8ұƑZ„Uoö1ârÌãÏ´Ø'yŠ t]î5Ö AÀkP3ÜÕ¥£ÁÖPÓCù­kΪÀ }®-Á?ÙP§«©Ϭ ‰¨w ëß^Ï„MÈ@"¯+`P· ˆEB8ƤøL‹-æ1à¶£NQž„ÜïŽß^ÿ4c;·‰=m©«17;ÂP4»'wÙæQeáoõ‰ 1™úÖ§qÀ1?ªO·M"_ê3ÄZæHÂw=úöŸ:ÝÚM»^ðÛîoX§[w+­ªô ›µûÍ'”»\ãM{¤™w0iöàZb먽¿ÑuVåw–ӚъÁÜÐâVUîÊíQŸº©ò²¯y?À´–va• öé]KH6³Àt†|È%òµª/šE ÄáîeŠ»·+‹­ ÎWSr—@,m©;äQÇ%Æ2bÁfÆ6V«NâÍÆ„íí•SÀ½@‚!³ÏtX™i:¢P6u*pŒô‹f%ahm€MèýîL0‡{þ<œ‡œ&]\å|yH”©Yžƒüâ¡t»Ôhu¬Ì+Q]dxy(ó¢AÙœè±Eöñ4¥P1‰)ëQü©q‚Ä‘tïay¾†T£É`’ˆöð™/D)"¨«ß8Å̤ôŠºHlu~…–‹~jŒ¢&£rG2—„ñh|–•ºŸ}ºÍ³Ù„åîiZ ¥„«xiáâ\ÅK¯{â3•ÑáX`É‹üT‘%1¬?*1®É¢ÌòÔ£†¡¥=8ÆåV›´úr«IJ»œ¶ËdÛ Ùí.<¯ëƒÎr³tÙ$ÙMšD‹èÔÛï®@õ¥â„ŒƒeÑÀ©U»«N(÷yB :¶=èìWi€+Lãy  kwÄ·s,‹%=¦q5džh»éfi‹{4íÌ7— ¾ã;ò…ðµx53SDÑøÃ˜e\#,¦óÄ‚1÷ö¾øùõìê*Ú¦Û´åkLq5®*8¸ 5kš½Pƒ_;ô¶Á&¯ÓöHóN0$e!¾!–DÁ÷)lAã*æÒ¥`/L¸7¿ón6FŒû”oÔès3¦ýÚÁÎÓ7ðo¬¹6µG¶P ÇêÛr,;J½Ü·!¦e Ûv ì¼/76˜¢ÉÆÉ¤"Àæµ½«í÷"&—ûÔB&DÊÙwT†÷3÷*åï}ëã^cÇ€gÒÿ˜§=¹»Ùm¼p¥I_¬õAö üáò³ÿh)t?,yFù3Aݧ Ãð½1ÙWÎ~}qýO@éÕwؕĦ¨Ý/_¾ÚNß ˜¯‘¦ðüʤñ! endstream endobj 1402 0 obj << /Type /Page /Contents 1403 0 R /Resources 1401 0 R /MediaBox [0 0 595.276 841.89] /Parent 1349 0 R /Annots [ 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1418 0 R ] >> endobj 1406 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 1407 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 1408 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 1409 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 1410 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 1411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.433 542.311 274.197 553.325] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 1412 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 1418 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 1404 0 obj << /D [1402 0 R /XYZ 90 757.935 null] >> endobj 98 0 obj << /D [1402 0 R /XYZ 90 733.028 null] >> endobj 1382 0 obj << /D [1402 0 R /XYZ 90 716.221 null] >> endobj 1405 0 obj << /D [1402 0 R /XYZ 90 716.221 null] >> endobj 1140 0 obj << /D [1402 0 R /XYZ 352.354 515.885 null] >> endobj 1413 0 obj << /D [1402 0 R /XYZ 90 499.718 null] >> endobj 1141 0 obj << /D [1402 0 R /XYZ 357.863 466.626 null] >> endobj 1414 0 obj << /D [1402 0 R /XYZ 90 450.459 null] >> endobj 1142 0 obj << /D [1402 0 R /XYZ 369.804 405.412 null] >> endobj 1415 0 obj << /D [1402 0 R /XYZ 90 388.911 null] >> endobj 1143 0 obj << /D [1402 0 R /XYZ 158.393 290.708 null] >> endobj 1416 0 obj << /D [1402 0 R /XYZ 90 274.541 null] >> endobj 1144 0 obj << /D [1402 0 R /XYZ 276.145 241.449 null] >> endobj 1417 0 obj << /D [1402 0 R /XYZ 90 225.282 null] >> endobj 1383 0 obj << /D [1402 0 R /XYZ 477.92 180.235 null] >> endobj 1419 0 obj << /D [1402 0 R /XYZ 90 164.068 null] >> endobj 1384 0 obj << /D [1402 0 R /XYZ 135.439 89.441 null] >> endobj 1401 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F8 1129 0 R /F13 1157 0 R /F11 1069 0 R /F40 783 0 R /F7 1132 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1423 0 obj << /Length 1362 /Filter /FlateDecode >> stream xÚÕXÛnÛ8}÷W€˜åE”Äô©¹´u$nâînÓ…bÓŽ YJe9möëw(’6}‘ ìb· ü`ŠòÌ9Ãˤ‹áGºw#!Áxw4ëàîjßvˆiíAsÏi?v^¾aÐ ‰u‡“º{H§¤;ö8â~`Œ½‡òëC9ó{”cïª*£J—/åD–>‰=™ûÄI¨C"<ù·Ã÷ÓáÛxÆY¨¿u>ßâî<|ßÁˆ‰¸ûÊ!º³N@™)g«Î‡åºžAý.rœ°ýì(C8ä–¢(6 G÷I©9i®‡‡y2“ŠÅË7”®I„BÔcÜ`޵MàØ0ÄH –ÊâRV‹2—ãí‘Xˆ"AŒ D4üY‘Ou©v .ý_ÝKëcñUŽª´È‘¸Û @/,Ö|”…O¸÷˜Ž½î5) Å4‡â,Qý @ž=ù!÷ 2³0!^Ìm÷»§F/ôwY,ª4—s¤ÉºÚƒlŒBH]é…‘>Í«uåGI%§EùôÔlPR®(kwêmtŸ*…¦r<ú”{I¶h Z)3©L´%=ÍŠ»$sG(Óä.“‡;VPH0 i\ÛN{=û]‡(`ñrŒš7¥|¦”·bY›v@ £5ÀëÓóþðÝ볃主¸yãrÚÉY›}äÚ°–äZ 9ðøÓYÿüä²ÜÀ/ˆ‡Íô–ÍÍì´É^rÍ@+n-h–Ú mpuúñäb?ŽQØrð8íÍ Í^Š-X+Žm€–¤x|qþûéù°qî3î5dEX4“\µ7“46{I¶`­H¶Z’ ìïdË4Šƒff«öffÆf/³¬³6@ËÌ\œùpžxŸ)°XcÞ<§½‘¢µÙG± kI±ÐPt?Aï£`ïõÉñÇ£Ss\'ùx[X¿‚5Ôiofklö²mÁZ±m´lÀw§¯Ïý?M†CµABGµÁО¬Û§ô*wš%¦êÎT@>‡w^¥7S›Û<¦ÉVróõ‹3n*ç ÅdTI“J%e™¸©“DS´©RÌ&¢ѵ=kK+cÙ[™ÖJ¹"ÕBQÕÙÁ” s“‡N¢nʯjíìã¡V!#ªÓ¢Çz(!›¨ÄêÅoó‚üÅÁr´/&1->Ã'²yÚ­ÊŸ^mçX=¦}ucöKf¥“•Ü”–><– äæÄk¹ðÿ"1e”y—-uQ%–êß%ZÃÄœÉJ9Xêš4§#9?ô{=`¥««t¦fs]¼7ƒªÅPÎ+ý‘dY¡RÑïJd3P½~¤l±Ù?_ÌøÎ"ƒë÷‚7SL»)ËùÆ’YM"Z†¾€=ï|[-JkѵUj–(Ö* yab¸U’lÃÅb13]]v@ÁQÒ (‚Ù ÌÜ!*ƒÉ4”»E¯cFЏ׃Ýôn`2‡^‡¤BaÚS >^—BBš–ß<=djrÿ%óŸp3ª¤°´—»t²‡¶ –9VÊ<§°°žzó§LÅ2é& “V÷ö Ø~³çÏd¥MA”ßiRúDxÿ¿Û迈"¸­˜Ù3_&ÏøÝ…°Æ‡—"Ÿ¨}œOÚô«-³Ús¢O²_vál=x ÎwæÌd"!ÿç/¥ú5(FîShId`žB º’å­Ìe ¹ÜØ2·¡Ô³‘¸°O¾9øÄ!¦‡ö(¢˜˜ø™ù£?þ8¾‚;™×?2]äƒëÂ?ž¦z?wÕQo¹Ûòü ö¿y8 endstream endobj 1422 0 obj << /Type /Page /Contents 1423 0 R /Resources 1421 0 R /MediaBox [0 0 595.276 841.89] /Parent 1349 0 R >> endobj 1424 0 obj << /D [1422 0 R /XYZ 90 757.935 null] >> endobj 1425 0 obj << /D [1422 0 R /XYZ 90 733.028 null] >> endobj 1385 0 obj << /D [1422 0 R /XYZ 357.664 687.817 null] >> endobj 1426 0 obj << /D [1422 0 R /XYZ 90 671.089 null] >> endobj 1386 0 obj << /D [1422 0 R /XYZ 357.664 371.734 null] >> endobj 1427 0 obj << /D [1422 0 R /XYZ 90 355.007 null] >> endobj 1387 0 obj << /D [1422 0 R /XYZ 357.664 292.336 null] >> endobj 1428 0 obj << /D [1422 0 R /XYZ 90 275.609 null] >> endobj 1388 0 obj << /D [1422 0 R /XYZ 357.664 224.892 null] >> endobj 1429 0 obj << /D [1422 0 R /XYZ 90 208.165 null] >> endobj 1389 0 obj << /D [1422 0 R /XYZ 357.664 157.449 null] >> endobj 1430 0 obj << /D [1422 0 R /XYZ 90 140.722 null] >> endobj 1390 0 obj << /D [1422 0 R /XYZ 357.664 90.005 null] >> endobj 1421 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1433 0 obj << /Length 1474 /Filter /FlateDecode >> stream xÚÍXioÛ6þî_á2³‰<®®/ß/~¼ìx[Éó5çW×x™€„ï±(\>À#EËý‚SfÇÙâbñ[GÃÌ3˜ŸSNöqí(CØN;DáVÅ4·:]OOwYqgZWo(íÉ€ I€|Ê[*°Àfìaˆ‘vêç²nT.“)%æ£ "v"F€Ëžj¤yK·æYßJ'_q'7uZäæ}Û’%€ d%*Ý™‡Û"³Ãª¼•ÊѶ'cóø€1ÍÓZž˜×¼È×ÅŠï^ÿI•Åe j´k{§óÒz-×ÃÑÈ4gÊœNwj[(džû¸W¢È³§•/<Ç(V‰¦rÇož>b U4ušË [ÁÔ °ǰOÒÁZoìiÿÆÞN‚D°ë«÷œvˆéÈl%¯Æxg`ùºIävâëÅŽ±ó-vIÑÜdr ß#>”øb@9ÍŠ­†`[ɺ³zKƒ T!Š„cõ8å!êšå“8·FDhÆ:`Ž mÏ9xðŒ‘žð x³Ö`ÍÈÀ>ÅZ¾(vÄž¦Ì0f—{—«‹Îs¡2µ‡Â…ŠxÐ ˆ§l Âã7`JßwÜ„ˆ@ÌçCM'òù°CØߺ\+0>Á½eâº_˜ŠÂ)8DǃùfG”#±u˜Jëš nÃd]Ž8é·œLùPXìQ£t‡#?>“VrÎq)Dƒ€œqÜÐ:n5h66•TÊÊÌ`Œ¢°—³)¯ñ€Ú.:bÜFª+%ãäzª8Bˆ8f_4X"æ½ÓÉ>âÐ\Ž äW†9Ôr™›õ¶ðëu¥Úä SU×MeÆie–ðÕAÞLÔ·iå¶[óÂxSäuœæöP"á%3'ØAÎ׬o ]›¡Žäq!`Bƒ¦‘ŒcW*)CB#(ÄlÉuJ„,Ö¶vzAíìŽóA“çv¯ÛÛFohÎC’Zã<Sj¬\¤Žd‰/h~G²´™nÏóÒØbK°=?ðû…D˜&Sߦa,&®=޶ÞùË8IÒ|×g’ïlumò>/Þë„«4îJ‚FXõ¤ØÇYºË÷]CY6ª,*Y ?ê³Þ8¾µhþ\xG6¼ÛkVq#ÝÐnL;´¦öá.Î¥ŠŸ©‹ÿwYô#ï]^Kµ—I×ÒÌh• ¸|·. ÓŸ:À*kZ`*‘jÐò%æôV{32u6hû-8×·\z*Vñ^g¾ŽÐ@Àmbsë¨Ø‹‚¦R˜gkO5¬Ž½’›b_6u›.Œ×›¯ß«x§ 3ª«?<‰&®®Í V*~2‹qe¦ÒÚ.•e–¶úë“…™” ¸:KØ‘Ú㉬6*½iµÓÔòÖp.+v}3tÉ€n­Òb,õ€“Ór`ÛÐŽ[oð2´ùÄû %Çî'{ÇoÒCÉ>r&žøÀ¯[;ÀÜg'Õ0eî‚Ó A]\›dÆIÉVœ±I .cüuöËTH Ý qÉT7ÕS">´|®)üéìÏ ¸ôYÇá_íqBh¸?‡}\Ü¥îiõ(éãðp]óÑ‹Úü%Ä婚|ªfE_@ÍîîÑݧùì-ôàû´†Bð¹¦@÷ÄÿýËVûešÊ€DÃOW]×Ýs×*½•¹TqÝGˆûRQÏÅѯ®kææA¢SLO6op›²Fio_.°þøþâg¾w¯íQ":¾¾ÿP<>íd~h]ª§æù÷_ endstream endobj 1432 0 obj << /Type /Page /Contents 1433 0 R /Resources 1431 0 R /MediaBox [0 0 595.276 841.89] /Parent 1349 0 R /Annots [ 1440 0 R ] >> endobj 1440 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 1434 0 obj << /D [1432 0 R /XYZ 90 757.935 null] >> endobj 1435 0 obj << /D [1432 0 R /XYZ 90 733.028 null] >> endobj 1391 0 obj << /D [1432 0 R /XYZ 357.664 687.817 null] >> endobj 1436 0 obj << /D [1432 0 R /XYZ 90 671.089 null] >> endobj 1392 0 obj << /D [1432 0 R /XYZ 357.664 620.373 null] >> endobj 1437 0 obj << /D [1432 0 R /XYZ 90 603.646 null] >> endobj 1393 0 obj << /D [1432 0 R /XYZ 224.689 570.554 null] >> endobj 1438 0 obj << /D [1432 0 R /XYZ 90 554.201 null] >> endobj 1394 0 obj << /D [1432 0 R /XYZ 357.221 520.735 null] >> endobj 1439 0 obj << /D [1432 0 R /XYZ 90 503.674 null] >> endobj 1395 0 obj << /D [1432 0 R /XYZ 386.954 441.337 null] >> endobj 1441 0 obj << /D [1432 0 R /XYZ 90 424.609 null] >> endobj 1396 0 obj << /D [1432 0 R /XYZ 90 407.12 null] >> endobj 1442 0 obj << /D [1432 0 R /XYZ 90 392.549 null] >> endobj 1397 0 obj << /D [1432 0 R /XYZ 158.393 317.788 null] >> endobj 1443 0 obj << /D [1432 0 R /XYZ 90 301.061 null] >> endobj 1398 0 obj << /D [1432 0 R /XYZ 90 283.571 null] >> endobj 1444 0 obj << /D [1432 0 R /XYZ 90 269.001 null] >> endobj 1399 0 obj << /D [1432 0 R /XYZ 431.616 235.774 null] >> endobj 1445 0 obj << /D [1432 0 R /XYZ 90 219.047 null] >> endobj 1400 0 obj << /D [1432 0 R /XYZ 245.545 185.955 null] >> endobj 1446 0 obj << /D [1432 0 R /XYZ 90 169.228 null] >> endobj 1024 0 obj << /D [1432 0 R /XYZ 256.414 136.136 null] >> endobj 1431 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F11 1069 0 R /F8 1129 0 R /F7 1132 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1449 0 obj << /Length 1524 /Filter /FlateDecode >> stream xÚÕYÛn7}×Wè‹tÞ/FQ ©ë A€¦‘Ð>$A±‘Öö¢’Ö]­äøï;\’ÒÞD¹1Ò´­–Ã9œÃápŽLÆþ‘±Ác%2LŒëßÀÛ—#âGNã/æ£gW f!#Ùx~]O— JÆóåû‰@ršŒñän»HËå4¡OfU¹[Tîù]v•S¢'Ùf1%“ Þjm䄘éÇùëÑÏó¶_™`Ò"ÿ5zÿ—°Â×#Œ˜Ñã{xƈ3^8eþy5š~=øpï¼ N6!È£ a)¾ ¼ÌFôìŠÒ#]À&åˆqS»›UE™¹y×E鬛ä2…$50É¿9ްPI¥7Èû2Jùá?úÓ92šúáuÚ_-áˆóàþÏ)Á°]DLÊlQ”Ë-ê{LGRŽbWÎëyßå›Åj·ôdæêR°Îý}g )¢¿_lÑmß5HëàâÇ>‰!ˆÃæ&ŒBv¸M¼L«Ô‘~•g«åv ï€TD=y"ãuδHà õÁ‡…ü@©è S¨ˆb›8 l“Áª˜oª…<'ºgÊoñ®‰ì­ãÈ—‡,lá2Œ¤VÑ8¹3T8xä4í„!ªIœvos–ö£¯í1À@{0F{ï´Ç;.ëãÛ§Š•ÔÑ8¹3q´G²C ¥&N»·9KûÑW„ö` ½¸¸MË~ü ÎÚ€§y÷ÖqèŽK ½ŸR1IW»¬‡/ÒŠÅö6qT¡“mÔ÷Š~(vÒYºbÇÃ…ˆ¿³.³*ÍW™¿µ.³í¢Ì謁؜»§æ·Yh$d¸üuØóÃÒ"mý=ɰžä[ûi&»­]}ª 7r—nýX°þUy0[pÆ oØTÞª¸X›2ˆš§Þœ:~s’ØÍ)f'/NÜɹ- C’!¥å™œ ÖIü—=]—þ.ÝfÕ,0ü'½Epwªj/¢[8¼MZ`x$-è}ž÷¶ ¬á®æ±Ñ{ëø:.}ôwe¯\ÚV0qÝ*Æ  P ›í¬‘êuƒdÏR£z¾Z¹ó·ÎÖŸ²rë¾@ןÕmîß„ÃB¹™¤¡K´gÄ~~òßaý‹‡0ßÀ¹*§BLP?µq«²‚úQ÷C¾:‹ÝYêC§$ÔÓ•ÅÞ{õ4W..òÁ’Ò ÁfŸ?VÍr §îe¾Ï*µM£7©Ó·Æ}þ9ð¶ÙYZݳ!I™­ [§÷öfvÖ÷Î Ý:‚óM‡¾«WóÙ@YK°þ†eåDC~o¡² ìv=¢\õ7ý°í½Ý[ÿË»÷Ö‘–é:«ÂÖu·qSl’MìÍlíÙR»¥3D¤úïi¬è–J…–[Êü–ÖQkO÷Ö_hT¾íÞz¦clGÅ@skÏXÍ+ÆÅ¦‚ìÞ?Ev‹/PÝ¿ d„í¨¿nBˆ&º%ìûß«n ý?Sæ¤iŒŸÔ!Á有atHÐë&`DþµðÎË¿(rÇeTuÇâ|¤ê&¨…„ÑlÎÑÞðušö( §½ ¡½…wžö(rÇeTuÇâl©îíš!…$J»·9KûÑW„ö` ½¸,vŸV}ÝËA$“äiæ½u¼ã2®»%hj~&doÓCíü²MJOÃôõ„4Ç<éý !M‘îÈhjh-£í§“ÑÔ0'à“ÑöÉu@õ«Ò›ÑZF; m' khÐxL=í|Z¯«Ù†®cÐÐü‡ã*‘a쬆vÖIÃ|@C·]>FCk¨º¼½ˆž†v6qè:e ºÖÐacOhèGF4tt —q ‹¸ÖÐ1({äl¡Qú¤ˆßLDwša|(N›ãPa¾üVîGW1ÍʼAºøŸzÝg›¬L«P ¯{æS[| ¿„>™»b.0½`Ø}£˜øfýÚVÕ·é¿ÿ4{2ëÕ ?i«›D]Ÿnœèý–Ò£çoÌ.jÿ endstream endobj 1448 0 obj << /Type /Page /Contents 1449 0 R /Resources 1447 0 R /MediaBox [0 0 595.276 841.89] /Parent 1349 0 R /Annots [ 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R ] >> endobj 1452 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 1453 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 1454 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 1455 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 1456 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 1464 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 1465 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 1466 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 1467 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 1468 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 1450 0 obj << /D [1448 0 R /XYZ 90 757.935 null] >> endobj 102 0 obj << /D [1448 0 R /XYZ 90 733.028 null] >> endobj 1451 0 obj << /D [1448 0 R /XYZ 90 642.053 null] >> endobj 106 0 obj << /D [1448 0 R /XYZ 90 584.16 null] >> endobj 110 0 obj << /D [1448 0 R /XYZ 90 497.479 null] >> endobj 1457 0 obj << /D [1448 0 R /XYZ 90 475.167 null] >> endobj 1458 0 obj << /D [1448 0 R /XYZ 90 475.167 null] >> endobj 1459 0 obj << /D [1448 0 R /XYZ 362.337 440.038 null] >> endobj 1460 0 obj << /D [1448 0 R /XYZ 90 423.311 null] >> endobj 1461 0 obj << /D [1448 0 R /XYZ 397.395 390.219 null] >> endobj 1462 0 obj << /D [1448 0 R /XYZ 90 373.492 null] >> endobj 1025 0 obj << /D [1448 0 R /XYZ 195.643 340.4 null] >> endobj 114 0 obj << /D [1448 0 R /XYZ 90 324.046 null] >> endobj 1463 0 obj << /D [1448 0 R /XYZ 90 225.2 null] >> endobj 118 0 obj << /D [1448 0 R /XYZ 90 168.807 null] >> endobj 1447 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1475 0 obj << /Length 2258 /Filter /FlateDecode >> stream xÚÅZmoã¸þž_a _l æñEÅ (p×í{(Ðtm´ ¤‹ƒÖV£¶ì•ädÓ_ß¡HZÔÛÈw]´È‡ÈâpÎ<Ã!)›Qøc3MgJ*¢…œm7töoïn˜k]Bó2hÿi}óÃ{½ˆŽÅlýXw‘œÍÖÛ‡¹$ÉbÉ(¥óò´9‡Å’K:_UÅySÙçÙcV,X2Ïò›o2x›ÈXÌ9]|^ÿ|óçõÛLŠØ ½yøLg[áÏ7”Ì^ᙦõìpqáž÷7«›¿]tØ÷Þ'™˜¶Ž Bcé¬S„;ûÞï²ýÖšôî¸9²¼J«Ý17V€ö%ˆˆtÓ0×q—;Oœ^6i±½½Ý™.?¼ç¼Á…þL‘˜GuÿRI­LÈ"X’Fân÷’å}50t¥(a÷Ço»Ò>åçà £~6 lYd{°bÁåüeÁä<3½~oRÓ)Ò0~û»zÎìÃûë•Å]Çâ„0êxÿwg $á¾}×W ‰V¾ù—~ïˆè„¹æCÚ·E$Šb'ð¯£óÌXôöjÅ–ô—\¢)†ºtÀù…õy‡ÿ1y÷ƈ´HYå™ë²˜óe^û´Ù ¦¨¤×2Ê© ,Vÿ£ g”O1*%£…ZêF…ct{<ÙgmR_ŒÆtÎþÿ便ÌP들5OÕsl)"Âõë3ðfØB“»¬¯V§lSéÞH‘æåã±8ØLg}–‚®¹rIú¬¶ö»]¾ÙŸ·–…Áa<â½ö‡¾ETä=–‘ç¾ ®I’xˆÍH†…Áð.­Rô&¡—‹P$)t£ËcÐ^/ ­˜¥1´%5ßœË. £Ð…KËËà€0K4U-@“´ºx9š%m<ÓP<9‰!²“Æ‘;*mhS‘>õÀ#N’˜¡ÆJ+ÐìlÜ÷B‘²ê{'3éûFâ{ Ðû>Ü<ÃüèÂt•‘hŽ;ßIãЕºz;e=hÉH¬ÜV'ƒJ“rt ð!ù<4} ›HPØ´Sèd&)D° 1@OaˆR^A!ÝQYC·Âú"9n«“Á%¬À‡hBXr¤Òã6íã:™I ¬†B ÐSºE¾—‡ÀpÖ'ÑIãà•5‰…[Ä{ø±™C 5YY‘©<ç!Xc”/3Å@ kœÐ1â ´ §@Á;* x‘•Õcñµ‡®(ˆ*ÔàÄŠXÿóqÿ'’Ä*Æýïd&ýßèBüzÿ€þ!¯ð?ÞQéý_ïÒÓ7[Ú’pÔìÄLÎʼnâçÀÉLrÐèB8À=à!ä`à•üÔw;,á‘Jp[ 'cxÔ-¸5´©‰Rã[é }œB'3I!‚ÕPˆz À CÈ+(ÄÀ;* øëÐnNÑ7ÕÉàhf7§u í!d0ŠI‘DØ´3èd&D°1@Ï`ˆ†ZxÓ‡!¹£²F.ïŠ]y蓨IdfbmlE&3 $QøVÚËL:¿Ñ…8ôÎ1ç‡xW8CÓ_ºÝîò'6´Ó:AÍUVdrÀ)Àâ»`/3éýFâ} Ð{?,íG ÞQFÃö?jC"G+ƒwTÖÉkSfEÿÇ„&n¯“éA²¨ý¹Y*Ùv0¥¢¿×e‘ºÖZ'[ÛQi ‡LMÌÇ:œZmE&ç9…'vûNf2Ò]H¤a€>ÒÀ³Ï;î¶î]~D&”ÊË—Ï‚"N„‰ˆp\ÈZj¥ñvTù€÷ãäÚuKbE¦ò×’P†Ÿ ¼ÌK®q–P@ÇRÙ¸ù€ÝšL …ÂH1á ¥5,$gXi|€•ö;ï·Oü¾Ÿ3Qq‚ûÄÉàpþãR·I ’§¬î?ýòãÇ»Uýq¾¿ â ¯oG¹oÚǹw2“Ü#X ÷ ç>ü܇ú‚{l€•Žû{¾Z/ÀÜ'N‡„õ"¦²M•ÜÃnŒ±ñCLÐ>ν“™äÁj¸Ç=÷àwà>ÖÜcì¨tܯ†æ½ãóÉ…{ Òs’p%÷pÔe1’ó›öqîÌ$÷VÃ=蹿÷á°®à`GåeÞÍù˜O.9ƒô9?$a„ûÎíab{¶¯’“K]Ç»¬JwûÌׄd妨|EÈà«+Y?gå°e¬¹ï47¹==BBüú O·»‡˜oŽ9 &/í¯]îïllžÛwEöõ¼+Ìhͯêèþû ^û³¼ÜþZ¥ÇöLi••d±„óèüCWîÊÊÁÝ[@Ë 3Žº&f)‰¹9ĺûksÍŸ™ÒS† ü957Ô:š ç¹t?¾d¶¹Ì*ûðåÍ6Ørxq.ëÛrx¾7ß§”ô¥O#7òö|ëJ4¦ùÖ¢®;Rh.2ÛÜð£‹æÿøÓê/`χŸìÏâx®vyVbæ4"±ß$ ¡æYu.òl;Ì  ›XgG Žš·¼½:\¡ƒ¡¨Uñ±O«Kɵ Êóé´ß]PCdøŠ‘K€¯ 8‹Ó±Ì\IÉëóÎU\ª4®©óz€L×/ß¿-b9(ë ½Iø›ª²’¡ª,;×no›«ë©» ºfÓÌF ¸¦™%ΔiZ?›ê+óäj¹Ã¹Tö‡‰x#PÇ”ya¦§yñï¬pO¯ÏYž5°…•Kóº ÆŠŽÍÿšcÓúxÜï¦Ï«á4êûU0I§²NG¸¸•uÎ…²ŸÐu ‚§‰b>íþº ®Ì9ÜGÂæ9ÍŸ²ííÀª+5‘2Jú¦@„Ù-Þo+¬Wmبàp.‰‰V‘«tèu5x½€¸õ!jÿ¯àÞ³3쯾Î&²ÿ˜¾¥üVPû‹SæŠ} Þø0I˜®6¤ÍcOêpþöödWèSÂØwϼn9œ endstream endobj 1474 0 obj << /Type /Page /Contents 1475 0 R /Resources 1473 0 R /MediaBox [0 0 595.276 841.89] /Parent 1500 0 R /Annots [ 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R ] >> endobj 1481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 447.28 143.858 458.184] /Subtype /Link /A << /S /GoTo /D (structspcprm_feeb5f4056f271fd37291a712a7b6791) >> >> endobj 1482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 434.329 152.695 445.233] /Subtype /Link /A << /S /GoTo /D (structspcprm_387d74de3215763d7e22c222b19a2c44) >> >> endobj 1483 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 421.935 154.348 432.281] /Subtype /Link /A << /S /GoTo /D (structspcprm_5f9a48a52144f8ced93baaffc107a3a6) >> >> endobj 1484 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 410.483 165.178 419.33] /Subtype /Link /A << /S /GoTo /D (structspcprm_2c5c2d97e6c5f617272834b1516c84de) >> >> endobj 1485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 395.475 171.514 406.379] /Subtype /Link /A << /S /GoTo /D (structspcprm_74433ae0e7e1ec426777bafb402b50c4) >> >> endobj 1486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 384.58 176.196 393.427] /Subtype /Link /A << /S /GoTo /D (structspcprm_4dbc8c7064ae790483017b6c81e7ded2) >> >> endobj 1487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 369.572 155.474 380.476] /Subtype /Link /A << /S /GoTo /D (structspcprm_e11db8d7ff8b605eed87298a32fd094d) >> >> endobj 1488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 357.178 152.705 367.524] /Subtype /Link /A << /S /GoTo /D (structspcprm_8ef0c963f1b0ee957f3403da7559a81c) >> >> endobj 1489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 345.726 160.465 354.573] /Subtype /Link /A << /S /GoTo /D (structspcprm_ec5d37c00d382a84a090d4f52d9a4346) >> >> endobj 1490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 330.717 165.995 341.621] /Subtype /Link /A << /S /GoTo /D (structspcprm_844792d006c308f465ce8ca593a37df3) >> >> endobj 1491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 319.823 167.08 327.544] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 319.823 188.101 327.544] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 1493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 304.815 180.461 315.719] /Subtype /Link /A << /S /GoTo /D (structspcprm_55316470e5591401576ba3c5c384df0b) >> >> endobj 1494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 291.863 168.764 302.767] /Subtype /Link /A << /S /GoTo /D (structspcprm_20db4194170d78054908acf94b41d9d9) >> >> endobj 1495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 278.912 167.11 289.816] /Subtype /Link /A << /S /GoTo /D (structspcprm_dd01b70b4a074a7bdccff378ab61a948) >> >> endobj 1496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 265.96 167.11 276.864] /Subtype /Link /A << /S /GoTo /D (structspcprm_fb6a33994ad13f402efb68d20a97eee1) >> >> endobj 1497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 253.009 168.764 263.913] /Subtype /Link /A << /S /GoTo /D (structspcprm_6727d3a30592e54c7361e0434a795832) >> >> endobj 1476 0 obj << /D [1474 0 R /XYZ 90 757.935 null] >> endobj 122 0 obj << /D [1474 0 R /XYZ 90 733.028 null] >> endobj 1470 0 obj << /D [1474 0 R /XYZ 90 716.221 null] >> endobj 1477 0 obj << /D [1474 0 R /XYZ 90 716.221 null] >> endobj 1471 0 obj << /D [1474 0 R /XYZ 363.99 681.092 null] >> endobj 1478 0 obj << /D [1474 0 R /XYZ 90 664.365 null] >> endobj 1472 0 obj << /D [1474 0 R /XYZ 399.049 631.273 null] >> endobj 1479 0 obj << /D [1474 0 R /XYZ 90 614.546 null] >> endobj 1026 0 obj << /D [1474 0 R /XYZ 195.643 581.454 null] >> endobj 126 0 obj << /D [1474 0 R /XYZ 90 565.1 null] >> endobj 1480 0 obj << /D [1474 0 R /XYZ 90 466.254 null] >> endobj 130 0 obj << /D [1474 0 R /XYZ 90 239.435 null] >> endobj 134 0 obj << /D [1474 0 R /XYZ 90 158.981 null] >> endobj 1498 0 obj << /D [1474 0 R /XYZ 90 136.669 null] >> endobj 1499 0 obj << /D [1474 0 R /XYZ 90 136.669 null] >> endobj 1473 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F11 1069 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1518 0 obj << /Length 2327 /Filter /FlateDecode >> stream xÚ½Z[oã¶~ϯ0öee`Íò&J ЇvÛM·(N{6Æé9MòàØ´-À–²²œ4ûëÏP$%êB)i‹Eˆ&Gsùf8œ¡MfþÈ,Á³(ŒPÂÂÙúxg;˜½º fuË gýûåÅ7¼…ÁfËmõº (¤d¶ÜÜ!Šç ‚1Në‡â8_Ð×eq^—züIne1'q ³9 ÖfãP°€’ùÝòç‹—µl£YÈ„’üùâæÏ6 áϱ$ž=Á#’$³ã§ÌŒ×ÿ®yèyóCÆ©Õã(Žü¶S†°hl§´±`8‹g–FpKiØ5„`x…†3‡WWGILaT-©‰bgV>9 t8šÐʹZig\^–ϲ§à]2¦ÝÂÒŒ î0R‚ß 9sDc?âõ²pM2‰·WÐkáQɢݨdÁ^ç›°cÆcª-,ɨÔ6Ò"O¸jgÝ‹µ¥™{DÖ+ÑÕʹZÕxs«CôqNFá°4ãÒ;Œ¼¸ÃNˆ°?Äu?î†fw¿¬×â>¦•ÅÝÑÊâ^ÈS¹->÷ŒBEÑ(–f\v‡‘uÇdt/êͺuC3‰º_ÖkQÓÊ¢îhå¢þ4'8XÍ){ŠÆq1Љ!× ÍÆ =MaþSÔY÷Coh&¡÷Ëz-ôcZYè­,ô}´ÃEŽ ƒpšq±FJìÍRòàEÀòê©Ö–ûôT’§t—­æC¹—zfi™®é—U™æ™ž+òs™f²çGÊjŸÁ¡RWL^-õÂ!ï™ÓeiP<Éò‡þ{E8¢­CHC2.¸ÍFÇí‚”¹AA®óãù”Ä Yž‹Lnô§£<ÞË šoZP»]“(F‚©èkBES¹z±á˜X¢ª,Fû)L(4|Âjg9”=FÓÀŠa÷°¶ènšQ©Ê?ñ–è§ôpÐå?¤-i:[ŒÙj§Ç•Wà™f›t½ªœ¢f¡Cد y©CFû•ÜK™éÑ&Ï$ê;eÁ´.ày$ 5˜QDM›²Þ¯ Í¢[#·­Âê°B‚šB@Ô4Üu.b$6¾½JA·À&J Iå…gQðaN ?*“/²,¡CªNr]PÑÀ'èò¦HW÷©×•®×<æD;=÷æ_[¾Ñoló¢ % Šca´x¿üßo?[°c ( #M“®ú–¶Ö~Û—ƒÈJ¥yBƒÅúûÛ>/èòHb¤ÍPÿ ׇU¡ö¢š¯Wi (za§A"GI¨û 寛øN{RY] ñí²£ÌJ{«Sž ¨Ýmñ@ 0o Øú~8PÂ:P”è徲ޭŒmðl'AZîMë­”|§‡U„¨Á𛪡èïLJÝ/üñ#8ÐÿZ| lóö9äÕ¾û¸qß&?W»¦åÀBÕOºˆ"Áá+îúú&Dfk£•i^ÎÒfG+̵Já˜X$Þš‡aðŸ9aaðÝ/ƒ> Aõé Ô(f"åú£~ž¡z8 áMxŒ8¦x‡#xëkµÿ _PãÏ_ñå^Ö§É ÛB~>ƒT~ÖS7?}¹3@¬² ¤²ÆBÒ`ñ2 žVÊí_ˆ„ƒ9*ËrjËn4Ä6Š<ÈlWîõZšé§ŽÕõ9×oŽ 0†áËÏzd3ؾûT]øN™Ô%‡C\?w©FBÉÌ »Z½F…žöùùÐz—º¦€ ¨#ª3º¥ŠpQYÿE9XÍÀêÉÔð`j!õ@EBZ6T@%²Õ³u±GÜbÊóYèÿ;¸³³[OEQŸ…€RÊR\÷9$ˆÆM5Y'yШ)TÒ’§Ž÷yå-¹í¡Bu¡Î°ÕZUU²HOeºVa.Ý¢ýjíú|–Ï )QÕ§u]`èpS…%CYcètFvÉÃãWNW`†96À®£,uéï–o*bjOº«O¢!†¬]vÔ2À‘ „1­9~7`­ÚÃ6Guø·OþÓå@sA8’ o³î¬{›uK3լɲ4ãMî Ä—Û £˜Yˆ¯ú€E°l˧»šâÌÔDÅùP72;AÜÏE 5gÜ)ü—ªÍ²=M2 ž_PƒÝˆ4 ]#L!7вÆ(âQ¹4ƒÑ*^òbù4Œ$Ðp„þï—œu/d–f ³1Y5h£ j®@:Û-&¬hNÚÀ­²ÍrÕ±Xa¹N7 7ÐS@êÝÝ „Eâ²Y÷ih&‘Õ9&ÐédS@š\M0€—@㮊8'Aâ‰vFÑZ àØ¼³UÞVNN]Q_2T ÿiœR_0ÔÕ¡ŽmuNê™îIªk¢wÆÄ¼2Ö†…Æ·kPLÈ ,¢ŽEƒÑ (ÔþûngÝ †f2Fd5Ñ0&ÐFƒ#¿4X'Ä}xÕu3ÂQ2,Ð ç>»­„½GVË(yIðí¦ñeëNÜ:ÏH¯Ž"‹…“ADuqŸ¥@Œu5åÒ7GUï †‡:ñiå¬ûÃÉÐL†Óˆ¬&œÆÚpr†/ÈÒÑP<`ÎG*ƒ2=”½ì=ž¦Õ=xÇ‹d³îGÒÐL"9"«ArL EÒ(¦‘¤tÉ$ì ¹z]ÚâùPΣHÕ„PŇæ;©ºAÛé¸J³Ê1êc}7ϰî2ÕäðÝ<´ƒIOßÍÚ¾›×<«ÖJ QâU÷Õ&ª©ûç®gÔ]TÄFK¢‰;|K½pÈ{>겜¾ÍgpE4i+Ñ K3.:ŽPÒ–èªu©

    •†,7XÝ_óMz MŒ4¤òp’¦‘¤‰fé6çOÐŽËËÁoBPÖÀꢋ蟢üµß™Ÿ@@Ô'îO›êÛH¯z ™IH Òtm¹ù⡺¶´wv¿Ú9qý É%¦— ëOÓhnUEb7Åïﯘúø½yUõÅæë s!õCþçóN·±.:!aðü3 ú endstream endobj 1517 0 obj << /Type /Page /Contents 1518 0 R /Resources 1516 0 R /MediaBox [0 0 595.276 841.89] /Parent 1500 0 R /Annots [ 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1537 0 R ] >> endobj 1520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 167.927 729.69] /Subtype /Link /A << /S /GoTo /D (structspcprm_387d74de3215763d7e22c222b19a2c44) >> >> endobj 1521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 701.127 169.581 712.031] /Subtype /Link /A << /S /GoTo /D (structspcprm_5f9a48a52144f8ced93baaffc107a3a6) >> >> endobj 1522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 682.341 170.438 693.245] /Subtype /Link /A << /S /GoTo /D (structspcprm_2c5c2d97e6c5f617272834b1516c84de) >> >> endobj 1523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 663.555 176.774 674.459] /Subtype /Link /A << /S /GoTo /D (structspcprm_74433ae0e7e1ec426777bafb402b50c4) >> >> endobj 1524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 644.77 181.456 654.548] /Subtype /Link /A << /S /GoTo /D (structspcprm_4dbc8c7064ae790483017b6c81e7ded2) >> >> endobj 1525 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 625.984 160.734 636.619] /Subtype /Link /A << /S /GoTo /D (structspcprm_e11db8d7ff8b605eed87298a32fd094d) >> >> endobj 1526 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.681 601.246 275.657 612.15] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 1527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 589.291 121.98 600.195] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 1537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.75 98.244 385.726 109.147] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 1519 0 obj << /D [1517 0 R /XYZ 90 757.935 null] >> endobj 1501 0 obj << /D [1517 0 R /XYZ 320.811 592.444 null] >> endobj 1528 0 obj << /D [1517 0 R /XYZ 90 576.23 null] >> endobj 1502 0 obj << /D [1517 0 R /XYZ 216.474 531.183 null] >> endobj 1529 0 obj << /D [1517 0 R /XYZ 90 514.968 null] >> endobj 1503 0 obj << /D [1517 0 R /XYZ 448.462 481.876 null] >> endobj 1530 0 obj << /D [1517 0 R /XYZ 90 465.662 null] >> endobj 1504 0 obj << /D [1517 0 R /XYZ 283.005 432.57 null] >> endobj 1531 0 obj << /D [1517 0 R /XYZ 90 416.729 null] >> endobj 1505 0 obj << /D [1517 0 R /XYZ 250.617 383.264 null] >> endobj 1532 0 obj << /D [1517 0 R /XYZ 90 367.05 null] >> endobj 1506 0 obj << /D [1517 0 R /XYZ 174.701 310.047 null] >> endobj 1533 0 obj << /D [1517 0 R /XYZ 90 293.833 null] >> endobj 1507 0 obj << /D [1517 0 R /XYZ 120.196 89.441 null] >> endobj 1516 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F11 1069 0 R /F10 1536 0 R /F13 1157 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1541 0 obj << /Length 1684 /Filter /FlateDecode >> stream xÚíYëoÛ6ÿî¿Âû&5ˇ¨‡‡ah·5H1`Yl`º¢P-Ú`KžMòßï(’m=œnë C>Hây¼×ïîb2ÇðGæž<@ãóÍa†ç;X½šM]yaÑ_¯g/ß0Ø…"ŸÍ×Ûf»O§d¾NÞ9…î‚`Œò¸9wA9vVUQo*õ~+¶¢pIèˆÌ%ÎFÀjÈ}æPê¾_¿ý´neë›qæKÉÌÞ½Çónøv†‹Âù¼cD¢h~˜y”é÷ýl5ûµ=C­3XRŽvY;Êö¹ÑÑVÃ$¯?î…ÒJi»\>H%^¾¡´; HäS¯9âw̱âñ,† SrÜŠª.2‘ôOb> "¢Ùà ¢d_g•("IãJßæ“K¹ïkQ.Œê‡Äu·Eo b_`y,lÏhnB)?C0l¡|R–á™H<áàD ^º Fd(•:¨¶…ø£ÙÆ%ÜyRKy¡ž.pÆ.•VªØ7q·«îYúcu-‰†L¡Mé„©:ú¸©4ÏESMÈêL5%ИÊH´©Ö÷ç¡¡­´UÏ èM¼+úƒáÈ×ñv×ÇafÈ‹ê騿‚ØTE¼·iÜæJ,æEÌf¡ÞÓŸÇ<Í*Û;ê½ÎÒªu”GP0a}ÜQšç¢£&duŽšhe ¤Ë¾ý F!‹´“;×s¾KV°@á qÕ9ô3 iÑÙWf%ò‚`®BU—\w‡â4K„α¸Ðë»"-5æK1Äi©Dêâ6º‚_A€s®‘×ö–YÓò ‡#_b¯:½6y^$i&Uú~ ¹G‘ïÓÑ@´è£hx.┬6'ê@´pÍòCêA5$Á„z}\=ÍsQ½ YzSz–@ˆifÃÓ¦®ƒêb†üŒ«ÛÑÇÕÕ<ÕÕ©;%Шk ¤gêÆiárî $£Ìs¹{ÁÖOR’౜<Æ ¤‚,§ä9Iù*3`S—|#å!ÍJQT ŠÄÖÔñxŸî²ƒ0W8ÖÅ1/E©ËX¶r}ЫIÙg !¦QµšÓ‡ È.4{¶/1ŠÂ0ë .©æ0jópÇècı¢w…ˆ“÷}ë-àoämDþ%MÆõV=E&=¼€/pÈÃ=tIÍz¬Ÿ ‰ô„|-«¸ªKWÍ“@A¹Rt³Pݧ¥a—ö­]ɤh›<«âTrë݉Pß{³;Ͷ¹Üpˆ«477ù˜×•*M´ú8Ó€S¹2M[ïÔE=ì¼Ð±*D/ã<†B0 9b $¡ØiŽ[;÷4÷ÂbïçÞÙ‘òJ*˜>(ËJ×™à´ïB1L¡z—³ì7<“78?HÞ@WrBô~+?ÉŽ8O“~¬SŒ0æ½P·eyV2( ØÑ®§xnšË~Ãdºìáÿ‰LoP¬1U/ß©Î÷Or Ô\&&L„Ÿ›ä­TÛ$m͇.ÀN&ãå²<>ÞÑ›qàä_ª›iÛ8Бf†Š3턆ʃɹ¾^^_¯ºú—»4F¢æâ0Ósr¥n7‰ṵ́ ;zÓ ‹¢Ô˹ZÕdX(⬄¸ì`(t¶u¶‘_¥âM³³#«fàÌe%ŽŠïwy‘V÷õ¹¹‡Ö¹ßìš™¹ h(ò¨º¾˜À‚ÜÄðÍ@%#Ð iò7¶¯†F>nìÞ´¡§‘7dÎ1}Tö¢õ»!x’´eCÉ å¥™ºÝô›ÙbŸf".Ϲí%,)ò¹-òCÿîLÎKa8>¯‚î¡o²œ=4pñ <5ž}@€Z*Dš…j­æfé=èè‰÷âæß\»ºƒ²}ZVº,­nî>¼º½ZéÏF3hw!s23˜¨å¤^pèe¡M£<ºT» ÷ÂbïW޳#¶=¢ûžìÀC9“}^«4ϴijƒÚZu†9$Ô‡õA‡÷Agõ_SLïþÓ¿¦«¡¶áÀ{&Þ €±¦—°øõàÔ ¨DÓZ¿œ¤Ð}ì?N/üÿpOý/§a„<<N;îQ4Õ,ÁÔ<†¥SâNi‘ôüP¸¹7$E¦Äçý'ý› Hdÿ†â£RKý†¢¥ËË]‰LqÛôçzVX»uÌ?¥1㸧$ZbºdX}QL4ônåPa¦†ß~Xý øtýZo•pª^?ê_~ÌŸv¢²åï›çOWæo8 endstream endobj 1540 0 obj << /Type /Page /Contents 1541 0 R /Resources 1539 0 R /MediaBox [0 0 595.276 841.89] /Parent 1500 0 R /Annots [ 1547 0 R 1554 0 R 1557 0 R ] >> endobj 1547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.821 382.599 208.983 393.13] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.11 209.445 275.413 220.349] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 1557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.11 86.288 275.413 97.192] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 1542 0 obj << /D [1540 0 R /XYZ 90 757.935 null] >> endobj 1543 0 obj << /D [1540 0 R /XYZ 90 733.028 null] >> endobj 1508 0 obj << /D [1540 0 R /XYZ 249.958 617.01 null] >> endobj 1544 0 obj << /D [1540 0 R /XYZ 90 600.479 null] >> endobj 1509 0 obj << /D [1540 0 R /XYZ 90 496.481 null] >> endobj 1545 0 obj << /D [1540 0 R /XYZ 90 482.107 null] >> endobj 1510 0 obj << /D [1540 0 R /XYZ 327.378 446.958 null] >> endobj 1546 0 obj << /D [1540 0 R /XYZ 90 430.426 null] >> endobj 1511 0 obj << /D [1540 0 R /XYZ 391.935 367.755 null] >> endobj 1548 0 obj << /D [1540 0 R /XYZ 90 351.223 null] >> endobj 1512 0 obj << /D [1540 0 R /XYZ 90 333.733 null] >> endobj 1549 0 obj << /D [1540 0 R /XYZ 90 319.359 null] >> endobj 1513 0 obj << /D [1540 0 R /XYZ 199.329 286.132 null] >> endobj 1550 0 obj << /D [1540 0 R /XYZ 90 269.974 null] >> endobj 1514 0 obj << /D [1540 0 R /XYZ 279.996 212.599 null] >> endobj 1555 0 obj << /D [1540 0 R /XYZ 90 196.067 null] >> endobj 1515 0 obj << /D [1540 0 R /XYZ 199.329 162.975 null] >> endobj 1556 0 obj << /D [1540 0 R /XYZ 90 146.817 null] >> endobj 1027 0 obj << /D [1540 0 R /XYZ 283.084 89.441 null] >> endobj 1539 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F11 1069 0 R /F14 1084 0 R /F40 783 0 R /F27 1553 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1560 0 obj << /Length 2461 /Filter /FlateDecode >> stream xÚ¥œMo#7†ïþö"Ìð£Ù$ƒÅ²Ù 6X`±{HrÐXš‰íÈšMf~}ØMR,Q­·,æ`Ù*Õ£zõ{$©•ŒÿÔ*È•³NcW÷oäêCüëw7*ß{ï¾%÷swóÕ%ÂhVwïç‡JX­Vw»×V„Í­’R®__~9|ÜÜj+×o‡O÷Çtû‡ýûýa£üzÿ´Qëû}ü«·Ò­µÙü|÷ýÍ?îNìü̬'ò¯7?þ,W»ø ¿¿‘¿ú-Þ–B…°úx3h“o?Þ¼½ùÏ©Gú»‰_Î*³8R"X[ÆÓFÈÑþùñâlq¢¯Þh]ãŠiêA˜!ÌíÞ¾ìï‡íczèÿ6Ú®·‡‡í»ÇýkúÓöi—nÙ?âÍ!¬wûÃÃT™Êù¶²ëý«HÀAž•£fà_žî?íòSÄ£5ÂÅLå\ö×Ë>N¸ø¤ÓÝqvñËe „÷¥ÅßÒýô¥r”bзF )Óúv{ܦ ß<ìw¯ ¯QbL¯ÅW'¹öGãVrŒHê1!ÒÚ¶%ãC´…¬RƒjAº3àîùS4zaUƒœî8|È?Px®Æð¦å?ì_ï¿^ÐŒ¥ìSÉ­Ò™p=e„çŸkØük/?–ü ÉŸ";òGð¦eÉÿ·Š›òFO›ø…+4ÛO¬©„²;È5¬ƒÚ 8@À„Ž<÷»ÊŸó® È՘ܴœÈ4üi'yüürùZ­‡ŽîR gÂz/ ‰RÙ ½®›€Àl‚‰3o’›–9åÿø¼l \€#»T˜LáM!—°ùŸ:ø­¤_ixWDyüž‘ÏNä÷‡ýåA`Œ{x çt©‚Í<ê ƒÂ¡ç6õÚ ÄŽ€%wd‚§ÈŽä¼i9Á·Kà’=˜¶7|+…–‡ŸkØðk/>–ð Ÿ";ÂGð¦åß?Åóñ‹ð•G§u©„ ß81D: ?×°á×^ |,á >Ev„àMËæàû´tÐua„S»TÂJˆk*—8PB®a%Ô^@ ÈH È Þ´œ»‡ínéx«ãqMëR þ´Zö‡ŸkØðk/>–ð Ÿ";ÂGð¦åÒéçÒV ½‡“»T‰BzÀ áRÉ ½®‹€À,‚±ˆ3$/›–éì3:x~9.žy8°›+Øøý(¬ÄëàRÃÆ_{ø°ÄO€LüÙ?‚7-'ø—Åèã1Ö)8­K%løÎÇœõ—6üÚ „€%|d§Ȏð¼i9Ÿ€N»t"ï„Ðä½;¡èTj¼þ-5¬ˆÚ ˆ@À"‚Ù!Á›–t ¼´%Øø`4±K%¬€Á .ÿTÂÆêÒ´~¥1Ù^Gô€|Þp"¿Û·K¡+eМ.U°™Wjxù[jØÔk/;–Ü ž";’Gð¦å Ÿ®=,®}|I»ŽR k@ká^—Ö@í `1@€ŒŠì0€àMË>¥¿x¨#÷PRH‡Â¥†5P{X  c€"; xÓò´ ,^ŠðZŒ^ÑC*á ˜à„1x\j8¤×u˜ P 6p†ä @xÓr†Oé/o)^4r¯¹/…K k ö° @ÆEv@ð¦åi€W„â:À+G©„5ÜÞâµp©aMÔ^ÀȘ ÈÞ´œáÔÂò6‘M€Ñ{MØÏ¡ð²¸Ô°&j/`‹ dLPd‡ oZž¶‰Å tÞ=À‰Ã\Áæ?ŒÂ8¼2.5lþµÈKþÈäO‘ù#xÓr†OÙ/o)0qgþƈÑàY©aó¯½@þXò'@&ŠìÈÁ›–KÇ„åk¤qoǃã‡TÂÚÐR0.æ ÖDé<\G 'ã Â: \Çžµksò׎súWGîÍ^z×Ü8ý\Ãæ_{X c";< xÓ²®’¹ uſӆVÄe´Qj8¤×u˜mP ¶q†äm@xÓ2­˜hË@ã÷Ú˜!xõ\jXµ°€Å26(²Ã‚7-ëYÒµk§±ÐŽR kaŒOcÀ+èRÃZ¨½€,±@‘¼i™Î•²k«èٻׂuBK¼Š.5¬…Ú X@Àb ÙaÁ›–‹Çìü^ðåÿÜôÓ5 CH%¬•ø\†¯¨K k¥öV°X!@Æ EvXAð¦eÞ6’þ\Ö ëAH%¬£„Óxe]jX#µ0‚€Å2F(²Ã‚7-·“/W¶ÍŒR kCy<^g—ÖFíl `±A€Œ Šì°àMËþ¥sÛÐÌø½6bâzÀ+½RÃÚ¨½€ ,6±A‘6¼i¹¸m°ëŽ Å8h&ŠTéQÁæÿJs '¦vºîѲBÃV(—‚Èç ìÆ’•À:x)œc”äÖIí¤ `±B€ŒŠìð‚àMKpÂum12 ¯Œ!¤ÖÊè…4x^jX+µ°‚€Å 2V(²Ã ‚7-Ï#“ž ˆ³C¯k…x¡^jX+µ°‚€Å 2V(²Ã ‚7-÷b×·'¤a!•°F†¸¬´xÑ^jX#µ0‚€Å2F(²Ã‚7-϶þÒb6"è52}Xá|©aÔ^À#È¡È#Þ´<3²øž4o„‚C‡©€5 ’)h ×°j/`‹d Pd‡oZÎð9ùÓÑbù’b ŽR kB¼H/5¬‰Ú ˜@Àb‚_Ó—´H„5Ã9òº‰\áMËùÓ÷¯ûÃÂdzF!ý€çÍ5H5d<Þ[gÏ–Ò\~ ;6\ï´¹OÛ´œ?ж0jÜë*‰Õ†T½Ҧ÷é|ý!—p¯³ÚéúË Ñò«ŒÐÒÕ±‡]þÒ¢HK!ãpòº›x<2Q4}R`—ŠáÓ;o8q_¶»ÝÃӇ˗ŠoP>UÌ_i1,î°§ïÐPãÿñ&éþ^8òQk£V£nÈ_Qbã–eÓØwÓÛܶÇ}þÞç§ôónôúÓ>ýòïòe%Cú¡Â×RmdúMK¥Ò­÷Ó¹õó!ýòß¿¿ý×F­ÿùM~¨ðB§›ï>§Ÿß>ÿþùÃþâ]]Ó—¬ä'HâùôªJ endstream endobj 1559 0 obj << /Type /Page /Contents 1560 0 R /Resources 1558 0 R /MediaBox [0 0 595.276 841.89] /Parent 1500 0 R /Annots [ 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 1606 0 R ] >> endobj 1563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 623.483 171.514 634.387] /Subtype /Link /A << /S /GoTo /D (structspxprm_533847a7e77e2bba8ce886289d31abdb) >> >> endobj 1564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 612.801 176.196 621.648] /Subtype /Link /A << /S /GoTo /D (structspxprm_d3a5b851397a50e8644aeda10b184776) >> >> endobj 1565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 598.005 166.642 608.909] /Subtype /Link /A << /S /GoTo /D (structspxprm_2c20a26fe559feacc85e6e76c31bbbc3) >> >> endobj 1566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 585.266 163.076 596.17] /Subtype /Link /A << /S /GoTo /D (structspxprm_e83f0b38ecd0b7b7b6afb6eb42a61fd4) >> >> endobj 1567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 572.527 161.551 583.431] /Subtype /Link /A << /S /GoTo /D (structspxprm_f2a797bbae7610552aa9adfe75118908) >> >> endobj 1568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 559.788 161.551 570.692] /Subtype /Link /A << /S /GoTo /D (structspxprm_5f4248299fb8a02ff1df6ed3d1baaa1b) >> >> endobj 1569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 549.106 162.657 557.953] /Subtype /Link /A << /S /GoTo /D (structspxprm_b67c62285ad58f5f0c1a88cb15ac3408) >> >> endobj 1570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 536.367 166.792 545.214] /Subtype /Link /A << /S /GoTo /D (structspxprm_a37e50cd66795673d6bd43883a1be540) >> >> endobj 1571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 523.628 163.215 532.475] /Subtype /Link /A << /S /GoTo /D (structspxprm_41ee038d00742dcf8cae9b6ed45a699b) >> >> endobj 1572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 510.889 166.085 519.736] /Subtype /Link /A << /S /GoTo /D (structspxprm_7ba88553a468a9ef696c0c1eeda6864f) >> >> endobj 1573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 496.093 163.026 506.997] /Subtype /Link /A << /S /GoTo /D (structspxprm_1d7fd26e54e3b253a9e26163445cbfc8) >> >> endobj 1574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 483.354 162.667 494.258] /Subtype /Link /A << /S /GoTo /D (structspxprm_968cf3d8e4b0d082c6d617f5a38344f7) >> >> endobj 1575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 472.672 166.085 481.519] /Subtype /Link /A << /S /GoTo /D (structspxprm_ef53f8244101a4229518b25b08143d18) >> >> endobj 1576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 459.933 162.518 468.78] /Subtype /Link /A << /S /GoTo /D (structspxprm_51aa1b37a464c53a5c07a9a407c4b96c) >> >> endobj 1577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 447.194 162.109 456.041] /Subtype /Link /A << /S /GoTo /D (structspxprm_6d41ec682a058f4028032bf6934f7fc0) >> >> endobj 1578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 432.398 182.572 443.302] /Subtype /Link /A << /S /GoTo /D (structspxprm_a75c986198c4673e2caa30bd4ac73a30) >> >> endobj 1579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 419.659 182.572 430.563] /Subtype /Link /A << /S /GoTo /D (structspxprm_678577f6866727419716361586fe34bb) >> >> endobj 1580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 406.92 183.678 417.824] /Subtype /Link /A << /S /GoTo /D (structspxprm_a419711bf0079fff37d4adbae3278f5c) >> >> endobj 1581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 394.181 183.678 405.085] /Subtype /Link /A << /S /GoTo /D (structspxprm_2d4ca3a63bb8871faec7928c8f713484) >> >> endobj 1582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 381.442 187.813 392.346] /Subtype /Link /A << /S /GoTo /D (structspxprm_c0096d466fedc5ec61948044af06551d) >> >> endobj 1583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 368.703 187.813 379.607] /Subtype /Link /A << /S /GoTo /D (structspxprm_34e6a4ba58cd67ef619ab48a58c8b808) >> >> endobj 1584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 355.964 184.236 366.868] /Subtype /Link /A << /S /GoTo /D (structspxprm_9c60b90b7911b9846b353991dbf38084) >> >> endobj 1585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 343.225 184.236 354.129] /Subtype /Link /A << /S /GoTo /D (structspxprm_1f9bd735b5ffa618aa0713616a3b2b87) >> >> endobj 1586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 330.486 187.106 341.39] /Subtype /Link /A << /S /GoTo /D (structspxprm_9cab306f378116a9b9388bd215a98c0b) >> >> endobj 1587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 317.747 187.106 328.651] /Subtype /Link /A << /S /GoTo /D (structspxprm_90656bb22c7fdb8c750ee5a16745334c) >> >> endobj 1588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 305.008 187.106 315.912] /Subtype /Link /A << /S /GoTo /D (structspxprm_a6ef9cc07973932f19c48062199e6689) >> >> endobj 1589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 292.269 187.106 303.173] /Subtype /Link /A << /S /GoTo /D (structspxprm_c9e44005ceadafb8158df81fe022f46e) >> >> endobj 1590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 279.53 183.539 290.434] /Subtype /Link /A << /S /GoTo /D (structspxprm_25de138f15027a948887f59f79b59d91) >> >> endobj 1591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 266.791 183.539 277.695] /Subtype /Link /A << /S /GoTo /D (structspxprm_6300648f1270fbd6f45fefaac054db70) >> >> endobj 1592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 254.052 188.331 264.956] /Subtype /Link /A << /S /GoTo /D (structspxprm_307491e5045c959ed5212c54b6e300e9) >> >> endobj 1593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 241.313 188.58 252.217] /Subtype /Link /A << /S /GoTo /D (structspxprm_709e6f9fd2c706705a019d865280526f) >> >> endobj 1594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 228.574 188.221 239.478] /Subtype /Link /A << /S /GoTo /D (structspxprm_203c7de3b62de030e721e99cc0a5799b) >> >> endobj 1595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 215.835 188.221 226.739] /Subtype /Link /A << /S /GoTo /D (structspxprm_84d43f663df39a476b33a9516f3662eb) >> >> endobj 1596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 205.153 191.639 214] /Subtype /Link /A << /S /GoTo /D (structspxprm_f252fd0c875bfe2dc99c56617ae2faa8) >> >> endobj 1597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 192.414 191.639 201.261] /Subtype /Link /A << /S /GoTo /D (structspxprm_78d8a2235f18250cfa97a32625ab72a0) >> >> endobj 1598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 179.675 187.823 188.522] /Subtype /Link /A << /S /GoTo /D (structspxprm_75c591192f69d3e284d037d0216c2179) >> >> endobj 1599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 166.936 187.823 175.783] /Subtype /Link /A << /S /GoTo /D (structspxprm_cfdb74852a20099c1cdc3b2cc8faa03b) >> >> endobj 1600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 154.197 188.072 163.044] /Subtype /Link /A << /S /GoTo /D (structspxprm_7e1e561ce26f9be86978783bbd0dd496) >> >> endobj 1601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 141.458 188.072 150.305] /Subtype /Link /A << /S /GoTo /D (structspxprm_5ab73474c2a6e92885c805cc017f6fbe) >> >> endobj 1602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 128.719 184.097 137.566] /Subtype /Link /A << /S /GoTo /D (structspxprm_1d7633da24d461d6f791e003be2a508a) >> >> endobj 1603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 115.98 183.897 124.827] /Subtype /Link /A << /S /GoTo /D (structspxprm_cc8a46737906be2cee7cba0b2aa09d87) >> >> endobj 1604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 103.241 167.08 110.962] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 103.241 188.101 110.962] /Subtype /Link /A << /S /GoTo /D (structspxprm_b232cb470b7f96330512dea46791644e) >> >> endobj 1606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 88.445 175.479 99.349] /Subtype /Link /A << /S /GoTo /D (structspxprm_c8f016fe8e911c4ffbedde63318bb3db) >> >> endobj 1561 0 obj << /D [1559 0 R /XYZ 90 757.935 null] >> endobj 138 0 obj << /D [1559 0 R /XYZ 90 733.028 null] >> endobj 1562 0 obj << /D [1559 0 R /XYZ 90 642.244 null] >> endobj 1558 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1652 0 obj << /Length 1559 /Filter /FlateDecode >> stream xÚÅXKoÛ8¾ûWø(5ÇžÙÓv»é¶X`wSc{H{%Ú SŽIÜ_¿CåȲbg‹F˜çñqf8$›RøcÓ˜NC?$±ð§éfB§+ ¾Ÿ0;;ƒéYoþí|ru#`‰1/Íò€Ÿ³é<»s|»3F)uêíÓ¶Ú¸3îSçSSµiƒã[¹”•Ë"G*—9©jäÓÐážûuþqòû|¯ÛZæ‹@k¾ŸÜ}¥Ó ,ü8¡DÄÑôÆ”°8žn&v\L>MþÙË@ºú˜s>ç½ã‚ÐÀï¼#Ìú÷N6I^È ½z'ë´Ê·M^*íÆÕ çÏRBîáÅFÈ|-‘¥¯ˆE$ŒÁTÃa¡;’#@¿uLS!ÅR1ªÆ¯À€;.÷¤hgK)—È’ê­L›*±_¸ Ê“E!k\‘¨l/5¯p˜É*לÈÞØ1óYwæûžóÁ–[“ÚZf(¯. Y€A;ü\ìFv=ˆA…[¦iÕÊNÞ"³Çiö®VO‚*Ó§/Ô§ðφJ‹‰à‡Š±bYNªdœ‘ˆ¨}\çécv 7­ÆïÜfIJ*mžäjYÂÆ3 *’¡m«RCûg]¬=äI'ÀJZ¶*}^‘˜ôZµ©Øpu:ư IÀ=†zsxìï#ÉŒ×e[d8^HüÕvƒöJZz%“lVªbç¾óö‘Ž*qn#7 YYÁJvKäsˆT‡Âki5«²:6áåu›2Ë¿PÊ; H:Õƒ,Á|5™ !ø«\ßwÈqæQŽ‚}†s›á7¹,ºô.SgÒ%ø §Í²}iÈÊWb.__cÉ«ØÜ¥ßÖ ³Ah¼ŽUäñú5€Úp+›¶R€Àq¥€Œ¹e3oko½9yßJ•jhwHºûãÛ×|fÔU[”üž»ü¼»àmó˜à&^ÒÝG—A^¸œÚ`*¤Z56-ï6çÝîÖí\5‡>wŽ‚*Ù춦ê¾è´÷³œž»R´µû‘/Ç@*X)m YM.¤T]á_6Û¶‘Ù”M BþvÞKØ!jEy9Ü´'`0€rž™2Í›Ý9à¼ø8Dí—£UIeudRW1ÕÕö¨ÑQô¨k«­Ýš=ÿ?hËÂÈ)•´]ÃØ)¡äU–´<:å]ÅÔƒ£Œ{Ñ™óµãžõØO¼Èçöj¤ß²ºZÁ¡¡?´bpØv<'usæ{ºu`õy:.^ëuÇ}Zó@äÐë~¶ ¬4&÷Nzßñœ´A08pâàÀs¢ÃÖ¯z-™B’ÎUªÙ7Y•6è!\ôq´F–›BÍûÜê¯AS¨I›O[Ø'4]ÌtsBCCß?ÁÚ„,¥)¼0€Á¹ºÂ°À1ÁÖAüãüêNÒH ö»8C¡¦2Y*¬ïoÅ¡ÖgC4&V­ik q¤bBŸ“®“*Ih€ë&OGZŽ'“‰Ü .Lúã\`  °™[ؘø•É­TY®VÈd? c»3ˆSëBG™¾ˆÔvjHV5®ÎAtš4rÄ»Çub wÞ2DHëË ­ïu-ñO4Ø Éû œ7ã}ŽÆõ…á³’“iöùXaHhÈz ÇNdÏc#x'ðJÎv”? ¯_Õª-’ê妲J²«ú$~Œy$æÑ0†‚D£ÃJ8F¡Ô\¿¿×eÓÝÛÀ ¼¹uØ}<‰[xøÃâN,í^G]ºÏn4ÒÒªV_@-€W›Ó€`ð:ÏÐ0>àC•xÙÀ»M²¼|©»½ÛœIÙt‡±ú€mûpšÿ,r "1‚£gb/°—­ \-ÿucN’¶íæU7Ì“Ú=ö½‰ý Ióá­]J"ýaîN»î±æi·’jˆŽ~ì=†ç?[¯©u endstream endobj 1651 0 obj << /Type /Page /Contents 1652 0 R /Resources 1650 0 R /MediaBox [0 0 595.276 841.89] /Parent 1500 0 R /Annots [ 1654 0 R 1659 0 R 1660 0 R ] >> endobj 1654 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 683.608 120.316 694.512] /Subtype /Link /A << /S /GoTo /D (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) >> >> endobj 1659 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.957 416.095 224.378 426.998] /Subtype /Link /A << /S /GoTo /D (structspxprm_533847a7e77e2bba8ce886289d31abdb) >> >> endobj 1660 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.316 416.095 310.42 426.998] /Subtype /Link /A << /S /GoTo /D (structspxprm_d3a5b851397a50e8644aeda10b184776) >> >> endobj 1653 0 obj << /D [1651 0 R /XYZ 90 757.935 null] >> endobj 142 0 obj << /D [1651 0 R /XYZ 90 733.028 null] >> endobj 146 0 obj << /D [1651 0 R /XYZ 90 643.341 null] >> endobj 1607 0 obj << /D [1651 0 R /XYZ 90 618.972 null] >> endobj 1655 0 obj << /D [1651 0 R /XYZ 90 618.972 null] >> endobj 1608 0 obj << /D [1651 0 R /XYZ 222.123 583.842 null] >> endobj 1656 0 obj << /D [1651 0 R /XYZ 90 567.944 null] >> endobj 1609 0 obj << /D [1651 0 R /XYZ 224.056 534.852 null] >> endobj 1657 0 obj << /D [1651 0 R /XYZ 90 518.954 null] >> endobj 1610 0 obj << /D [1651 0 R /XYZ 325.993 485.862 null] >> endobj 1658 0 obj << /D [1651 0 R /XYZ 90 469.964 null] >> endobj 1611 0 obj << /D [1651 0 R /XYZ 162.089 383.382 null] >> endobj 1661 0 obj << /D [1651 0 R /XYZ 90 369.541 null] >> endobj 1612 0 obj << /D [1651 0 R /XYZ 250.337 334.392 null] >> endobj 1662 0 obj << /D [1651 0 R /XYZ 90 318.494 null] >> endobj 1613 0 obj << /D [1651 0 R /XYZ 291.004 285.402 null] >> endobj 1663 0 obj << /D [1651 0 R /XYZ 90 269.504 null] >> endobj 1614 0 obj << /D [1651 0 R /XYZ 258.347 236.412 null] >> endobj 1664 0 obj << /D [1651 0 R /XYZ 90 220.514 null] >> endobj 1615 0 obj << /D [1651 0 R /XYZ 262.352 187.422 null] >> endobj 1665 0 obj << /D [1651 0 R /XYZ 90 171.643 null] >> endobj 1616 0 obj << /D [1651 0 R /XYZ 265.579 138.432 null] >> endobj 1666 0 obj << /D [1651 0 R /XYZ 90 122.533 null] >> endobj 1617 0 obj << /D [1651 0 R /XYZ 285.186 89.441 null] >> endobj 1650 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1670 0 obj << /Length 1199 /Filter /FlateDecode >> stream xÚÝXMoã6½ûWè´•5ÃOQ °‡n·»hP`ÛÄ@iŠDÛBeÉ‘egÓ_ß¡H9J,ËJ‘®ƒ"@LñsæÍ{$‡ÄÃðG<…=)$RLxñr„½9Ô~×:æI«ýãttö™Á(¤æMgõð€ A‰7M®}ÔxB0ÆþzõmU.Ç*°U•›¸²åK=Ó嘄¾ÎÇÄ5Ô†KŸŠñÍôbôót·¶³L°À¬|7º¾Á^^Œ0b*ôQÊ[Ž8e®œ®F¿ïæ°õ 껜„÷Ž2„Ñx‡("Ĺ˜›ÛL[·¬»ççÛ1Á~±×*ãÏÙgJ§,‰DåõlbmÞêÃ#!ô4=.uµ)sìÏÄ$qÝ`"b­øºªÒ8Êì˜"|qZ=ØšëåÙúÆ»W!R¸Y} c«‡•îXÔ¢µ:²}ÚЧQB½ £uÀ¿OÞ¥NÖ‹tæxz¤K¯Ó"Ïôº5B0é0Ø‚c°…Ñ@vÁÆz`‹î£1 æß·ÓÒî ÷ÁŒõt>¯ õz! ’œ¹©ï£­>€ DX0¢¼ãÇ„«3à^qîeQ•Ž©ð·é4ܧ`0ñ9’äµT†w£)zмÕFÄÑ›AòVƒ1m]ƒyƒ¤Í âT¾Ž´© ëÄ2èÁ2™Áy©|}Íêƒóî¨~Ò¥ÅÔükð­ÙiÛ‹™ý•ún£óØ49ÊÞ§ÍÖûz½ÒÍU *ìo”Ï7YTœáú¬Œ’V˜â"_WQ^½·æ‡-ë1lž»p}€!RúÄv#­P¸zìö|ŽTØ`@÷G›fºƒˆ‘}„Y› ïG[@¨‹L vóCöñ#š°––!ú1>Ml¢Û4Öíý«\7ÒFBˤư+OÂx8M& ™Ùêíaõ°vuöÔ2äN³ >¼2Þ£pˆ†u·ßÿ™~W‹¢*r[®ý ÎwÚ½xrç<tšÃýYÐjw±ÜÆ$¥/WŸ`u¢ÐYÕÙ:ÑåÛVÞŰ0Ô$QO6Æ'àc$H³³u`/àGžÊí·,Êã¿~ á;±=®ß­G®^ GÉ€ôl?jÑ£¹6ƒòï6ôkÚkMr±§Ihrš„R¹$|Ô‚„Ï/â¶5ß,ouiËM&ÅcªäxÈŒˆ÷çQ›\úÕÂY¦í$m?Kç çPZÇ‚Ëì ¬‚”ìe¬†-ÞlŠÁÇŽ&¼M“¾l>1ð¹Ì*?®pqB…¯Ï–x»ŽW8Ã8¶Ó66èˆ-à§Ø«®!ì¼+Jtˆ˜·pÁ8AtþÓÃ\J‹ƒé }ØéÆ1"Xu!Û÷ªlYQò¶©ßÿ´ aë žœ#ÍòïÞu¤‚©Û_šU?{×°˜à]o’f"ø÷/žõ‹m:"ªý¤ %¹{Òt«¿˜ûZTiÇæ7+êoÜ_JrûCÔ9¦ç Û/Љ‹ÔÌð¾piÜ?]ý Ôù壊BD]*î¸û©øö0×ùstÌ›ì><ÿ¦l~ endstream endobj 1669 0 obj << /Type /Page /Contents 1670 0 R /Resources 1668 0 R /MediaBox [0 0 595.276 841.89] /Parent 1500 0 R >> endobj 1671 0 obj << /D [1669 0 R /XYZ 90 757.935 null] >> endobj 1672 0 obj << /D [1669 0 R /XYZ 90 733.028 null] >> endobj 1618 0 obj << /D [1669 0 R /XYZ 271.108 705.441 null] >> endobj 1673 0 obj << /D [1669 0 R /XYZ 90 688.714 null] >> endobj 1619 0 obj << /D [1669 0 R /XYZ 283.163 655.622 null] >> endobj 1674 0 obj << /D [1669 0 R /XYZ 90 639.014 null] >> endobj 1620 0 obj << /D [1669 0 R /XYZ 265.819 605.803 null] >> endobj 1675 0 obj << /D [1669 0 R /XYZ 90 589.076 null] >> endobj 1621 0 obj << /D [1669 0 R /XYZ 286.919 555.984 null] >> endobj 1676 0 obj << /D [1669 0 R /XYZ 90 539.257 null] >> endobj 1622 0 obj << /D [1669 0 R /XYZ 313.628 506.165 null] >> endobj 1677 0 obj << /D [1669 0 R /XYZ 90 489.557 null] >> endobj 1623 0 obj << /D [1669 0 R /XYZ 501.568 456.346 null] >> endobj 1678 0 obj << /D [1669 0 R /XYZ 90 439.285 null] >> endobj 1624 0 obj << /D [1669 0 R /XYZ 353.165 406.527 null] >> endobj 1679 0 obj << /D [1669 0 R /XYZ 90 389.8 null] >> endobj 1625 0 obj << /D [1669 0 R /XYZ 479.135 356.708 null] >> endobj 1680 0 obj << /D [1669 0 R /XYZ 90 339.647 null] >> endobj 1626 0 obj << /D [1669 0 R /XYZ 417.356 306.889 null] >> endobj 1681 0 obj << /D [1669 0 R /XYZ 90 290.162 null] >> endobj 1627 0 obj << /D [1669 0 R /XYZ 154.259 245.114 null] >> endobj 1682 0 obj << /D [1669 0 R /XYZ 90 228.761 null] >> endobj 1628 0 obj << /D [1669 0 R /XYZ 358.095 195.295 null] >> endobj 1683 0 obj << /D [1669 0 R /XYZ 90 178.234 null] >> endobj 1629 0 obj << /D [1669 0 R /XYZ 400.652 145.476 null] >> endobj 1684 0 obj << /D [1669 0 R /XYZ 90 128.749 null] >> endobj 1630 0 obj << /D [1669 0 R /XYZ 308.767 95.657 null] >> endobj 1668 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F8 1129 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1687 0 obj << /Length 867 /Filter /FlateDecode >> stream xÚíXßoÚ0~Ï_‘§*HÅøGÇDȺKÞå4,Ÿ½t\plQSÍ–eÅJŒÔØ…Aüb\¼9£3²1,RÐw\¼s¸Ehtšó¹Ncqh±á#Ey_è.±ñø/ÅD¦ù]4,–ñ­!Àš ~ü0ôo>|‚„¿¯£î‰þ„"Ï­s‰» û?@a¿ßØPñB ¢‘Jò(Mb•ל°ßŽq·,þ?Vž@z7F¡ ºÝ‡ÀÆ|ï"_ւ뽪:ìo‚}çý-?^,ŠžÝÊqÈuÜ­»QÃñøëïë÷îD®^ÈyH ×\È™ÝKdÏU¢² PFÛ4Ñm¯%©35˜þ¨àpuCdÓnYB—Oã›a Pjòï/Wßáo'æUä#ª»7¬ÓôþáÜð òFqž?6 Dt endstream endobj 1686 0 obj << /Type /Page /Contents 1687 0 R /Resources 1685 0 R /MediaBox [0 0 595.276 841.89] /Parent 1702 0 R >> 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 1631 0 obj << /D [1686 0 R /XYZ 431.646 705.441 null] >> endobj 1690 0 obj << /D [1686 0 R /XYZ 90 688.714 null] >> endobj 1632 0 obj << /D [1686 0 R /XYZ 261.455 655.622 null] >> endobj 1691 0 obj << /D [1686 0 R /XYZ 90 639.014 null] >> endobj 1633 0 obj << /D [1686 0 R /XYZ 413.354 605.803 null] >> endobj 1692 0 obj << /D [1686 0 R /XYZ 90 589.076 null] >> endobj 1634 0 obj << /D [1686 0 R /XYZ 261.455 555.984 null] >> endobj 1693 0 obj << /D [1686 0 R /XYZ 90 539.376 null] >> endobj 1635 0 obj << /D [1686 0 R /XYZ 421.991 506.165 null] >> endobj 1694 0 obj << /D [1686 0 R /XYZ 90 489.438 null] >> endobj 1636 0 obj << /D [1686 0 R /XYZ 308.767 456.346 null] >> endobj 1695 0 obj << /D [1686 0 R /XYZ 90 439.738 null] >> endobj 1637 0 obj << /D [1686 0 R /XYZ 440.233 406.527 null] >> endobj 1696 0 obj << /D [1686 0 R /XYZ 90 389.8 null] >> endobj 1638 0 obj << /D [1686 0 R /XYZ 307.661 356.708 null] >> endobj 1697 0 obj << /D [1686 0 R /XYZ 90 340.1 null] >> endobj 1639 0 obj << /D [1686 0 R /XYZ 412.986 306.889 null] >> endobj 1698 0 obj << /D [1686 0 R /XYZ 90 290.162 null] >> endobj 1640 0 obj << /D [1686 0 R /XYZ 311.537 257.07 null] >> endobj 1699 0 obj << /D [1686 0 R /XYZ 90 240.462 null] >> endobj 1641 0 obj << /D [1686 0 R /XYZ 489.737 207.251 null] >> endobj 1700 0 obj << /D [1686 0 R /XYZ 90 190.523 null] >> endobj 1642 0 obj << /D [1686 0 R /XYZ 303.796 157.432 null] >> endobj 1701 0 obj << /D [1686 0 R /XYZ 90 140.824 null] >> endobj 1643 0 obj << /D [1686 0 R /XYZ 454.928 107.613 null] >> endobj 1685 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1705 0 obj << /Length 2016 /Filter /FlateDecode >> stream xÚíZmoÛ6þî_a`À 3CŠ¢Dë€m]‹v†µö! Ef¶”IrÒüûßlZ’)oE»/ÀEO÷ò‚gŒˆóí,‰©}ÞÌÞÏ~ßë0ï)¼‹Ž:^LN™ O Ñ̆¸ªw·iÂj>B¸——«ÇÁ‘„Ð6µzzÊ1‹ìKðâUôº$Ciœhõb†LâÉPD I%ñNv»¦’«¡&š¢L+Šˆq !´XR0þXÖSð…E²isóëõE{cžÆÍg€άâ§üQvÏ#‘PXêìýõPÄ)µrSŸÐCEæÅŒŒÏÊ2ÆeÀÉ’ÆZÚㆇ¸ÉŸ€Cˆa8úòœ¼”Mi’þ—wöY‘bÖë;ó3/óð¤|·wY­»ûýZTº_Ù>HWh]í^nœ‘²íÊÂÏ‚M]”ݳM„öæk¸Z²gˆ~…†ÅøâÌÂÈ]Uü_Ÿ» |&'·²Ë¿4±¬ëb€Ÿ#Y o{Y ožL1è/\1À/º¨*ìˆ&¾¹Þ^€ŒÎjr ¨«VITuߘÀ¸WœB9¤6°fxäŒqëŘàs¸¨¤4êîmôÁ˜åa€}IÌPì:Ŧ\ßÛª/+—Ô Ïb·Ã ë³ ¥ ¥Ï-`¢pÛïpÿI?=£¤Û‹­WӆϪï‡|Øïy’ìù\ÆÈ­ %Âùüb„W€Oį ÿ t;ní;Ó×[å&ŒOÕ8áPã #)¶$µÞœõT´²i¬ß‰ŸŽ ~@Ó¡­ %™sÝ‘½W–àƒ Œ~8u¹}ÝÈ|u3bIRè…D|Ö<4z£ªA$0X*W€9ÅIôt/+³žWv½iêÆ¼‚4èv­y.[³Ü€]È mZ¿èîËÖ‰[|á’¨ËËÊ~´‚2(7æ PUÝÕͺLíLßÖ;ûªm]ÐnÕõœêXŒg vùÒJÙŠI,atž@$nhW ÍÚJ¼ó\'½ôÄõëÃÙW©÷5= ”Š+ sß|ÁääKoÄv2azŠ”È D°ýÞËGU2u¹&wŒÆlÛÇíöýùjUVëCgøÞvÏ]µkåÊï¤M™ïûŸb_Ó9‘»ºq^®«­¬l >욇º•¶Òëjó¼HY„–°o+oÒ£à^ÃV }bIqdúr±d˜Gºw™Õâ>«oÕ˜0=¨ï@õ¶]_ß½Kóã½­ õÜèZ4Ï[Ù¶ùZÚ•ŸL1 ÔŽ«ßæ]qo_©mM=ز3g”'Gûš‰{³“n‚µÀ€ÝÔöX)ó¾w»ªJTÁ»±QÛ3õÆ5šL©Ú¸é?n”.©œ°‹ a #WSZ‚Ïþʼn¹?CB¬ZßÕ‚CÞª Ùmr›–]“W­ß’TnæM¾Õû7ì“hØÚݶm@ûª¬ŠÍn%‡û £ÐŒ]Ïþv¨'ƒMKØeˆÝU@ÿáÜ©øndëD·â)“—yg7÷W¥Ü¬Ú‘˃8Ž&ÙÉ{ o}Ø‘p &ù^‡N8fƒˆáÀ(dËÉ„ ’D+|ƒ%ô‘Aû‡"üØ^ ýé°åžJ—íùz`<‰‡3M(XfDÀ4d}|{ÀDݪ±·2“Øt°tØ{CØûöÎÀ>d¹§RYþu`WÍ;YŒ31"vrv"à°=.»“™‚ÝÓuö A »oÐÂÞÛÒ(¤[b=Fˆ!*Ž=:MŒ»v¬PÙýy¬§A˜™ªÂáŸÆaZ¬Ì$-]ZB-žÁO£Å÷hš–kÇ •Ýmþ00«POÂH¤Fd²^2ŒbBÂÄX™IbºÄ„ :b<ƒöX>„J1q‡LÁ³c¯N“c¥ÃþõTêûŽÆÎrûA):B¨p#2Y=,C1a’¬Ì$I]’BIžÁ³I'*yqìY€(#ö±§ÒT8 w„E‡Dq}> !ÃÈd5%0§BÀA¢¬Ì$Q]¢BQžÁO¯&ß«3ª)ä_O¥®¦ºnVC‚”Â)$„7"“Q‚( OÄNf’ ƒ®A!ƒŽ Ï``*;²7=•-÷T*ËU1ÜÝ2Dá³P ‰™ì`„Ù=< ;™Iܺ¸‡ :Ü=ƒ!Ü}{gà²ÜSé_Ñô­Ãá\ABÑfFd2é1C ›˜‰­Ì$ø]ðCøžÁO¾|¦‡¯kÇ õ•‡¬Z9¾añ ©™ª SÅVdŠ˜ƒ¦Ó¼„¬YZ> endobj 1713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 429.656 194.318 440.186] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 218.863 143.858 229.767] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 1717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 207.969 137.771 216.816] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 195.018 143.579 203.865] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 180.009 153.541 190.913] /Subtype /Link /A << /S /GoTo /D (structtabprm_29505cdf78fb12ca5951295fc16f4819) >> >> endobj 1720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 169.115 172.65 177.962] /Subtype /Link /A << /S /GoTo /D (structtabprm_1ef3d0af652bb59fb838a6b01bb133e2) >> >> endobj 1721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 156.164 179.952 165.01] /Subtype /Link /A << /S /GoTo /D (structtabprm_fa6969fd752bb4e3823e8facf86bbd60) >> >> endobj 1722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 143.212 175.668 152.059] /Subtype /Link /A << /S /GoTo /D (structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) >> >> endobj 1723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 130.261 138.319 139.107] /Subtype /Link /A << /S /GoTo /D (structtabprm_4263d73c71a9a5e77643f572c483b7ab) >> >> endobj 1724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 115.252 161.013 126.156] /Subtype /Link /A << /S /GoTo /D (structtabprm_0777c3de4601874221031a8ad37eff95) >> >> endobj 1725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 104.358 157.965 113.205] /Subtype /Link /A << /S /GoTo /D (structtabprm_dc7e170dba47f4e6d40afabfdaecfddd) >> >> endobj 1726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 89.349 146.349 100.253] /Subtype /Link /A << /S /GoTo /D (structtabprm_48cbe51ee26f0615036308fe72768403) >> >> endobj 1706 0 obj << /D [1704 0 R /XYZ 90 757.935 null] >> endobj 1707 0 obj << /D [1704 0 R /XYZ 90 733.028 null] >> endobj 1644 0 obj << /D [1704 0 R /XYZ 307.661 705.441 null] >> endobj 1708 0 obj << /D [1704 0 R /XYZ 90 688.833 null] >> endobj 1645 0 obj << /D [1704 0 R /XYZ 434.146 655.622 null] >> endobj 1709 0 obj << /D [1704 0 R /XYZ 90 638.895 null] >> endobj 1646 0 obj << /D [1704 0 R /XYZ 307.661 605.803 null] >> endobj 1710 0 obj << /D [1704 0 R /XYZ 90 589.195 null] >> endobj 1647 0 obj << /D [1704 0 R /XYZ 196.052 544.029 null] >> endobj 1711 0 obj << /D [1704 0 R /XYZ 90 527.302 null] >> endobj 1648 0 obj << /D [1704 0 R /XYZ 358.095 494.21 null] >> endobj 1712 0 obj << /D [1704 0 R /XYZ 90 477.149 null] >> endobj 1649 0 obj << /D [1704 0 R /XYZ 230.89 385.232 null] >> endobj 1714 0 obj << /D [1704 0 R /XYZ 90 370.562 null] >> endobj 1028 0 obj << /D [1704 0 R /XYZ 90 351.015 null] >> endobj 150 0 obj << /D [1704 0 R /XYZ 90 336.444 null] >> endobj 1715 0 obj << /D [1704 0 R /XYZ 90 237.837 null] >> endobj 1703 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F8 1129 0 R /F11 1069 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1740 0 obj << /Length 2778 /Filter /FlateDecode >> stream xÚ­[YoãF~÷¯Ð#D>Ø<æm³s`²sd3‹$XÐRÛ&V"=<Æãüú­¾Ä&)=;D²‹õU_õU’Ù†ÂÛät“Ê”äBnö§+º¹ƒ§o®˜kÝAó.hÿéúêÇ×Þ"y"6×·æõ„ÉÙæúð[$ £Û£”F]qóМ¶;.iô©kú}g¯U·ªÙ²,RÕ–E{O3šˆˆgÛ?®¾zu}w¡I‘hèÏW¿ýA7ñç+JDžmáš–ç›ÓUÌ…»>^}ºúçÙ‡}.àù¥ÞéÖˆI–.wž B“¡óœg4!±È6ÞF3ð;çrÚFá.7¯–·ÁYLršŽusTòÇ×,lyNšs¥b•d$ÏÒqTº¡¹s¿†ñ9k<¾‰KŸ:vÅ ;eDÈe$³&;ÆI.Ù²@ t‡Ž£9›U_ˆ@ (ü~¨ž!ßÄ¥†V[&£¯]£Ns™2}NQ^rk²&S’§„A˜LÞfM¦ÀײL( “)lí5…9L@ñrYgƒO\jðÇ}«šfž$„f1Þ_g3ƒ S%‘©|)ãRp§Ïí­³Æ{;qi2îBW3h¦¸´¹5±™Æ—3-‹ g Ï4g³šiƒ/$Ó0@Ÿi`YÍÓŒÃ˲1Þ2ñÎGž¸ÔȧÿhÕ‹»ùL#‰Ìc´»‰5Yç0³ó'ßš¬rö„P yæ4Œøì¼#°c‡–õ÷3Øæš`}”Öb5ÛeF,#(áÎf•ñÁB9è91ÒC¼g°Ž!O\ZÞ?ÌyOI ´§Òš¬&z,a’âÄ;›Uâ_ñ '>ĈñžA<†G†He­ñ'.­Teu°ÇÚY9#I–­pcmVµÊ(ÁwºÖbU'ïQiÊkt†úkbz†>ËÑܵùÚ^Ò…ç(Æ`mš“IJ’ß{›U]_ˆ2 ×&üîinÕú4‡Æ7q馹ºn—Îç1qNœÍ sR0–°úùeOŒ s%ã—ª+Ê£:ØBñKÕî›ò¡+ë-‹*ËX=¨ÍaRµûšë{ÇiˆÅ2’ÆÒqêêÑ37z)–¹"ÐNð$ÚׄSµú.…ÃmÝœ ˆ¦²ÍúÜ—Vßuµ5뚢jµ¥{\Ül9úcÑØvCnYj¡Wd»“1Þv¾±ÒO˶s õ­ E5:<°šëÙ Ä“nW§N7ª—x.¢î¾Ð¥ö<ŽNà¬oÝͲͰ9·7O¶¡»w-}«{õ;•Ô2Os cÏRuW~QTáŒÈ4?ç±dÖcQ,Z pÓH¡¹Q¶yðÑÅÑ¿þþéôçíOö¶©û®¬T‹ÌiL¯³i¤º¾©ÔáBØÂÇ6±dÇ,%,ç#¶?Õ'eSTë£?mpq,ºÎ×¶OpÑöÇb÷™ ùa/‚¤‚]…yôÐ7ukúw÷0–'.tx\ý…Š÷bº÷ªãÓ6‘™A°çg¹†"wCñu©Ž~Öûþ¤`,˜Ü׬¸‘çÁ{çA¬·Ø–3à^¼JN³ñ ä&<öœÓ7¥Þ_}Ñ 7¤ÖÖ›7 7+M)Ýt}_¶öÊ!»S¯‡PgotÎk“Uú¦úÁŸªqW÷ªRlcíŠJß=Y­²þ4*ëÖÛúx¬õ;ZÕênÎ,–HJW§ɰ<„SO߸ý6YT“”³pH/å÷¹°¿/ª;uxqáû4‘ gñâò´/.ŸÞfmùD°`YÌô<²²†¹åÊ…QùÌ»PƒH‰ä Jƒ·ÁQ gÆ1ªÎàÏä‹k?X%ªºó0Ìǧ‰b7O“ù£ßêdmt’ÿpI>©w­Ù²|Cû²|ÎfU¾e¬o•‹ÊËDåå»X©ÈŽÒàmpT]þƒEÄÅ_!Ÿž{ù„ ‰Ëò íËò9›Uù–±¾U>,*/_•—o¡ž‘áÁí¼ Ž;q¤q/2ÎÌÃÈ€Ú—w6«Œ/c}+ãXTžñ *Ïør"|hˆ;oƒ£O-ñ{2’fË™´/òîmÖxG°¾‘w4*gFåy_®6¤pœ•)J‡·ÁÑ'Žy‡õ(“Ë¿f Ú—yw6«¼/c}+ïXTž÷ ªs¾_<©ºŸ–`TxyâH#»SAv~È,uP½4ÚòvóîÆ, ‚&°-.»²8–ú#$4º3ÌLHÃÆ0%â„ðµoi¼ñn°žueâÐqë˜^ôÌŽzôYo4Ã&zwìÆf-œ9˜=/k Ô¾>=ôÑ¥Ÿë]¼=¬™ç#®¾1çbg>?õ§9á [?öÃNo´÷&—ìÑõ7¸fh –3GëÜ3–“,MÇÐÓv6(*㜈$A?–Gw@lÔyãÏOf/Sûå¡Üò;}´ô;“êúê¾p7JØôÕ¡®Ô…£¦>hêXÂ#ß/ï^ýíÓ+x-I¢·1®_½˜+¥¿à}=cB…wÚûº7‡T¸6Õ ýÌô)Im?àÁŽÙO}Λey&ˆ€Ã=g Iòµr´·ÞæóŒŸ¸trÃè_’[0NR> b"··A¡õ™S¤ñÚ½ßÃîU9ªlÍ.춸RycêDúiyRÃÂ~<MWîM-k>èôÏCxº2èv"§0›³ÑAÖ×Ü8uöæuSFK#¤ir¨²÷'=CœêæÉÝUq§t‚è¹™¢ši°0¸úøáÝ–QýÛÞÞ8G}k˜Ñ¨ÝÃE@LÀúIܼ¤ë2e«|iÄt-ñu9 . ©â¿n´œŠ§óìR™‰Ã _ª°¼_.®È¥âJX0×Vô“½žmƒ"Wœk™¦Îp®eºªÔWã¼%g&†±þöv6¹Â,-8LRµbm‘sÆ»Àz>ÉŽ®<Æ3"6a:Ñ:™ ‹I6‚¶#™:‹öÆNJlÈe}\tMv)MO6ñ3rÆhœ‡:ÌcY¹‘:B–”Ä81Îǃãµ.p…€çÑžP“–…ãé†fäçs¦OÜzx»C7<¸ x2/ï‹V¹„µ+û¼ìœC»Ò%þ¼ÞÛûÛ¦>Hׇi8/¹³Tï²û¡h[_À=/’n úe°pUÙ¾Úwzž¨+_¯Õ?x¿ëýô]½j~ ×³°ôÐö°WøÜ˾üpªåí“àÒ¦Eÿtìò¯(ˆÃìï­ÿ¿ßÓ»_X’”åá×; Éaåq_ïXtMáU©懃/EÛÏëmÎ#ÏëGÿ±ý`ù Ê_jï8enJºÕrø+ü2@¿J2=;†5™—õ×§»ù’/™¸@Ïÿ=^Þp endstream endobj 1739 0 obj << /Type /Page /Contents 1740 0 R /Resources 1738 0 R /MediaBox [0 0 595.276 841.89] /Parent 1702 0 R /Annots [ 1742 0 R 1743 0 R 1744 0 R 1745 0 R 1746 0 R 1747 0 R 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1767 0 R 1768 0 R ] >> endobj 1742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 721.97 172.351 730.816] /Subtype /Link /A << /S /GoTo /D (structtabprm_77130658a6e330e0edba348d1dc7edf2) >> >> endobj 1743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 709.018 184.924 717.865] /Subtype /Link /A << /S /GoTo /D (structtabprm_ade738f7269d71d34fdf3d52f1c61d88) >> >> endobj 1744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 696.067 167.08 703.788] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 696.067 188.101 703.788] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 1746 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 681.058 156.59 691.962] /Subtype /Link /A << /S /GoTo /D (structtabprm_8572ca79676edfe06b3d1df00f93384b) >> >> endobj 1747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 669.083 150.503 679.01] /Subtype /Link /A << /S /GoTo /D (structtabprm_e19ca756ab2190f5d5ced59ad0a1a4bc) >> >> endobj 1748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 656.131 148.839 666.059] /Subtype /Link /A << /S /GoTo /D (structtabprm_36adcba673ae8ede86b80f7e5111e0ec) >> >> endobj 1749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 643.18 153.82 653.108] /Subtype /Link /A << /S /GoTo /D (structtabprm_71057a73168d71019b0caaa203fe5a05) >> >> endobj 1750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 630.229 156.311 640.156] /Subtype /Link /A << /S /GoTo /D (structtabprm_5c62c8fd3dc6e9a3c928be9a1ed81ca1) >> >> endobj 1751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 616.301 166.274 627.205] /Subtype /Link /A << /S /GoTo /D (structtabprm_9d2c36c4cfb17532ba5f08cbd90a5785) >> >> endobj 1752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 604.326 185.382 614.253] /Subtype /Link /A << /S /GoTo /D (structtabprm_bf7f932bcefad1f0e371167971018965) >> >> endobj 1753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 591.374 192.685 601.302] /Subtype /Link /A << /S /GoTo /D (structtabprm_1ce970a854c9976d8b3e4e26df102b3b) >> >> endobj 1754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 578.423 192.286 588.35] /Subtype /Link /A << /S /GoTo /D (structtabprm_43276034ba8e0954a6e2632117cd0afd) >> >> endobj 1755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 565.471 188.401 575.399] /Subtype /Link /A << /S /GoTo /D (structtabprm_c05f0ad36debbabf441ca8d8aac59a96) >> >> endobj 1757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 370.331 158.522 381.235] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 350.405 156.859 361.309] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 330.48 166.821 341.384] /Subtype /Link /A << /S /GoTo /D (structtabprm_29505cdf78fb12ca5951295fc16f4819) >> >> endobj 1760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 310.555 169.332 321.459] /Subtype /Link /A << /S /GoTo /D (structtabprm_1ef3d0af652bb59fb838a6b01bb133e2) >> >> endobj 1761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 290.629 171.653 301.533] /Subtype /Link /A << /S /GoTo /D (structtabprm_fa6969fd752bb4e3823e8facf86bbd60) >> >> endobj 1762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 270.704 172.351 281.608] /Subtype /Link /A << /S /GoTo /D (structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) >> >> endobj 1763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.081 243.117 274.951 254.131] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 1764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 231.162 120.874 242.066] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 1765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.396 213.538 313.718 224.551] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 1767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.235 122.184 129.557 133.088] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 1768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.844 122.184 251.406 133.088] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 1741 0 obj << /D [1739 0 R /XYZ 90 757.935 null] >> endobj 154 0 obj << /D [1739 0 R /XYZ 90 551.897 null] >> endobj 158 0 obj << /D [1739 0 R /XYZ 90 470.467 null] >> endobj 1727 0 obj << /D [1739 0 R /XYZ 90 448.155 null] >> endobj 1756 0 obj << /D [1739 0 R /XYZ 90 448.155 null] >> endobj 1728 0 obj << /D [1739 0 R /XYZ 196.021 192.78 null] >> endobj 1766 0 obj << /D [1739 0 R /XYZ 90 176.053 null] >> endobj 1729 0 obj << /D [1739 0 R /XYZ 435.83 113.382 null] >> endobj 1738 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1786 0 obj << /Length 2943 /Filter /FlateDecode >> stream xÚí]sã¶ñÝ¿BÒL„àƒàÇÝ\ÒöÒKâ4Íyšד¡%ÚæD"’Š}ùõÝÅ.H”d_fÒ§Žg Xì‹ý†ÔBŸZdr‘ØDdÆ.6û ¹¸‡Ñ¯/Ï®azÌuuñå{«D›ÅÕ[+aµZ\m¯—V(¹Z+)å²Ëo›ýj­­\~ìšÃ¦£ï‹»¢Y©tYT+µÜ0šÊØ,u¶º¹úæâïW=qÞš51’þõâúF.¶°Åo.¤0Yºx‚o)T–-ö‘6ü½»øxñ¯?v:«ÌËÇÓFÈØöÇZ>bYu¸ç/ß«hXbcÙðã‚ÿHi$Äšˆ(Ñ Alzóæ[Óz[Ç6¶X«DÄ:b|V~]®´]þ¶RY¸¶‘^Ö µMÑšªØ˜¢‘jØdÁÓ]ÍíCA°=Ý´uŠ]±/*îÔwÔæÔµMç ùé]QÝwÓ‹ƒË‰R‹DZEŠXÍ=Cü\‚‡^àî"B^LQ†¬»œÒaÌ„þäê=ÌYªQ‹D§#ªOu[Œ8ÖÒÕ¥ÁÍK ×J‰ÌÚþîX\Y0"M"––d‹ a6Q¬‹ˆ2B¢æ"€ÉÈ[Î8>‚Li‘¦YˆMÅ–Ì‘½éTÉ¡V q*Dx9cE*ÒÈhÎD=TŒ¸Ð›ºÙ’±p’Š$h-uPúF³ù³“O? ve ±©gYå_Ñ4ù'þ¬¶c´E¾y ¯²Úˆù¹¬îi$Pk—O‚"$l앎ùánfÍ2a€ÑqbE¿¤ ¼ gÂ9AÈQV% šgs¸¥SGãL´‚AÎÒU4GÅ#Â%²>Ζ‡x_l©ƒæ[ØRÃe¾+/x îe²;­#°Óö• òÐgw:E‰;Ý•º¥)q+a‘=Ësž¤5!‘bë_œ:3¯žV dî°ÛÒTU7û|·ûD“·’ÃÀ&o 2ë<\1sóS¹ÛÑH[ðзԿkêý€Ì ¬ŠÝ.Cë(ÄcÞ¶…WÀš5½wÎ:–Ssw¨6] —[W^¯ÐµßÐ.ŠÕÚÀ¯¼ZtDøÕ>ð¹á»ªu{¸m‹_°pÇÙ×Ûòî“߀˜;RN@“( ½sô'xç}þø‚žÚø(t^ / cüºü ®n† ‚Œ$Sý¾ðž 0²wߨÁ»p-2Ԩ̹oà½óàØwþ*î£AÃ95¡ǾŸ>áÄÁºbA¦_òá¼ ç.|Œð¬71hn4&>QG9O2†ðQfcšyGçÞÈÀ ÝFÀV`WÛÖ›2ïJj¸-º§‚n Ì@B8GÊóŒÐØd¹Ç&Ù£.á„Ëõ¶hg¾£¹Þ%¡É¤!VBüDIRsùÕ†Èö‚¢£¹,ÁÆŒô¼ŸãpóÑëQ\²<Â1œ¯ – ‹,7xf€ªðäN€÷Ŷt¾§Èð5`ˆ¡&‰5#†Îܵ÷ÑÃÚ‘[‡ Œ<{ûuž¯oN!¸¾ùÂ;ùi4Ø0Ž>ʶcÃwÚ3 7Aº{›I0/©Š‡^àóÀs‚’•åY·§œ;†ª)ˆåh³˜—`ΓŽ2¡³lD¹7¥ÇB%ñkÍÐç)OPò¡[ý|òФá=4Ü'=A„¤9¸‹$¯Ò°ŸÈý¦^ÀR/`éHÀpRܺBÏœAŸä,Eçé\vŠb¼ôÙö]$šN¢Vè÷ ‡ë•¼‡rŸßk€GÉ%Šuš’§Æý”žÊ¡=¸%YÝbwmX¿5«]´ñE?VÑ8ÁëýZÝÈ»w4Z®} f¸ÔFg±S2T5¡ð½7ˆ.x@›è ñ(y é¼LÎ[/À Hy$:‰^á{=A»úPÑFѦÁÎù”9ô§SË÷®>’ø ™&#ëö ŠˆK,>±´lÛþV)C~ÏÃ-!>ñ[ûáßmÈ0>:>\o!{óÓ?›ùrüð–?Ÿs&uÙ&M¯É$*¶±$’®\ö³¬G6‹¦GüG•Œ§b¨gx6Ò¸3ÓKqþ®hH=23vгw¡+Ì4þ´‡–w4ÿìŒ="%!…)ÊërÔ;žª+w8j,¨kËÔh層Ϳ¼ê8 ‡Y¼2Õš©R覑s•ë=¢NÌÈ«%z¬ö0íÕê$]¾Ç­»s$Ósh˜v‡†™KjÜ­@«÷_˜WÔz•Ãm”ÝA}¤P¡ÁMG^mþrTg¢Ø+¦ò›é˜JKícݶåíŽ ºì"¡:X)R“ ¹o 0deò;4^Õàcz'4:b!ô,XáçDr—>éyM-j=„J¤õލ;âÏ[ÆŒZ*y{﨑~g+/ïW°­f»+Z^êÄ#<í|w(FbB'÷5‰òtö3*MZN~¶õ¹<3}‰qÚ÷¹ùϦA ý ÿå»#™Pª„ÌâY©òx*”¾"eBZ›!‚¤žî‰…ðÑ2q¶/dâŒc &-†¹0 §Oä@C’éTX_C>1ô:Ÿ§$”çÓ &ø¡ýiÄ0ç©Z ­²U.dâ郸x´q.¹£€¹í¹Ü—è;–ÛµŽ‰F(¾ÁuS8K¾áîcI¥»Ý]ûìâáD½†võ°Ë›å=.¾RkâÏ՚㚣´ˆú¨Á_*2íù˜Ê@\$–ÊDJ *)ªýã ã!~ô*ƒ³½Êà ²ÛœæB• §O¨ 073‰K½uò’Æ0ðz€ž‹îáy}I Ï·câSua³$“TÄ6 IúC?OÛ1Sµ!t_¶ž=@„îHüÿàó¼9kðýáã¤j> sÛb^u޵H@wŒµ fö¥ª3C¯ðy x‚röÊ7’X ªkì˜þTdæ,Õ)"ÏJ޾µbA±²/ÌæÛmCáI`l!>Ä…ÙÎæ»ÝÜ$cà4åü䱄qï}‰ù–PÄÔ™/šÚ×eD!¦ìJ­ X« G >ヮXÇ4ÈuO’w5Ñ\0ˆË˜Ð\_ï! ‹%¥4ØÊ·G,¸¡Õ°Y¡ü=S€ˆ»÷-š‹Ç¦è|EÝWзŠ§;,^Íß›^æ‚ód Õ{ ØS\ð !®ñŒ æ—·s¯×óÁd‚»ÕäO FÑÙÿïƒP¸Œ! D¶J† ÔÊ ²?À¸Jpl—,]Sä3êêÃýÃøæ ¢+"êËÛâãb¤ÒLð«¤h=%D lã[wrãŽwýíÏ—7Bhõ üS7×—7/*Öp‘GÌ·’©0E)´¹:~Á|{èu>Þœ 3´|E€z$¤„¼Q‡XÞpL‰Mâ{ÇÃË$²GÂËqÁr_³$™\¤Ù+~­„?ˆç?ÊèÑœ·FºJ`Hrj6äµ šQÌ79h¡µÑ1JXûU±ý㿱s<‰ñ÷YYø#ºþšêÎáUÑ ¾Ìÿpàj•éå½ß?ý#®!go¤~c$õ´Tì]eØÇ¦?ýõãw`.>|ÅKxŽ6Ù°ü­~þtOÞ>äþ pΞÿàâÒ endstream endobj 1785 0 obj << /Type /Page /Contents 1786 0 R /Resources 1784 0 R /MediaBox [0 0 595.276 841.89] /Parent 1702 0 R /Annots [ 1789 0 R 1790 0 R 1791 0 R 1793 0 R 1794 0 R 1795 0 R 1797 0 R 1799 0 R 1800 0 R 1802 0 R 1804 0 R ] >> endobj 1789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.715 702.288 442.327 713.192] /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 [98.315 672.708 129.637 683.612] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 1791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.398 672.708 251.961 683.612] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 1793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.724 611.379 365.336 622.283] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.165 587.469 447.805 598.373] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 1795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.18 587.469 499.819 598.373] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 1797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.337 425.446 354.949 436.35] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [330.941 364.117 375.553 375.021] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.783 351.828 304.731 363.783] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.381 159.573 150.33 170.477] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 86.288 131.952 97.192] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1787 0 obj << /D [1785 0 R /XYZ 90 757.935 null] >> endobj 1788 0 obj << /D [1785 0 R /XYZ 90 733.028 null] >> endobj 1730 0 obj << /D [1785 0 R /XYZ 434.963 663.906 null] >> endobj 1792 0 obj << /D [1785 0 R /XYZ 90 647.624 null] >> endobj 1731 0 obj << /D [1785 0 R /XYZ 109.138 477.973 null] >> endobj 1796 0 obj << /D [1785 0 R /XYZ 90 463.748 null] >> endobj 1732 0 obj << /D [1785 0 R /XYZ 338.516 416.644 null] >> endobj 1798 0 obj << /D [1785 0 R /XYZ 90 400.362 null] >> endobj 1733 0 obj << /D [1785 0 R /XYZ 90 258.961 null] >> endobj 1801 0 obj << /D [1785 0 R /XYZ 90 244.836 null] >> endobj 1734 0 obj << /D [1785 0 R /XYZ 219.184 150.771 null] >> endobj 1803 0 obj << /D [1785 0 R /XYZ 90 134.489 null] >> endobj 1735 0 obj << /D [1785 0 R /XYZ 139.255 89.441 null] >> endobj 1784 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F7 1132 0 R /F10 1536 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1809 0 obj << /Length 1884 /Filter /FlateDecode >> stream xÚíYYoÜ6~ß_¡G-b1ã°R;Ù\k„üˆ Z€÷óXxaŒ8!³ˆhI É#‘QúI4mU@$fúXˆ"N;ï`Ïñû±„½@²©›¦4×µÐØ­êF߈ÐÁ”7åJ_y‰àLHàŠ´)«ñã(îšõ4kc(ÄA*ù º3Ÿh¥½¸ÊÂÑö&*‡¾œÙBDéÄþ$ï­Ìq«G”³‘Õû5$Ù(bµ¾Ë‹,O“Æ<»¬Dº’Þ9€p­Ê#ñÀl`m<-«JÔ»4w6ç3!ƒþÐÍØ3ŹIömY”MYä©]›V"©»•2¯^™gf}&悞DO… yÈìðËà%â%ä/¡Å Lôx ‡x' ¡Æ \Fx<>€B ép¢ÁNáÅH{ñyæNTÇKLQLìOñbdŽ[C¨ƒc«vë*®»r“("—AQ€‘|m—&êka õ¶!dÒ²¬$ fªTUò¨‡u›®M-Z'&ãÞ7‚ƬOÆÈä+vBÄ#_'cäÇ`ù\gØvž8PÃØéE ¤’ÚBJ&Ia‹Yn ÜG™ÉNà]\\œ!,þn@öÆì ì¹Ã×Û}ûJ_ˆÎW=39Ksäcæp^‰Oä’•öâ³SªæR&6M2ó!A6ña’OVæ¸å‰"i‚±‡œ€Ï>ÅQdÄQÔpTV¶²§˜ÑT«Úòµ4Õí}ÂTE†©‚L?©ÈŒ© cBŸÌT½øa¦22Ocª¡ýƒLu̪eªÕÿ™ê;™jvZÐ6AèÀ«ÂAt*[Œ´7ŸŸÛDå¼m9À¡é290M#sÜìD‘!¢Ã¬l" qˆ¯°1»§§bÏÃWâ¡ÑoÛ“¬å?kјö¬%oTîÈ«êƒaб°d™!.y/á)…’Â\  ”‚¤Ñ£J@/սۼȷíÖ®ÏÌlòÐÏê·ÎMkVXc"I×ã@SóÄ;^U=õÊBºkêÇ`˜6Õtý»Áœ²¢FU)ý¸¢JxË5m ›o, -ΛuÙÞõ¹´®‡÷¢{‰ÖM`À‘ÜñáL)•󚌨7U`ò1¤$½ÑQÀ‘‘4™î…õ2M!E¯?|¹¼AÁ•Þ\ÃÿåÍž¬eZ8ŽbŸwY[ 1ÝÁ1Š€}À‹ù 2²ÒÞ@|Æ S•C°}˜Ù÷9ŠX#û“èY™ãV'Š,À_ä»W*Y`Ð'}Ä4yäƇ:j¸Sùׯ®é±AzÕ‹CÑ´Üîॵ¶à'ö¡¡ LhÐÿA D}õŠ‘]½4’ȾêE¸®^Z$ËÁ™:/‹3õ¹L:Rh?»2Ì|AtF5 ‡à0‚!8¶Š ʱj὞¸·ìA¬| âªÝW/û‘jS–µ;=^µEÚ(Wg1– ¡ž@˜²"jio ¾§"ŽUš$¬éƒ‚ýú5n¢d±±³&JË7=Q4h2l[Pï„åœAÌj‘TéZÔû $åÖƒyôM¬UïÓZTÕ¼XÊnЇôë«¥UÔÕÐÀ(À¶ø]ÛfûH‰D q(™Ïø@9s/$$¹ïŠBF4;“ž|÷^ãž«B)ŸW•*80U7IÓÖz¬ÒžKJhZÈûJ.!ž×VÜÄÆiY4I^˜E™€›^ªŠUYm™òÆômÙšu:÷PåÀêÌæÃœ¶)G$€c’=N½qXio >'ЉJõUOeÏÊCÀ!΋’±/S 72Ç=˜(’ìÃÁVÙÁ¡/ðÛ/2É“'}+é¬ïF 3+’Mφßþ%=<ìÝå‹:vì×u,>äX-šŽ?³‡ ¾Ï±ÉÏ`‡÷¾½µJÒ3 ƒoÿLýÂ';‡¿€uÝJo]nè(DÕwÙ¥iᯖœº­ÙÌo¶(ùæÕŸczΰ¾£˜˜÷Ä•löm`þøñó/ÀÃoÌR­í¸ù©|x¼vŸDGþ„7Ï¿3Óîü endstream endobj 1808 0 obj << /Type /Page /Contents 1809 0 R /Resources 1807 0 R /MediaBox [0 0 595.276 841.89] /Parent 1702 0 R /Annots [ 1813 0 R 1815 0 R 1816 0 R 1818 0 R 1819 0 R 1821 0 R 1822 0 R 1824 0 R ] >> endobj 1813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [332.609 652.782 377.221 663.686] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.239 591.32 383.851 602.224] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.407 579.365 463.529 590.322] /Subtype /Link /A << /S /GoTo /D (structtabprm_77130658a6e330e0edba348d1dc7edf2) >> >> endobj 1818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.239 529.859 383.851 540.763] /Subtype /Link /A << /S /GoTo /D (structtabprm_64b8a2eaba4116cc647a435108269be3) >> >> endobj 1819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.559 517.904 400.277 528.861] /Subtype /Link /A << /S /GoTo /D (structtabprm_48cbe51ee26f0615036308fe72768403) >> >> endobj 1821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.772 407.236 150.72 418.193] /Subtype /Link /A << /S /GoTo /D (structtabprm_f00d4a4e089737a799fb91e1a68040dc) >> >> endobj 1822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.08 395.281 390.719 406.184] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 1824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 334.193 194.318 344.723] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 1810 0 obj << /D [1808 0 R /XYZ 90 757.935 null] >> endobj 1811 0 obj << /D [1808 0 R /XYZ 90 733.028 null] >> endobj 1736 0 obj << /D [1808 0 R /XYZ 327.378 705.441 null] >> endobj 1812 0 obj << /D [1808 0 R /XYZ 90 689.027 null] >> endobj 1737 0 obj << /D [1808 0 R /XYZ 424.891 643.98 null] >> endobj 1814 0 obj << /D [1808 0 R /XYZ 90 627.565 null] >> endobj 1769 0 obj << /D [1808 0 R /XYZ 482.498 582.518 null] >> endobj 1817 0 obj << /D [1808 0 R /XYZ 90 566.104 null] >> endobj 1770 0 obj << /D [1808 0 R /XYZ 482.498 521.057 null] >> endobj 1820 0 obj << /D [1808 0 R /XYZ 90 504.643 null] >> endobj 1771 0 obj << /D [1808 0 R /XYZ 503.754 398.434 null] >> endobj 1823 0 obj << /D [1808 0 R /XYZ 90 382.019 null] >> endobj 1772 0 obj << /D [1808 0 R /XYZ 198.901 336.972 null] >> endobj 1825 0 obj << /D [1808 0 R /XYZ 90 320.932 null] >> endobj 1773 0 obj << /D [1808 0 R /XYZ 184.156 287.466 null] >> endobj 1826 0 obj << /D [1808 0 R /XYZ 90 271.052 null] >> endobj 1774 0 obj << /D [1808 0 R /XYZ 184.156 237.96 null] >> endobj 1827 0 obj << /D [1808 0 R /XYZ 90 221.546 null] >> endobj 1775 0 obj << /D [1808 0 R /XYZ 184.156 188.454 null] >> endobj 1828 0 obj << /D [1808 0 R /XYZ 90 172.04 null] >> endobj 1776 0 obj << /D [1808 0 R /XYZ 184.156 138.948 null] >> endobj 1829 0 obj << /D [1808 0 R /XYZ 90 122.533 null] >> endobj 1777 0 obj << /D [1808 0 R /XYZ 184.156 89.441 null] >> endobj 1807 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F8 1129 0 R /F10 1536 0 R /F40 783 0 R /F11 1069 0 R /F7 1132 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1832 0 obj << /Length 1355 /Filter /FlateDecode >> stream xÚÅXYoã6~÷¯0ÐØpyˆ:Œ¢ÛÝEš¢‰>dC‘h[€-¹”Ô$ÿ¾C‘’uØt°høÁ<†óÍ|3$‡"S ?2 ñÔç> ŸÆ» ž®aôfBÌìL_tæ¿,&Ÿ¯¬B¡Ç¦‹U½Ü#ˆS2]$G„Ì.ÆØy‰ !åì‚rì<”²ŠKݾ+!g$pD6#N,`4`aà02{Z|›\-Zpcgž‚þ{òø„§ ˜øm‚¬˜¾@#†ÓÝĥ̴·“‡ÉŸ­=Î`ü˜wœ°óîQ†°Ç÷0¢ˆbãcš§Êèy/wóùn¹‹öÊÏ×”Ô‰ÄGuk-ß1Ç×3ÂÜÐj„Ì¢­îU…Ð<Û¾Í<î X@´Ò®m ”Qp¹o9mZ ´cçŸ!`}¤‘ô´‘i–@Zˆ×µ³ïµøPû\Ks$NòÿÚG 9o t üØÿ°ùYI]Ä´¿WR6æíDQDkcÔ&Ê’mš­‘^ïâS^þ”fñ¶J éËòá ÁµØÏc=>òÝÐLkWÐf¬ÅõQ@‰ûe> "DÌ zQ¼ŒÊHûqŠmR9÷˜Lº§äÎ|}fu$ØC. Zu´)åCeZH¹«‘±…ØïªÌâQ8gIÐÇSrm$î»ÈFÚŽàiæ´z RAïŠõø$#vOµˆ ªOí±Úã_¿>\Ýß/¸YÞ^ÝÝ,~{:ROxzá (DSu]Š2J·"щ})ŠX¦{ØæPf'‹-W[°Øˆ1"S~À{…ÐX#óF¨hŠ=†Õ&{²B÷ÊÐ¬Ú ™Æº#L‘W‹'â“jºŽªqJ¡jÔײª SIZ—2=¯ʵ>;¦,Ñi¶Êå.:,žóª¾*§n€‚gêZpC뛃ò“îy%c3¥w§™Ð8ÐØÙpê¸ú,L û²Ò ·ÚÅ¡Ä}Qϳ¨ÐµÈ„ŒJ‘ w< j^TuEi‚ŸÇ@3ðßœòƒpëuhô`ÔAžÏ…”íq׆Œ7Kê¶Š¥nEE‘Ç©òE÷_Òr£[š2ˆ¼ Ú‰ˆ²T}(X«>ÑÑV:6©úz°Ñ£€Dœ½Èƒ]¸«¿½ìÌpTêVËrÃOž.£J4»` ô †AKzÔê,Q[Läö‘,Ó¸ÚF²ŸJ–˜ºÝØÐS±Ñ… æ§ã£³ãöG2QùÇ•”ÍAÒfe:£\}BàêóM=ôü6г\Þ~½»Z. RìeÃë­}ÉE±ÌQKø!•Þw#ƒ¹ï<\ AóëTÞE»æI»XÜtóÜbБgçî±kA½,ázÿñYõmíAÙEÂî—*…¾k¾TtåúM›×æ¯ÿ³:•ñéæEîê?Î13¬{«—|ÍŽ yã=\R·_¿˜¥(PIÚ̓Ëüõ ¶Õõ©mLÏ¿ÓïÓg endstream endobj 1831 0 obj << /Type /Page /Contents 1832 0 R /Resources 1830 0 R /MediaBox [0 0 595.276 841.89] /Parent 1702 0 R /Annots [ 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R ] >> endobj 1840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 374.049 151.608 382.895] /Subtype /Link /A << /S /GoTo /D (structwcserr_417d725c2e5615c3fb73cc210e0ccff2) >> >> endobj 1841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 360.016 158.802 369.944] /Subtype /Link /A << /S /GoTo /D (structwcserr_210814c32ace19b9d09e4774e94a3c3c) >> >> endobj 1842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 348.146 199.738 356.992] /Subtype /Link /A << /S /GoTo /D (structwcserr_311c9994c1d3793b2c98d706987bcd09) >> >> endobj 1843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 335.194 179.265 344.041] /Subtype /Link /A << /S /GoTo /D (structwcserr_278b3daecfc93a28c31750e6a6dc3718) >> >> endobj 1844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 320.186 152.147 331.09] /Subtype /Link /A << /S /GoTo /D (structwcserr_cf8ea013ae1dc84ed25d5ace5a0a7000) >> >> endobj 1833 0 obj << /D [1831 0 R /XYZ 90 757.935 null] >> endobj 1834 0 obj << /D [1831 0 R /XYZ 90 733.028 null] >> endobj 1778 0 obj << /D [1831 0 R /XYZ 184.156 705.441 null] >> endobj 1835 0 obj << /D [1831 0 R /XYZ 90 688.714 null] >> endobj 1779 0 obj << /D [1831 0 R /XYZ 184.156 655.622 null] >> endobj 1836 0 obj << /D [1831 0 R /XYZ 90 638.895 null] >> endobj 1780 0 obj << /D [1831 0 R /XYZ 184.156 605.803 null] >> endobj 1837 0 obj << /D [1831 0 R /XYZ 90 589.076 null] >> endobj 1781 0 obj << /D [1831 0 R /XYZ 184.156 555.984 null] >> endobj 1838 0 obj << /D [1831 0 R /XYZ 90 539.257 null] >> endobj 1029 0 obj << /D [1831 0 R /XYZ 187.245 506.165 null] >> endobj 162 0 obj << /D [1831 0 R /XYZ 90 489.438 null] >> endobj 1839 0 obj << /D [1831 0 R /XYZ 90 390.965 null] >> endobj 166 0 obj << /D [1831 0 R /XYZ 90 306.612 null] >> endobj 170 0 obj << /D [1831 0 R /XYZ 90 238.113 null] >> endobj 1845 0 obj << /D [1831 0 R /XYZ 90 215.801 null] >> endobj 1846 0 obj << /D [1831 0 R /XYZ 90 215.801 null] >> endobj 1847 0 obj << /D [1831 0 R /XYZ 302.59 168.716 null] >> endobj 1848 0 obj << /D [1831 0 R /XYZ 90 151.989 null] >> endobj 1830 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1854 0 obj << /Length 2382 /Filter /FlateDecode >> stream xÚµ[ËŽÛ8Ý×W˜½(6Ÿ fÑ4ÒhÌ`:Ì"Š­ª°­jÙ•Çß÷•H–¨×¡gªY”#ßsï9$uMIbÅéŸX|•›œʬ¶Ç¾z £?ßö–NßFç¿¿»ùîµ¢o±"S«»ûîë™`FŠÕÝîÝÚ0!7·‚s¾þ²=?6ÇÍ­4|ýöÒm+:šÛ"_+¹y÷ËÍOwÏä>5£²–ú›wïùjG)þrÙ*ìê }æLÅêx£¥òŸ7ooþýÃWt|®:#Ô´<)‡åIÅxfºò¶õéÜ–QˆõöSÙ´ ÷Zè¯+¬¦à-úwΕƒÄ!5!D‡Êügyì>Éu}ïŽ\>ùçú©ÙzXü•/ŸªÆC|p§›ê±©·Õù\w%¯nµ¥jÌêVV'ͱÜ65såÆ„Æ’dŒ ãC0É”#AOózÚŒ)²¬gL3K 1Gõ¿zuÿtÚ^öõÉe[(f¹õyè8ýÎÛ5Íb † Y´Ô]áûÇóÃt‘¢"g™t•¼9Ý×ͱ¼D®ºa ÐÇ#YW>T½;Á7gfÂæÿýômçî\rR3åêû¡®›ÝþT^|J—¦<}ºõÉ{¤U lhì_ªæì3Ô|©Ú¿íOÛÃÓ΋H~£XNk‚ÓÿïÓ89ËuÑÛÃ>MCÈ‚YBücêðm!˜¦Òb ,/¥+äõ¾:ìÎ3k˜Î Å‹Ëkt~²þž¥}ŽÑ ?)͘FpúŠ4+`0¡ õ‰çÂýé2á“´f ;äkO4ñ[Ììјy2Ì´òaB®%³™€Å!jé@{ Kï IåŸ#á[нgC²GdW¨h‡[ÚSùužJN+¾¶¨JãIÅ‘ç–Üc’š÷±€èˆ0¨î꧇jz  Õ!ãvt dehUµù0«ew<ç7 Ùõ Íãþë„;§‹Y±ÂÙ#—í¡ÁeŽíñ˜¤=},`" öD„/·'Îê {P~£-õãvBLý±*$”#wää!Axžaw<&éN ¸ƒƒ;áË݉³ºÂ”ß(d7yvÕaºª¶ê ±’œ>\P ¥±A“4¨ B„Á ˆðåÅY]aÊoÒ­nŸÛF¶<Ì™”U±’šEÊZ&r|Õ˜”IQ¬e“ ¡7)&lüÎ Ÿ±‰Ó"®Mmo¤å0¯e›<g8 ÙeøtÚOçQ&YžåXÁŒÔØI3Ô„ôïrù~¦ÁV9Á%ð»?¿ì·Ç$ý\½ßˆ0øþ~Çy]á7Êp²Ëðòí±šú­™&ÔÄc0c–Q*†&¿i -\G;»ŸO/»í I³—‰z¯[°ºgë—ß¡‰š1ä:0dl™õ鱞¡ÎÉ®P©Ö!’«ª.˜¸±˜¤ð}, <" ÒG„ ícÊ+ÄGä£üåe^~ºd) ¶’j=”ʘÊãÞc’ú÷±€þˆ0è&ô)¯Ð‘B¶äMu¾Ü7LõçÍaÁÖA’ã_*¦îÍ&© èƒþaBÿ˜ò ýù(dÐÿËFðu¹‘|ýyê­ü°lÛ’s@´×KÜ~LÒƒ>ð"B°§3àKoê@æQÈn[çñóü>š„•I ~Y䬽™‚„˜”ðQ¬eá!¡>&ÂøÒÂCæQH/ü±œnØdœq‘ÃbsI zIh“áö6`’Ú÷±€öˆ0hžÝíƒ1¥*˜QzH¹,¿GcòQÈn?æó¶lvSù3–Q ëõ˜ eÜ ‹¬`‚®Îçúôœ‚qsmµ«…tÕNˆmFgsXiá ÉIÞ6+‰qæ Éaö Œ2ÀYφæwDvÅô´Ã€nrÏl• –› Õh"©·±,3¸£˜¤â}, 9" šG„Hô˜ï Õó(¤×}nQmïAÐïHTlæ ÉEU–sÜMLRû>Ðí#ÂÄ¢S^±¨"òQÈn™9Ï/ª¦{XÖë1Êá¢j»òÀ³‹ªaº(®­Ö£qµ£®Úé¢ÚÞãÆÎ’œäJv‹h“h},0Ðahá‹wŒY¥wŒa~£nKé† ’cpÃ,¢`–ã“t§ÜA„ÁˆðåîÄY]áÊoÒíç×—rn×£à*b$9}Èk?<<&iP „ƒA!ºFÆ|W\#ó(dË\.‡ýiîN¾†¥šš¢PT*n&¥{kYwHèu î¾´îy²evašê~nÎqB¡‚3I{a9Çò;HRýçH@|À´ïÙÂ#tÃÆ„~~h5`}‰CÞa@?àgw·8.ÒC ™ÎXQd1Ù;=wkBd46ílëÏ/ûæ1IãWï" ÖE„hÚÄ|WLÄ< éž­=œžŽÓ)“Ó%›9HrÉ2†q[ú€IjßÇÚ# }DèµõŠq!Ð…\je†™ÕqjÀޛ¹_[4)2 µÈ$¹šiÉx›à€IZÓÇÖ Â`MDøÜ¡䕾C 3…ì2<µÏO:aK@5ñÌØöËÊ MX¾C+¨ý¤uuÙïþü²ß“ôpõ~#ÂàwDøâ¶zUº­†ùBº¶zW5³bAl‡HNG‘1‘x,6`’öô±€=ˆ0ؾܞ8«+ìAùBvöœ¿ÍÙCK9·Pë ÉKWLêD÷í1IƒúXÀ D Ša ^Ñ"êQÈnl”—ÊÝd|˜Û R2Ç%{ æm[1Ôxa),8“ËýàóÙE"eâ2˳…€ÊØS!û"ª´y€t.W<Ï=eTä•èˆ ÓY±-Øe fÌìÚÙ¾KBƒã­3œ.¶yô؈+êríß5óìm~?W§ª!Evîí’ðºÌݦë'ÿ>Í¿ÂK9ÚýÅ+._)îþ'©otŸîÛG*ÃË@ÿùáí¯±~ó½ÿ*³LºÝk`ô÷Çúë·‡j²sÐÞ¦œÊó'.ߨ endstream endobj 1853 0 obj << /Type /Page /Contents 1854 0 R /Resources 1852 0 R /MediaBox [0 0 595.276 841.89] /Parent 1892 0 R /Annots [ 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 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 ] >> endobj 1860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 462.728 143.858 473.632] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 1861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 451.834 149.945 460.681] /Subtype /Link /A << /S /GoTo /D (structwcsprm_70cac2976524a5f0a6aeb2b3fcb95834) >> >> endobj 1862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 436.826 173.457 447.729] /Subtype /Link /A << /S /GoTo /D (structwcsprm_adad828f07e3affd1511e533b00da19f) >> >> endobj 1863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 423.874 162.388 434.778] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 1864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 412.98 172.351 421.827] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 1865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 400.029 172.65 408.875] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c) >> >> endobj 1866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 385.393 163.763 395.924] /Subtype /Link /A << /S /GoTo /D (structwcsprm_a0ae3f3605566be2e85e51e5b52c3b52) >> >> endobj 1867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 372.068 165.417 382.972] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 1868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 359.117 175.399 370.021] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f8f679749574250cb9ba09e1f05fab5d) >> >> endobj 1869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 346.166 172.63 357.069] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5e04127eb71da6e1350467a7a6d236f5) >> >> endobj 1870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 333.214 171.514 344.118] /Subtype /Link /A << /S /GoTo /D (structwcsprm_da1b98589c0127d34766b4c6b5d6cb41) >> >> endobj 1871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 322.32 176.196 331.167] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5d0b60efc55a61525b9beb26ead4859e) >> >> endobj 1872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.311 143.858 318.215] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0e31f1eef036258c2957da9b985945dd) >> >> endobj 1873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 294.36 161.013 305.264] /Subtype /Link /A << /S /GoTo /D (structwcsprm_912eed291f15134e8cfb8750acc6c4bc) >> >> endobj 1874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 281.408 167.638 292.312] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 1875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.608 281.408 187.564 292.312] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 1876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 268.457 142.752 279.361] /Subtype /Link /A << /S /GoTo /D (structwcsprm_4c89dafecd036e169f96cb84d53ace65) >> >> endobj 1877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 255.505 159.907 266.409] /Subtype /Link /A << /S /GoTo /D (structwcsprm_42052d557bdef2c5640a6d19b6d9ed8b) >> >> endobj 1878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 242.554 166.532 253.458] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 1879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 242.554 185.352 253.458] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 1880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 231.66 162.388 240.507] /Subtype /Link /A << /S /GoTo /D (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) >> >> endobj 1881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 218.708 172.899 227.555] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 1882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 205.757 149.397 214.604] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8b3a65921acc0dabfa4efd19a003ea6e) >> >> endobj 1883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 192.806 151.997 201.652] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c3c9c869bef4e4850dfd9762b33ce908) >> >> endobj 1884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 178.355 145.501 188.701] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e7609283351ea46484690f873f8ea9c3) >> >> endobj 1885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 166.903 158.802 175.749] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9ee8fb568ca75874bab00825b768f8ca) >> >> endobj 1886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 153.951 157.965 162.798] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7320fc64e7705cc7495eba07482b5c55) >> >> endobj 1887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 139.316 169.84 149.847] /Subtype /Link /A << /S /GoTo /D (structwcsprm_922f0f57b8c35cad3d01ceedeba01d4b) >> >> endobj 1888 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 128.048 173.447 136.895] /Subtype /Link /A << /S /GoTo /D (structwcsprm_49eee6450b1a646d3fe01b8965a63af4) >> >> endobj 1889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 113.04 174.005 123.944] /Subtype /Link /A << /S /GoTo /D (structwcsprm_15485177ea8bbacefc29a5a5cba98c8f) >> >> endobj 1890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 100.088 166.323 110.992] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e6b40e2adeb31414871c7cae68619d63) >> >> endobj 1891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 87.695 165.975 98.041] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 1855 0 obj << /D [1853 0 R /XYZ 90 757.935 null] >> endobj 1849 0 obj << /D [1853 0 R /XYZ 120.475 711.11 null] >> endobj 1856 0 obj << /D [1853 0 R /XYZ 90 696.44 null] >> endobj 1850 0 obj << /D [1853 0 R /XYZ 90 678.796 null] >> endobj 1857 0 obj << /D [1853 0 R /XYZ 90 664.226 null] >> endobj 1851 0 obj << /D [1853 0 R /XYZ 90 646.601 null] >> endobj 1858 0 obj << /D [1853 0 R /XYZ 90 632.031 null] >> endobj 1030 0 obj << /D [1853 0 R /XYZ 203.394 596.902 null] >> endobj 174 0 obj << /D [1853 0 R /XYZ 90 580.175 null] >> endobj 1859 0 obj << /D [1853 0 R /XYZ 90 481.702 null] >> endobj 1852 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1925 0 obj << /Length 3107 /Filter /FlateDecode >> stream xÚ­œKo¹…÷úZJ 1|9ËÉcA€ cYxŒ Ýj+ ä–¦%ÙV~}È")²XUç¢n©ŽîGÞsÉ"ëÑ✇âÜóóÁ Ì+s¾ÿrÆÏoÂo:ùèU8|ÕÿñýÙþ¢Â_1oÕùûÏãŸ[ÁŒçï¯?\&äå•àœ_|Û?>œ¾\^IÃ/Þ=ž÷Oéó/‡Ï‡Ó¥p‡KqqÜÂoç‡ ¥.?¾ÿùìÏï_á¹iFÙˆþíìÃG~~šøógÊ»óoá3gÂûó/gZªüùîìÝÙ?^c¤ß«ðû¥ÞÅ£WJ37¬w^*Æmí¼”µó‚[¦•;/š˜_¥4}G"ÍykÆ* šy>L€×÷ÏŸî3¤Ö̈œn²â—žÕÞ…ŒðÃoÏ·Çûï3ú`™¸Ã.I®„dÞˆõü‹`«Ð8ÿYCæ¿ÆùGÀ’ÿHä¿EnÈ?‚w!#üË®w—’_|½™[ ™äöÙ% eõ¡ È‚¢¡,hb­[Ù‚ˆ-˜ i ¼ ™-¸ÿô8O¿bÎàþº$Ié—ëé6 ÓŸ5dúk,~,éo€Dú[ä†ô#x2ÂCîo÷óôK6(û›59N-ñƒú¸p¦²ƒ`Ò®›øzxÝÃ$!-\U­XiûïN3Z8+­&´uó²r§#÷´»><¾Ì‡ŽÕLKØÏ¤€8k™†5¸ƒ\4Î8¦¸[w®_·.kH﫚‡€Å½íküCè.dD?>ö+úÁáîf fÚië'Ì5µaʬ¯ãšãë6f i#`U°ØØ¡-pƒÝ…m .âEÎáîf fF?a®Ù¨$Ó|}/Ò_·1kH«Úˆ€ÅÆHœ [䆓!‚w!#üë¥0‡»û¥1׃FÃN»$!׃Â3mð’¼hHj,à áA‹Üà‚w!#ü¿÷ϧýa)ÿ^ Øa—$ä‚0äØp‰óŸ5dþk,,ùo€p*k¦2„îB–©ìñ´ŸOea­g-înÖ`¦ ëA3íîÊTf¼b £æøªECÙˆX¯6B`¶±âa4AÒûÍT¶;ÞÜ-í­¬·°Ó.I¨©Ì8Îðª<)Èü—8 û먒ûW@ Š>: ¡ßöÇÝ—…‰K0+êbV Z˜ý× mmЄ¥‚Õë«ñæøºeYCšXÕ6,Æ5ÀÛãÓŒ'‡°qSÞºwYÉ]ÈH>>í>Í«a|P°«&IÈ¡btRx]4dæk,y,™o€(ó-oCæ¹ 9fþÛÓBææâø]5IBïlÐxÍ[4dæk,y,™o€éòþlÂòÌ(=E‚)+©1¼ á¡êã}†Ù `ƒq¸¿Y3C ÝÎ\œIÝ%˜s5Ÿ&C0¹µ³IŒû: ˜»:Ã:ϜǾú$!¸tlðxY_4d™ÕX Ì°”Y$ʬEn(3ïBŽgǧO»Óü¤–ƒñþìoÖÌ“2³Žq9íïr™¦½ßÚ۬ƽíBæÞÎÈž3'4hmÒ3š0aæÃ;˜¢!K­Æ¥†€¥Ô \€µÀ K0„îBFôÝñæéåa^hœñ¦‘Ë…–4v9ÚOÓûÁ-.Ÿ ó˜/êñu³†4°ª‰XLl€ÐĸÁD„îBŽ&îž–L '|©ÜÛ¬ÁHãùašÞeu8?¬ Öèa=¼ja–PЫˆ–ýkh`=×ÂèåÂNæñ7_Ë…] ì¢Ô´§;^,…éÎ2ß5H8–Œ7@”ò–·!çˆÜ…Ìf>TÃòØÁŽêQA-l´ÕŒ+¼s)2í5H;–´7@”ö–·!íˆÜ…,7p–öŒV ØU“$dÁÁ¸Ã;—¢!3_cÌ#`É|D™oy2È]ÈñäôüéðùRð‹Ýµb«˜¸ËC’µ¯ '(ì@ÖÔXÀ,4Àì@·VŒ‹{u¬ S~Ú"pŸiÓ€ãnëåá0¿bl¼õŒRaG94¤aÂá%pÑÆÔXÀ,Æ4À¯ñ¹¢ûÛë¹;2.3 rGK¦œž¶ \"NjÜÂ.dD?쮯o‹O>i§`V\’£'— /q‹†4©Æ&!`1©â-ñIo‰!¼ 9ž³o‹W^ìx©ô7î@¢YaGl<Õ¬,êš5/ Ï„À¸$¡JByÏ$^Âe U5Òz= Z.‡††«¡åÑÅ€ÈÓ€ãÙìp·rN‚~n¬Ï¬Ç J’i{æWÊS5_‹þ&5u+g™¢j kÈ"¨±@ `)ƒHÔA‹ÜPÞ…LKÊýb)8æ¬FýÝV CðÈPÍÊ¢®YóŠÐÌ*ئ+Ÿ$䬖cjÀ[Œ¢!K¢Æ%€¥$ Q-rCI x2ßY<,];µau«q³f†ì¯šÁL¼xí4ÓÃÖÞf5îmr|&~¡«nçDl­Orò±<,/ñ–ªhÈJ«±@¥!`©´ø;¬'í¢×°…]Èñ‰í­­ƒMqS…òâ‡Mû.¥ã#oxßU4¤M5° ‹M ì|'"w!Sö»ï· Ïz f€½’„,})ÂtŒ7MEC&¿ÆÉGÀ’üXŸkêæ§°ŠäÍOF0ï†i«Ö-Êjܾ.d²hz¸¿TåÂ~Ö+˜Ÿ$¤EÜ1K $! zü´bO¥½Ý¦IÌ›̧ŽýÒõ!5J…K jÚ’Á>kñÆ¢h(cšXëÎ@`¶¦¾Ù›I«hs`ûºyä\îž–ú¼§ÏúQBé$^è iQ,BÀbQ|»Em«6X„Ú×…,“[X"š‹ÝÝ’Ma/óâ“„IÖ³xk·hH›j,`›`¼7ý+7|q•¬Ã'¼JŽwî'í‚«ä¨Æ-ìBf£ž·Ok À¬”ÇN s‹ç§6p#V •Æ2'Öïd7Ç×ÏÒqÀªŽ#`q¼ÇW\Wl€£S[&ŒŸ6 ˜žÔ¸‘]Èlz¼í1™¡(œ—$ÁÄ0°½S€åZ1gÁ ¯Ç×-ÏÒrÀª–#`±¼â‹.$}Ñ»ãÝ‘¯ûÝéz颋#õ7kfÈéEÏ„RÓ¯\t±ÜlímVãÞv!óÂìëü‰5Ïdœªo£†<ï+>¾O k-kÈZ«±@­!`©µHÔZ‹ÜPkÞ…kíq¹ÖÒƒ°¿åáȹôpä$ÁàáȽ}=K¡Þv!s­Í÷Ï~ëGGx›4d­‰pfÄo¥d Yi¯‘@¡Z©³J{ûò²iÒ†Õ%hÜ4`Yþ¯íÎ@*¶îθaœx¼hHcj,à kàÛ½i[µÁÔ¾.dYúß?í–oÃàœø$¡FŽð’qâ%,jb­[Ù¢ø¦§]&-"ŸvM›ÌæÜßíæâêœ ˜!I¨ñ3Þ„'^Ý.Òœ ˜ƒ€Åœø;ìÉ&í¢÷d°…]ÈlÒâ+z.^´8+Yƒ™ñB‰f,ÐÇG=Ìúž¬9¾îxÖŽVu‹ã ðÍ3æ¤UôŒ Û×…,3æõá´x%Ø)œÿ$!¥QLï’ iQ,BÀbQ|»Em«6X„Ú×…Ì=¾,[4h˜?*ÈSšæLo‰ iP BÀbPÄ ’Þx@x’~ùö·¼ü×#—^þ›$xýå¿Í/ÿÁ¾N¦B[xý/Ô³rÀ=ICNr·Â°Ò²†¬´ T–Jk€D¥µÈ •†à]Húý?Øß²Åí‘K[ÜI‚ÁwcoËö¶ ™Šmá @É bÜY‘4Wqx-¿ÊZ¤‹ÂÿßwzæoÅcƒðíw’ZæãŸÓwo0“Ï¡?އÓîép¾~ôþ˜þéåÅó!ýð÷òå¤:ý'ü\þ xúI†Õyúô9Þ¸¸?¥þùÇw»ý1ÿ)sL¦Ÿ^Òÿºÿþrs˜=jâ·)¤6éù*R¶à endstream endobj 1924 0 obj << /Type /Page /Contents 1925 0 R /Resources 1923 0 R /MediaBox [0 0 595.276 841.89] /Parent 1892 0 R /Annots [ 1927 0 R 1928 0 R 1929 0 R 1930 0 R 1931 0 R 1932 0 R 1933 0 R 1934 0 R 1935 0 R 1936 0 R 1937 0 R 1938 0 R 1939 0 R 1940 0 R 1941 0 R 1942 0 R 1943 0 R 1944 0 R 1945 0 R 1946 0 R 1947 0 R 1948 0 R 1949 0 R 1950 0 R 1951 0 R 1952 0 R 1953 0 R 1954 0 R 1955 0 R 1956 0 R 1957 0 R 1958 0 R 1959 0 R 1960 0 R 1961 0 R 1962 0 R 1963 0 R 1964 0 R 1965 0 R 1966 0 R 1967 0 R 1968 0 R 1969 0 R 1970 0 R 1971 0 R 1972 0 R 1973 0 R 1974 0 R 1975 0 R 1976 0 R 1977 0 R 1978 0 R 1979 0 R 1980 0 R 1981 0 R 1982 0 R 1983 0 R ] >> endobj 1927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 719.912 177.611 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm_88b55f6c8d122f3ff63532de85698864) >> >> endobj 1928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 706.961 175.2 717.865] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0730c37f09502eb364f4e7d7addb8ab8) >> >> endobj 1929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 694.009 174.851 704.913] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 1930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 681.058 173.736 691.962] /Subtype /Link /A << /S /GoTo /D (structwcsprm_6a88e64207df5007151c2c25028ce3eb) >> >> endobj 1931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 668.107 165.417 679.01] /Subtype /Link /A << /S /GoTo /D (structwcsprm_65801f93622504672ee3faf8f2110e48) >> >> endobj 1932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 655.155 165.975 666.059] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 1933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 642.204 165.984 653.108] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eac54f497e1244c8106dd3ebba12223) >> >> endobj 1934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 629.252 175.25 640.156] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f300da5a94594a9769ab312bb56dde83) >> >> endobj 1935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 618.358 175.937 627.205] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0936d10c2ac93d13d096b1711ac639a1) >> >> endobj 1936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 603.349 163.763 614.253] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8715975565c8bbd0c562a32eee40fd20) >> >> endobj 1937 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.519 590.398 174.692 601.302] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9fd60ce9e6bc31df07ed02ce64b48be4) >> >> endobj 1938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 578.004 172.61 588.35] /Subtype /Link /A << /S /GoTo /D (structwcsprm_2166fb650f937d8870711d8be5986b66) >> >> endobj 1939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 566.552 146.069 575.399] /Subtype /Link /A << /S /GoTo /D (structwcsprm_94c26ce331cc876d63baeeada9820241) >> >> endobj 1940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 553.601 148.839 562.448] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8625c0a6ff99c754566c46c2372df801) >> >> endobj 1941 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 538.592 168.754 549.496] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 1942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.724 538.592 190.891 549.496] /Subtype /Link /A << /S /GoTo /D (structwcsprm_292133b2b7143b969a3af6a3f2cf3709) >> >> endobj 1943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 527.698 166.532 536.545] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 1944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 527.698 191.439 536.545] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2) >> >> endobj 1945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 512.689 161.003 523.593] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5b56e1b378a6ae9f8dfff5c364f0653c) >> >> endobj 1946 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 499.738 158.234 510.642] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e352318ce3202dab1b5db8b9ceec7703) >> >> endobj 1947 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 486.786 141.646 497.69] /Subtype /Link /A << /S /GoTo /D (structwcsprm_08098820949433d1336841d32d0b62b5) >> >> endobj 1948 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 475.892 138.876 484.739] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b7f7173e6d2b1b8028a3275bdd751e79) >> >> endobj 1949 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 460.884 146.617 471.788] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b9729795155b8f37afd80784fb70068b) >> >> endobj 1950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 449.989 164.211 458.836] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de8495d3ca5047eeadba5934d0bb2708) >> >> endobj 1951 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 434.981 157.417 445.885] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b63cdcf6ff8febd1b40d0e044ca7d7ef) >> >> endobj 1952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 422.029 175.479 432.933] /Subtype /Link /A << /S /GoTo /D (structwcsprm_b253d36f0dc1716952285c6078622e66) >> >> endobj 1953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 409.078 167.1 419.982] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 1954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.598 409.078 180.111 419.982] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3224bd06f8f4d2d7d398533eb44a49e8) >> >> endobj 1955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 396.126 168.196 407.03] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 1956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 396.126 182.303 407.03] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c8391dd770637dbb841067996b7777ba) >> >> endobj 1957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 383.175 169.86 392.953] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 1958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.358 383.175 185.63 392.953] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e83952aec7c1ac76c090bc89bf4eeea7) >> >> endobj 1959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 372.281 167.08 380.002] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 1960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.05 372.281 188.101 380.002] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 1961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.387 357.272 188.211 368.176] /Subtype /Link /A << /S /GoTo /D (structwcsprm_603ef3ab7f3bc42cf8d8bf99b79b63ac) >> >> endobj 1962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 344.321 156.59 355.225] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5780880281f2f9d085d2e06919b7647a) >> >> endobj 1963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 332.346 162.677 342.273] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5ed753e401cda620a04adfb4ebfb8e0d) >> >> endobj 1964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 318.418 186.189 329.322] /Subtype /Link /A << /S /GoTo /D (structwcsprm_164e3852bcd2dea8b5f73e1dff79ddf5) >> >> endobj 1965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 305.466 175.12 316.37] /Subtype /Link /A << /S /GoTo /D (structwcsprm_6778d31ec5a2ee643dc5f0a8af630b03) >> >> endobj 1966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 293.491 185.083 303.419] /Subtype /Link /A << /S /GoTo /D (structwcsprm_42e0ff2da3b0c1ca0a9509f787ed1951) >> >> endobj 1967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 280.54 185.382 290.468] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5072893bd9beddb33967697d501acdce) >> >> endobj 1968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 266.986 176.495 277.516] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f1cb3e68560d1ac42c620cfe3900af95) >> >> endobj 1969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.163 253.661 181.466 264.565] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ee7f71c872491b25e1d1440e5dfa8153) >> >> endobj 1970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 240.709 167.638 251.613] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 1971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.608 240.709 200.296 251.613] /Subtype /Link /A << /S /GoTo /D (structwcsprm_6a3fa7adc304567271c5cc0eda3ac986) >> >> endobj 1972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 227.758 166.532 238.662] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 1973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 227.758 198.084 238.662] /Subtype /Link /A << /S /GoTo /D (structwcsprm_042875def8cab8354c5b2c40ab9fa374) >> >> endobj 1974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 215.783 175.12 225.71] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7a88af56c4c978c6d4213ae1f4bec87a) >> >> endobj 1975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 202.831 185.631 212.759] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5444415c94c7ab0226788f5efe93221d) >> >> endobj 1976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 189.88 170.697 199.807] /Subtype /Link /A << /S /GoTo /D (structwcsprm_4ed527b90d49e8365c1b727f7bec29c7) >> >> endobj 1977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.845 176.326 182.572 186.856] /Subtype /Link /A << /S /GoTo /D (structwcsprm_092c11d209ecdd16bb79858c68e4d582) >> >> endobj 1978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 163.977 186.179 173.905] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0d15534535c7f9308c9daa2cceff29e7) >> >> endobj 1979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.991 150.049 186.737 160.953] /Subtype /Link /A << /S /GoTo /D (structwcsprm_13fab263ca03f35844fdaca289b7dfac) >> >> endobj 1980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 137.098 168.754 148.002] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 1981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.724 137.098 203.623 148.002] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e09d5bf005e3bd7ee880353e8816ceb8) >> >> endobj 1982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 125.123 166.532 135.05] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 1983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.502 125.123 204.171 135.05] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ce7e0986c79d73bd3a0613034b71974f) >> >> endobj 1926 0 obj << /D [1924 0 R /XYZ 90 757.935 null] >> endobj 1923 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2033 0 obj << /Length 2835 /Filter /FlateDecode >> stream xÚZK㸾÷¯0ö¤Æ\‘%qrÊf2ƒY²Ó@›=¨mu·°²ä‘äžéüúTñ!Q’ID“«J_=ø°é.†ÝÉx—‰ŒH.v‡Ó]¼{†ÞOwÔŒîaxïŒÿòp÷óG³ˆLùîáIMO)ŒîŽ¿G‚Pv¿§qGßý¹;Ý£/Cw9 ºý[ùTv÷4Ê{5‡z³\fOîÿxøõîï£rcšà)ªþz÷ûñî&þz.óÝ7hÇ„J¹;Ý%Œ›v}÷åî_£ ÝÏ¡ÿÚÛ Ê·_q§b|=BÍ ~(‡¢ªË£~­eèªóPµøZø*?dl’<²„ðD*A/¥†¸ÊhN$𫆾•žš'Ô^y’D‡¶{š¿‰¨jžÀ޶;`Q£ûºòë¥êÐ`Ä­yvEÓ?µè*}»§1̃ÉõQ÷Ú¶;VM1”=¹ß ɣϓʾê‡^kŸ ¾ìÐ4N ³ÝžR"…&ñTžË&15¼2‰N òÒ›/¥îËA7ßôÀðbF.=D‘jý'±æ)qx¢ 9Ìõ\½–WœÂ r3i0 ‡j‰EsÔÚZP·´†»R/¬ãÖº$ú÷ß¾üÞçó/úk×^†ª)ûÁ,N„™¶¥»çYT—®w­c !ŒRÇl¢ÉN(‡d3¶¿´'•b\ùŸÚHh Ó‰™}'h4í`z °À#E]¿éŽ)|Ìd#ÎÆOÕ<ëžyÀðLb¸÷åBÑè äÌ£YôúùSqù^Õ{õNñìeª¢{ûé/€‚ò¡_#†A;M}Á¯Õé¬LŽYtî EôZ÷ÐShй.TåÌ|öCÛ‰ úôµÀèK{y~1HÐÒŒìSñ¦ÑFDäQ· ¥,¡ Éå.MÉÕµû»gøÍ©J¼wЪ0¹!°h*ÆË±ÅàR‘¼´¢D¦tn¢ZLX³àDfùL5d»zq,ª$a,¨ä©F»^D}üüðE·^Êâ¨êèSמto±®yF²DlUÈ”°1ñµ9†”Û\-*@‡"ht6ÙÔ·×{&¢¢¾¨¨AS:3¯¿œÏuea: ÕÖ–Ú¢Ö]çKwÆ¥ Š 눔¶¦š‰Æ¬c¡ö¨ÌˆAüPvFr qbí{4*ÔqVo±Çê©w$cþd$e‰Ò÷W‚,…¼€ì®%ygQ5èîª×OæßÏåaP‹ôèâÇ3ÎÃ(pFTÑ©JŒm½v\j3©?^êÙÚçØe}®†[ý<–ðžPGÊŬæ‚+†îÏ­ëÂTqÄò¨øŽo ×+X‘ÔzÝ®}LU´ILÝe¾0. ÈîÒXžne¬ïô*oMWMåËX–f`ÙÜ„EÆZLXsFaß’ÏT+Ê‘©ºn#o°4·Ý›æDEŸ‚t]ñÖëvÕŒÔ]Ù¿ˆ˜dTlo`b¶ÚÀ žÆø—US»¢ªÕy ¿=ÖEó§©žP_ueXàxrVµVA£¹Ôõ3«®ûÉ]ªqx)p§Ád¶ ÚÄÙf\U!²ö0TÎàDé\~ØÛUYÛ›öpÁ%Cß4˜e̹ëÐóÆkXÕô<2ï߃é¼x¾zcâl]Ñ{ŸœÆ‡Èì:7ðæCfí‚–Ñ p'}ǽêÜO}ŠzŠÿ-;Óú[‰rÒÙiìjÍ1 ú$‘Ù“Dû&¼;©[œöÍœƒæ´r¨˜Iƶ3‡‡ü~¼@3Y‹GÞÞî’(¬Œ|áU{`) Ûö,!Ñ<—Ç÷WÖ XðIžùïñuÒÅP x>ÊP.cL¬rö ’‰®60HÎF!€°Ä›¥ UäZeî)¾WýÊ<(Ô1̓TXLXs&ˆˆåœá¯äU%Û;í }Û¢p~¬íanôÚ£éÐÑ•¨“J‡!þîšÿ JÉDúý7ûýg0›þóëºÕ!«¬ÿ«¬ÿݹú¾öÔþ4È„„õÎÅ Úk„s™ª³ŒpgÜK¸ÅlÐu#áA« ȵÊ~>¬lƒÊÃ% ò`1aµ A^Â3—þwÆý„Ì&á~]·²ÊîX5Fø±¬‡u„U°¿Qa1aÍ A^Îñ ? ù4îçÜ`69÷뺕óU–sǪ©ª˜ù5ÞSØî†è°˜°ö… /ïx §N/ïÓ¸ŸwƒÙäݯëVÞCVYÞ«FÞ/Mu5Ö%eA*,&¬y!ÈË9…Mã~Χq?ç³É¹_×­œ‡¬²œ;VœoçòÚH¤i ‹ k^òqΠæã¯¹>Îq/ç³Åy@ל­2 ×*ËyÝ6ç¶^³žSµM ‘a1aÝ A^Ö¡êãÄËú4îgÝ`6Y÷뺕õU–uǪ‘õb¸Êz& ƒî-&¬{!ÈË:Ô|‘d~Ö§q?ë³Éº_×­¬‡¬²¬;VYÖ»²žº¯kÖñŠZɰ˜°î… /ëxÝͱ>ûY7˜MÖýºne=d•eݱÊe]ýîPàÕâëµË¶B4DŠÅ„mXò²õ?•˜ŸÆýìÌ&û~]·²²Ê²ïX5Þ*œ×Œ§)‘œ‰°˜°Þ… ãj–Q/ãθ—q‹Ùb< ëFƃVkÕx,}½v,•AÓöV:ãej~ž¤~¶§q?۳ɶ_×­l‡¬²l;VMñ½¾3KÉÃÆí-&¬w!ÈË8Ô{Éñ=û7˜MÆýºnefïy¬¿±˜Ró=¼,´?­¹úÅ©$ÇŸKÝŸq>´ßߞ˕ðoèkzþ×Õ¶Ù endstream endobj 2032 0 obj << /Type /Page /Contents 2033 0 R /Resources 2031 0 R /MediaBox [0 0 595.276 841.89] /Parent 1892 0 R /Annots [ 2035 0 R 2036 0 R 2037 0 R 2038 0 R 2039 0 R 2040 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 2052 0 R 2053 0 R 2054 0 R 2055 0 R 2056 0 R 2057 0 R 2058 0 R 2059 0 R ] >> endobj 2035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.894 659.698 452.957 670.602] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 2036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.214 606.208 268.853 617.112] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.788 582.297 389.639 593.201] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 570.342 126.692 581.246] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 2039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.645 570.342 239.833 581.246] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.413 558.387 216.601 569.291] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 432.722 174.014 443.626] /Subtype /Link /A << /S /GoTo /D (structwcsprm_70cac2976524a5f0a6aeb2b3fcb95834) >> >> endobj 2043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 412.796 173.456 423.7] /Subtype /Link /A << /S /GoTo /D (structwcsprm_adad828f07e3affd1511e533b00da19f) >> >> endobj 2044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 392.871 162.388 401.588] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 2045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 372.946 172.35 383.85] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 353.02 172.649 363.924] /Subtype /Link /A << /S /GoTo /D (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c) >> >> endobj 2047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 333.095 172.908 343.999] /Subtype /Link /A << /S /GoTo /D (structwcsprm_a0ae3f3605566be2e85e51e5b52c3b52) >> >> endobj 2048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 313.17 174.562 322.948] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 2049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 293.245 182.871 304.149] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f8f679749574250cb9ba09e1f05fab5d) >> >> endobj 2050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 273.319 180.101 284.223] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5e04127eb71da6e1350467a7a6d236f5) >> >> endobj 2051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 253.394 178.985 264.298] /Subtype /Link /A << /S /GoTo /D (structwcsprm_da1b98589c0127d34766b4c6b5d6cb41) >> >> endobj 2052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 233.469 183.668 243.247] /Subtype /Link /A << /S /GoTo /D (structwcsprm_5d0b60efc55a61525b9beb26ead4859e) >> >> endobj 2053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 213.544 167.927 222.261] /Subtype /Link /A << /S /GoTo /D (structwcsprm_0e31f1eef036258c2957da9b985945dd) >> >> endobj 2054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 193.618 162.946 202.335] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 173.693 166.821 182.41] /Subtype /Link /A << /S /GoTo /D (structwcsprm_4c89dafecd036e169f96cb84d53ace65) >> >> endobj 2056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 153.768 161.84 162.485] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 133.842 162.388 144.746] /Subtype /Link /A << /S /GoTo /D (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) >> >> endobj 2058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 113.917 172.898 123.695] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 2059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 93.992 173.466 104.896] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8b3a65921acc0dabfa4efd19a003ea6e) >> >> endobj 2034 0 obj << /D [2032 0 R /XYZ 90 757.935 null] >> endobj 178 0 obj << /D [2032 0 R /XYZ 90 733.028 null] >> endobj 182 0 obj << /D [2032 0 R /XYZ 90 532.858 null] >> endobj 1893 0 obj << /D [2032 0 R /XYZ 90 510.546 null] >> endobj 2041 0 obj << /D [2032 0 R /XYZ 90 510.546 null] >> endobj 2031 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2065 0 obj << /Length 2120 /Filter /FlateDecode >> stream xÚ½YYÛF~ׯУ´õöÁæ1A’ñ¬á``{mawÇ08RKâ.EŽIjŽùï[ÕÕ<¤q0‡ú(vWW}õU5Ŧ~Ø4¡ÓHF$rºÚOèt £¯'ÌÎ.`záÍÿ¸œüýž"I(¦Ë~k6's~Ë8&"-k2d,&#Œ=sT·­à(®Í¬=Þt0–Á’ξ½S:‘s[2ÎHÌüm²<7œP)Øß4¡T¤[ÓFÌàgV¬³UŠÑ£; ¯Æu0"±µKmãV©Â´Öe¡´»œ`BM ÀÊ­Êû›ë>^ÃS½}7‡ÿËëKó¤†( aÙñ™VS®wå!_›ö­²cúH=†Hf fú;P°‚1#p&‚7|ެôÂcoIË@P§<-˜€óÉ®=W;™³[ ÉÎÖÚOpúUšçÊšjSVÖD;k40*‡¸¾°Ù^õdSóq—VM¶:äi5ô0 aÃÔÚFoWË…ˆƒñKéÇlÁàÎ|–ÕZU¦©}©§€æ‘ã•éï1›íËêÉvÓ"ݪ½* ‚‚²Ù»äþPÛÖ»·7sH”³ŸM÷Ö.t¨µqpW»»± 4Œmš®°­Ë3ú!®²Z3%œßÍxHÕ(¡‘«ô6^öéS…‡¼ ªC&dér<›ç³Â†¢1óåe‘>‚¯Ö¦6ठI_gs.g÷s v±ÚÇZ“ 4JõÈÛf+µA$³»ìQ?lY$-ÖV0,,•ÛîªfEK *מ©Ik£#¼Ù 7²"œ†”“,ð íá…'=äÞî‚χ%C¾ DW…>[™³;3•­ }FwÐ2¬u!ŽãÃôËyH*_h'}VÇþ’¨cž#é—K —Hž5‹“9¿¥¶]´4G¿¤ÖLZ†ë¡[”ÕøìÉôn¥ (w¶½JkåP¬mXXëÚÅ]Œl¾ÀEu鿦*õ¹ÁÁ¡QÒç*à €è{ ¤4?Øî]Z[oz9ÔF©Ë’©ùØtn Çum¾=8î‚ã.Ý6€m¾ƒvQÚ¥ëÃm­¾àÁÜ2ʾ\g›'¬Ù9f |f–YÖåá6Wæ!8fa¡Ãõ˜…‡ëFàõ.ý_^®*ôrÆ0`ªÄ¸í1”‘ üÌuŽ+^g÷&‘÷à$H”´ÚiÏÇröÃz üZ›Ž&°ØV¿Ø8R{,?uEÓÂ~‚¿ªJS¶7kM¥Û«²hRÞbÛۤÃЯð&¦Ì º-›^ í)¢˜°¶ò¹ú°0  (T·I”ïßüÇšzÌYÈ<þßth4»€«Ù8°&ccp ¾ \îVÏá$øÓqB'ÔÜ|ðÓ¸Gœ@爓žè° (áœÙÍÞ_8Hîô͆ H’DnúËðé€$1;ç]ÞY©Ÿ¹Aé#2†hª´¨7ȯ–œ` ÚUö´Ä“ÀÒÚ—z¼S«HOã’.¥ìv®ˆC.¬û¹niî/AŠŠÀO%ƒ”bEž¬Î(`¬d®:1ön—óJè½±íï\’  PK|o>~{ž° ÓÁ6oÛÜç_øïßÖºZ¥¤W ž>¾Í蔀·Ê•L…QXµ5T·"S¬aÊÈ<š×YÊÏ*|ñÊe“Ê-}Ÿ¥'¬.bÀ _duOö”ÕÑñ"Úfÿ‰†ß®Q‡Vý]Óß4ÆLd|bôÛÐУ–f< ¼nLî²Õ®Ÿ©B¿lý«s·re4$ìfâ’Ä Ò‹Ìt”=i&+rÂL# Ü¢Ÿá·c@m¾Ž¬<ʲ¡,]—¬ËO¬ËFÖåvÝs˜,æ-Âë¦¬àŠæ®-7lÜäøfÁ JÍn®-Áêt¯º–·’aݰ%¾Ó–NÃã~çpŒ@¾,<<ÙS~w"CšAccé ŒˆÄXüofœD1ŸG÷cöv1ãqL§^>òK®9{   tõÒÂP~£Âp­òæ/Oö2ˆŽÉ;˜Áe¸à@›ì±Ó&û£h¤‹B|ÄÓŸr!m¿"Ä~»ƒ_â:YÔ¾ªÌõøb¬ ƒ:ŽÆ¼zõêúfžðÙrX¸|QçìTÕž©úIðÎ3„Bø-ï÷ø/ÍÿrHˆØƒ„ˆCóæ;¶ÃF œm!3N!“þØ Ü«Q]Þ&a8áÝpº½l>Ð^æRÎþ5g®A7£0‘üY˜t.½Wâ2r/{€Û0óÚý}¤ß¤‡1‰Xâ«öMºÝ]»ZªJÛªÉ]ª— îvþÎ}ج\R~)¨M6”Ù7^´³Ë!ÿ¾úxÎ{ó£}”ÄøNSªÍH¯ÊǧíðÅ2~Å54ÏÿÍ«º“ endstream endobj 2064 0 obj << /Type /Page /Contents 2065 0 R /Resources 2063 0 R /MediaBox [0 0 595.276 841.89] /Parent 1892 0 R /Annots [ 2067 0 R 2068 0 R 2069 0 R 2070 0 R 2072 0 R 2073 0 R ] >> endobj 2067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.485 719.912 278.673 730.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.576 719.912 486.234 730.816] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 707.957 120.316 718.861] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.041 690.333 314.681 701.346] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [98.199 599.26 132.839 610.164] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.909 599.26 254.471 610.164] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2066 0 obj << /D [2064 0 R /XYZ 90 757.935 null] >> endobj 1894 0 obj << /D [2064 0 R /XYZ 196.021 669.575 null] >> endobj 2071 0 obj << /D [2064 0 R /XYZ 90 653.129 null] >> endobj 1895 0 obj << /D [2064 0 R /XYZ 450.495 590.458 null] >> endobj 2074 0 obj << /D [2064 0 R /XYZ 90 574.011 null] >> endobj 1896 0 obj << /D [2064 0 R /XYZ 124.69 528.964 null] >> endobj 2075 0 obj << /D [2064 0 R /XYZ 90 513.14 null] >> endobj 1897 0 obj << /D [2064 0 R /XYZ 174.472 212.428 null] >> endobj 2076 0 obj << /D [2064 0 R /XYZ 90 195.982 null] >> endobj 1898 0 obj << /D [2064 0 R /XYZ 140.939 150.935 null] >> endobj 2077 0 obj << /D [2064 0 R /XYZ 90 136.491 null] >> endobj 1899 0 obj << /D [2064 0 R /XYZ 141.058 89.441 null] >> endobj 2063 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2080 0 obj << /Length 3107 /Filter /FlateDecode >> stream xÚÝZÝ“Û6ß¿ÂÓ'{&VDJÔGî)M›^:™6׸íÜlwn´6½ÖU–IÎfû×@€2õ±^_/—›¹ñƒ)ø@3~b–ú³XÅ^¨ÙzåÏî€úÝ•àÞ%t/þ¯WWÏ_0ÊK£`¶Úšá‘ð”³Õæz®Úˆš?|\H5ÏŠ£æåÞïòõ‡Ï–R0ŽR/UtJË/5Ù›Ùlà!5ÔÄ•âÿ^gͱÖ{°D³Anßä:¨“2²ëüi¡Ôü—…ÔüåÛ‰ŒðÜ‚qÒVÚ³±ºÐK“nS¿ùöí"•óÕ¤žÐÿ7ô˜õeåfâ…—¨¤Ó8V%B/H¬¤|,N#޹ûãḠÉÝÿœšhè…¡[À=6«zÓx|ì€Ã(U 0:ö—ÍÄy…žPñn–~Øm/Ú ð ?8©C›WeVÐÓNgðn¦=ž>˜Ùv?k6.ãú†a½{ƒBhÜjú/ô¶eJ‘•¿ss!Á™^‰Ö÷yÃìÌŒÊO½nÑÃnˆØV´qૃXÞ`I0Ïè¯iÁ8²zCO7I8o@*ÈÌ_ë Nô¬!V‹<yû@ÿ¿¾zOw8µì€;„o<þs›9Èmèy{,×FøàB¥ïEà £(ðR?"—Žõsüä8w˽t؃wÏv(·Üú±­KtØÆßg¡‰êÏbp±Xžóº‚,8äݬÑ\ò[ÚËpž—×c¤ð Åw¸Ã9š‡#È.ÜÛ 5 €JоÚÁÊ-ÏYCAvåAj¬X‚?ÍÐÒÉñçEv[ ÇÛ§âÿ:+›"k5q¯«ý¾*‹ê<6f× UVå’­™°`ºÙ ¡‰íX3Se ÌhÚåLަݲÚMUjÂUÈ«v•ñe“Ñ_£YMƧV¨u«·UÍT8äЬÀ óý/ÝÁÀí/šEìfú,÷ÒaÆP$A£ÛÇ Uê%òõ&10Ës^õ@ªf/"ïÄP¯ÑTè=¢d¾†¸¦ist½2JçÙ'ìÔ ÚQÌó-s¹ŽùÌiBGYµD0îõÙh‰±€`À)ádcùÔ>3÷Òa/v òé}|¸neƒmf–³Š?‚Ýí+Œ4#u` ÂEk¶ÜçUDºæÑUG‰çWM,çUÃvû~ÕÆ}À™2€W7§1‰–LC"ChÖ™q8h?]€ý°U­kŽE‘bÌ#_Ô²äË ßÈ<¯7`yPˆÐ™YäÉ ìBz?ÇnäwÃiEÿsÁßÕZC4d.÷7m²–Ô‚Ô@Û`€7É ެ¯XØW ºPxR¨G0'Æ_‚ë-èÉ…\¢rq<€ðÈÅrÐx r¾'!úT)¤XéÓ#î¥Ã>¹¾ÈK Á´ ú“aŽxΪFÐI ¸ªã Wm¹Ï«ˆ¼ tpäêü²‰å¼jØð°¿hckpèpý5š ‚퀀&c÷658£¡wÓþWñöþ“?^ˆ8,mô—­×¿À…AJ¤è’Ds â@)‚ ¢9‡s*š³ÝO[»'àfè©FtÌsV+Ük^y¸«:¿+!²Á= ‡N!Læ[ãS Ç¤1D[W”$å%J@jºù w÷eÄ”4a È€À‘Ž«ˆ±£.NÒhL÷‰tª,ØÄ’–áæ•«6v›f¯sŒG"á¹bý ÚДDhUy§M̈ŒEQáð{Šè„€5˜Ã²›“ÁßÎ߬ÞÓÃD l€Q‹6£&ßç­Ž‹«¨%ôõœl½4 ô{ÀiuÝp9àP›AÁ¤<ÅXö¼g¤íÛ„,xã¬ÛG?elÆ)š%âžì,š)!NE3|ÀB¼^$tE3|èŠf.+&ýøÌE³S—pŠfæ Ã÷SÝ IšÎ ù9û”7<´õ‰2øEOøIïè^­þþîÛÉRPO•‚l…ÅÞúÊ‹E24zðt ™cê @˜0Iìp±DŒ”.aë–ea™ÿS0Ⳇ;³’«ÐF “ò‡®+jU,³0Ó8dyM“1µLžµëÞLؾ›>„’OA†=h‡|³@7)Ź­€”"Á‰‰€Œrð’ðcÚC¤ÁÂÚNÛˆ4BÃ"vÕ±ØPÇ-‹=d›fí÷y»ã^ŒœxH†¶è­ó»]{*õÍÕ!“VúÙéb3GÌl‚j» 5ÜÔ'=_hºt–¹Ë»vçu³=áûÿÒ·F_·†®oMÙ·nª#UJÔÉÏÂF¡ñUÅg«:gû]Ž[öÑÄõˆÖ0%ëÁF­Ûc]ê ¿„ y hÀ"œDÃÊÛㆠ"ÔßQ@ƒˆk7ÕS à$Ùý ·( 1…ïÄoô¦èùëximrÙ9€ Xx!oÌa*ÄKÒdvbÁJlÎïÆ+¾}˜(ÅÃðØFˆoüáÝo'Üo˜€'µõæ ï›BÞ`ï5ç^7¼?u_¹+& Ký¨÷Ý/õn×»çcA•wÕyùÄð‰éÇ^ËñôÉ3´™ñ´½Ø¹³w6t9Ö•ÃEK5¯sˆ?#TrÏ¡Ök½Ñô–ÊÖ¦À\g~6ppž7ØVO(9áŸC Ú?‹0rT8DtáD—‘äBž„€«#8 ‚€ÊC÷ ÃþGáy~gº¿ùRŽàzQ]ŸtŸt˜Ç$|”ç á·/©š¯P¸: ¡îm !Ø!g#%pí|Nÿm8{ù\²‰cĹœA¡1þ¥L-Ä 6y¢R–Ò[+™ ~k…3ÿmq>Ù±t¸ñ">CšÊ²Æ5<ÕÕ…Iâ^:ì5’¾HΕ!`´B¢b¸’þ$†%æ9¯:ò!HO{ªQi£õHgœzñ¥Ë6¼ç5÷Äql|] §4zÛ˜qçÖkyÎj ²9zßy§‰goBF°#Ì(ü"% ÆvlXJ6°vÒ÷yî0”/ÒTfБÓÓØ¸„ÇÀôB0}¸¼Ïï²å^:ìãjÈ@ä…˜Ô'ô'1,Ä0ÏyÕ)dÇúºªq¸#üyˆ°¼°qc–T[§×va5LmÿÌúJcTtBO˜ƒ‹l Nu*¦~¤ä¹_Ÿ†-õÙä"ÑSõiâ^:ìõé¾È ¼ÀжèObè…˜ç¬ê¡ çÓ~òGˆ2IKuº‰ìîíøE--<:¯O¯*æ®ûWþ°ä6¬tHžúD¬&ÎÄjÝeM»5í—ÄlŸ©´„Yuy·¶™ñ¶ÖŽpó:{yý×?nN1ësÌ'ës‘«-üL솼l7î3ŠÏ¾ànÄ’ÂÛ V½ÄŒ_³3ð`òmÇp¨@@}æˆm=`}> endobj 2083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.683 660.753 459.852 671.657] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 2084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 648.798 133.337 659.702] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h) >> >> endobj 2085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.63 636.843 260.818 647.747] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.129 619.218 305.316 630.122] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.83 619.218 369.326 630.122] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ef5d64e333f758458b1edaa617911513) >> >> endobj 2088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.262 589.639 304.449 600.543] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.15 589.639 368.647 600.543] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ef5d64e333f758458b1edaa617911513) >> >> endobj 2090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 560.059 124.191 570.963] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.235 256.419 358.874 267.323] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.704 256.419 424.96 267.323] /Subtype /Link /A << /S /GoTo /D (structcelprm_3f9ae993e97f0e73e3f59117929eeda6) >> >> endobj 2096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.886 244.463 191.074 255.367] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [276.608 232.508 311.248 243.412] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2081 0 obj << /D [2079 0 R /XYZ 90 757.935 null] >> endobj 2082 0 obj << /D [2079 0 R /XYZ 90 733.028 null] >> endobj 1900 0 obj << /D [2079 0 R /XYZ 251.911 533.633 null] >> endobj 2091 0 obj << /D [2079 0 R /XYZ 90 516.906 null] >> endobj 1901 0 obj << /D [2079 0 R /XYZ 251.911 400.745 null] >> endobj 2092 0 obj << /D [2079 0 R /XYZ 90 384.017 null] >> endobj 1902 0 obj << /D [2079 0 R /XYZ 434.097 338.97 null] >> endobj 2093 0 obj << /D [2079 0 R /XYZ 90 322.243 null] >> endobj 1903 0 obj << /D [2079 0 R /XYZ 495.664 235.661 null] >> endobj 2098 0 obj << /D [2079 0 R /XYZ 90 218.934 null] >> endobj 1904 0 obj << /D [2079 0 R /XYZ 261.685 185.842 null] >> endobj 2099 0 obj << /D [2079 0 R /XYZ 90 169.115 null] >> endobj 1905 0 obj << /D [2079 0 R /XYZ 112.725 124.068 null] >> endobj 2100 0 obj << /D [2079 0 R /XYZ 90 109.398 null] >> endobj 2078 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R /F11 1069 0 R /F7 1132 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2105 0 obj << /Length 3090 /Filter /FlateDecode >> stream xÚÍ[ÝÛ6ß¿Â6°fÅOIyKÓ&h4¹dq÷ ­­]«gK®$ïfﯿ~Ȥ$ËNšk‚ EŽfÈ™ápæG/EðÎÒh˘¤\ÎV»«hv½¯®¨]ÂðÒÿñæê‡—¾"©â³›;ý¹¢D2:»Y˜KBÙbI£(š?®š}½[,™ŒæïÛú°jMû]~—× šÌó—«zã$ç<^|¼ùõêç›N¸šä Eÿyõác4[ýŠO“Ù#´#BÓt¶»ŒÛööêýÕ?:¦ŸCÿØê$åÃå1.q)©—÷ïHF8Ë^ ˆN`ˆ¯Š‡¼4$>à§–˜P£Š›Mnåaw JÑíêÎ<ó²­‹¼1/Eiž-|ÑÓã ‘1íæ©×‰õ½¥xç­ØQ/=òÁªû,qÖÆœÏžíH$QT„è)ÚÑL‹í1B±>š…gu=-”œ£\ß—4µÜ9'xÖ‹ÒúŸ[H¹ØfŸ†ÖŸ§1QìhôWÅ‚ÉùÂJ°‹µ“µW·‡ºÌ×#fÝæå}»¶H;³ŽYP€‡&r¦bN˜Pç,h©—ùP•=–ç,Á’p ši±=F§-ˆF³ µªÑÐ&`°£œ?Û-¶Ôü67Ï&oÍÐíS4„Éx¦$xÌhZ…Žzé‘ÖÒgiUX”:„¶v_T‘4á$új´4“¢ƒP&’@tqg”PXdÛmµÊZ ؽËÑ™«úɼÞwöfÇè9ªÈQOγÏrÚËx,HLãIõ8ši±=FÆË®aåBΫô°ÉëÇ¢É}Š`àд§}JwØý‰o§B)I¥ ‡¢´D^r ÇZn7z¶mªKŠ˜D¶ àD©øœKZê¥G>tÉK«oØ5§\˜RN¢§sG3-ºÇE…âÔòÒ‘X‘XÚHÜxÉÀþa•ÕkÃøQ\+M’îÄŒøP„˜YŠÐëàxŽŽt2%‚:Âuž­?C>D!NRà燣‘È.‚‘\¿ùqäùz]çMc†«»£GéX«æÛ|——mHš•æb%MOá¨;N°ï)Ž÷Ì.# ¬Y¦œ$H¦}ÏQ/=òôY¢~ŽÖ „ ø¨'»çr–dZ äŒ4®ÓÀö“<…ígÕ7< o“ %IÊϬó[r,tÃç :R"E÷w›¥™”Jlž¢ ›@­‹9Ý€¯pèèí;›@Ò±ÐqQ§+m}.;±ukGtDÔOÇŒE7>'ú N œuZÁQO*¥Ïò|ô*!’LÚÃÑL‹î1ꢞXö{/c|Ž€Ãm/¹y-çR¶†©>¾î³º1m .«êP¶ym¿Í³ÕfóhL‰’³·ÿF; ™—‹›Å„ Ûá߇_ ’&.Tî²a˜¤’0ë†à? ð‚#ãÓ#6+ˆzîúÄ…g³©ÛµYë¶Ê`åöÅ@R^9U ¶}”Τ‚4L a–zé‘8PÈr"„©ˆ¤PÓÂŽch¦Eâ˜L‘îü3 0Ï.ëÀÜ?ð³“9›­V®]A¸ªí¢ H8ø\jD¤”‘ˆƒãJEê¹m託ù06õXÚmaãd^ ÑŒqN¢Ÿ[šIÑ ò͘±@t{fGqÓE+ã²ÆUhŠ:_»Âƒ.þIÿ[ÕêCšÂ÷Y‹©$œ/&å¦Ú8èäøõc^[Ò²jMãÞÏ®‡ËOÀ”b&¹ *IÏ•w–zé‘("dy ÖÂi8‰¾ ,Í´h% Ç3Î 9Ö¿S–ntø¾Øz$ 6Pî',îŲ Ú™=3Ÿ#ÇXFÏ|>Ì0ØQ;|=’7’D©¯4;ö]ÏŽÿÕÙé킱i(†!¿Ò4ÅçOs)hB"šñT§G<âp&• ܽía›žìSÑŒT\¾w¨úR$‰w&ë 8í2,DWó¶ß¿GVDiÏAhÃfi33ÀtµavŒ”YëCÓ æZ®m?лuµ½«×\#­Ø¿¯ dbˆ¸)ß’òNfµeð›×o~{ûæõÏ#¹B¢ë㓺O¤MnØùF`_ùÚÛžYªËÔ1àP›K Ãï'Öy‹L/ʼn=ò“8±£ *ñfˆ2 "£$œÀe44Ób{Œ>'¶ÜGÌO˜û;ÉìN*.…‰Ô'QbKrÎ|ŠpøÚ—>°ž!™”²™Fˆ-»!n4îÁ·1¶tí Ï‹«Öö Ab(Õ"®f<åDÒs8»£^zäÃd¸Çò8‚¼‰‡“€Ä†fR4¿E$Ù­1X{auàcŒ1Cˆ¡ºƒÿêÇQON²ÏrÚŸ‚ _²IÝ8ši±=FB ‰s€„xº²HˆïM+[Yµ0G0Ġű–—gLÃÃPð8>yB‰Tôœ3Zê¥G>Šù,;€¤9 Xž€:œD°²4Ó¢{ŒNÁñã5„‡“1x¸9K¨ø x¸I¤Â#u¦$VgÑažt˜Ða1è0øRc)ïÌÓdj܈¡÷ó¸#ͬ öu1»@iÇ1$# ö%‡e v 6ÔK| Yjt¥9s‡ÂGb¤™)¡<›û"=ˆ8æ"æ' bNSÈÜã br "v×CÄèSñ”Tû¢¿"n¾D ŽЖxR%=†çßPŠD±œ4†£™–ÜcàÃöû>̘@|ÆâÃ:¿‡¶‡±íƒÃú}V2W•¿}?S˜ƒšF‡“it˜N¡ÃÂx2…ãäÍ+:tÛÛ*ëhØh©o6H*$lw¨f¡L;¼,õÒ#°Çr*xÁ 'd(|¼ Í´Hµ”¿¾ÈîìÓ 0O›q›§’æÛ%Öаb4¬8CXX¥6ÿŒ¥aÑÙ»iK½ôÈG2€å$,\N¢Ÿ [šIÑ ²H†¢XX±…d¶ËÁ¦g¹:Ô5èmûdÊjlA ÉÅ7ÝcXröØÃBÿ(äÛÕeµ]n¯ªû²ø¯ÉDÆ’2NŸ)ú-¡aR–Ú¤l]n·ù0ƒòGEò³ó°Õz$ÅJ0Pƃëká(©š¿DMéƒ^6EÓVu±Ê¶æ}UíöY[ÜÛ¢ÕU(šQì ñžpEh—5ÚŸ:fDqäÖÞímÕöûªÖ¾ o­‰æ%Û‚ã–^GhÊ}¾*0/\áõY[T¥ýHã©ýu6¶E™gµ«œaxŸêҶÎÊŽý]†\ìÑžµuñéÚâ•®ŸÝåIS­ ˜‡½pz,4BqD&z Iñçv©/~Ù2ÿ¯³-þßB¨ÓGOsÝ»@#dl+0Ž£F ýŸö‚þ1lÕfÿ–€ÒÕ`ݼÒ‹ ßôðnMÏÓ¦‡ÙÉ„;Û¿[ðhþf!¢ùÍ"æÏ‡¶äBÖÆ )ý„1õœÕüùf}¸ß˜iºóÜéûRèÓWtØÐŽ¿Õ‘ÆWÕRsüT4­·Æ1Äñûâ‹nÝÿŠsû·×½”;Ûïë óAÓ}Ù ¾Ñ—•:›·E@S š¹ßºÌ½²Ã÷eåHµýݶ+(¦CšWUùÇ¡\cʸ&9Ú4u:øÆ*=a¯Å‰Æ=… C°†°û7ÞpÌ_ŒPh3mUÝg·ú‡Šéð“Ý›N¼Ñ6­uûA_ÉÉã¦Ð·SÊ^)~*²CV•ÈïÃr#wVJCØßîà¡»{¿æJ¾fhôÅ…Fëµû=‰JHÂÃL`÷õΕý#2°}6ö‹º”H9Šüã ¨ùUÿ—ý™†Y^(¦þŸ™(°p?Ã3ÒõvÉ˼>¦&.ò€RÙü`—ñÆaˆÂ> endobj 2107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.575 719.912 286.611 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.389 670.093 288.424 680.997] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.261 652.469 217.9 663.373] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.678 652.469 375.714 663.373] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 2112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.049 640.514 185.112 651.418] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 2114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [421.815 590.695 450.916 601.599] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 2115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 578.739 123.643 589.643] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.22 578.739 469.283 589.643] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 2117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.813 561.115 461.914 572.129] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 2118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.04 549.16 226.228 560.064] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.957 531.536 263.145 542.549] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.575 457.806 285.505 468.71] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.389 407.987 287.318 418.891] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.039 390.363 211.679 401.267] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [314.319 390.363 362.248 401.267] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9eca2fcc30058310d020181ae16bf256) >> >> endobj 2126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [124.42 378.408 162.378 389.312] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 2128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.368 328.589 450.363 339.493] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 2129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 316.633 123.643 327.537] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 2130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.114 316.633 467.071 327.537] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 2131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.546 299.009 442.541 310.023] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 2132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.253 287.054 203.44 298.067] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2106 0 obj << /D [2104 0 R /XYZ 90 757.935 null] >> endobj 1906 0 obj << /D [2104 0 R /XYZ 320.135 723.065 null] >> endobj 2108 0 obj << /D [2104 0 R /XYZ 90 706.338 null] >> endobj 1907 0 obj << /D [2104 0 R /XYZ 189.695 643.667 null] >> endobj 2113 0 obj << /D [2104 0 R /XYZ 90 626.94 null] >> endobj 1908 0 obj << /D [2104 0 R /XYZ 271.866 510.778 null] >> endobj 2120 0 obj << /D [2104 0 R /XYZ 90 494.051 null] >> endobj 1909 0 obj << /D [2104 0 R /XYZ 319.029 460.959 null] >> endobj 2122 0 obj << /D [2104 0 R /XYZ 90 444.232 null] >> endobj 1910 0 obj << /D [2104 0 R /XYZ 166.961 381.561 null] >> endobj 2127 0 obj << /D [2104 0 R /XYZ 90 364.834 null] >> endobj 1911 0 obj << /D [2104 0 R /XYZ 90 278.252 null] >> endobj 2133 0 obj << /D [2104 0 R /XYZ 90 263.682 null] >> endobj 1912 0 obj << /D [2104 0 R /XYZ 394.565 216.478 null] >> endobj 2134 0 obj << /D [2104 0 R /XYZ 90 199.75 null] >> endobj 1913 0 obj << /D [2104 0 R /XYZ 482.365 154.703 null] >> endobj 2135 0 obj << /D [2104 0 R /XYZ 90 137.976 null] >> endobj 2103 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2140 0 obj << /Length 3230 /Filter /FlateDecode >> stream xÚÍioãÆõ»…¾…VÓ9y8ȇÍf7p°EÒ]£A›-Q6ŠTHj½.úãûÞ¼E)»N0‡3óæó®±…?¶ˆè"P‰„Z¬wWtq½ß^1;º‚áUgüëÛ«¿¼ð‰|±¸ÝêÏ}Fg‹ÛÍOž"Œ/WŒRê=®«}¹[®¸¢Þûº<¬kÓ~—l“rÉB/Y2/_'ЄQà‰pùËíwW¯oäviJøˆú·«Ÿ~¡‹ ,ñ»+JD.¡M ‹¢ÅîJraÛÙÕû«¿5s˜~ýSÔáèJHljç‚P¿%žó–xF}"E¸p0ÈŸ9WCB…O¸Ztæár0ó™$ z¿N-cé5â틇+¢˜ ùÃ+ igFAxhÇÓñ÷ŠDA`‡ÿ5þVr;üïØŒ÷Ö+‰”ÊM_™uîˤJòšL‰›J"‚ð¸0Úñã°0'…1ƒ«ÆB'ŒÂFì”0^}3! ˜(ô?Kì”4üi,V¾"‚J`<áSük\—éÇåJ¾—dÉ€+|S^š›Þú!1›w/ߘֺȗ’z–LyI½N —:ùí.¹ øg0¯®°OøÌͼ/‹ Z1O#AìîÏcjøLUĉä«ñäÐp‹{ývqïvŒD"i³O,P•),?S*ƈVÁÑ1)u© o€ a<òî–œzÜ\]ÁÆ&Ù.õâC†ê¤{Ò-jzý¾- t\ÂG±ý¼Ø¶ÓŒÖÎhmàžµ ?k1÷ùNïÚK™wcW]ä–ø¢4„íŠr‚Ž™¸ Jwèø…”à6~zÄfQn*c*„ŠH毫pzoó€9«b^@X¹iÅY† îòjÛ;Y§ Î<ÙL“û$’ò¢\ð•û¾£­–¦Â<ÿ“”J9FÊЕ㵄>¡¡¸01­Q4pÌrXkL黥 Þ÷hÅo—õ^NX-\3X­£Ö°2à9ħtŠFF§0f¬Ñ°°Àé «‡$ÞhûACãá /®ªÃTLwj¹Açý|ؘ(-É.iG¨pš¿-t K}|H€NKœ¶ ЙµéˆsÍÐ k@Lþç å\câ·‚>o øR¯Ju΀ýõŠ;ÀøìÖa tƹ{¯“æ¨c„øÚŒC à„lvüïõÖƒ˜@ùn·A(T¥Um àÞcZ?˜E˜¸ ºŠ2½Oó83Ýonnß®pŸCHÛÛ ÕÞÚ̵¦Æ„mÔl&ûñ!Í&¼ a·† ”¢ÈoÜãÓrL4ú+©¯õ܃í^+­'sf\³m¼UAª‘Ååã)¥—Ú74žKL„‰hô<úE Î7Sáb(FÞûYL~7Çx|H×&Í0VÚÃóξ§÷9A›©lPÁófƒñ£Ù ƒ9• Îáj²ÁY„6ì"l²A~2|.Ö«Ùô.€9úÙÝ zPX —7?¼7­~‡ÖæÅ„ΆD5ò~&* ºf×Rä™mÝÙu‚W/Öi\kÇïÆ¬r6y#¶3°’õaã¾ùhؘ<{,©ØVuŠ¸Ó c2¦ÊÞ6ÙÇi¹Tʃ°ÏW»Ñv]¶–9©LGleÑ:i“r¶:vñ½mî³8·M“ñèñÊ|ï1`ÎR¤ß_¾¹}ýÎO˜{Aaå<8ÓšÈs£¸/Á€qÖDz)…K&lŒâ$ò‡Ú˜É˜¢orº&f°D’½ñì+´JLm¬Ö×á[ß=póu`1‚&ˆ¿°¯›b&g”"tƒ‘gçæ¤;c>xNÿ9<ç¤àfå= /´9ëŽ(ñ—üø¹%¿¶ƒ›bkžUñ;ôPàah684‘¸`rÛNT?Ø3{©å” ÂU*Ãeˆ ·Å!ߨ>ÃièÔœ†ç}¯jd´i£ŸÐ0ƶwCÈ æ ܤ-`ã@yo!Þu‚½ê€‚—á”:xÓç7××ëÍpã!H%z ž¬X˜Y´’A~âZ+¿>.ü3 vÐó˜SöF=ZCèÃlžf 3Æ|Ÿ÷i.ËøÉe‘ïfÂ6Ž‚Û¤X`µt—@bYä: €‘*Ý¥Y\¢•Âñº’ÀE@X 2ð!=à'Øè Wð1Ã)»lܯG €ÐØWQ:˜y´Àè(à=´z#¨$~ÀÎ$ØAÏbNÙß(IV7+#Œ…³4;˜ỹ‰Œ^)ruÁ@ë€+a{—URVFª‡âYE9TV…¬mY`QÎ, ¨m‹,+°ÿ˜æ÷.—(ÖÉæP&×Éš”àê R>–¬uÆ&kæT²6‡«IÖfÚd­‹ðLJ¢o}… OiÝâØ™HhÉ‹VÔf£_ëµmœäkp=uŽåú(;9%aŸ3lm5[aéd¸?Œšùô¶Ìê }™O©÷߯̓}9¡?Úî)qT:ãGõÇÁœÒŸ9\ ¡³­þt~šþ\&\zfø2u¦u€)9¦@|R”OFÚñã daN*Ð ®–Ð9„N:?Qþ õ'h´Ï FµÀG5‚Óù嘪7ßv³}Fç HÅõQ¬/M%Èã«Ä4ïR}$%œÒvUImzlqi29WÁE½BstQ&¶êgëN¼=!Áļ”$d©PÂ!×”«àdVa€W-ôDÄÒ›p>6”7ïa¥d'¦"ìáœL(|"¢3IuÀ³hûžŒ eÈÁCªYj-È,ÚPéG=´©>bG-N\Ba€ºÁ„€vSÇvSß§­åéœ*Äçæ“[»?Xˆ0)󸶯Xø„]Ñ9•ªÌ€ÞZð4µehÀ¶MâÒv–q^éŠURØKI™t3[è…÷t·K6XøÕõÚLgPý 0N¿èvd¼©»êg°¢kôÑ5vP—ݬ®®úÇ,qפïC8Ë£?G­É]iŸ1)ˆ‰/Âæw þÜARgùœ»ø ³ÌÌüd;ÆÜ>Qlvõ]7LDsOõÛôC’§‘57jìDX„»ãà.7d`êæto3‘ÞA í7|þûë·ï^¿#“”Hv.?Ãte²u™üDE>ˆôµLB¦$Nl8èU|\Liãt_Ó}Á8Þ_ŰDmafq':zNÌídZa‚žÂ«0뇸ìkLœÕç¨É·ÝDF yñácš¥qùÔªÀ+˜?^×F6ÌH]·¶…íÂ,Ò—èh ¢Ü¤íû&©Öeºwõë:·ÒÜ]wèþb"Aa!ØdçÑ&t©³3¿0èô‘ ê]Ÿ…õuk4ÌËã]R™fuX?Ø wcý[µÕÔi5áQSWºýǯ'OЃæ éy¡ÃJú òG}“…2s£D|—Åù¯¦K3û̵ŠáRº™á.ãq°Ãø†Õî{í÷ñÌ={rß ö{›m¬ãÊŽeI šP½0ìR¡}f½\ýs*%~™»£óÒÝ(¶îÆÀÁªïÚ)ZÕ©¢I¼Í\ ?¤—Š[̓ù²ô>ß5ÁâþPî‹*©¬EqW¡h«_˜y—î2‚ 81ÇŸ¼UŽIMž ˜™ùåÙ§ýØNûd›EÝ âa´.Ùb×&;É“Ò]àBºÌóïn,eß»_ Jû³ªèšòkAíµ:ÊìvÖ¿qüÜv†NñSnï4XÎ}S||ºÇ˜ŽŒÙó?úÑmk endstream endobj 2139 0 obj << /Type /Page /Contents 2140 0 R /Resources 2138 0 R /MediaBox [0 0 595.276 841.89] /Parent 2155 0 R /Annots [ 2142 0 R 2143 0 R 2144 0 R 2145 0 R 2146 0 R 2147 0 R 2148 0 R 2149 0 R 2150 0 R 2151 0 R 2153 0 R ] >> endobj 2142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.507 485.794 410.985 496.808] /Subtype /Link /A << /S /GoTo /D (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) >> >> endobj 2143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.239 485.794 487.227 496.808] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 2144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.177 473.839 284.655 484.743] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 2145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [303.674 473.839 362.114 484.743] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.281 309.417 407.759 320.43] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 2147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.401 309.417 483.841 320.43] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 267.882 124.191 278.786] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.896 267.882 430.083 278.786] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [455.556 267.882 513.996 278.786] /Subtype /Link /A << /S /GoTo /D (structwcsprm_de355cdce054938cfa36e06ef9c51446) >> >> endobj 2151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 226.347 124.191 237.361] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 2153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [278.661 177.085 316.618 188.099] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 2141 0 obj << /D [2139 0 R /XYZ 90 757.935 null] >> endobj 1914 0 obj << /D [2139 0 R /XYZ 265.291 229.501 null] >> endobj 2152 0 obj << /D [2139 0 R /XYZ 90 213.33 null] >> endobj 1915 0 obj << /D [2139 0 R /XYZ 321.201 180.238 null] >> endobj 2154 0 obj << /D [2139 0 R /XYZ 90 164.068 null] >> endobj 1916 0 obj << /D [2139 0 R /XYZ 429.942 89.441 null] >> endobj 2138 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2159 0 obj << /Length 1886 /Filter /FlateDecode >> stream xÚµX[wÛ6 ~÷¯ð£|NÍò"ê’sö6i—žµYoÝN×ERcmº¸’ÜÄûõÊ–"%mÓÕ~ € |AŠ9‡¿˜‡|îkŸ…JÏãbÆç×@}9–»ö²Ç¶š=}¡` =5_}4Ã=Á´óUòÞÑLÈÅRpΛ¸ÙÔÅb)5w.Ûz·Ô¾H?¦õBNºN§@õƒÐwT¸ø°z5;]í'·KÓÊé?ÍÞàó–øjÆ™ ƒù ´9a8/f®T¶Ï.go÷:ˆ®€>µ;-Ô—·'ãžÞoÁßµ{ÌJ»)ÚìÑQ\ååöUà^ž¾ò  )|æI×hú‹kþ2[Hí|^í¤åP¤”mo³<‹ê(T:ïÖi†’Ó®S¢ÅUU'Yµ–Q§›:mÒ²Ú¬*‰–5$5Mg(*œ„H7Y»&¡¨$JVD×é2ªëhG ØÌ¶è4Y¡ˆº/ÎV—¸E³+ÁBMö¹‚õÔ;2I]åéÛ^›•@ë3n9ª3d¥€5EvÌ•¥m›4±#+úÖi Ûí´¥”¢ÒÎûeC»ÜW€6­¶_.:–{fG4ëj›'Ã%4i;\Á¿im[«šÆr®µ‘Öi”¤–݉m²[ã㜺yÖ´Œðч,MI@°;@šî!Í îaž«BIˆâj¬Õg®/­D¤Ñí K/`¡ MÁTIÿS¨Â9NÀ_ƒéTék\…\X¬›–¨à¶"-[ât¢hLó%öYY'K(ÈÊëvI.ÇtB]òº]ŠñN£x=Ùè¶ÃffA=ì¶;‘¼êÐØE4í›{àùjxẆWÝ[ÂÍì#æ6‘ù‡¹Îäs@OécÒ›’b„î“ý°íãzø¶& Aÿ€¡ž´Á~-†z¬xÕï}ùÁö*È“YIH:Lã ²ªÑ„èƒmÐ<›PqˆHÏÆÛó7 Éã×§$çòžÄ¥ì"7‹Ææ´s‘Áné‡,ƒðÛ5èú@ kC¤(Ž+ŒŠ*¡CH”:¡‘Wåuж4‚y^áð“uд5˜fI:ómG~Ê0ñ›Î? Áñ ×Îî›`7ÌöA7v5ÓdEÖvÃ[\ 5½€¾è•(^NX¸…¶§Ç&ß6w2¹Íó%ˆè*PKbò7 Û^ÎÿŒûãIµÅsi”hý€y\{¢­1Xlj6ð÷ý/L F£ý^¢ÕÞÚ³Ö~/Ñê~€‰Ú ч é±ìþM»ŸkûÔQ™¬H]›ì Í̦_MÁ4vè ^ÙW®‰0ò9 ´Û…ÑÅÉéÅDiæ ÿ›Bh8 ,.`Rz“ˆ~"š ›ï@… û¨À Û£;èOüÚp¨ÀÎ}QsØà×!=V‡ l÷P1˜ Ù5mZ@éÛ9ØÌʃìÿ ‹Ë?'a¡˜­ï‚…Ç4xn ¡…¦™aåŸPug]?æ|tUp×±.t>ºEc#$¡cð£_ùT’H‘%ËMe (íF¶ëNÕU«Nk2;ÝžÙïÙå9„ªÜkâö6¦Â¥;óvð[eôeÇ#‡{F"IÆ6œIÕÅÊj<‡Ç<·sÙz}TGM36± ˜¯Ü<«5ó°À×ÙŠɱh¨{z±,=>ŠVtE£oŠ$mº»àA£i£º½‡«éùŒR/Ò·eNIe@º¾É;ÄÕ·›Êº\ÙK]_mŒª › i#Í“‰°¥ñ.¨‡†–š÷qz²PÚ9^„ÚY.ÏŸ]Ž­¨Á²¿§¬èU´’¶Pž†d…’¸‹È)ܹpãq½Ž;é æ‹pxbxÐ  —~wl³²º} ô4嬎ú)%à6¥@ù•~Úšâ &0ý¨Ál@O ÉÒ;2`í ðÍâ(' Ú jNÛÇŒoèqžmÌQ€½~†Ç>SÕób§oÑÿ¿½9_¸Üùcœê]Ÿ Þ¥ú‰L2µÏKh ªžÈ<šqÙ¹øô×óç?Oú7P ¢P¹pÃÍÍE ›t)kо ÌxΛª%V´Ùä`/*ª ·=å*çì9óâ’ˆ}3Õ5 ¥ñ+h²$°¿7f3}vq¦\@šë218º”|hxKø;ù޳K©‰7Ðy]%™É! ^ÿ¸ój %ñNèŽTTøúÕ ‘²’¶»¤®„#~L£î ä`„I)¬@Ùòx!\íü¾PÜy9Þ‘«Ùþúõ„¦€ºNÑ š¸´e¯4×óqâ1?SéÍžz¡‚EÀüðr$>Q2ÈwP2 uâ ãAxúñ/¤æ‰× L‚ê=z,ô]ûjgÇŽLË´¦ì`Þ lN^-Bél-ªÎ»§^—>"<âòXìI.„Í߈¡îãÝóË_ðzùÌeP›Û§ û¢qRÝî®Óò®uð wlžÿþ§Ò” endstream endobj 2158 0 obj << /Type /Page /Contents 2159 0 R /Resources 2157 0 R /MediaBox [0 0 595.276 841.89] /Parent 2155 0 R >> endobj 2160 0 obj << /D [2158 0 R /XYZ 90 757.935 null] >> endobj 2161 0 obj << /D [2158 0 R /XYZ 90 733.028 null] >> endobj 1917 0 obj << /D [2158 0 R /XYZ 315.671 675.861 null] >> endobj 2162 0 obj << /D [2158 0 R /XYZ 90 659.134 null] >> endobj 1918 0 obj << /D [2158 0 R /XYZ 465.747 596.463 null] >> endobj 2163 0 obj << /D [2158 0 R /XYZ 90 579.736 null] >> endobj 1919 0 obj << /D [2158 0 R /XYZ 251.911 505.109 null] >> endobj 2164 0 obj << /D [2158 0 R /XYZ 90 488.382 null] >> endobj 1920 0 obj << /D [2158 0 R /XYZ 213.805 443.335 null] >> endobj 2165 0 obj << /D [2158 0 R /XYZ 90 427.325 null] >> endobj 1921 0 obj << /D [2158 0 R /XYZ 212.151 381.561 null] >> endobj 2166 0 obj << /D [2158 0 R /XYZ 90 365.551 null] >> endobj 1922 0 obj << /D [2158 0 R /XYZ 151.19 319.787 null] >> endobj 2167 0 obj << /D [2158 0 R /XYZ 90 305.097 null] >> endobj 1984 0 obj << /D [2158 0 R /XYZ 367.298 258.012 null] >> endobj 2168 0 obj << /D [2158 0 R /XYZ 90 241.285 null] >> endobj 1985 0 obj << /D [2158 0 R /XYZ 90 184.283 null] >> endobj 2169 0 obj << /D [2158 0 R /XYZ 90 169.713 null] >> endobj 1986 0 obj << /D [2158 0 R /XYZ 115.375 122.509 null] >> endobj 2157 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2172 0 obj << /Length 1723 /Filter /FlateDecode >> stream xÚµXKsÛ6¾ëWèHÍ„™é!‰L3IÝZêÓõ&a‰-Eª$×ýõÝÅ‚%ÑŽë¶Ã°öÛý°€˜røÄ4áÓHG,Qzš­'|ºéû‰p­>4ûƒö7‹ÉËw F±$TÓÅ­ ¦¥˜.ò+O3!g¾àœ{wY»iÖ3_jîÍ»f›uT¾4·¦™‰Ø33áU™i'‘ðÙõâÃä|±›Ü-M«§þcruͧ9,ñÄ3•ÄÓ;(s&’dºžR¹r9™O¾Ûé ¹ùØî´P_ÞžTŒ‡z·=&™Rny½½) í‹öûêÕ¶õ[^ß´¸—ï¤Ük[Šˆ…2°Ê~åš¿/fR{ŸgB{¦z1óU ¼tûgQisˆ¤ò>Õyñ+çÒäTÿ°…•ÏÒÎP ~úpF•¯\OWõé'Îa}°v¦Qý ZäpË28£‹‹}þÅ›ùé^‚€ÅJ¸^/H{V7i7u•Õ’D]}:C²8QnèÙLiïõ,ÑÞâÜǾS_%Š).ÁX‚%š,?º‘XàH;Èw`%à‡@X߀ڥ©Ÿ¡Ž¢cµÞÇ:K»¢®¨VßÒ¿[,üÅ4¤¤¡¦ÂuMé×vi•§MîÆ´t×iIãŒ*cà Ûo›tmFÀU!øºˆœÉÀ¨ïÏ/üŸN·©%Ӊܡ{jÙ@‚ñä#T÷ó?W°$‡‹úeDK\ÐÃ}µ¾EÐ<…\;ȳUÚÞ¤9²Q{ÿ¬ EMGˆ£h±rneþئ] œçY¸PT»˜¬,6]‘Q-«ëBÇ4Öa=qÚÝoÌh´*&ƒÞ´—¯ÏÎç?»H øÀÀ! ’ÐõJGLË’(z$”Ô,ã‘>hÖvƒVÍþ[³Î7&ëšÞ ΰs}”X×§"jÝǵûm?¬íâ?°U"zoœ{þvÜ¢ŠEê ÷ôh7S¹U06fc™„`qGÛ­kùãY6Þ=¶qÙúHˆŸdziÖm­Í¡µ·0ˆ‘¤ð·*²µÂ¦omé_ÕÔ”·8½…«£X€ÖÏ(Kʈ÷j£ýôít¨ â îX($,²¦n[4«'ÀáYæ~}ë. Nx7 õ%1z‡>@¿;yŽÑôÓÐ¥© bq8¬ƒ¬ãGN&@ŽÛÄ©¬*ý0âaˆˆ# A•ã«PBp”€Å~5GdЃäeÝ=I®Ö/Ûkêxcº;c*’ =<ఉšº~âÖ”³É]m¹8þ¶_\Û N[µ3DÃûe~ñýåÛóó`¨%ÿˆBO`Ämfæi+bÁ¸³&Ü=¾À¯-óy a<–ZŽ<‰û$PX.&£)Ï5ìÛç“ý¹FÒ>…tìŒ"ôøò2VîMÒ–:­MÚn×<C Iq~ùöyGâcIF@Ž1êíx'¦Õ²|Þ)xêí±tÞ#S-í¤±ò®0Q ½å5U»UÚQŸvUoËœÊ7nܶ5NÒÕÔߦ™Y½ÞÔ­S˜VÔcÀnÌÉÆx% =rOÆ1ñè)!‚U­ãÛvGi0qgoËFA1¼|00àxtÊç\tµ<¹è*A&WJ’^+ZGR#Z›º¾÷0qƆÆl `£6§M›c¸Î|;ÿf&¹÷úÓKÁÝ%Qò©^ík 7Ya¸]nc½—šfYÝßsUĤVÙ˺Îa8:pÙʺZâie+iYÖ6ƒ±¯ À{`µôi®rÛ‹ß}½˜Séw!Ú»·!ÆB"<«é¦Žsë¢ëÇZ Ã?Œ* ?€Ý@ÞdÇަܯ³Ú–¥?挦Y#Ï{¤hGÙGïs:aZcó`‰P?ÿåÎ>=†1 Éði.g7ÓÓœ›Ýbg*Ó¤”;bžàÒ¾Å,vôwÑ?AôÉ+._)N5É…ƒÖ^Rú:pÃGpý¯ß¸¡,f’Š7÷ô?«ÿ¼_’ã ­ƒo‹§æù,Z^ endstream endobj 2171 0 obj << /Type /Page /Contents 2172 0 R /Resources 2170 0 R /MediaBox [0 0 595.276 841.89] /Parent 2155 0 R /Annots [ 2185 0 R ] >> endobj 2185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.796 108.456 190.044 119.36] /Subtype /Link /A << /S /GoTo /D (structwcsprm_292133b2b7143b969a3af6a3f2cf3709) >> >> endobj 2173 0 obj << /D [2171 0 R /XYZ 90 757.935 null] >> endobj 2174 0 obj << /D [2171 0 R /XYZ 90 733.028 null] >> endobj 1987 0 obj << /D [2171 0 R /XYZ 114.916 693.486 null] >> endobj 2175 0 obj << /D [2171 0 R /XYZ 90 678.796 null] >> endobj 1988 0 obj << /D [2171 0 R /XYZ 222.073 631.712 null] >> endobj 2176 0 obj << /D [2171 0 R /XYZ 90 615.542 null] >> endobj 1989 0 obj << /D [2171 0 R /XYZ 421.294 581.893 null] >> endobj 2177 0 obj << /D [2171 0 R /XYZ 90 565.165 null] >> endobj 1990 0 obj << /D [2171 0 R /XYZ 419.043 532.074 null] >> endobj 2178 0 obj << /D [2171 0 R /XYZ 90 515.346 null] >> endobj 1991 0 obj << /D [2171 0 R /XYZ 243.453 470.299 null] >> endobj 2179 0 obj << /D [2171 0 R /XYZ 90 454.289 null] >> endobj 1992 0 obj << /D [2171 0 R /XYZ 358.042 408.525 null] >> endobj 2180 0 obj << /D [2171 0 R /XYZ 90 392.515 null] >> endobj 1993 0 obj << /D [2171 0 R /XYZ 359.866 358.706 null] >> endobj 2181 0 obj << /D [2171 0 R /XYZ 90 341.979 null] >> endobj 1994 0 obj << /D [2171 0 R /XYZ 145.292 296.932 null] >> endobj 2182 0 obj << /D [2171 0 R /XYZ 90 282.207 null] >> endobj 1995 0 obj << /D [2171 0 R /XYZ 186.457 235.158 null] >> endobj 2183 0 obj << /D [2171 0 R /XYZ 90 218.431 null] >> endobj 1996 0 obj << /D [2171 0 R /XYZ 179.961 161.428 null] >> endobj 2184 0 obj << /D [2171 0 R /XYZ 90 144.701 null] >> endobj 1997 0 obj << /D [2171 0 R /XYZ 194.626 111.609 null] >> endobj 2170 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2188 0 obj << /Length 2584 /Filter /FlateDecode >> stream xÚ½ZYoÛH~÷¯ò2qؼ9Î ‚I6Ñb°ð ZjKœ•H I­¿Õ]Õ/Iž#AÔGu]]]õ±6 à›$Á$R‘Ÿ5Yl¯‚É Vß_1ÚÁö¬µÿz~õã;§ü$“ùƒ=2_q6™/o=å3>± ¼ÇEµ+·ÓW÷µ.÷‹Ç_ôƒ.§,öô”yùBÃj'‘'ÙônþÓÕÛy#œTS"4¢¿º½ &KPñ§«ÀI##ú%¾Éé|ëI<®5¤+ íeVêEmjf­f9­ÃM¦¡òº1.ÝÓDså2¾JB_‚r¢™¨g-òa4÷XžNVLÀ ÀÑŽð~$šó"E ­+²ÉV\1oQÀ;Êl"à^Ul5.oõöò.×ë´¦å}UãÚ½¦#àÖýn·É0q|%fP`ì÷™p—¼˜·ÔeëÍ@æ› ˜»°ÛYnóÔŒ® iß>e0É1ùI†ZÁ¼:ª$[]áÆ®Ì¶i™Ù ‡²Øâ†-aD)T/ñ8÷2RäOÙЂ…-fZ½û0ÿJdyZH«ô~CGl xªu^Ε±4ˆ(¡»h<Ú…º¼4^H@ ÀÅŒ=tpD‰>2®Õ8J+ü}”-“Ä…|šê¾­ô]Nç¨òàäþ€¿Ç¢€s[WˆãTY½pL.0»ÛtÕ5+´f­èÀ[Uj ©Ñd¢…# `%Ø6Ñ"?ˆâ? ÑhÞhÒO$D“ ï”Ë¢±6Dc®˜ƒh¼ ÑX¢I¢±#Ds[ÜËáòF0ºð»Ç¤âüy ¥!õ¬E>‚Òº,­û›k죴DÄ]á#(ÍМ <–¢#²Ó˜ƒiìÓlÖ#ŒÆFã Fc£ÍÈx>HËqQ:(ÓEmJ:Æ5\Gó~ƒcB‚1¥)³Š?î±Ç|ƒxo£ÇÊÛÂñ8¾á ÄʘÙoæËÎÔãõ(€k1ìà·‘ØãByØU`€ßæ¬\Å1 eG0V&p€lxC1dÎxãIlŸ"7{*ƒ 2àÍLŽàÍÌlÙ_ ÞìmtÁ›ilœÄoÏóyƒßÎßgù|üvÎï ~;'ºÏè[á·ñâÑý¾¨x,ÖîãÇ…Þ&_prØýýžÌ]ïËÞ÷€D`”°A_æ ©b_š˜˜Õ 8ürC¯z¹¼ªMÀ¤\Ùù*«÷K—[rÊ(¾?Öö|â$£^‰O{%­ëˆüÞ^al͘…¡ð@ 2S„bž² êÃNWD£ý^|¹¶_Z <á7oošñûŸÀŸqÃf¯§Œ1oîˆt½püŽÙØ$j#3®Qᇡ{…Šüˆ…ÎÖë_9‡–²¾ #"úÁ=p#³ˆáˆ‹Æ$´| vÍFЂô…ŒÜgœ‰1N € Ÿ~ázÊ6£@ž`ÄTaÀ™ @õn‘ µÇ]Íá„-€°bŒcÀ¶ý®L÷d_â¨yζ •p jº™ÿçóÛ!–3MÐY˜¥#7x¢Ñ[&¤ÍcV¯Iá2Í6X«a¶L«µ&½J &€š¯Ä ¼6Á:Ùμ›7z±IK‡R*ðÆÖÛøŽª½K}é&[†¨Î¬­Ì÷ƒËáÏÁÐÉ©¦ô‹ÑøKWß*ÿ}È—øÞzÆbD 3Ý¢(ÊefÜÈëåßÌ~`Í)gÀ×é÷/6í f«Ü¯4y±qÊÔ|"ÿNa§œRíôâ;{Å´G­WൽbÖ ²7-jåáenpF¡.Áy–÷ȳíjQ.oïnï¨om\f€½ âØ,oÁ©´šž)d&‹ÂÍÔâ76¯?Àf§.°“¾’ ê 1_vH=k‘».K§yu Øu”8ìΉî3j€]ï/s,–P.µËÌŸ[”i-FdcÅw§ld\Á9ÕÝo–ÍY©ŒÇ¾Tª#Ú„H_|ö ÁŸiª£>/¹Ç’ŒÞfO'Ž9>o3’œÜeÓü ®ˆwš¤5{¶éÛI馢vT¥K¬€´Q¹VÑ2[èf‚Í«ÐåµÈÛeOÍ“´ç°Oa·J¬«Ù²i}QÏr‡ØŒc‡Ë>ß ¡TzîÒR6d19ðßái 0Áõ„~Ãð:™#ئu™=¡ÞË=ÂwcM¦˜¿ÃPkÓþEIDP¸+š6ÂöêžÛ4SüT:_ìïõƒ)¤ ý½ ¿L:…¦ 0ÂX€‰“q]8Ȥ bM$ú!T!ÀØ þûõÛwÓ$ð®M»ñæíPI¥|ˆw¤6_T‡ç¦£™U¤"ýRÿ¦­ÃïûtiÜIŠ—ÅoPˆLk—П‚›ˆãþ·nó‡9WÕ‰…©ø¦¥ôRZ½#Óvmš¿P£òN¨Ò¦M[7‘’Ñqs}Õð?ˆ ö£ š˜·Í“‹=$ž©G{†”¶üõ°­Çü0bÁƒ®’œ×eãâË©C*ñ•’c’̃f¡úëÿwÄV¯ gIû?‡„<$/’n?•t®K×^?^à| øfO÷Éõ¶%þ°äUÀ_‰g<`Ì WMcä—›¯!2>¼¦£~ìsê R åMñtXa«¹‹ Ĉ{þ"´žò endstream endobj 2187 0 obj << /Type /Page /Contents 2188 0 R /Resources 2186 0 R /MediaBox [0 0 595.276 841.89] /Parent 2155 0 R /Annots [ 2191 0 R 2193 0 R 2194 0 R 2195 0 R 2196 0 R 2198 0 R 2199 0 R 2200 0 R 2206 0 R 2207 0 R 2208 0 R 2210 0 R ] >> endobj 2191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.796 702.288 192.813 713.192] /Subtype /Link /A << /S /GoTo /D (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2) >> >> endobj 2193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.504 652.469 334.721 663.373] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.872 622.889 233.1 633.793] /Subtype /Link /A << /S /GoTo /D (structwcsprm_94c26ce331cc876d63baeeada9820241) >> >> endobj 2195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [475.212 622.889 511.506 633.793] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.002 593.31 137.219 604.214] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.939 507.625 334.934 518.529] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.094 478.046 235.092 488.95] /Subtype /Link /A << /S /GoTo /D (structwcsprm_8625c0a6ff99c754566c46c2372df801) >> >> endobj 2200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [475.212 478.046 511.506 488.95] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [473.548 193.085 511.506 203.989] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 2207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 181.13 126.961 192.034] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 2208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.336 181.13 183.957 192.034] /Subtype /Link /A << /S /GoTo /D (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) >> >> endobj 2210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.711 89.776 332.667 100.68] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2189 0 obj << /D [2187 0 R /XYZ 90 757.935 null] >> endobj 2190 0 obj << /D [2187 0 R /XYZ 90 733.028 null] >> endobj 1998 0 obj << /D [2187 0 R /XYZ 197.396 705.441 null] >> endobj 2192 0 obj << /D [2187 0 R /XYZ 90 688.714 null] >> endobj 1999 0 obj << /D [2187 0 R /XYZ 121.581 560.597 null] >> endobj 2197 0 obj << /D [2187 0 R /XYZ 90 545.928 null] >> endobj 2000 0 obj << /D [2187 0 R /XYZ 211.413 469.244 null] >> endobj 2201 0 obj << /D [2187 0 R /XYZ 90 452.517 null] >> endobj 2001 0 obj << /D [2187 0 R /XYZ 323.482 419.425 null] >> endobj 2202 0 obj << /D [2187 0 R /XYZ 90 402.697 null] >> endobj 2002 0 obj << /D [2187 0 R /XYZ 269.027 345.695 null] >> endobj 2203 0 obj << /D [2187 0 R /XYZ 90 328.968 null] >> endobj 2003 0 obj << /D [2187 0 R /XYZ 304.315 295.876 null] >> endobj 2204 0 obj << /D [2187 0 R /XYZ 90 279.149 null] >> endobj 2004 0 obj << /D [2187 0 R /XYZ 306.576 246.057 null] >> endobj 2205 0 obj << /D [2187 0 R /XYZ 90 229.704 null] >> endobj 2005 0 obj << /D [2187 0 R /XYZ 133.885 154.703 null] >> endobj 2209 0 obj << /D [2187 0 R /XYZ 90 137.976 null] >> endobj 2006 0 obj << /D [2187 0 R /XYZ 340.568 92.929 null] >> endobj 2186 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2217 0 obj << /Length 2175 /Filter /FlateDecode >> stream xÚ½Z[ã¶~÷¯0òd5˨˼e§;‹¦‹¤ÙqÛ}ÐX[ˆGrtÙK}ER¢$ŠÚM0ÀX–>ñã9çãá!i²ÅðG¶ ÞFw¯‡qJ¶ÇìýŽ#B÷‚1Þ}:Õ·êe ï›ª=5êúxÕžÄ;±'»â$àn'Ñ. ûÇï7¯=¹îg¡¤þmóþÞfÐÅï7±$Þ~‚kŒH’l_6eúúºyÜüÔ·¡î3¸ï²Ž¶ne‡¼7Qè‘¶1/ÙéoH0¼îXòcÌÄn6BAD5Bùéî®ùrµ‚R:@aŒ}% i åX! É#‘nôhÚªÙ¼=¢(¡}ï8QQù.Ë*Q×êKù¬>›‹P`­j@q/¢€à5ctZèϪJ¿ŒI?u§²hҼȋ³Æªç²­öïY~Î5Túü” ƒ«tÒtà¢ùœ×È!ž0ŠP̃E][Ï»ÀÛn"8„(Æ}·(åS‚áʽ\ã'$Jp4"|È{§[Ž‘ÑÏ‘@û#x'uXË8ÞͺfZ”ú¦î`0 4„†(ißöE8#dÅójÌŒpä i Z· ñ²÷‡²8Ô7qÊ¥&OF e•åEÚK:d‡=”ÄñŠGвG4fÕ#>ÂÞ#B§G,B¢=òØ”¿îáSÔSo,;úƒ5  eh̪|„½&„NX„T;à2RÝäéÕ­†n¼§k ’Èd晥cÙ8¯ª¤xÿ¯W¯ö äÄ=ç»û×óÊ!Õr+….û™Àœ„×ü<€–ý¬1«~öö~ž:ýl2#4vM5w³+÷òÞÙb/æ^ƒY˽>®>÷z u(lÂGsU¶ž|ý¹—GQù``0kðL ]° Mî}›"­<“no6ºbÄoöZ6[cVÍööfOf[„&ÁþÔ¦E“ÿGdƒåƒÅ$èôðx”¥îÿxýè(Å&Dÿ:oü“ÿRâ,F,Z ÎZŽÆ¬ÇGØgBè ŽEH­zàjéò4ž ü2¥Íš'в'4fÕ>ÂÞB§',B¶à‰z”®ýŽ7YsÄZv„Ƭ:ÂGØ;bBèt„E˜4Už÷–!ysyÉO_a~yŸóÐo¾Z4ß`ÖÌ÷ó§„.ómB®Í?îc°÷I®§Ú«7]ÃD@šÁ”¥yÚz¾8OÌÚ<íãêçi/¡‰—Ex¼äÕú4ퟥŽQ„×â?€–ã¯1«ñ÷öñŸ:ãošYúMU¶7冢}yÕ>À0½¨u3:kŸ\ËòWkÒ§«,–ƒdþÆ“ë…YÍÃzœðÝç~q_û‹£O,–ª³F¼³l7h¯íÓ&¥í`Ülš’³aê¯Áø)aªæ$QZÛRmµÐËô©”Îù(ÿ çD,‡ƒ†bϰž/;Yv®aØùÍ0±1lÝ4—Ù4%R[÷eS­¦·|~kÓk·†:Ceâ&Ь[YLö †²K.ï—s¹TGÈVÆòZ˳:–}„ýXž:DzEø ÕS.•4´êy:Ó ±„BPéBæ`æ= 8Lª‚€ëÝ¿ÌØ`,ó³iŒŸç}C£GY€¤ÚL¬omã£%_1~-u|±ã}l½ñ>6c¼ÆØëŽ·ió;my—Ëü¶ eÛC `¾b»­·ÝÇfl×]ÖÏ·g0Šû õ¯Xqs­§3@.& $Ç+µ¯ZL³–0¼„&aL ] Ã&%ŒÙÜ^kE9’)xhOvO& çÅhcþ¥½6y–¿ˆ¢ÎËÂd ®M4Ô!Уâºc÷Ç_þ©ƒ`kíËPW*Jy:"ሄ&è²WŒ²Ý7ÁAo¿QßžKy¾$¯>åò8⢾´E%Nå¹P+vFé.½žËn5 êø”_¯êÞ%•õ²š´Õ³¼©Õ#u!oբѷJuã@Ô÷´ÐLgQˆªÛyT·¥]àÛŒJ9¡„«Q%ªªt fªóõð£ìK™gó³%ŠÆ|v¶4ªU¬]ƒ[š 3ª¬R¾Óám‹ab¶nµ¤‹ÀN5øSTôç.0gŸ Pƒžåomu+k³ñ\×/ûLꎕæê ²k!h›"’£µ@¨}”ÙNËC™™‚ß}ªf<ÐÅ!‚ &4ŸèqÝÚ:©„Åt‚ íKº&áö\Ï$ ¡BÔäï+‘fgyõugyñ×å‘ÙYž½M×TiQËs‰)©ni•ÊA/QY;YmžÅ¸zËD}ªò'#ƒ|Z“ݪòZž[sìRÎ pÊüIe™‰£µê_£|^ŠOš”¦CDÐeÆ„“dÌ=-þ5ÆÏ8ih´Á6‘8ãºA‡ÄB‡Ä ´sI n»$&³j¸®1ûƒE69t™é *ýNg‚È`ÎL Ö !$Gsȶ,2>XpÇzoܤ4b♌wHÆÜS‘iŒŸqÒWd¡nÐ!²È!²úvr‰ n;D9ÓdUdö‹l|âäÎe`Ο#3š ˆS¨1¢a²šËú`Á¹lܤ4¢â’Fcî™ÌÆÏ8ihñ° ;ƒiÑù‹©òÿýW9êç1ŠÈè! º@ÿìF³Ë¾ÑEU6Þ8îº3ñúш=P$¹ÃôŽaõb¢õ,‹SÍü|ÿøäó÷WúU#ªw½ôÎÎßÊÏ_ ¦›zGþnhîžÿÐMlC endstream endobj 2216 0 obj << /Type /Page /Contents 2217 0 R /Resources 2215 0 R /MediaBox [0 0 595.276 841.89] /Parent 2155 0 R /Annots [ 2220 0 R 2223 0 R 2225 0 R 2227 0 R ] >> endobj 2220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.807 447.553 438.023 458.457] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [422.111 206.754 442.096 217.657] /Subtype /Link /A << /S /GoTo /D (lin_8h) >> >> endobj 2225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.977 156.934 452.058 167.838] /Subtype /Link /A << /S /GoTo /D (cel_8h) >> >> endobj 2227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.756 107.115 451.5 118.019] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 2218 0 obj << /D [2216 0 R /XYZ 90 757.935 null] >> endobj 2219 0 obj << /D [2216 0 R /XYZ 90 733.028 null] >> endobj 2007 0 obj << /D [2216 0 R /XYZ 386.954 291.92 null] >> endobj 2221 0 obj << /D [2216 0 R /XYZ 90 275.193 null] >> endobj 2008 0 obj << /D [2216 0 R /XYZ 90 257.703 null] >> endobj 2222 0 obj << /D [2216 0 R /XYZ 90 243.133 null] >> endobj 2009 0 obj << /D [2216 0 R /XYZ 449.996 209.907 null] >> endobj 2224 0 obj << /D [2216 0 R /XYZ 90 193.179 null] >> endobj 2010 0 obj << /D [2216 0 R /XYZ 459.958 160.088 null] >> endobj 2226 0 obj << /D [2216 0 R /XYZ 90 143.36 null] >> endobj 2011 0 obj << /D [2216 0 R /XYZ 459.401 110.269 null] >> endobj 2215 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2230 0 obj << /Length 903 /Filter /FlateDecode >> stream xÚÍW[o›0~çWðÒð|7îã.6MšÖFÚCWM48)R^þýޱIHH×­SÚ‰Œ}|Î÷}>ÇØ$ÄðPãP …4átàp½âGNão&ÁëS³–,œÌºé’ AI8É/"‚1Žn§Íª^Æ 8:oëõ´uí333uLÒÈÄ$*§zUªUÄY|9ù¼Ÿl‚{h‚Iúgpq‰Ã ~ 0b: o¡Ñ:\œ2ß^çÁ××Ï ÿ;AØãô(CXŠ =D‘H=ÇfÀ øšº¶^Ÿ¾uA°€&…€ÖÃwŒ™³†Qˆ«ÞÂévr²qÆñÖPRD6¾.j“å—ΈҭQB”@BKÛ@’rX`ïo`Ê#©wwfÚu]š|ìI¤4Ù0k}œÙ7L™]-Lþ*NæÑíµ)ÝxVúñº®j×Õ´Y»n\»hÜp q!ºÐ]G{]4½¹×ÚÓªl³¢ô“r 7\•³ª^fmQõ¡¯ªµŸ×^Ë(L8äÖ AZ¸õtÈ8Ž^¹5lŒÙOBB5"‚…R3ÄSéÒÈÔsoq6H¨Þ:˜wI5”sߥ_uóÃIiת“y L`Pi;XöRº·ù=‚=Gr*ìçw¹ãdº‰)Žª"'7Åc1Êía,ŽtÚçÎòÇ*Ëó¢œ;¹-ÏÓ˜ˆ¨Kè(ÊÖÔe¶p_ëÆ¸FU. Aîc)"Ôë²[@ µa ãˆæ;Ū}±ÞÄäR “þ¶B·l:åãÂÎ~!±‡ü6›…waÃeÀn>V øÅúRø @ò0ÀÒ¢»ƒŠ|I|ýO%¯ÖPãT)ˆ,ž°‚ÓÚfŪ¸;°¦a¥ž$;ÉÕô?`Ƕ„¹Y´ÿAqÜí¶/@úòDåÎ ¯C¸.‹öE75ÆÔÞ¯ÌØÄ10íüxä¡SâêfšÕù¡S¢B8MŸRÜ7ãc"üŠà×þè11UˆÚÃÊs ¢ Ò<$›SúAš‚À%U "æäÙQøx{âcûÄ?²Û»§ „à‡¤vˆO¿ÁuWP™"EôðŠ&‘VÜ_Ñ|tKèƒ)MµÝÅ ÃíÞ“XÓhíÉ|és»Ñ'˜ž0ì¾(&ĵf1Ý óííùg8}|ã§¢Q×¼ºwïwÕÝýî>{êØ;æXž_è%Ä@ endstream endobj 2229 0 obj << /Type /Page /Contents 2230 0 R /Resources 2228 0 R /MediaBox [0 0 595.276 841.89] /Parent 2155 0 R /Annots [ 2233 0 R ] >> endobj 2233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.157 690.706 194.318 701.237] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2231 0 obj << /D [2229 0 R /XYZ 90 757.935 null] >> endobj 2232 0 obj << /D [2229 0 R /XYZ 90 733.028 null] >> endobj 2012 0 obj << /D [2229 0 R /XYZ 256.465 675.861 null] >> endobj 2234 0 obj << /D [2229 0 R /XYZ 90 659.134 null] >> endobj 2013 0 obj << /D [2229 0 R /XYZ 90 641.644 null] >> endobj 2235 0 obj << /D [2229 0 R /XYZ 90 627.074 null] >> endobj 2014 0 obj << /D [2229 0 R /XYZ 184.156 593.848 null] >> endobj 2236 0 obj << /D [2229 0 R /XYZ 90 577.121 null] >> endobj 2015 0 obj << /D [2229 0 R /XYZ 184.156 544.029 null] >> endobj 2237 0 obj << /D [2229 0 R /XYZ 90 527.302 null] >> endobj 2016 0 obj << /D [2229 0 R /XYZ 184.156 494.21 null] >> endobj 2238 0 obj << /D [2229 0 R /XYZ 90 477.483 null] >> endobj 2017 0 obj << /D [2229 0 R /XYZ 184.156 444.391 null] >> endobj 2239 0 obj << /D [2229 0 R /XYZ 90 427.664 null] >> endobj 2018 0 obj << /D [2229 0 R /XYZ 184.156 394.572 null] >> endobj 2240 0 obj << /D [2229 0 R /XYZ 90 377.844 null] >> endobj 2019 0 obj << /D [2229 0 R /XYZ 184.156 344.753 null] >> endobj 2241 0 obj << /D [2229 0 R /XYZ 90 328.025 null] >> endobj 2020 0 obj << /D [2229 0 R /XYZ 184.156 294.934 null] >> endobj 2242 0 obj << /D [2229 0 R /XYZ 90 278.206 null] >> endobj 2021 0 obj << /D [2229 0 R /XYZ 184.156 245.114 null] >> endobj 2243 0 obj << /D [2229 0 R /XYZ 90 228.387 null] >> endobj 2022 0 obj << /D [2229 0 R /XYZ 184.156 195.295 null] >> endobj 2244 0 obj << /D [2229 0 R /XYZ 90 178.568 null] >> endobj 2023 0 obj << /D [2229 0 R /XYZ 184.156 145.476 null] >> endobj 2245 0 obj << /D [2229 0 R /XYZ 90 128.749 null] >> endobj 2024 0 obj << /D [2229 0 R /XYZ 184.156 95.657 null] >> endobj 2228 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F40 783 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2248 0 obj << /Length 1358 /Filter /FlateDecode >> stream xÚÍY]oÛ6}÷¯0°ùÁ,¿)ÀemŠņ5öƒb+©Q[Ê¥‰ÿý.M*¢,ù*Ölȃëðž{Ïá—(6¥ðǦ–N2Ä 5]n'tz¿¾Ÿ°ðtçÑóÓÅäÍ™€VÄj1]\ï›kFgÓÅê"Q„‰ÙœQJ“‡ú*«ªÙœ+šœ×Õý²ö÷Ÿó뼚±4É‹K–9üšòT'RÎ.'ïOä!5%´£þ{rqI§+Hñã„aÓéÜS¬n'’‹p¿™œO~ŠáðûPuЉñò¸ T«¦ýôŽô¥ìN„?¬‹åæ~Õ âÈ%ˆ±?X]Óãoò „tÈ—~ ­`ÆùS¿Ì7DtzÜÛ –Î}1gë|³ºØRp£ˆ¢úèn'z¾ßÄÚ3ªaÙKŸbìû çêÆ kËÊÕ`pB&‰¥¦CÖãaYÚåsª›€ø34Î|rÏÜã”èÔ uJVì¸ìš¥.{ÀŒÊÞÆBdÇÙ#BLö˜ï²cÌ!ó¶/»"Z§hÒCFe—–\‰Ë0£²·±Ù1ÂFöˆ“=æ{†ìóAHÇüu]¬zÔNV˜ƒ°R•‡xåùqå…&Ú??®|ÀŒ*߯B”Çå#Âå—¬ê÷yï[\%ßú0’ê-Z{ÈØZ¬Ùïü0̘Q¬ã „Áƒ˜›Ñ:„ã3J}ÒQ×õî6ïk/‰Ô)^lÀàŒJƒ3]uLf,•$•Ç·¿Ñóã&̨‰Wk"FؘnÊâfhCÄàÕ¡Cˆ˜èÑ8õAHG]•n=ôm¤ð>&Ñrµ‡Œ!CÍâ»à3ª~ Q#lÔ‘i¬Ã7>¡Ì!s±Z÷w2%¬Tå!£ÊÎJ|#Ü`F•oc!Êc„òáà1,ÑOsXr82„íf„ ã©u:^0f“C;5wnމa/ò*«óUs篋™åÉ}8ñú­9N“þÂì å'‚úÿ8Œšpüå¦ôæˆï_Î?ÍXòá44%)áþöjç¯oËÇÝM¿³»I!ÁHžaØÿ endstream endobj 2247 0 obj << /Type /Page /Contents 2248 0 R /Resources 2246 0 R /MediaBox [0 0 595.276 841.89] /Parent 2269 0 R /Annots [ 2258 0 R 2259 0 R 2260 0 R 2261 0 R 2262 0 R 2263 0 R 2264 0 R 2265 0 R 2266 0 R 2267 0 R 2268 0 R ] >> endobj 2258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 274.411 131.683 283.257] /Subtype /Link /A << /S /GoTo /D (structwtbarr_8743b84c99b4b5e7ab7bf0653507a180) >> >> endobj 2259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 261.459 136.665 270.306] /Subtype /Link /A << /S /GoTo /D (structwtbarr_1e88ad32570534a006e96cba721489b5) >> >> endobj 2260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 248.508 146.627 257.354] /Subtype /Link /A << /S /GoTo /D (structwtbarr_f8ea7b15992ab7a86be63ff83318be41) >> >> endobj 2261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 234.057 164.719 244.403] /Subtype /Link /A << /S /GoTo /D (structwtbarr_9f1fcad814aa3da08dfa75ede2a07deb) >> >> endobj 2262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 222.605 153.512 231.452] /Subtype /Link /A << /S /GoTo /D (structwtbarr_24487eda7b17800f41bd4a452c6306d5) >> >> endobj 2263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 209.653 152.864 218.5] /Subtype /Link /A << /S /GoTo /D (structwtbarr_10c8dba85b62e2794071dd50a41c4bb1) >> >> endobj 2264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.547 194.645 155.464 205.549] /Subtype /Link /A << /S /GoTo /D (structwtbarr_750832793167bbeebd1074e29844415d) >> >> endobj 2265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.114 181.693 151.35 192.597] /Subtype /Link /A << /S /GoTo /D (structwtbarr_2ff7c235353320c6dd98951484012ee7) >> >> endobj 2266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 170.799 149.397 179.646] /Subtype /Link /A << /S /GoTo /D (structwtbarr_f862b4f90b0406ed8dd0c240768d4bd3) >> >> endobj 2267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 157.848 164.062 166.694] /Subtype /Link /A << /S /GoTo /D (structwtbarr_901403d05f985d4a1fbd2fdc9585bd50) >> >> endobj 2268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.972 142.839 183.409 153.743] /Subtype /Link /A << /S /GoTo /D (structwtbarr_41c30234dbdf18ac094872cf39562172) >> >> endobj 2249 0 obj << /D [2247 0 R /XYZ 90 757.935 null] >> endobj 2250 0 obj << /D [2247 0 R /XYZ 90 733.028 null] >> endobj 2025 0 obj << /D [2247 0 R /XYZ 184.156 705.441 null] >> endobj 2251 0 obj << /D [2247 0 R /XYZ 90 688.714 null] >> endobj 2026 0 obj << /D [2247 0 R /XYZ 184.156 655.622 null] >> endobj 2252 0 obj << /D [2247 0 R /XYZ 90 638.895 null] >> endobj 2027 0 obj << /D [2247 0 R /XYZ 184.156 605.803 null] >> endobj 2253 0 obj << /D [2247 0 R /XYZ 90 589.076 null] >> endobj 2028 0 obj << /D [2247 0 R /XYZ 184.156 555.984 null] >> endobj 2254 0 obj << /D [2247 0 R /XYZ 90 539.257 null] >> endobj 2029 0 obj << /D [2247 0 R /XYZ 184.156 506.165 null] >> endobj 2255 0 obj << /D [2247 0 R /XYZ 90 489.438 null] >> endobj 2030 0 obj << /D [2247 0 R /XYZ 184.156 456.346 null] >> endobj 2256 0 obj << /D [2247 0 R /XYZ 90 439.619 null] >> endobj 1031 0 obj << /D [2247 0 R /XYZ 187.245 406.527 null] >> endobj 186 0 obj << /D [2247 0 R /XYZ 90 389.8 null] >> endobj 2257 0 obj << /D [2247 0 R /XYZ 90 291.327 null] >> endobj 2246 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2283 0 obj << /Length 1837 /Filter /FlateDecode >> stream xÚÍYYoÛF~ׯÐ#…T›=yø-NìÀA›´±¶H‚‚¢VÖ"©’”eýûΔy‰rSÔ CËÝáÌηs.ÉÃGxˆELŒ“Íï`ö툸Õ),Okë—³ÑËko¡ÈgãÙÒ¼î$(ÏŸ=›L ÆØÛ—ó8Ï'S*°w[滤´ãr)ó =™Nˆ—H˜ iè{\L¾ÎÞ®fGánk‚ùZôߣÏ_ñx[|7ˆEáxcŒH7#N™¯G·£ßŽ<ì<ƒù>íaçÕ£ a_ÕCÄ)øF–±ZË…Uë,’\mK•V©Våå5¥œGÊã‘at½K MÛ* ±±…( ¾Ý´^ÈïÅÇÚö+êiܨPÜf©Åï“¢Œç_°ÀðO:›ð)èÉ››h!WÑ ‹n1Ò¢¸8óö+•¬ôzªÐ¿ÄSé„cï~B±—}›ìh Þ•ÙPK•ÄëõÁÎÎí}3,ð'‚WQjÐféÀÛªÕ)ðÇ`±l¼ŠfXt‹Q ¼B–…a·µØÅ©ƒ*ÏãƒÊ–Öëæb„I›0zXíX*£ˆ†ÜÆsÝ •™“Rª(õ›  œq:%Eº‰Ò» ‰''Dxeƒ­§wz{I–å •Æ¥´4ë,ûf´€1ØäZ–n™Ã™›ÙØþÌá¥ü` aC†L íNfJÍåÍûÙ$bÞ«ËŸÁr®ÌIYnéÂ’l«ìàvÒWrcÙ«4ÕÚá†Z@ÐqÌÄ0â³îj‰§5ê®Ë4±ñ|›o:’C”ð¦è¶“:ša‰ÌG˜5$>zÆVf®­3£êÄ,Š)OÅÀî¨Å°ò¹.”qˆ/tƒŠfXb‹‘‰&SŽC—®ŒêÆüCjìÀLìŠøÎæ//ÍJé[fy'(8U?|"Fõà–Û,Ÿ™Â…4D«¢Qäó¦Éh·jÉãxqÿ‰JWÔƒ’Û,Ïç2ÎádÛ›h)]Ñ ‹æ¾ÖEw}›zå©*[âa±M†NáÕ"Ÿá¡UG~OϨëh†å¶UÙ'"ÕQë#sŒj12^™-ˆ¬—À`›gëìnçžldmD²€ °æ±¯3‰ 炨£žÖÈ»1­ÅÒ…Q]_t1#F>¦MùíHêh†¥¶Ù(b ‚‚ѾOäS ÕµÎ\+Àß#ïõ‹v`b Í $žË$ÞÒ.@>7¿±ýIã[(¶q¢´}J²ô ÆLér[?ïU¹²#—¾šÛÇ?W0ÄEET¶r!Ýn¤ÑTgý¨3¿Qçúfv{óA?„ÞJÆ ™[ höÌÆÍh%¤o´ÒzcÜ¿SUºðÏ×.AÐ(]´Íb[cÂo.5n kÈ% –õIqL‚þ*º¢8“¬dÍ–ÿ6—`î‰, }°zf'yf‡Ån^”ªÜ•¶R{8z/”#ÒN®ÕF•Òù…z Ðæ^¯Cº.æÚا`÷çÛG=­‘÷"M–.òô¸ôG‹¦ì¶û8ša‰jíÈoHTe!×KÔ=$0,C<…'Q­;£®;»Vr]µfY²ÛÈ´Œ«Ž«ÕŒÙ÷Ž}Tö={öª·›3žÌ lixÝA‹ÐÙÇ[u/{šB€%¨ÊqW¢‚Ü›-+`?Ë…QºÛÌ¥ú=h@Gp؃ÆŽV›gÖÊæi§–kSú44ã¥î¢ÝX¥ [äÛÇ{=– T¥Å¿C‚B⛲íÁx½ŠuWT©«`žjéz‘zòÜë;’^àt¾è¹2áà>9}›S[ïqzqy˜MS*ºñ^46$«¢H ŠÅAC`rY€´:ţ:¤GkLЉK£ôqù´Î–ä¬Ê§=j< ­RøQšrúž´ó“NoY8Dü†©sgê ˜YÓÖåC ðù¬½³kådÅäêÙ{}Ýóê—«.+¡{WGxÚ?Ž·âñV†îV@—Eæb ¾ÐG„öe$NE @ïÞÜLå?‚Ÿ®>ö'PÕA¾ýôxÔ¼Séƒ.€^ˆ’>èüèÖ†ïýÝÏWŸz ÓµnðBÇÖ]pÒiKëØf³?uÞÊq£C ¤2¸!!â~tÔ$[ï6©ë~Ç,‚Ÿñör—(óTZ´³h'…úý!ºÝÞˆº³YgÕž«³1Ÿ22öÏ\CÌ&!hsº *`ÿ©ZŒN¹oºPÏ]0^=l!ýUßW@¾uªx­ÊCÍDxô”sn• "Bºªž,®mZgÓïþâdê _ßÙGõOJ1î>)9é™Ê<>j™¥ÕÙFÔ«®L>TŸÎ¸ý!Ѧ Û'Љl© s±ã÷×·úæûæÒ½ŠBÝ ':TmÑÃáNv®°ô7±.<ÿ]ó¤ endstream endobj 2282 0 obj << /Type /Page /Contents 2283 0 R /Resources 2281 0 R /MediaBox [0 0 595.276 841.89] /Parent 2269 0 R /Annots [ 2285 0 R 2286 0 R 2287 0 R 2288 0 R 2289 0 R 2290 0 R 2291 0 R 2292 0 R 2293 0 R ] >> endobj 2285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.837 695.563 163.13 706.577] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.678 695.563 341.529 706.577] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.994 671.653 134.21 682.557] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 2288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.594 671.653 235.128 682.557] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 2289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.972 671.653 390.823 682.557] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.849 671.653 445.143 682.557] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.533 671.653 494.222 682.557] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 2292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.358 659.698 191.598 670.602] /Subtype /Link /A << /S /GoTo /D (tab_8h) >> >> endobj 2293 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [99.245 620.22 124.201 629.067] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2284 0 obj << /D [2282 0 R /XYZ 90 757.935 null] >> endobj 190 0 obj << /D [2282 0 R /XYZ 90 733.028 null] >> endobj 194 0 obj << /D [2282 0 R /XYZ 90 606.646 null] >> endobj 2270 0 obj << /D [2282 0 R /XYZ 90 582.277 null] >> endobj 2294 0 obj << /D [2282 0 R /XYZ 90 582.277 null] >> endobj 2271 0 obj << /D [2282 0 R /XYZ 204.31 547.148 null] >> endobj 2295 0 obj << /D [2282 0 R /XYZ 90 530.421 null] >> endobj 2272 0 obj << /D [2282 0 R /XYZ 300.28 497.329 null] >> endobj 2296 0 obj << /D [2282 0 R /XYZ 90 480.602 null] >> endobj 2273 0 obj << /D [2282 0 R /XYZ 90 393.92 null] >> endobj 2297 0 obj << /D [2282 0 R /XYZ 90 379.35 null] >> endobj 2274 0 obj << /D [2282 0 R /XYZ 330.426 344.201 null] >> endobj 2298 0 obj << /D [2282 0 R /XYZ 90 327.474 null] >> endobj 2275 0 obj << /D [2282 0 R /XYZ 321.221 294.382 null] >> endobj 2299 0 obj << /D [2282 0 R /XYZ 90 277.655 null] >> endobj 2276 0 obj << /D [2282 0 R /XYZ 320.673 244.563 null] >> endobj 2300 0 obj << /D [2282 0 R /XYZ 90 227.836 null] >> endobj 2277 0 obj << /D [2282 0 R /XYZ 456.462 194.744 null] >> endobj 2301 0 obj << /D [2282 0 R /XYZ 90 178.017 null] >> endobj 2278 0 obj << /D [2282 0 R /XYZ 200.495 144.925 null] >> endobj 2302 0 obj << /D [2282 0 R /XYZ 90 128.571 null] >> endobj 2279 0 obj << /D [2282 0 R /XYZ 305.201 95.106 null] >> endobj 2281 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2305 0 obj << /Length 1925 /Filter /FlateDecode >> stream xÚµZÛnÛ8}÷Wí‹ Ô,ïô!MÒ¢E6é:)ö¡[Ž­$Zø’•äMºûó;I›’%Êi…u9š3Ã9œ¡¨>†¤¯p?RLô§‹îßÂÕ=bïŽàöÈ»ÿþ²÷öƒ§’¬yS>. ”ô/gßr8¢>¤óį¦ëE²,&EºZGŒRE\¿_~î\nx¬‚IÍòwïÛwÜŸ7Ÿ{1÷à#¢TÑã”Ùãyï¢÷ûƆ¹ÎàzS ‚°îH(CXŠ2C<Œñ ]Úé·ß>‘s¦€@?ñ'ÆÌ@|³âµˆ‡âz’e³t1O–Ké;’1Rœ%’”[«$÷ 1Y«ÓšŒA,‘"ßÑçrp8›eIž›“Õù-î}éh–É 0çÉ<ÑÙ«¢'Kû›e“Õ[i ÎÛâÎ\[BÜØÊ=Ü¥Ó»Špmš“ëŽÉcšë0û#A^b&‚”0é2<¹Ý$³êÓ,ú÷Úž?diQ$K´›&9#(–Q%ùÄ&¶Z_ƒ¢wòÅHbáå¿Y„".XMed÷ "Pa¿˜¨Œ_V$3'å ɨL«>·C®uõ¯¿„ÙŒéËiî[ˆÍ0k óùj "šÉÌÞ±Ëëƒuîè'Ë™1lD¡/y›œ(JOKÛ¤æ{&ŸpºrÙ‡©g§¾´Yo«b›ç-gù<…1§±y9ÝL“9º«—Äqr±“x,§VSW”Hµcª´õ:]Nçë<*ÁÞ«ûì/t÷ª […ˆ&ŒV’eÚ¬tY>w<)&Æ­‹"[O‹µñ,o(Ð\F㨵Mx÷Ëâêë` •2ÞØ(åH©¨Ó¬‡Q¹&LÉUpÏ'ÌËw(™‚¾Ã«”úFvkcŸÜ¢Ãä5“š¤pŸ-vÈAƒÑJŒ0ÓçŠB‚Hhiº 4ŽH CGq5ˆnÝ…:¢/MyRæƒho ðçE:™Û©ª0Só›U¶°­\_¿Ÿ˜‹DW‚9ÚÍ(ÌP 1rè•ò9l 4õnª˜Q'º-UÌâ1Àµ©Ø»ßªb‡éRqˆk£â ¡U±Oøzf£ÛaåE4ª²¶ Ù¢Ãü5“¥4NNOOÎvÈcðZc0d‹ SÂ=ŽyuŒ¡ýåé¿Éê¦ëÕ/Ä_3iå•.Ó+X\-òÛ2€áMÞß‘CE)×ãå Cº0 »ç@5÷Ú|ã1¢²#+Ðb fÏ^l0P›PÁņƒ˜v}Ÿ ¼lNõ C»ôáeF2õ<é·/_Ñï]ßb:¥¿µ~ˆÐIß#얾Ϻ‡ôCü5“›ÊZ´JŸP…"ß_ú¢ct,¦æ\@ø1aᜀð¥ Fø‘úyåSB‰XHùòåÓX@]á/¥| ½LÑpÑw˜.å{¶Ú•$´Ê÷ ;•_aíV~¿fÒŠ+Oº”ˆ\+?ásöÎjÞuH?˜”_&}#Æã ô-ä)Òç°Ž_¬èSÀÅo{Ó)ý­­€ôC„Núa·ô}Ö=¤⯙´âz¤y«ôHU(ò=¥I&*ìÕ¼ksMÀR ÝÁ¤pŽ8ýÒ§Q®úòéƒf¨|±ªO ÉŽ¥¾ÃtIß³Õ.ý ¡•¾OØ)ý k·ôƒü5“®êÓÇé"šôCÞ9PÍ»é“ò«¤¯ßp¬úòé“^DØsÜÚhÚ,Ô´ÐK—N–ëE’•›šMû…DFíû…Þýöid1Ó(ÀµF!B7<ÂâkÛó®vïy©k&«½jò‚Œ‘Á°&ÈM CË ÷;1»±—t¦:«†E>¾ºÉàðlw.‰àÅ¡úT°ú¥"âÒwãÙ‹eoê¹€2%Uú,‘âçÿ¥ì¼!•Æ£k·Ç²—_ì“¥n;år½sn?©]jÕ¬ívú¹ÛVææ‡¨L6gP(ˆ9ºR1Xeæä£‹SñOïí£(FÔ~ ÿá>g?þ¸5.àŽþ™Ýáù®ÓÓ endstream endobj 2304 0 obj << /Type /Page /Contents 2305 0 R /Resources 2303 0 R /MediaBox [0 0 595.276 841.89] /Parent 2269 0 R /Annots [ 2310 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 2326 0 R 2327 0 R 2328 0 R 2329 0 R 2330 0 R ] >> endobj 2310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 463.853 168.196 474.757] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 384.149 185.91 395.052] /Subtype /Link /A << /S /GoTo /D (cel_8h_055ad88aa219a0207e221d62e03d2e23) >> >> endobj 2313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.461 384.149 271.119 395.052] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 369.893 194.077 379.798] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 346.024 202.507 356.928] /Subtype /Link /A << /S /GoTo /D (cel_8h_0474e3e2d6c39249acbe58cedd573e84) >> >> endobj 2316 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.005 346.024 249.261 356.928] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 307.899 203.055 318.803] /Subtype /Link /A << /S /GoTo /D (cel_8h_9e188b582ee4eb815466e86bb684fc82) >> >> endobj 2318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.553 307.899 249.809 318.803] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 269.774 203.055 280.678] /Subtype /Link /A << /S /GoTo /D (cel_8h_2fe5a30084717036a54e7f0a920da105) >> >> endobj 2320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.553 269.774 249.809 280.678] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 231.649 205.825 242.553] /Subtype /Link /A << /S /GoTo /D (cel_8h_f72e24d2f169c3c343c55c880a74050f) >> >> endobj 2322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.323 231.649 252.579 242.553] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 193.524 205.825 204.428] /Subtype /Link /A << /S /GoTo /D (cel_8h_c398f2bea2deac6d86c10a7b3efca966) >> >> endobj 2324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.323 193.524 252.579 204.428] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 113.819 211.912 124.723] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31) >> >> endobj 2327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 98.961 202.268 109.147] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c314ca7a593593157772f3788801138dd12) >> >> endobj 2328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.226 98.961 352 109.147] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c317fa1e5cb9c23e5f138638dad3f938e1e) >> >> endobj 2329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.958 98.961 488.302 109.147] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c3133a743bdcdd17bae9c6961234ed6b642) >> >> endobj 2330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 87.006 257.252 97.192] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31367cf89b74764f9462bfa50c2eb50fb6) >> >> endobj 2306 0 obj << /D [2304 0 R /XYZ 90 757.935 null] >> endobj 2307 0 obj << /D [2304 0 R /XYZ 90 733.028 null] >> endobj 2280 0 obj << /D [2304 0 R /XYZ 191.867 693.486 null] >> endobj 2308 0 obj << /D [2304 0 R /XYZ 90 677.087 null] >> endobj 198 0 obj << /D [2304 0 R /XYZ 90 616.577 null] >> endobj 1032 0 obj << /D [2304 0 R /XYZ 90 582.592 null] >> endobj 202 0 obj << /D [2304 0 R /XYZ 90 582.592 null] >> endobj 2309 0 obj << /D [2304 0 R /XYZ 90 482.463 null] >> endobj 2311 0 obj << /D [2304 0 R /XYZ 90 402.758 null] >> endobj 2325 0 obj << /D [2304 0 R /XYZ 90 132.428 null] >> endobj 2303 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2339 0 obj << /Length 3409 /Filter /FlateDecode >> stream xÚµ[moÜ6þî_áZ4Ëã‹HIîC7EŠ éÙÆå€^(»²­Þ¾´Nìî¿ß 9ÜõÂÝ‹QÈJä£y†Còá’Å%‡â²à—™ÎX¡ôåb}Á/ï¡ô§ Aµs¨žw긽øË[O±Â¨ËÛ;û¸LKqy»ü-1LÌæ‚sž,ª{˜Í¥æÉÛzU¹«ëê®jf"OªÍŠÏM–¤Ùì÷ÛŸ/~¼=°’OZäü÷Åo¿óË%øöógªÈ/¿Â5g¢(.שTt½º¸¹øÛÁ†+WP>Ö,°Âx¡à"eyæ XÑÜâº"eÏ R1nŽòòŒÆ›ßÿx}ýéÝû÷ŸÞ|øp}õéöz&’ï¹é7Xjaê \ö˜¨R+¦µ ¼ø«‹}újÀš fd²NFÁ£ãü=“(ü0S:ùþêÓ¯ïþÑwDiô(¢Í÷˜(½Òãb¬õzÐz•eŒçòÌÖ{tœ¾gr¤õg‚'®ß_õÝIsÉTšEcà1Q'Ò†´ÊÆ‚`ÜÏ‘;œÆ0!ÜSs%a2¥ö©·›Å¾ÞnÚ‘ùiLÎ$7“šÑ©NnXªòƒ äú§”ºO#8<"u”Ëcâ„47»„õf?à“ s"ù¦UÐqæžIde¬7õ€\sÆuo,aâ”Z2ê0º\óvß<.†mÎ9K‹s›ìÀqúÐ 5x׬êÃs&t¼w=fÀ(ÒŽæÎLjz æÊò`j°"GÛäDE Ç\Æ„‘—„TÂïˆWÂÀj˜ÁåhÉŒÑÑ€õ8•—9øaܨ™ÊèÎUuW>®ön‚.`ÎÙÞÚ6®àÎ_ìªAaˆe¼=žVqBGý뛌t" 6ÓiÊøÂå0qJ ú£F6ÙC)ˆ!Wÿw)ê !Y¡å´€A)-âF˜“v´°¡°aLÀº|gXŒ¹g’†Â]SUCÓ°øšxk çÄÜ›0¼Ó,Ô™&tÜžÉÈøŠ ‘EÛì1ÊPÄ4L’¬×æ)“gŠ ›”g/±£I#ˆ±óeK†ñÌ„>Nw¡ãõLFºMrVd: ¹ÇD)%$YR„”§t‹+–¦ÅŸ¥[ºÀõ7‹ê–ÇœÒ­Ž­iÝŠ’nu #ºðÖ­(sÏäa,ìÇ/Ãe¼±„‰SÂÚ…{Ê º [v5wó`\Á$OaÓVœÙ|ŽúÒ7™ ðË}í1Ê@Á`€f0Âæ¿0 Ó™†v¨oW°Ž)ótçׇ§í«f–êdû¸¯7ÕINjØyþFºÐ¡£ÞõMÆÔ,g*ª¹CÄé‡mƒ èN(™60È`¯ø"%ÓJ¦äõ*®d„9©dG[%‹z%ëÆ”¬Ëw†’Ř{&i´Õ´’Å{P²¥W²nt# ˜`\eç¶™Ðqz&ã»ÈŒ«h›=f@&`Â|„m~©|)ÃLQ¼@¾Ž&å‹ èÎMµÜ}“|Áî«Ý.@ù ßzcÚU°¬O=P/‡‰3ÂÅ•(Oé—Ô,ûóä êÑë¨|æ¤|mEä+Fèå«C8!_Ú!_T¾g¡ð$Û¡|êHo,aâ”°ÉF‡ÑÈ Œ8·Í„Ž;Ð3Û?B²$M´Í3  åKB˜{#êœýã+)—ölž%3øïyftÒ¯ig"y¯YyÃ>û…Âåöñ³}×O¿ÍæÂdÉï}XÀž{0ªƒFáÀ—V©ç Ü…vç~»‡ºû¨Ýr N’A'~ûr9Ö¯6÷¶ÖŒ×–ûÞ³‡t±ÝS<[Ò\³<Á’Ð10µ$xˆÍhë§j5ßoç_·ÍjIç‹Õ vêu¹¢˜4ØÃ妅%b]â‰ÿ¤d¦ õgIfj '³¸dzÌ)ÉìØš–Ì(!If—pB23hSÀ•LDÇ™{&}Æ'ŸÆ$¼£%Lœ$’þ ¸ÅTLñâÜ&:Îß3WL<–‰5Ùc”¡bB\Т׿3>œù*£™¯T²ͰeÆ—¥PVîûe¨–«ÁÓíQ@¡ØË Tt®½*‘îì‘éÛÕ(Jnæ…Ò½쪚ÍqÍ;¥˜O‘gŸ_¬–J£ }»XžŸÔJ‡À˜|œ2A•D¹Ü¡n¾X.Á!Å ü?ûôBУÒ-}Gï˦.!úcol•)˜4ÓâÛ©Ÿ_9%¾1®ƒøF I|»„s´ÅCÙ¸yÚÑ©bBg4QýTÜ3Ú~T¸7-\„Ž;Ú3Iñ©jšu{?Üg,FÇ!¢”˜êÉ"`ôÓläžÝ}¯o˜8|¦s“»^U”\Uí¢©w8¦‡2cF£JTÞ>T-Îò@¦*w½+›½mïÜ/îEmÕÛw·7®èã,ç å*pûf»m–õ¦ÜÙÍs»¯Öî—¨on¬€X+ +›e „ÍÒ³—ĸ¬Êyøµ§Py;v¦¹Ê1#õÄ-›Í3ža“]*lë— 1‰»k•«d]í¶ËÖUí·î÷3U>¶`,±›pg}½Ã¨Ý;„åF='z•|ÅE\zÞ¥f»¡}†R5ëjY»€e¢koCX€A,ñR&+èŲqÅû¦«p®ÌöüÖëòž¬ƒLbL¬TfÖM}G€ƒÊŸe —Äÿ¥^У_ìƒM[BxU–Ã;lUÙ`$SˆhéB™ª¢±wK†3£ÒK™–kyrž;ô¼™ç¡ÉéEä¹Í+ò¾&N âž PRBfþõ¡^<¸X€4Â4Þ´®¢\­ÜE½ét â6UµtñóC‘HVpLZ8yã¯Éè1D wžu»¨ã‚É“v»F£ I•*wó¯ÖíÞ!ì,Ág*ªúüìÁdæO3K9&Iª ±„€- še7Xà±5øƒ>UËÝ– ^º^ :Û©!Î%-;«ú_8™(¹)ÝϛᆪEiU¶8§Ò"ù<“²×M?PB]MÍ´ÄO&[ ‰ÃŽ#y@ŒcMj“ìš-*Á—zé&mkÀ/”Èú?•œeš”å{$ŽúÚ7Ù’i™G£ã1qÊBÛwÙ]J?ù10¨@hÜͲºÃqé? 2 ­0nËÕ# ìà;CŽ_ÅžŽúÚ7ÙùFdj¥ óZ“ÇĹñ¸ö6]©X¯i0a:@GXö~]­çNÆTêžíNúmóì·=~Ö¯K*z(qZ»eË•|®ª ‰Ájµ]”Ø'>—ÚoýVgÛxÅ 0$‡þ0~]µ-,¦¯<`9øL5Å/f„ýÒ@ü¼Ë£çøð3ÕžÉã»ñ©î‚å™)Õs¢ÆC˜85®ePÐ¥Þá;×–6ˆþ—\6œ:BÚæžs"éÒØïQk%.ö,`¤æÐ ¯†ªYo“k–©ü”tzÞ(XhòøbnR:sØ,À œ¤§îBjBiJ‹¸Mîl¤ƒPr”p±QRsÊ`¯Ÿ3Ž:Þ79­¤ÊàñL·®ó·–lmÉ6™´Ù“µ½;ú3cY–Ab©X–«“ýéÐó|¤?C“§çd]p˜Ð‰A¿:Lœö¿y.êcÞ•s×g4W²Ùîà-@¶}¥Ý|<íð®^ÔûõÙÜw²cëvrcÿš%{×Ãú`mUnüþ aÿ4ø N³\HûÂ;—'e‰Ðó|dÛšJ„³7åÐ=ÓSˆC·k ÁNL!BÏ;ðÑsì®I—~þ1lì;`wÚãÈ…ÃÄ{†¦$QLëÑoQ8îo½¾í/!ÝŸ3ä0Ë‹î{Ê,¥ž vtî§jS50piã—®[|»ðH‹Û‡mR÷#Š×\¾VÜÝIØ[Ð'G8OüNtá= åw?У,g’vQ´¿ºÚ>=ßW›±¡6 ÏÿÅ&‚ endstream endobj 2338 0 obj << /Type /Page /Contents 2339 0 R /Resources 2337 0 R /MediaBox [0 0 595.276 841.89] /Parent 2269 0 R /Annots [ 2341 0 R 2342 0 R 2343 0 R 2345 0 R 2346 0 R 2347 0 R 2348 0 R 2349 0 R 2350 0 R 2351 0 R 2352 0 R 2353 0 R 2354 0 R 2355 0 R 2356 0 R 2357 0 R 2358 0 R 2359 0 R 2360 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 2341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 720.286 252.061 730.816] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31cb1dec1ea393b198b93a26425ee901a2) >> >> endobj 2342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.632 720.286 357.515 730.816] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c3144042efc5a9894182447dfcbcd24e1d4) >> >> endobj 2343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.086 720.286 483.343 730.816] /Subtype /Link /A << /S /GoTo /D (cel_8h_b20292954fb236dafb2cd78aee121c31ac8beaf37d754d1a7a7aab5307a2140b) >> >> endobj 2345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 665.053 151.05 675.957] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe1b137ade45ea28e61f44d4708fb77) >> >> endobj 2346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 665.053 209.152 675.957] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 650.432 253.604 660.337] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 626.198 156.012 637.102] /Subtype /Link /A << /S /GoTo /D (cel_8h_39bb7bf8e545c200191d51884ecfb89b) >> >> endobj 2349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.455 626.198 214.113 637.102] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 611.578 221.971 621.483] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 587.344 151.598 598.248] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 2352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.563 587.344 233.221 598.248] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2353 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 572.723 229.297 582.629] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 548.49 151.598 559.394] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.041 548.49 209.7 559.394] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 533.869 230.785 543.774] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2357 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.572 509.635 154.019 520.539] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe7f134670262eb54b6049c0275a27b) >> >> endobj 2358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.764 509.635 211.423 520.539] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.755 458.826 154.202 469.73] /Subtype /Link /A << /S /GoTo /D (cel_8h_6661c05703158b0808038b7d551f1ea1) >> >> endobj 2360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.312 458.826 211.971 469.73] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 366.108 210.796 377.012] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.637 273.699 189.296 284.603] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.103 232.164 153.867 243.068] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe1b137ade45ea28e61f44d4708fb77) >> >> endobj 2365 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [263.866 232.164 293.524 243.068] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.396 232.164 435.121 243.068] /Subtype /Link /A << /S /GoTo /D (cel_8h_39bb7bf8e545c200191d51884ecfb89b) >> >> endobj 2367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.015 220.209 375.327 231.113] /Subtype /Link /A << /S /GoTo /D (cel_8h_db2e4565f61a9de5fe278d9035850dc3) >> >> endobj 2368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.202 202.585 186.514 213.489] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.634 202.585 364.293 213.489] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.781 190.63 368.093 201.534] /Subtype /Link /A << /S /GoTo /D (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) >> >> endobj 2371 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.816 178.674 244.957 189.578] /Subtype /Link /A << /S /GoTo /D (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) >> >> endobj 2372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 161.05 123.085 171.954] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe7f134670262eb54b6049c0275a27b) >> >> endobj 2373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.631 161.05 174.713 171.954] /Subtype /Link /A << /S /GoTo /D (cel_8h_6661c05703158b0808038b7d551f1ea1) >> >> endobj 2374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [490.694 149.095 513.996 159.999] /Subtype /Link /A << /S /GoTo /D (sph_8h) >> >> endobj 2375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 137.14 126.413 148.044] /Subtype /Link /A << /S /GoTo /D (prj_8h) >> >> endobj 2340 0 obj << /D [2338 0 R /XYZ 90 757.935 null] >> endobj 2344 0 obj << /D [2338 0 R /XYZ 90 684.026 null] >> endobj 2361 0 obj << /D [2338 0 R /XYZ 90 385.082 null] >> endobj 206 0 obj << /D [2338 0 R /XYZ 90 352.534 null] >> endobj 2337 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2386 0 obj << /Length 1373 /Filter /FlateDecode >> stream xÚµ˜moÚHÇßó),Ý#›}¶7ï U*.éUOj+DÁIÑã$÷éoÌîÂâ'œ QaÖã™ÿÌüÆ6K< ÄSØ D€ÞlÙÂÞ¬~ls¶§;Îùëqë⃫’Ìßï.— J¼ñü›/iwÆØŸEèW»Cö?,#}4Œî£¤MB?Šg°Äp(Ÿ‡íãO­þxÕhLf1ÿi}û½9hûÔˆ©Ð{‚cŒˆRÞ²Å)3Ç­QëϽ½Î`½,-AØé¼(CX ›¢&³^ôc›”z«ÙvÅé4]¬â,С1®Wî«òÛüèân0èßêãïXàÍ¢Mü£ÕýîKšlg©> Õ\'KX%›…5XÄi¶’ýg/>PzHTIÊw*Fp‘ö´º×Ÿé¯(_vÂ"ž Šê²eËɃ9?t ¨m;Žñ®„®‚cw™ E!¬¤(ò8p®_Ö¦> ˆŠà(¤[ÄE¬ËÄkG¡T$3†‚ IÐe ¶ñ"Ýü®½m7Ñ\ý|9”Tß&Â_%i2õÂS2…Æ®×Q²A:‚ËZ‡iŒ@vŒ €‡7´œ(ä"^L¢ªIüÍÃ~u·ßs%„Ä1Q: ©Px4 q¢õ¡Bsho„—ޱ±&YB½h­G6M¡rö`Þ ñ§ WA  \ŽÊ<'8aÄR-r‚À ÀÚdê®æsÛÎûUbú:ýýÔ&ØŸ&ó)ñj¹†Iÿ¹x„º/Ò—¶þ‡|RT*ÁŽë^YWk]«=ïÒŒUEßÀË‚º¾wŒImPFL 9 :_$Ñ,}4èÇ«6þ“³MMçe¤Sª=u˜B”J‡tVIú:I_Mº€;0I:邃7ÌêH·&ÍIwœ¾‰t'ÕJÒ­Í»“~T÷Ó¤×iÏ»lDzMß÷¤×µ¤»AÏM:¯$}½žtÎ ¼Äg"û\è<^KH·&ÍIwœ¾‰t'ÕJÒ­Í»“~T÷Ó¤×iÏ»lDzMß÷¤×µ¤»AÏMº¨$ý™ntzPò¦¤Ã“Tž‰t(/Šu¤[“æ¤;NßDº“j%éÖæÝI?ªûiÒë´ç]6"½¦ï{Òë‚ZÒÝ ç&]VßÓéó«I§A†“8éTˆu ‹æœ\¾ s'ÏJÌ­Í»c~TôÓ˜×iÏ»l„yMÓ÷˜×µ˜»AߊùñÏQûŠÞ·Ë(Ñ;_ãvÀý—õaGê~rS„í7E"ð—ŸŒIïœTL 1b¬üž`L:ŽMøD…ˆ…:C›Õ*¹,`o€-‰Z w><ò7ÁˆfñM¿Ûô‡ÃÉèK·Û ”b nymâ Ü{ 2Gªb:꤀ÌU½:c㨻ý2L>ßÝÜŽûÂDFÒs\ãS…àÝÚh”'4 Œ8gõ£ñ:£üª7ùÜásxõGA(‘ˆB ÿE0qó†Ådqu¢ÕƦDh÷înØ›Œ‡üÕm±ó~Š€/'HQ‰ ˆ3Ò°¬#!êÅjGë ôÝ꼡%:9¸;ÿÁ}Q…b6+*HâÝ76eÝ¿ù«0Æ0 !!žã¹8CáÝã«A!FRµI‰¾¯ÙáÝpÐ+Ò cL•wð^2EÚ$»AWl!`Ѓøÿ÷Ïw;ÿ2„g°rï zÌÍ9¼O ¡7÷>Fqvï´OçÃAQkž wv–ë¢.1½dX£˜óhÏ*dï_»£àvsm.Ea¶'êîºöVÏ/Qœ/c¶Ão:åù÷”Ö endstream endobj 2385 0 obj << /Type /Page /Contents 2386 0 R /Resources 2384 0 R /MediaBox [0 0 595.276 841.89] /Parent 2269 0 R /Annots [ 2389 0 R 2391 0 R 2392 0 R 2394 0 R 2395 0 R 2397 0 R 2398 0 R 2400 0 R 2401 0 R 2403 0 R 2404 0 R ] >> endobj 2389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 677.939 163.762 688.843] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 623.295 138.508 634.175] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000001) >> >> endobj 2392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 603.206 314.366 634.175] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 541.084 138.508 551.964] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000002) >> >> endobj 2395 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 520.995 314.366 551.964] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2397 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 458.873 138.508 469.752] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000003) >> >> endobj 2398 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 438.784 314.366 469.752] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2400 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 376.662 138.508 387.541] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000004) >> >> endobj 2401 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 356.573 314.366 387.541] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2403 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 294.451 138.508 305.33] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000005) >> >> endobj 2404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 274.362 314.366 305.33] /Subtype /Link /A << /S /GoTo /D (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) >> >> endobj 2387 0 obj << /D [2385 0 R /XYZ 90 757.935 null] >> endobj 210 0 obj << /D [2385 0 R /XYZ 90 733.028 null] >> endobj 2331 0 obj << /D [2385 0 R /XYZ 90 716.221 null] >> endobj 2388 0 obj << /D [2385 0 R /XYZ 90 716.221 null] >> endobj 854 0 obj << /D [2385 0 R /XYZ 359.307 681.092 null] >> endobj 2390 0 obj << /D [2385 0 R /XYZ 90 664.812 null] >> endobj 856 0 obj << /D [2385 0 R /XYZ 90 596.724 null] >> endobj 2393 0 obj << /D [2385 0 R /XYZ 90 582.601 null] >> endobj 857 0 obj << /D [2385 0 R /XYZ 90 514.513 null] >> endobj 2396 0 obj << /D [2385 0 R /XYZ 90 500.39 null] >> endobj 858 0 obj << /D [2385 0 R /XYZ 90 432.302 null] >> endobj 2399 0 obj << /D [2385 0 R /XYZ 90 418.179 null] >> endobj 859 0 obj << /D [2385 0 R /XYZ 90 350.091 null] >> endobj 2402 0 obj << /D [2385 0 R /XYZ 90 335.968 null] >> endobj 214 0 obj << /D [2385 0 R /XYZ 90 261.235 null] >> endobj 2332 0 obj << /D [2385 0 R /XYZ 90 237.02 null] >> endobj 2405 0 obj << /D [2385 0 R /XYZ 90 237.02 null] >> endobj 2333 0 obj << /D [2385 0 R /XYZ 107.713 180.336 null] >> endobj 2334 0 obj << /D [2385 0 R /XYZ 107.713 165.389 null] >> endobj 2335 0 obj << /D [2385 0 R /XYZ 107.713 150.443 null] >> endobj 2336 0 obj << /D [2385 0 R /XYZ 107.713 135.496 null] >> endobj 2376 0 obj << /D [2385 0 R /XYZ 107.713 120.55 null] >> endobj 2377 0 obj << /D [2385 0 R /XYZ 107.713 105.603 null] >> endobj 2378 0 obj << /D [2385 0 R /XYZ 107.713 90.657 null] >> endobj 2384 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2411 0 obj << /Length 2013 /Filter /FlateDecode >> stream xÚµZM“ã¶½ëW(7é@ß$&7;Y—]ŽìNU¶ šaE"e’òîø×§Aøjwìš9äc¿n4ÐýЬ1ü‘µÂëT¤H1±ÞVxý W¿]w7ÛIpÿëÇÕWï<…”dëÇC÷¸$HP²~Üÿ¼‘ˆl‚1Þìô½l*ðæ]qÔöì½>èzK².wp‰áL¦®¶¿>~¿úçã•Õù$˜4œ¿­~þ¯÷àÛ÷+Œ˜ÊÖá#¢Ôú´â”¹óãêÃê?Wö:ƒëSa –㢠a)|\ˆ»ÈÞ]Ê][T¥ éÕîrÒe›·Å–là*Ä åˆqu{ø:0EÙÚ'a„в°ç¿`›¶¾ì®÷ÀØñ\ŸŒ¹¯Þ~óŒ0…RÆÃØþcf1<»aRÄSê@cax„ IÒ« A:·"2”ÁÀ%$E’rÿ¼q³3AéÍ¥Hª›wfªÄ¦ÑmcÏòãÑœðÍIŸžtí®Vww˜x ~,Ö2#+jSgnÔÏñ>H¢G'¼KdÏÍI’Ú9ËPš’>ù`ÞxLœ’”bÕ£¼&Ân+{ÜëÖM~9º¿o©²‹nÐ6á\l¾s7˜ /Õ帷ÿ>i{¼4zß7 ™j‹üðâÒÆèï[gõë0fž Ä`2Ý7à~hr~ÀÍ"Œ v·HcT°H¥Tˆ°4c4¤0lPXŠM29H`F!Sc‹ $¸­ ÿÞ¼Éëü¤[˜ÛCb‚)¬T:Å<òÀcG.ô–>NQjÍaŒ¯~B¼¿ü{~1˜Ÿ‹ŽˆÇŒü ÇŸ0‰RÉ{þ|£ºéæ`WÈÚ:/›CUŸò[É<çÐ6nÔæÒ%2†RE¢é 0³éÂeܺö^·—Ú,„r>W1Úkކ¼½1q9òCüºÃ¥±Áׯ 7×õ>Ꮃ"S”‰9w,& @cw(”?y3ÔkJňúôº(Ÿ…,Ð)$! !~€N åÃe·ÓÍ8á×XAŠ,ÅzÍÇê0K±Æø|¬Q:k@G\¬?^Žãe'1’)ïóÎÖZŽ»009_kI–‰Çl!qB…Q6ˆù\¤YçÖvM ‡?Ý£ §tF Œè„2:X™¨gäÔ=# >Õövy$ÇòH‚Œ#ytõu¬‘2„©k$áPkíJB^š¢ôjÿ¡TÕî¼}É]À'S0ÝÕ—|K±ëèöʓ֮¢€ÞªvyÛÉc ²Ç¦­j}%뎺®«ÚS6Mþìî¥çÖ#±À%¢Ž 2HÕ’Xpè$€ÅÂÀäüæ)Cð¶Ð'Ì`‰S¦1‘ö(ãÊó qšE[Q€™kE\JijÏÄóMièÁ”pð;9þrí“«vº4¥B—þ,íÀ1G)•ñ„Ý0³ ƒWœ4Uwk‡í-MÞ)íà1oÓ êyšÉx? @³ýÔcúi”ÏõÓ8í§!ݽڥdÞR¬7Ð|¬³kŒÏÇ¥s±t÷h‡ï²vˆº00¹¨¢1;í%tÚ!$ü"íÚMh‡sÝÞdî*›ÖwAS;‚=–uZHþ×((?RP§ ÄmÐÛ ñÀQ¦ä¤x8×oskÔ6ž †òz¹Ûc1ý~¼Ç’"šBˆÙÞâ‹{,ð‰=–¾ÉÈ çHÁëz|¸Çâ0qJžvm#¤ â¥)Ê绂Icfò}¡;tÜIãÇÇ]Ó%èpMÚÀÆí>fl<&Ê>4dØ‘­"ÿÊ‹òøê5LŒ½…¯ûöEþ\V°$ çîÜĺÔçªÑ³•J…˜Œo¢˜¹ÎJ3Èù¬M” æù&;taJ yÌÛµPlP®ZhèÒ” ]ú³´ô0$e|%ÀÌfŒ35~·ŠÑÞÒ4àÒBó6-D±Eµ°·€fõÇ,èƒ(ŸÓq:«Bº{µQªl!Ö4«Ç,Äås±Æél¬!Ý=Z¨Ç»¬…¢. L.j¡hÌN E  ߬…ø„jtûù_˜ «Ð”ý5H˜G†ȸ9@ QF'ûÂdýyFç&p€0†”ZÚ¬pà$@sÖ7›#et@=š$g„âË”aóÝ®ª÷Fèôv{ŠÒ5 ûAÒØå|>^|,Ú¿ÑSØ}u¢,Y¸¹õcÕqɩߊâ ΊÆ^««K[”Ú^.ug.—•C>¹gwùñho2Цgé]{|ý»¹"€ßÞùXtß ÿäL‚‡¼+î fÿgT‚gx}Çb)F‚A-"±T,dÛ£“>ÖV“.ߟh3'ë8ô53r='†[T¥æ3ï1çå~DGͧ zgÌ'˜ô«“~šYÀÔd4³ÃÄ©܃ R‡äÝw…;cvè8ñÀäm]?<˜Ú—?O}·ŒÅÛ}·ŒQ*€a¨×öãhÑß6+Ó-è ÞíêëV°ßâõ¯€z¯Á? Ë©ôëú”?{%ÕDhâ×PÉ„˜|ïÀkSäÄ—ÿî¢ûňÌ@e¨POJ¤ ¿ÚØ»‰ý[]êú¶_í«ÕãVÑÍŽ×þäË·¢0}`ØþG1ñ;ê&bÿnóßo>ü#óÝ×îQ”™Ï Ýfù«ÿáÆ§×g]N%w<<ÿÅÖÛ endstream endobj 2410 0 obj << /Type /Page /Contents 2411 0 R /Resources 2409 0 R /MediaBox [0 0 595.276 841.89] /Parent 2269 0 R /Annots [ 2414 0 R 2415 0 R 2416 0 R 2418 0 R 2419 0 R 2421 0 R 2422 0 R 2423 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R ] >> endobj 2414 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.109 677.939 239.768 688.952] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2415 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.338 677.939 513.996 688.952] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 548.758 189.337 559.662] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.204 488.976 474.863 499.99] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2419 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 369.693 189.337 380.597] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.275 309.911 245.933 320.925] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.138 309.911 341.394 320.925] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 2423 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 190.628 189.337 201.532] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.163 130.846 187.822 141.86] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.538 113.222 403.62 124.126] /Subtype /Link /A << /S /GoTo /D (cel_8h_1fe7f134670262eb54b6049c0275a27b) >> >> endobj 2427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.846 113.222 454.928 124.126] /Subtype /Link /A << /S /GoTo /D (cel_8h_6661c05703158b0808038b7d551f1ea1) >> >> endobj 2428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.855 113.222 513.996 124.126] /Subtype /Link /A << /S /GoTo /D (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) >> >> endobj 2412 0 obj << /D [2410 0 R /XYZ 90 757.935 null] >> endobj 218 0 obj << /D [2410 0 R /XYZ 90 733.028 null] >> endobj 2379 0 obj << /D [2410 0 R /XYZ 90 716.221 null] >> endobj 2413 0 obj << /D [2410 0 R /XYZ 90 716.221 null] >> endobj 2380 0 obj << /D [2410 0 R /XYZ 90 539.791 null] >> endobj 2417 0 obj << /D [2410 0 R /XYZ 90 525.221 null] >> endobj 2381 0 obj << /D [2410 0 R /XYZ 90 360.726 null] >> endobj 2420 0 obj << /D [2410 0 R /XYZ 90 346.156 null] >> endobj 1145 0 obj << /D [2410 0 R /XYZ 90 181.662 null] >> endobj 2424 0 obj << /D [2410 0 R /XYZ 90 167.091 null] >> endobj 2409 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2432 0 obj << /Length 2299 /Filter /FlateDecode >> stream xÚÕZÛn#7}×Whƒ}‹á½» Iv‚Á&;cì>Œ"µm-ä–WÝÊØ¿E±ØÍ¾”f6ƒ[R©Î©S¼Ybs ÿؼ óLe¤j¾~šÑù¼ûýŒá§Køxé}þÍíìË7¾E -æ·÷§¯kFgóÛÍû…&ìjÉ(¥‹u¹#WK®èâÍvWÚ§·å}y¸bù¢¬Ö𖠹Ί^}¸ýqö·Û9)¡ æfï?Ðù¸ý8£Dùü#<Gñûqr?žFÈyN„ŒFk-¢h%y?Úçý¶‚)ë&q]—›p^™&*/‰íŒÂ™E›Tjcx.·Q8L®Ç1»?TW²±Û ÆØÿ»\÷µÓŠ+Û!2Ü)äP¦déŒÂ² MJ–ž“% ‡²xp"&Ëz¿?l¶Õª)ë¿YñÇjE¤R¹$MHå¥r6 ©¢x(UÎJåÃI'Õn·\ï«ÍÖ(PNI%‹ÐVéë4_BLË‘"…-BÞ˜=mð·˜ÚÖÌÛ¥&j,[|m?ïo]„»’][g+ûgS6+(ëuy88°'XØWÈ~‹›\]6öa[ …TЮteC‘XõÒ3‰>tÙ-Š77ÀtÄ@Q"ó¼Ï`kgÇUœYÑÃÝÞ£BÕê7ëÚéQYHfJ y¦Î:ÊgèÒðù¸®A‚_-;ª(üg#.™&åQEœMœÁÀ‘a@ì8ó ³¥Èљ䄩Ì%ˆ$ °É€t\˜D¾p3¬¸\þus8®ûÚ$Ù,µO8Ôý*Y‚7©p0ßQ*Æ%rF8ëÈ}šŒØ Ð2)U~â5rÄ)D“¡aõ2቞NL—zz{2üRGõË„'&Ï/ö´ÛMq’Lö=Á:Wc7û# ½±_ U¹p&4“§›ýø=Œ 89~pÞ!é@`C^Àâ‰,”>yz:‡@ FaȵÌucëùq;-nñ $Ü6°âŽs³.EØ‚ãaéíª‡Ë'èîVM`ØOûœjp8ÏǺ™t)ጯ>Ýš;cÙÌMÊ3¢¹tsÛ¬ £ÝŽ+ï„Ü.ý‚¿æq„1Źö¾5ÞfÉ3ç÷å+ÃQ»qçÐÚƒgc†°]kkW(ÔíÖj¹>b•õ¼[Uø¸¿oëS½µÙcáÑ?¢ûî‡L¹”$×ÅÙ1ßQ& äY|eÓ/õTôZŠhô¾ËÐ4[p‘Eo<›ÐÌØi~\pŸ3¾.R˜ºÏq6ŸyŸS¤½Ïò™ºÏñù|ö}N«š0kF¿\ñŒÂj¡>’&«^®ínÚ#%ßQNÖdD©'˜Ì ã¼GéŸWŒÁ¿n\™¼+«‡æ1"Œ9§0¦3 ƒ6g cJ‘-®ë‰» i¶`§†6#j}Ì£êQ uÝvSF¢Š°,%PgmÎèåz–ýçºÚÈ!Û[s¡ò»Ij9}¥R¿Ö§k¦§þ†ßƒ›©÷8D>„‡Gf*ÀÔðèŒÂÃmÎPŠ^céØ_z ó:sB›§ÞðPæXô8 6³]d´€À“†qØ#ýòåÏ©ˆüQʸ[8N÷´gç^eD(•È}gÎ=Úœ“{Wà÷—VI”NB›¡þÒZ%eP² c_Þ»-©\­íkgb·YÁz*«f\âõŸ0·,@m–žÑ$ý¬­£àµ¥<â£xÖ$% ׬—lÞ¸Xyó0KÄÚ…cE›T¬1<k ÎÅêÁ±Ømö`xÀÄNÝLŲóÏ„°¬àJðIÇÂsF<°wòèÁȳ Œe§óô¹½Ól» q§º§ÎæóÚ§\CŽ oxFÁö³I´¢xØ>ˆÃÙùâÃÛDå°Õ)•е3 ÇŠ6©Xcx.Ö(ÆêÁÓJíá¦{©Q —Énj4fl§F±Ÿê^ÒP劖ÊqgÎ1Ú¤rÃs9ŽÂaŽ=¸? ¡ÊÀd,!Kg–mR²Äðœ,Q8”Ńû“ªœ X„SRuFa©Ð&%U ÏI…C©<¸ÿuCuJ'–Ãß"¡“gÔÉÙ$tŠâ¡Nq8«“§P§ŸÛka׳ÝÊñ¹qX‰@ À„JV5êìªF|úe÷ÇÒ1Þöç‡ëR··# ±]¯ÚsÐo¯ƒsÒéØõC[Õ+µÀÞº¹þÔJÿ7×YÆH®Ø¹ÍuÏ<Ø\w6g6×{ BÍõ(.6×}Ü‹›ëçéÐ6×c|†./n®Çi›ëQG“åAç N¾pÈžÀ¡àŒiõé?²=ý<ØôöYៀTQö×ÁˆnÈ}_Vå¡›‰nõ½½*øÂ¦~^ã`–ö+n(¿Ô¾â”aGîÞLx7-þõí»Ÿ`šÿð ~•À‰®?Û¿Û¿¼>”£ù¡ÌOŠFòü›ý$Õ endstream endobj 2431 0 obj << /Type /Page /Contents 2432 0 R /Resources 2430 0 R /MediaBox [0 0 595.276 841.89] /Parent 2441 0 R /Annots [ 2434 0 R 2435 0 R 2436 0 R 2438 0 R 2439 0 R 2440 0 R ] >> endobj 2434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 629.377 189.337 640.281] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 565.616 351.484 576.52] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 2436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.738 565.616 477.899 576.52] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 248.399 189.337 259.303] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2439 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 168.698 351.484 179.602] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 2440 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.738 168.698 477.899 179.602] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2433 0 obj << /D [2431 0 R /XYZ 90 757.935 null] >> endobj 2382 0 obj << /D [2431 0 R /XYZ 90 556.649 null] >> endobj 2437 0 obj << /D [2431 0 R /XYZ 90 542.079 null] >> endobj 2383 0 obj << /D [2431 0 R /XYZ 90 159.731 null] >> endobj 2430 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F8 1129 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2444 0 obj << /Length 2376 /Filter /FlateDecode >> stream xÚ½ZKsãÆ¾ëW0›È*qvÞ”ªìͺì¸b{¥²Z• KB TpWú÷éÁôƒ×€Ú¤\:ˆf÷×_÷t÷Ì€-(ü±EB‘ŠH"ÔbóxA;øô» †ß®áëµ÷ý77oß øI´XÜÜ×?׌(Î7ÛÛ¥&|µf”ÒåGJyU>l‹¼]’‡Õš+º|¿?döÕ‡ì>ƒïâe–oVli>MH*¶º»ùáâï7 D¨„6þsq{G[@úÃ%"‰_à5%,I’ |}¸¸¾ø¥Ña?ðù˜“Љy/¹ T+ô’I4zºÏ+¯Ùr“Jþl_¤Š–UqÚ´ß=Ƶ·ï™l53ÉI" £HVFÆ­ øK”=VÀ‡ÇÑL£Äåj­x\£hâŒaV.?ä»U1‰yr¦ª(it¥Õˆ. Œ½VUyq0!’©WúW>¿Œ@„Ç]E›c^b¶ÇÓ'ÈÏZ-HÜD`œ6Ðë<¸…¼ÐÑò®£~±X‹X’˜E‹5,Q6—¦l H¹³9J/­—ÝÐ(ä¤Ñ «jL±Œ•ëÓÃþ|gPï”R ê!«Ò¡VN‰ŒE@m]‚šŸ‡Z%œ}=Ö—1u±Ó8žs‰—e5) ¥G÷tB…`˜,"R%Ñ\ºunjI­ŠsÏšQÙ” Ek5uE­Š4/ïÅcißƒŠ¬¬öéßÅ8Þçi••Vsì="Q“pF3+ÏXQk›‰ÕZ,ÿjÝ·z¨S-E«’ ýÑDè&qŽC ”p¯:Îz®ÑhÖ.¡åÙPj²©š½}Ž$?`ÿz:¤9¾<ÞãGÅøýW¶©öÇœôÛX¬eÉBK(fŠö!Y{2ƒV'„R¹Ðº5ØŸ¡Å.Ó"}̪¬(¯ú†å$|Ìò“@èô, ©-ÓÉ . ƽTžÕÁ%.ŠE'3À㎠M"®çÛnò7k#5±Áp¥0,‘52Éšd \CV#3Í•±Ù'é [¦7_º¦ÚAe!©ƒ¨P¤ªÃ˜æÐ;"Õ¯+Æ oªcaé9dù®zÕJE3Ä42ÓÄX‘3‰éà{“„å­Â˜P¤©C‹‚Qt0 h¡n¿Í´PÆÄ -Ì4-VäLZLºŒe‹ÔDê8ˆ Eú˜º´À¸ #ƒ‡©·¼Ç|·¯N[,ˆi¾ÅÏa¹Á«¿Td«Öï|Ãq…»-êÅÑ”ï á?íl/oÁ¦–»»ÉÀ+¨Þ: ¾•™ <Šxš‰: o—ͰխTDd%ú€º5¢Î¸èÇ@˜Gcœ€ß”½"ÄBcÿH9mâ,>;¼ƒž›täjùÙ„2óÆ¢ºÓãú~)á%[>v{{?Eš.rFbè}.3Z¡éÔ@™srãùrX$‡ýØ ”àéö[³…èâù¹»r&ç§§2;mðZ&Ë7H]‘eå›iú¤£¯š¦eΡÏÍñ]þ$QzÊ uùK CË k0xB®Š¬:È×g“¯éá„ÙwïÚP–n,‹6™Û•ù1Ë«á “¤‚èÅSeeÖžÐ(ü(¢z1r®†Ý§ÞlíY‘°9ØœwÌÑ+è0ô^Ÿ6›¬iÆÎW.HÂÙŒ¯­Ð´¯(3çkÈžó5dÎùê™cèë÷ùJ6ù°ßަT«~ÍŒLxÑÝe}•S;!™³î„<™©L̹]\›ú`VŽYùô6(d¶©'}» a=q2g-ß8¨EC¨å+³ö„†p8#L·Š&S”K­1hϊ̘³ËÆ77»¯Þ”ÎùÚ MûŠ2s¾†ì9_ƒæÐWÏœ[Žÿ<†;ZM‰†¼ïØ5_;”øà#@é0„žJÜKãYrÇx!Ã>[‘°Á„’¸çs=g…Û6—e¶Žq=A¨™·BÓ1F™¹‡ì¹ÍaŒ=sÓ ë „¾ßïÈÛ¡‰¶µâ]Zᢾ®ŸS8Y›åÈã,‰ë’7õ€ˆ÷ýÈnÉœ4ÆŽÉ&Cá'°zC¶œLØ “TQÇ >‰18ÐIˆ‚…Ò19=®£tØxO%&Äûßæ’®>ïz‘©$Dðr^Ò˜÷àÿˆ3ýÀlõ§:4MÌ%s,ˆôΠÙÅ_»M!V(bÐÿc%ÌY© Ë—/PìE´Ü6 ,[qº|Þç;ãÖèœÂ4ç8‘ðÿµˆ… åu⮫N>”3N>”™M¾VW ùB]òyg’Ï7yFò…Œ÷TŽ&ßpϪH¬Â®«˜èDüROšÓÑ(˜z(2‘zo?·‡]û¼™™§sO˜…uîEð_zl*2³KõëI«“dÄÿx PÁvß>sfB¢lµþ.˳¢Ý6áÆtHGÈOìtÒþcÉåW‚Úwœ2|PäÞŒ¤npûíÛë¡•~ÿ þ”ĦQùóè»ãóË.Lpæ¡9èÑó_׈Ù endstream endobj 2443 0 obj << /Type /Page /Contents 2444 0 R /Resources 2442 0 R /MediaBox [0 0 595.276 841.89] /Parent 2441 0 R /Annots [ 2447 0 R 2448 0 R 2449 0 R 2452 0 R 2453 0 R ] >> endobj 2447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 444.853 189.337 455.757] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 2448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 365.151 351.484 376.055] /Subtype /Link /A << /S /GoTo /D (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) >> >> endobj 2449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.738 365.151 477.899 376.055] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 195.212 174.602 206.116] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 156.357 166.851 167.261] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2445 0 obj << /D [2443 0 R /XYZ 90 757.935 null] >> endobj 2446 0 obj << /D [2443 0 R /XYZ 90 733.028 null] >> endobj 222 0 obj << /D [2443 0 R /XYZ 90 351.577 null] >> endobj 855 0 obj << /D [2443 0 R /XYZ 90 329.266 null] >> endobj 2450 0 obj << /D [2443 0 R /XYZ 90 329.266 null] >> endobj 1033 0 obj << /D [2443 0 R /XYZ 90 309.738 null] >> endobj 226 0 obj << /D [2443 0 R /XYZ 90 295.168 null] >> endobj 2451 0 obj << /D [2443 0 R /XYZ 90 214.186 null] >> endobj 2442 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2456 0 obj << /Length 2304 /Filter /FlateDecode >> stream xÚµZmsÛ6þ®_¡™ûBÍœ¼ì·4vzé¥Éœ£kæ&Íth‰¶y'K>Šnâûõ· |[ªv2T0±Ügwùìb’Í)üÇæ§*%™PóÕÝŒÎoàêO3ægÏ`ú,šÿq9{ñZÀ]$Ób¾¼nn׌(ÎæËõ§D¾8c”Òä7Jy½¿]W ø3!·‹3®hòºÜntY\0g’b»Z°Ä^ÍH*¾ø¼üyv±<Øà-TB[ þ;ûô™Î×`éÏ3JDfæ_`L ˲ùÝLráǛهÙ?:ÜuׇœTLL{É¡Z5^žÖ»m±2•R"ÇCfÎŒj"…ñ÷[”ß8W]Fá®” A1I2šFPY{zxR“”§1ž½\ÝøùËÙËbÈ-uùõ›å‡¿_þþ÷‹}¦$ï/Ï»6p) ñ9H Èç2ýJY?¼)ašÏµQD*=Æ4°$…á`ð9$;‹4¦H>7`Šn‚À3BÍ£‰Â&·Î߸Ը*k7(·ër•×åÖO”È rùÆ]ø½«Xš<~ÙU ‘&k7±ÜÖùW2ê_*‰„Ôù³þ ïã$S|”åÚV©Qž™)¦GºÆ¹Žz¶Ç€“|o¡N3Åï¨ì°þ×*yùöŸ}Þk¨D#dP ¸4Deªe°Ÿ²”jÊŸÁþ£‚Qö{‘oÄþ?òÍCqõ…"ZŠçQŸSŸs¢3ŽSßËLRÿ¨ ¡>¨NS?F=ú~GeLýWïùåâÝr¨Ø3ÉP߃ Šm3CÚcéå(/à7•æ¤?*%½ùF¤_íîîŠm}íUÂdß‹öÊb„Aid¦hé§= èiNÒ¾…:M{¿£²Sñ//^õX/ ¹LêzA¡9T7¥E XoFi¡ 1™|:ë#c¬"߈õM›S¬|»3NøñMÍ·hqÔ Ìœð^f’ðG]á1À@øpšð1ê „Çð;*[uþå@GÏ)0 Ž˜Ã¦L@U‹Qº …ìt?*¥»qÅ{O×¼.®²æÎïU›Ž`NU/3IÕ£.„ª` j8MÕõªbø•1U——/ß¼½¸ìgE¸‘¨ïAÅæ–ÿTµ°éWFÇh!3F˜QOgk¤`Œ­AäOçÑZ즯w›ÍîËA:w?Р—K.Þ?µ¨KC çú{eŠÔ)á©B3%ÈLeJ¤kÄu£¢wÙËà*°êÄø®Ûí/c'z¤QSº*¹Þ³#¥ÀŽ"ÈàèEÓLoŸÎC¸=Šà„e.U–‹T&÷ź¸:¦Ph¤?¨æG“#ÈL%†uHÐ'G X;ßÂÝc Ó°TÝÏ/›ÑQiÍdÝ?Sç‘BG÷28"lcyð“ø<Ö#‰zƱåñþ±nÉK4oºäÙ¡CÚ—7Ûb}xnëÚ$Nå.®óÚ÷Aö±ÙlmqD* t°gxqT0ôKHF„öÇÐÛU]  Iéx¯Í'ˆ—™Lë˜ `Hp('xJ2x¬-¼ñœðÒ8rGå±rÚWŸ]|%ˆ¤÷×Ëà¨JAP: Š®àQ6”äÉê6o¸'’Û"_Õ§ä¸N>ÿÕ],·^nøªXµ§Ekº\ïýt³.-XÒ °Ð zzxgˆh~t2S †uX P@OëðP-©«–½Œ22•v2¶Ýc©æ³”–yHå¤qC;*[ëÉïEUÝíoúÇ©¢yjX”‚ ι&¬óXBu¥$cÏ;RŒ&”±ö|¨óúaÒÆžÕÕÖý}Wì÷þËVƒýxQú”ף͇û‡²âEŒÑáƒ(Âü'QçE—›Ð(žûUUÞÛþk »l%T`N)›g‘dïFŠZD²ÍÂ`•ä¼q°…Þ ÷‡i°”P¬…^Ú§Æus"?7Ŷ¨Ê•û×IÊ$Œ¡LîãjgKãåº \©wþŽ|»n¾*ƒq»›ÙUkYßæµG¯¼(ôì 1©‚º«Gû›BSÃÀ7þãWmà bÍy¢õ–T’)·ßt¶B‡Ô )D€CH#ÊL¾V÷Òg‘ø@pÛ*-ü—Õþ¾¼}®ÊaLÛˆ^ãédphÍ eR-h/5°S<Ùi/#wTz§¯êQ§9ƒú-q§ƒ ÝUd¡ÉÚGš,†&÷å*ßl,RàOClòºnØ›êä.÷³W~r_Ô^|ç$ªâÎÜþÏ }l¸ƒ­—{7u]íîÜ(w?1O-Sœ{–¨®"mŠ|Á)$Òö¦ÏUÖy2–Áïd?é¥Ï"ñ®¶UžV†`”ò¶Û$Á±T_ÖÆnÂm»±P4ìžüÖàäåÖFO 4aPLUF”<Ï  k÷Ó¿Pu_ÁƒeñºËQ*})÷èÖŸlñ´ïá;¿.mÏ>„z¿òÝt?,ûòuqʘa³àÐ|úN(÷ÈõæG+1ö‹Þæ}У_·v_¡vw£c¿¡í‡çÿÄ÷Š… endstream endobj 2455 0 obj << /Type /Page /Contents 2456 0 R /Resources 2454 0 R /MediaBox [0 0 595.276 841.89] /Parent 2441 0 R /Annots [ 2459 0 R 2460 0 R 2461 0 R 2462 0 R 2463 0 R 2464 0 R 2465 0 R 2466 0 R 2467 0 R 2468 0 R 2470 0 R 2472 0 R 2473 0 R 2474 0 R 2476 0 R 2477 0 R 2478 0 R 2479 0 R 2480 0 R ] >> endobj 2459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 698.224 245.028 708.151] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_42bdf2e2f36d1dee9e06732c75a8ff89) >> >> endobj 2460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 659.369 247.1 669.297] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_5077485c3de4b7bca55698eb66110a76) >> >> endobj 2461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 620.515 245.137 630.443] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_6400ad537ecfd565fb39a574831edf41) >> >> endobj 2462 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 581.661 234.069 591.588] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_9361fbafbbbba777da623fc3b9e96d2e) >> >> endobj 2463 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 542.806 221.895 552.734] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_705c7c2c9700367e0e8b82d5033e6fa3) >> >> endobj 2464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 503.952 236.281 513.88] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_8393f26f643097bb78326a85b4e2e7a4) >> >> endobj 2465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 464.122 198.074 475.025] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_23868c17c44dc94add97438092d3058c) >> >> endobj 2466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.625 464.122 289.69 475.025] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 451.17 187.564 462.074] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_e6ae55940dfdf1155736df656d83a7cd) >> >> endobj 2468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.115 451.17 271.428 462.074] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.29 396.31 181.765 407.214] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_88ab82d73e5c2607f0a40af8917fffe1) >> >> endobj 2472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.945 315.548 154.402 326.452] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.075 315.548 400.14 326.452] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 303.593 142.224 314.497] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 222.83 224.644 233.734] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_d966ed3fefd26c9546ec078171e3940b) >> >> endobj 2477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 140.384 123.095 151.288] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2478 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.533 128.428 159.384 139.332] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 2479 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.293 128.428 214.144 139.332] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 2480 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.625 116.473 154.717 127.377] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2457 0 obj << /D [2455 0 R /XYZ 90 757.935 null] >> endobj 2458 0 obj << /D [2455 0 R /XYZ 90 716.221 null] >> endobj 2469 0 obj << /D [2455 0 R /XYZ 90 413.381 null] >> endobj 2471 0 obj << /D [2455 0 R /XYZ 90 334.522 null] >> endobj 2475 0 obj << /D [2455 0 R /XYZ 90 241.804 null] >> endobj 230 0 obj << /D [2455 0 R /XYZ 90 185.51 null] >> endobj 2454 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2492 0 obj << /Length 1631 /Filter /FlateDecode >> stream xÚÍX[oÛ6~÷¯ЇI@Åò"Rbö”ÔN—.M1Ç[1´E¡Ø²-Ô‘2YiâýúŠ”LYò%{*‚À4ùñ\?s,â`ø#ŽÄNÈC$w¦÷ì,`÷Ý€˜SŽ}ëüb2xsÉà’‚9“yu]Ä)q&³Ï®@Ôó ÆØý‚1-×ËYáÁW-=Ÿrì^¦«D¯ÆÉ<³ÈM²©G\µ+ 9ó¾NÞF“Æc!gBYðÏàóWìÌÀÒ÷Œ˜Œœ'XcD¤tîef½Üþhdè}û}NrÂŽ{I‚×^6~åif¼æÓÇû$+ã2Í3å(ði€X ·71w_ÍZ—/¯&·¿ Çß~‡xŒþþs?އú ?c¢ä½¹¤tk'!4¨„_¤¥ßÇëïz5Ï ½(—FÉl{\ë5(gñÖtïÒÒÿáî&Ó²¾T$åc‘%3ýín³›E(ÂÔAXR[uP, blE¹Fû¼Š´íÑ®HåWC¥/˜cø'»v0Бܵc'Ç5æ vIf²­=Íféò™-tÒPâ´ð¸¯ôÞw•«jwó¤–yab¶Þd%d3~F:y6©|Ê´6Ÿ0X¡§ä/0îž_ÿ9j(B^Š€\„'Sd ßOƒyEl;öRä€ö†"–öRä‡GÕþcÒpòY¾”#ì0GÞ‚Ì>Œn& ;‚Ÿ–<¢' ¾—5æEìhÙ±‡´×ì°µ¿Óü:ˆbĶ„œÀ ‹Á)Õc†pËŽMƒ§´43ZYÄéªakYAŸËâóøñštnM4Ñn¬#Ž0‘N@žDÔj†dÄ"+wS"’ãÀñÒ`þëì ¦†(O†ÉƒžK!/ÀÎ ƒI”ÇÚeC€ÂPBÐ-+w S2 «åj‡0‡(„Ñ´Æ(ëÎg³ºœ6¥ù.ž~¯ÆŽ¸˜™Â Eähu—® äi¹ñw_ë£Çu¢Sت`†g2ã”’¦Rè2Ñ)&lš­Ë$žõÖ' û€…”Ú<‡y2£ÇçW×£qM‚Oë]2ª{—”&@°¥{ì4½ 6›Þ%{zœ[½K!zêC„‡‹T–øÑú¤Ñ¾ï©Om‘'Ö'Ž(m;:õIcjg4Bhkoõ.J¬£ÑWCàtž¯V¹nžÌ©/D®yRÍmbZçÁµ¿ô´¢°ŸT@â«áõèFO)*Šëôß$ŸW«²xœ–Í,ÖÊ7éL…úÍ™f¥Ú©ÐSû¢½êµòJ…Rä>ªÿ4í–ûõ48ñÂÀÝ<$³dÞýE š÷ý(eÍRÐ%ŽNŠ"ðïªNDî:]èÇDHuY÷­¤Ð‡³¸Œõ!â>$úK£™FýH è¡€ê›O“õ:7îãi‘ëå§··×Wß®n&``Z¦ÓeÛèÅ]¿Š´ñ¼¢š¨Üxš®§y¦p ´„&Ê ø—Êþº´êæß?¬’=½ŠB%íÇÏ@} [=}vB$C]ëU>D#NYLš§ŠGÒÒv^í¬rõµWÿnê|¢eƒGà¹îr“ejZEýYÖ¬áÜýŃ ÓftàZ=0„z.#øP(‚#•¯Fû¼ÛêvD¶*Ÿ¡e§þªHE¢mÅNàkÌAÝC; Öîx½'Ý„3¨¤ô¤t[Ø}é®!UºÓyÿN¶o%L0ËHma“®~rTOñ¯ºÈZwu…}•¬ôpD¬bÓVÚgöu¿@èóÓ˜w›t%‚Š 09Æ'ö·èžÉ©%pË&«·œ)_;¦pŽ"ø‰`›²;»ÈAÚb”¨ç½&‡Hò^êbEÿÿo<«7·"FK{ò@ÀÀ¼Ò4Ú•qï’,)ªy·zæóLN> endobj 2495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.806 677.939 321.898 688.843] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.806 628.414 321.898 639.318] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [287.806 578.889 321.898 589.793] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [294.596 529.364 328.688 540.268] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2503 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 462.505 138.508 473.384] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000006) >> >> endobj 2505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [292.161 384.562 326.252 395.466] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h_ebb4607327b6db35b468517328f67878) >> >> endobj 2509 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.302 173.561 203.682 184.465] /Subtype /Link /A << /S /GoTo /D (fitshdr_8h) >> >> endobj 2510 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 86.288 156.888 97.192] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 2493 0 obj << /D [2491 0 R /XYZ 90 757.935 null] >> endobj 234 0 obj << /D [2491 0 R /XYZ 90 733.028 null] >> endobj 2481 0 obj << /D [2491 0 R /XYZ 90 716.221 null] >> endobj 2494 0 obj << /D [2491 0 R /XYZ 90 716.221 null] >> endobj 2482 0 obj << /D [2491 0 R /XYZ 461.523 681.092 null] >> endobj 2496 0 obj << /D [2491 0 R /XYZ 90 664.659 null] >> endobj 2483 0 obj << /D [2491 0 R /XYZ 462.479 631.567 null] >> endobj 2498 0 obj << /D [2491 0 R /XYZ 90 615.134 null] >> endobj 2484 0 obj << /D [2491 0 R /XYZ 478.23 582.042 null] >> endobj 2500 0 obj << /D [2491 0 R /XYZ 90 565.609 null] >> endobj 860 0 obj << /D [2491 0 R /XYZ 203.922 520.562 null] >> endobj 2502 0 obj << /D [2491 0 R /XYZ 90 504.129 null] >> endobj 2485 0 obj << /D [2491 0 R /XYZ 90 435.083 null] >> endobj 2504 0 obj << /D [2491 0 R /XYZ 90 420.807 null] >> endobj 2486 0 obj << /D [2491 0 R /XYZ 135.16 375.76 null] >> endobj 2506 0 obj << /D [2491 0 R /XYZ 90 359.327 null] >> endobj 2487 0 obj << /D [2491 0 R /XYZ 90 341.837 null] >> endobj 2507 0 obj << /D [2491 0 R /XYZ 90 327.561 null] >> endobj 238 0 obj << /D [2491 0 R /XYZ 90 295.66 null] >> endobj 1199 0 obj << /D [2491 0 R /XYZ 90 271.311 null] >> endobj 2508 0 obj << /D [2491 0 R /XYZ 90 271.311 null] >> endobj 2490 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2513 0 obj << /Length 3498 /Filter /FlateDecode >> stream xÚksÛÆñ»~ëépƼÜuúÁv¬ÔŽ#'–Ò´u=ˆ„$Ä$ `lýûîÞÞxT2üÀ{,v÷ööywbÁá' _D&b‰2‹õîŒ/î`ô»3áfW0½êÌ¿¼>ûæBÁW, ÕâúÖ~ f¤X\o>!“Ë•àœÿå\6õý¦ZB7`÷Ë•4<¸È·µ>d·ÌÅAV¬—"ÀÑD¤ÑËO×oÏ^_·<8 ‘ƒÿ}üÄàôíg*‰_ Í™H’ÅîLKåÚÛ³«³ŸZ4®`|j‘F¨Ó«”ŠñÐøU2íÖy±/ÖM^´ªoËõ~—MÚä°(…µ•ÔLéäð1îó¼h–+¥dG^®køº,j7»¾O+ÄõÍ…Žl e˜Œ €ˆï³t“9¨.ó2fRjôè†QðéùrqcÉÐ*É"#ÜÅç¥âAöXeë1j%XK~#,_3À˜oê Œœ…‰î¢ ƒDÙTûµ•…r’ú¼Â"S‹B–H‡bŽ–4L´\ŒÐGl¨1í•1ã"Y¬„`‰!})ªì·lݜؠl@#j·TT§v©¸†1?¡†…š?Ó< P8£û™‡ˆ˜æºÅf„UÞ•@Åç4"³Ž–SV‹EÊþ’T ·˜À¸“à!­ê¬¦v { ‹]ßÃÞ¦Uºn²ŠFÒªJ ô¿Ió"/îÚoðïâÍõµœÆk޲SB‚&øÚT)`«Ä-Îí–> I"Ðãl–ÕÆóSl¨ÑÜgyEÍß—ÒÀ·{Ï3èDI2q‹ìîqê<€çšåíЕ¡Á†*Y„àkD,ÉáDuç >tÜ’‡^uÀ­kêÊ{ˆò°=ÅŽø—„}6>ÑÌÓÑ®{¤I{k6¤k¡ÐŒ“#Qt «ÌÈÇ è¢^„`‰<Ž-Åq™ B» t¨>-•ƒÑ*9Ey¼f;b¡kt‚G,‚€áaHàšŸ°»ƒwîq§cˆJbV.fÄUo+Œb*’=®^Ý,+L¼fªˆ÷, §@éi ÂW^ed¶8Iö†³}{‹¸-+š!ÃKwÛÌM¥5Íì0ÞÝ7Ô»qtÊ E¶q¥X¤EÏ¢€I$õ;¢ÎŠØÚ:Ãú=O©aùÆÆ+dòÍ{êTz÷`þY׋þ îJ‚zzŸÄ|lŠÅ*²$_§à`ÑÒ/Ú"xÖ±$ƒà4ž¢ì² 9Ñgë´ÚP—·Kï²g^’WTçuSS܃ýw²[7„D1§‰hu“7Ô|qõêÍj>Þ \nž_AGh~ÏÑgA°Ì ú'IA£J‹;×ä_%w³¥‰Ü.íË}ŽâÀ.ñ¸Þî7™C|ùó»çÔzyå×ËD/^ºÞ»‹el;ôOnVéà¬âƒ ÐÍ0Æ?dë\õãIJВ¼9mzÚ ¶´AµwÆàпGmº¦~±ßnW ¥]^¤M¶aǼ†Û Å»ôÞ¢tÔ[x˜'z‹AÖÕcÍ X¢yÖ̈µ¾Ë€< "G—µËýîÕÞ…¯Yáæ.â©€tÁZ>~:.GpØ1äêór<—£ƒùƒrtù__ŽœÅ¡˜gÍÁŒXëËѰX÷Y›’#8°*ÏÂëyÁœÆÙ2laŽ‹@Í¿>-Yœ’ž6LÉyžȧ¾ì *ã=ž~¹·5"ŒRÞ¦¸ämÂåm8c-aÛԜ߆†n«rG-Šo>ÈÃü?~"°‡ªÄ!=An=ž%E¸|XÊ)&Ñ Í&mt…å}Ó –Üõcy±!FÉ›Åz±úݱåJË0¸F’–°#Ò€ˆ8{ÒœÈ=ôª>’úådÎH•U†š>'ƒM÷0óôuÂ$=úmÙ2YÛÚ3”Ú ©Ê2jî2Œ«`\õ߆ü©È0­Í%å¡g9¢<"©óóòÏ!?Z…šÏËËÃÌr¡UÂL_\»}í„ucuæi !]‚•ò„Å‘/IÉÑïkëžB@”‰nGÜ‹HAXˆ:QL†É©ZÅA¯:àck <*Íu¹§ú»§~Pé¨0ì34T?3ˆTKÙc“!=ðëXlþr*W;œ’Käy–dÄÑTÜåh*Kó…ßÑÌW'1jU lŒúbÖW—ìUUYÕǬÑ%ŸÈå:@Çì`ž"àîÑ_ÿT*b&óL9˜S=kÉŒé3õc µª¨ÖTg¿=,ÃwX¦ ɆоÐG–®G(Õçõ¸Svг\Q>é ­•ìœÌ<Ì<õD°8Ž{ÔÝ! ¤w Š2³.Oëc‡™V¼›Hï0S—/Û“uJ™é°7ÄÌ0ê9YJ£{õ¶3c‚þ) ™ÕÙ®¬0–þ„H¹oqÄCÁX^»¡í¶\§”·ÃðTÄF3©ÃŸ 9„´êTÏŽ'N™”¥ë8¼…dóÀŠ"îa€ò&ºñ‹p§T~ÊÏþPB‡dåz9â휈£Ó)‚%á„N®¨*ŒYÏ v`Ž ª8b\‘¶}ÀpÚP?=#Ûú«!ÝžkpþÊà á«&mö®®lÎáŽ÷¼ªN°ã°€3æ;³êÙ‘‚‰ð€È* äÖ#‚R³ÐÌÓ#äÈòE?Ç ”Wûõ:«§B…[+x^(N¬õt|­æÔZçèùµÎ’skín­—{p^£»,“uŸîñ”ÌAϳ0@ù´;‘8„ª œ_¿ƒ™§Žn?{ÔÚ(úýÖõdòå6ö+‚ô|~Ã@Ç7ÜÁœÚð9z~Ãgɹ ï“nÃ}(°¾¼|{W~kÏLòíœ(xîJÅè¸(Ì)QÌÑó¢˜%çDÑ!§œ(.PëÒ&ÝvÄ®ïóéä×ÅÖ…hÒ{OZw‚n߯¯Q^ItìtwY6ÙØ¥'ÊPJúè{Ãô„Ç„Ry Ö¶'v/±÷Ò3d<È,-¡Y£.­ï12ôS®Á«ePMZзÁþ7%^A%d\q$]c"ŸëŒú_òæž (ÆÃÏãqp“¡ã°›ƒS6èÃÿåû«kœ¯$ãxœ¨D{O0Ÿ†h»š¸ÓØ–¸š/í½†õƒãaXW“¯÷[»¼q8ô‚‚þˆœĪ™ÐY΢Ø8$>kJý€~¡ ìI÷ =1GO…,†:þ@ï Š)ë& Lâ똒 o„Pþ˜´Æaè®~pj:ùEÌâðÍ'¸mV¿A~GH64²Å{ʸÝï ÷¡XÅÏñUŽ€Ün›Ÿ§ö ñl·ˆI€å$÷®u=5°àÞlT ËH!Â#n¥€l¹{(ëv²,ðÚÏ~†%³šc‡Ü½Ÿµo€À ÐíÞÈô}ñòÕ·¯/¾ûÇÛïßýpùþÇŸ>€¾Šàçþò¯ÿ‡ ©´ £8Yý:q úÇw¨ØÚUö`¯6±SPˆµî•$ö­%ÆXØ8áã Ÿ7˜Hïêà{–ôÎLo9ÎZ`kSÒ?Ø¡#^xCëàŽ?ߨ(šìÝí¡’gÇìMÉŽÝyƒ;ÀLZœ”-/Ë›9“›#émnޤ3ºIguŠKgtÖ.£Öã¡'’NqüY›–S?/69„ó²zFý´¦ÿöƒÞU4ô!îê‰'P*†0:úûXç"pþþ5—Ea‘•ëõ¾ªÈwZfˆÛ®Mc?q¼Ù‚‚3§:„h÷tà ^È {[TgÔ¤ë%lÜÔtÙCóEÛ¢½F&ÜÛwÐ@ç€ÿ)Z¼…qÆØGù´º#ŠX,úl -œ@æiÇx“*z´éé¸ã‚©$:áÇ@GSã=ÙzÖ“ÍQm]ÙUïË:T3 ñ±uf tBGèÖñˆË^áêÈ háe®§b Í“ÝDÿb¡ý4²OH—¼/ÚLÑÅDéÚ:Àå·ž‹l0ÿ $¨ØÝzµV¶*”m7Ï)6µŽ;â&o'üë"[_àë*|ȵ}ìp·ÙåœußxHT]R:,FROÂÚ›¨)LÂŒ™L 9lÍŸ¼m‹’ÃDÒ=Ó‚Rj|zí¨£´¾ËЬJÛÓy_m^/ìÝ1Û{ÿÀV;1&ç\ž+N=É…ð%*×i¿¼ºzB}óÒ}Êb2;Rú¶üúx—Céàóò±xþ»ƒ[ endstream endobj 2512 0 obj << /Type /Page /Contents 2513 0 R /Resources 2511 0 R /MediaBox [0 0 595.276 841.89] /Parent 2441 0 R /Annots [ 2516 0 R 2517 0 R 2518 0 R 2519 0 R 2520 0 R 2521 0 R 2522 0 R 2523 0 R 2527 0 R ] >> endobj 2516 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.642 654.028 162.956 664.932] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.257 502.071 247.321 512.975] /Subtype /Link /A << /S /GoTo /D (structfitskeyid) >> >> endobj 2518 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.449 502.071 437.631 512.975] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) >> >> endobj 2519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [172.622 490.116 236.362 501.13] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_b20aa3220d9994d02a1791e35dc91a56) >> >> endobj 2520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.008 490.116 317.19 501.13] /Subtype /Link /A << /S /GoTo /D (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) >> >> endobj 2521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.33 478.161 246.283 489.065] /Subtype /Link /A << /S /GoTo /D (structfitskey_43de42050c7e0232c9f7c5a28bfede4b) >> >> endobj 2522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.137 446.725 290.451 457.719] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 334.285 187.992 345.189] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.493 113.961 178.807 124.865] /Subtype /Link /A << /S /GoTo /D (structfitskey) >> >> endobj 2514 0 obj << /D [2512 0 R /XYZ 90 757.935 null] >> endobj 242 0 obj << /D [2512 0 R /XYZ 90 733.028 null] >> endobj 1208 0 obj << /D [2512 0 R /XYZ 90 716.221 null] >> endobj 2515 0 obj << /D [2512 0 R /XYZ 90 716.221 null] >> endobj 2524 0 obj << /D [2512 0 R /XYZ 90 267.649 null] >> endobj 2525 0 obj << /D [2512 0 R /XYZ 90 230.08 null] >> endobj 2526 0 obj << /D [2512 0 R /XYZ 90 164.66 null] >> endobj 2528 0 obj << /D [2512 0 R /XYZ 90 113.076 null] >> endobj 2511 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2531 0 obj << /Length 3129 /Filter /FlateDecode >> stream xÚZëã¶ÿ¾…q=3)êq}÷L6MîÚì¶ýY–½ÂÉÒF’³·ùë;Ã!%Ê’µI°ÀŠ"Gr8ó›í¯8üù«„¯"±DªUv¼â«ô~uå›Ñ oœñW·W_¾“ðKB¹ºÝëÏCŸ)á¯nw?x!“ëÏ9÷y÷µ]º]ÜcwëPÜ{W”9µ¾Ï÷y³öc/_û^•ao+é)µþxûÍÕÛÛ~ fJ†¸€Ÿ¯~øÈW;Xè7WœÉ$^=@›3?IVÇ«@HÓ.¯n®þÝÏAýúçö³0žHh,ŽfI|?` @B2²b…/8"ZYÈ\ñüóÏ·åKŸÅ\9N¹še®2d±F\oò¬cëM$žb>ó×JN£Ë[l ¯»K;êíš´(‹ê@oÛ2­>µÔ.*z¦öóÆ ïÓÚçxtÊ{üe-”—–§Ü7¦QÕ†A[ªâGÎE–V¦+­v†ù]NÞ§M B‚­ƒ¸Y¢h+i‰¬ð_úˆ ×äÇyÿ‚ÿrÓ SaÏJJï%õô †fuÕ¥êZß ¼3/·] î:ób…퇢,‰~›[î÷ešå;;ÞÝQ+5\aNÐòéNô¬¬,’‘{Z x(&ôi okjõç&|{n8NŸOu—S3»K›4ƒ=v I݃ڇ Ç6ëÇ!‹T «@î_«R’IßkÝÕ“iu€%¤vUVºÂsu)íbͶ¦$×äm^u$<ßÛ>Ò@§Ï·Ö²Ùø g< ìB½Šö”eyÛȇN`Äì›´{ØzKïi’ØQ[«6ŒšéöD‹F”°Ö<Õ íù°‰ T ÁN‘Ã!šE€¿~"‹ùr,rµÈ±ÈÕ ‡ËõVï?ðIA»É³løW-$€ó}“ç›}ÝQ‘ —=½âÒ߸¹¥7pÁøs|VÙ%HÙq‡zñ¦ÓrpçééCM/‰Þµ.Ò )xT€4²N;ÐÍÍ}] â`o¯¡­¥r¦NôÔ©:ŽÂÞŒ¡ñcÃ<ÒÕf×^ÖÉYÆOèÃ@4£p|‰ßOdõa¿¨K\{}XâjõÁáÚË(&ñÓ!Ö{çžl-@¬§gV¹9¼Ô=ɤt¿š|¯ŸiEó¼¼à_pDw~ÎòûÎ*Í®ýìÊGûNϲ8 €3ÐÍ`2"”P‹8>/ŠCѵ¸aàB¶ „ƒ¾ñØ Ž³jK‚fÑ›Qç› ›Á)jó)½J±ÙµÑkæÁ&“BÇž>µôea×›žšB,½&E'x0oáQË0ˆ±Ã¬þÒDh hÚóH'îÒ]oŒ87lÕBÖ3æB,„ÆŽþ>cg,Œ¬™}qYT1Fð„ D—íÌÐü¦’á"×^–¸Z5r¸jÔR•C,¯ýPQŸZì ç\ ÔËÍk^`‚@_¤Ôe” 0VU°=Ÿá·uC“9&‡(Ä0qü$fn,¡›ÍGX+HˆXâGú)bªÏ]W·ïÑÞf ]Jí‡à A”˜&ù‡¹º1åyYTv§6C-Q±ˆÊ77p&ŸM0Ù4µ-†Ùo§–uFí‚Óï±¶kœÙ±¶Ý÷ys,FÁLùh7ž.§ö”–=ÇŒ™ÊD0έ™~9ó(LÜB&VóEj(»\—t)9EfB´ƒŽi+ðrßPYd¿#2*ºê1UI’¢&ì¤@G‹ÀÓôãò~iŽ((ë(ï#°¹å;]m‘Þ×& ÄØ`xú|®ˆa%øîúöæë7ßÿôúÃwß½}KÚ‡Õã“9å­XlcÈJÚ¼;«}=¥§rç€s$r%ÁG î?‘;[êC>Á«ó)/äÎf§çëQ  >¯ç 5-Íò*Î&%ÐxyÄ™¸Æø²=“h…%ÓÒ5©ÖbB£/'ÊÞÊFIæï·Í>]¾ÌÆ5õ­cƒ()u0$DX4¢œ‡žõäs¾ë@£üóÔfc&’Áfõ,NýXó@6§VçJГ¶gË,Ó¶#¢J‡6-0³p𠓆zt~ã~Þ_^HŸÓ½¸Î(HF¦…ÕÅ̤ç±Å•XÛˆé'¸cm`ÍÛt[>Ú¬1[LÕQw¦¡ð`&ŒçŠÎÏdɳå–îÈéb½÷. ÆMá‚t#T^“ÿ|*ȽÀ%´ã£ %Ä ~„w·kf`δO^pû¶ª&ÃÍšC•|OÍY¸g¼ŸæiÍÁUïj]ö„ùê,;5Ô©kð$ÙBƒ´©ªAUpÀ½¸€Wè8»G½æ¬²$LÆá¥°ÕÅ{}Ûšãq‡¦< =€CºÑm̽‘Òñ¬"-©’¡¿Òé ´†Xdt…«'ÔÐzD—ݹE}›šµõ’ÄÅíѱ_ª'_®#–Äâ·ã¬?Ò7…‘›2dùÓI ”ùõäææ÷ÿ]' ¥¦#43¾©³F<;iȰ»“`öýx«§À¬.i ñÃFÀp¾g"ÖÄg£Pe(hso1œ3ÁVÞ¶é¡¿²4õÅcÚew®ë>sþ£z^pv§¦Ï‘ö}˜°1µ³ìOUÖÇ™z[VÙ÷(7)Yb !àgø›=mÀ‡}OãO”4:ßUA¢Äþ›Îi §á}ѵE K™ÌDºýcFŰ´)Ã±Ž½I;ã‡oºæ” õvÚ™ú¬nÖ—ÁÅú¬3>SŸ Y ã~­?B¨KÚ%^}…v‘¡IW]†­Þá4 M˜ŠË‹ž¥^f~6%2è¶iÓL˜‡Jÿhi¿*f2BŽÌ“øXlôbV\ ‚<ÁlÃÎ~½àJÂB¼[X6ÎÏ]ƒP•f¶pb~ KXø¿{§ÒlvÏÿð mʧý±_^iEcù‰{[«‚¢ß)8{EbüJWùû¤ÒJò±ÜâÖ‡Ì`r`j€É .^HS „ÀÜÞá#ÜYÄüßë›oô¯_™Oø ñíΛúóã!¯Î%¬|ièˆçÿ”†R endstream endobj 2530 0 obj << /Type /Page /Contents 2531 0 R /Resources 2529 0 R /MediaBox [0 0 595.276 841.89] /Parent 2441 0 R /Annots [ 2536 0 R 2543 0 R 2546 0 R ] >> endobj 2536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.068 591.449 357.076 602.353] /Subtype /Link /A << /S /GoTo /D (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) >> >> endobj 2543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.496 378.048 456.043 388.952] /Subtype /Link /A << /S /GoTo /D (structfitskey_935a63ff3aa2c0403ed8eee1a94662e7) >> >> endobj 2546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 114.038 166.532 122.885] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2532 0 obj << /D [2530 0 R /XYZ 90 757.935 null] >> endobj 2533 0 obj << /D [2530 0 R /XYZ 90 733.028 null] >> endobj 2534 0 obj << /D [2530 0 R /XYZ 90 669.523 null] >> endobj 2535 0 obj << /D [2530 0 R /XYZ 90 642.048 null] >> endobj 2537 0 obj << /D [2530 0 R /XYZ 90 590.663 null] >> endobj 2538 0 obj << /D [2530 0 R /XYZ 90 571.369 null] >> endobj 2539 0 obj << /D [2530 0 R /XYZ 90 524.179 null] >> endobj 2540 0 obj << /D [2530 0 R /XYZ 90 508.659 null] >> endobj 2541 0 obj << /D [2530 0 R /XYZ 90 493.513 null] >> endobj 2542 0 obj << /D [2530 0 R /XYZ 90 465.664 null] >> endobj 246 0 obj << /D [2530 0 R /XYZ 90 285.382 null] >> endobj 2488 0 obj << /D [2530 0 R /XYZ 90 263.071 null] >> endobj 2544 0 obj << /D [2530 0 R /XYZ 90 263.071 null] >> endobj 1034 0 obj << /D [2530 0 R /XYZ 374.54 227.941 null] >> endobj 250 0 obj << /D [2530 0 R /XYZ 90 211.403 null] >> endobj 2545 0 obj << /D [2530 0 R /XYZ 90 130.745 null] >> endobj 2529 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R /F11 1069 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2549 0 obj << /Length 3603 /Filter /FlateDecode >> stream xÚ¥kã¶ñûþŠmP´Z଩ÇåÓ%饗Iz·@?¤A µè]5¶åHò]ößw†3ÔÛò&ÅkŠÍ ‡ó&å­€?y›‰ÛÄ$a™ÛíáFÜ>Âì77’ßnàõfðþËû›ÏßFðU˜ÅÑíýÎ}ËÐ(y{_üÄat·‘BˆàѶŸ¶M›?Üi„OweDð¶Ü[½·;[ßÉ4°w28nq6IM˜øî§ûooþvß±À š(F~½ùñ'q[£ßÞˆ0ÊÒÛO0¡Ì²ÛÃV÷7nþÕá ùæ—Öhdt}‘* ElÜ"ßžÛ¶¬ŽÍ«B„F_e÷ÚQª'"Eê(õД2SRÀʬò «Ô¤3‘ ©•ÇvFLPd:"†óõ#¼’eàU²c„n‘B¨¶ù¹¶yñ3kÌ”‹L‡i¯.™AVigIÅñ˜¶DÿƒnåÏßJ݉0Q ÏjD C¼ ÈT2ÄîÔÖ¨ð¯HËQ¤npüÔ>¼š®K¥€Ã¼Pºxm…„ÈÐÍëzJ9’¾Y(CL©D#ÓP9ÙË+rrèd3·#Œ¯Š[1hK{†½3rn&I(cu§&LÈuL×(c •ÀpQ¡”ø‹Í“€V·)°“6g¡H;Î7¼»ÿ@ëû+±~¤ƒ"ýâîï2¼ù’€FH“0V)Cý•pQxÇYßEI¶Rý„6AunË#¸R„%‘è0IÒÿC=‚%k&"óa ”¾¶mn¿ n¿¶Í¶.Oè>¼g *å7ë¢% ígFУYö.dó G¡É¢SQ0Èù ä>5A~tA.(§½=@سGP_„›®vô›Ó+ŒÐ#Ê`O!2¨»½ÇÞw÷°«jôš×{ð» lâ‚î]dhÒx {€m[U5PÌ[Û¸…è lèÍ©®Pã>–ì.௡D˜Šl¤GDÑ’ØŠâà+\Ò»ïñ! N°¤ºz¬óÃÁÖMx·‰D¼k ò)ohð`í‘àË㶪O€JÀIá'Ûj†;èë„$ Ï!t‹˜ÆŸÊö‰Fí“%°Â¢’K éî]yô0¥ ò ZR¯T{ûjÉÒÈ% #­³ká’¡7ð…¤`Œ©O3«)FƒIÆ\L™aÖiOyU+>ÐÆã?oؼ0"“+«ð)\0q“ÄaªÌ l|¹däþõ³ò—Ì|Ç!¨Ã gY+ÔãÌ)íþ\8 Á´S*ø%Ń×ÿþêÃ?ß}I“ÕÃí¶¥ñ”¼|¨óú™žî”Îíèë4h`‚s½åÇmUðȳqª1·nÀËxžlÍ09©õ&q‹šk t"-ƒCþŒ6HçÆîÎ{šs6“'oÃhÎtþ ‡èò¾Ú–¿ ¥©ç÷Ü»½èL'Û'úTh»€<Í‹baálÜQ GÏRÚ+­©µàrÁm~’C¤¬:nzÇa P8¥™èâ 補â(çkŽrÕö| ÷Žž'¥‘|ÜÉ.QôšìJ£>#†/³d«Ò@ aÔ,Òi“„:QÃtu¶J, ´f»ƒlmˆJAá—ú ‚)î®ÌUU#\}N:Iþ²0Õ/æ}™8‹/°>¤5bý:1J4âjv©­w7 #H0AO‚¹Ü¸Ì™lì,'2T²ßAöbN7\~÷[[çÛ¶¡cþÌã]]x–~ h;ª3L í¯ç²îÝ6ýn!öµõtØç•KY„Na‡ÌïÎ"þ.‹˜EHŸ…Ìnud †“‹.™A6˜Y ÅúV›ª_úw…”l ýz°!eÔå…¢š`g,Œìõ‡¡=Ôb®\R¡ê‰ŽxR® …AföB ÈÞÕˆ£*0 ËNÐGmŠ+ì¼®€.z½WÖžë£-^M))fŽy-¿zx^À ê_ìñg¢0Öí>“(%:g þ9¼¸uq*yA>Ý–õ@—·Œa^¸eÞÛxYÍužfÆÓxÓ@ÝÓ1Oß~Ï\b;1¿ÝvåEç@ˆ‡É†tÞÁ——¸®”¾,k¡Cc®Éºº,k†ÁuýùŠ —ä îÕÄÑ:? 3ãg$gˆ8"ÝŸ7EQÛ…šrM–ú¤ ¨ºuÓÒƒ…2κÀ&¨«òð÷¦Ã2ë¿@rqj´‚‹É°‡^]ËåJó'J2]Ÿ‡Y' ºœÆÉˆdû|²…ÝaE§•î¹€Ò×BºàËï¡W9™¢¼¼x ÈuUfu‚Ø„üaaé´ç%k—.Ü¢"Uœ!ÃÒŒ åCÞn±6ÍÈJ§J‰A¦2H’'×z$z3Ÿ«ÿåe©aë4럵` f•¤ 2jD‘ÒZ÷HZWL‚ ¥Þð¤70¢ÛѰ9{Þ†jK‘‹ž\tü\Ky\ÁÎÀÎŽZ>¹Ÿ“&Œ BŽRÆúš&{èÍ|¡¬£t{²^Ñf™kŽ˜˜í Á¬’VàÂ%$YCÒ9G—¢l¶ç¦™f]4’×2(6«ì¾ºS&øt/6$)T@9çëádt1œxdøOWÂIŸÈ#7äŒI²ÎÃÌXGîÔuà‡,JL¦ïÆQFùþl/eĶ^!YXˈ0—2âHCÍÊú÷h˜®/§Ãkdû™Ð]êZy˜ß!…ñ°€r=2‡išP"„ªöz^uˆQ¹õÎuðLU‡Ëš"MLrHsjñé¾ a‡¶ ÁWoA‰»Ž¢áŽ¢½/,d°E}øzïú4¥õïyºägêÁàdëLÊ )©ƒ9nŒºÆ0lÈ3}êå4ï:îûžéÚ=¼¬Ìøf=ô­%sÃe{Iã¸?èß¹f5Ã’§âVí(9‡+ùBAyèU®§(/*¡Æ~~jVåäaÖ)Nq'RKØæd·e¾ß?{OÇø¾Bïiì‚·K}!¼é  $ q5çdèÍ|¡ £¼(#¨X°C;"=;Yr ëôðÂP¢ÇôÊýž]íZwè—çÓûÃxGñù;{Ÿ\{ï¹a¿_¸î¼œ¼ «G‹vL0|óCE¥¯‚NjÊé´/·¹?„>gè*\Æè¤w̹›sc›¥ð‡ÄïïOÃû1)ÒPáQ•óc¦÷cʨ ©öÎêøXByQè0ðd¢¡!7òTŸ6É %ÕÅ šýŒ~;0Ø(FâP«« †Þ À¢ÇåZCCº»L#ⳆÁ¬“œ B’Ÿ‘>=ñÕ59Öš€–ïÌ 6óâŠÈC¯ò;E¹ÒöHc€LWEäaÖIN D”³ò#{·Ìãëíã ™÷ã#ª`$²>€À˜¬G%¦×`vxÖöíα÷ézJiJ=% ž”òÓ†@0Ê´‹ùE$A“R‚w¾¦œ ½€Ï5e‚òrnc`‹’lL{ª› ³NÑDxŸdHЕ+(‡QÀ…g—œH10]'­y¸Eo¤^(½ÊååŠF&@êUÁx˜u’De<–L‘·9‹Œ‘Õ1%¸Qa™‰ .©Æ#0<,]3*5Ü%‚š¨¬Û³¥1uyoë`çBÿ„Ý?Ì“jŸk­oü- ‚§úv!¶ü` yÊýWE¹CõÞAzd G¼s° zÊ·ô™æ|~rðýՌޜ°j-ã'>¤ù`·mHšò>’þ¤Æˆ“2*éë)âÐ5|þñ—÷Œì»ïø¨(ûp¬ð}G¥òºã®T£ŠZww#‘'¦øDwJpÔ *Ð:ç×,ËÇ´ 8*ø{—80J[ïÜ=|d¯£êÈS9ÀB®’Ó"¢;ü¹»²ÅXœÓ ^—˜ËŸîND˜  ©jíoNDÓ½Åw§s}ªªÎã8,ùH.ÁÖž)˜hhù0Õl«“u&A¹›€¹\ÄM9Õ¢Z`£+Rpb-1™ÀÌ¢± ËÜîó¦!E”Hâ5æùßiq·Æàã]wkZ<50I&À/ØHðŠÜ®RlÝE P«cÛ|Á÷dò»GtüìL²™ªÞ éêZñ9à¤2_ ’s¬~á\4¬ Dt¦îmÂæÛ'¯ô½Ñ£Ñðq#ê«î¢tÛZgWøéÄ4î}ÕùÊï ãºËDaÆi® ÆÕ-÷Uõ Ê_РìÒ=¬,4ËwøV›?~Ûžnh¦a"³a[23È–ùòQÇ¥~c(nߗ𒺿ËTpfI~¿å¬ZÓÌ^ õ:ô¤„d7åtÙ‹E‚m<–ŠS¼­3<þºúíùÑÎ!Æ]¸›Šç‰‰™ endstream endobj 2548 0 obj << /Type /Page /Contents 2549 0 R /Resources 2547 0 R /MediaBox [0 0 595.276 841.89] /Parent 2572 0 R /Annots [ 2552 0 R 2553 0 R 2554 0 R 2555 0 R 2556 0 R 2559 0 R 2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R ] >> endobj 2552 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 697.387 195.872 708.291] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 2553 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.962 697.387 316.957 708.291] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2554 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 615.207 164.589 626.22] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 2555 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [106.717 591.296 155.623 602.2] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 2556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 573.672 164.589 584.576] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 2559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.999 401.398 338.994 412.392] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.921 401.398 428.916 412.392] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.933 389.443 198.928 400.347] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.331 377.861 200.624 388.392] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 2563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.908 252.427 232.903 263.441] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [303.965 252.427 328.922 263.441] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.935 234.803 278.93 245.707] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.625 234.803 467.581 245.707] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.88 222.848 159.836 233.752] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.908 193.268 332.903 204.172] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.22 193.268 487.214 204.172] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.319 181.313 351.275 192.217] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.086 181.313 474.081 192.217] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2550 0 obj << /D [2548 0 R /XYZ 90 757.935 null] >> endobj 2551 0 obj << /D [2548 0 R /XYZ 90 716.221 null] >> endobj 254 0 obj << /D [2548 0 R /XYZ 90 660.333 null] >> endobj 258 0 obj << /D [2548 0 R /XYZ 90 536.314 null] >> endobj 2557 0 obj << /D [2548 0 R /XYZ 90 514.002 null] >> endobj 2558 0 obj << /D [2548 0 R /XYZ 90 514.002 null] >> endobj 2547 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2575 0 obj << /Length 2489 /Filter /FlateDecode >> stream xÚµZ[ãÄ~Ÿ_Á‹›Þ¾· O°°0hf$­¼‰“XÊ Û9³s~ý©¾Åm'ngfw4ÒÄn—ë«êúºªÚ6™`ø#“ O”P(cb2ßÞàÉ Fº!îê .Ï‚ëßßß¼~Ëà.”I6¹_šÛ%A‚’Éýâ¯D">Œq²)wh=Q“·å¦°GË¢š’4)vsb8£$júÏý/7?ÞŸPM‚IùïÍ_ÿàÉlûå#–¥“8ƈdÙd{Ã)sÇ››»›ßO:ì8ƒñKnq .¥pÀ8JU(r&š „I³@²F¢LéI $E2£/¢g¢nªã¼™Î$ÌÅCó!¯*íåDJ”qÐFÀ4n¿2ã©”NÚчoõðë·”¶s­'i¿`.cÌ ®O³ûP6ërgß¼½½¿»ýÍž4ëbJDòhÏò)I*wK]n›Çþü;—¥‚ÉIÓ«f'š/b¬ng„1Ä•xæŒøé &ä»\ciRW«¢nŠ…=ýðhõ\˜ƒù~»ÝïòMÙ¸+ûeOb—o‹ús¢k7œWî *òͦ¯¶†›œÜjU™y_ME’7nt‘7¹»åñP ½dòó~JEòPèÿÿÕ·À*á81Ø8˜ê •HÊ„å×!¯ër·ò!5?cïz%°œ(SÉ’6 z¸Z¹ë!õ²³“°‰h8ï]uÝ€v`SrYÛã—è€Ç °þƘs›„ Žú{+æ,"'IL›ú½MJùâýünòçÚA”ÐV=n!ÜäÏóº9ažÂÑŸL‚_/ DWÝp ˜€-d$^"&8Â\=3em—ûjëÖ œUſDz*ÈP|Fe†0MA-Óÿ\:©Ižã¥Hþ|s÷îö{;œïv°Mz0ÚìW¬ÊÊ^*Š7_mì‚…‘ºlŽySî€1®Cz8lÊyn\0 $¼q9%|ãípÞ8`X׋bY_X´ÎRâªCíNÖ6¥H╟FàÈd¡C>/¾ÕçÊ{@’ïv»}ãí#¶¶ÚºªOÿ“ïŽùæ•5鮘7:Õp–()URÃÏÁP„“àÉíΛb"šÙÅg´­ýõŽ9’"›ˆLúZK4NzˆŸ§šžÊH²aIIºàýtãdâP’ð<„ôåœòÌåã´LÆüZ¿t܈žJã÷¼†žªa¸'»ídâˆTbÁ:ˆf5€Ë@, á®Y³`ðP‡j?/êz_Ù‘m>¯\ò«ê¦l€\G·¸|f9À÷.#h!w×¢„›v«cY¯Ý\»œº½$ÙÚ,A°µ´ÏÆUÔ/?{²(t‚ßËáÔdEmÖ}u¹GkÍ{­Á*mÕ×smÈÁí4^µ=òS Eíxÿ5¾Ú”Û²ñFÙ†” è\±œˆ”#BFØä…g­ôYh{ ¹ÄTcÕÁí7ÎV" ¦€«lêbãfJ§@D–±0†¦¨µªòíÖdp]_÷‹â•kt!kŸÜNNM¯Ip°wÞ¸êõþ¸qìÍ7:o?˜äýèx¬‹¶Sî—Δ"E'BQD ÒŽ”l+< ¤ÏkvWápBã8Át?N&ŠÈ‰î^XÒ-tj|–ºñ°ò3H„*}ÆÎÎè„-Àɨ”#­ºÖõe¹›oŽ‹Â*U…Ö_œ·jp#`ƒ½ïÛ;ÜIÇG‹X_Ø?r‰¡‘ÜÒ¶—/p•¥^ƒib(ç¥î€%äE¢hº%¬B´že°!æ¼á ã„£È]…"{¨¶çÅM"¨Â1OE Û0 !8Ã3vIzî 6 øòD70ìÔgœC;KU»‹¤Ð,¥±—Bkaq"ÚÞwå®ÈÝRo*³ó]mú˶är{a[4š  Ðy(¡)’tÂGB¦Ÿ`~«àÒƒŽaá+GeW˜.q—¥Ô ? ®²×ËŒÑ7†uâoÐ8üÒ—Ý3T.![©.ê0‹t¿§Òðâö×w?þz¾¥æ9DÔe'‡„ÊûÖîë­wù¿b¿Þ„Ã^öºâJï½tÔ”¾ÊáULa§8p/‡ì)ò»¼×­ûå®Ñ#fï7°ÖhÁŠ<­ †R…ÑÞq®7X–zÝsºÆEÛx-7¥§2’f3 ž‰ØÌ̼L2ƒJËdò´}þq’ êé(²iÊÝžÂç*x¨ʰßÔwÐÑ ¦Q&`yúäÐ2YBQ$÷qX $^¹½ÌhîkuEr_ Ðç¾p<÷…¨Wä¾~O¥#ü½‡†j[¯Î’€~€L¢žS¨àÄGh89A)Ëô¦#fžê™7d×teñ¨0à#!®Ñàƒ“Ñì‘ê–%I£ÙÉØj}¨¦L%…y4Ì|¿"{²YÌYg¾{e¾“e~«+Âü g~8Îüõ æÇð{*µæÝá=²v¤°‰x-û%’z›3Ñ õLd†R–Å#£W†RŸÎ~šaૈ±ß‹<ýTeœ~öë®Cae¿—c k˜ýQ@Çþp”ýÔqöGñ{*µ–UQ R_ ¦dÌõk©¯P*GìóB=û†la6ÎPªØ(õGÛF*¨y‘£¾y õ9AT°—iy("e•SßÉŒR¿Õ¡~ ÐS?§~ˆzõcø=•§~º‰´<úÞˆç×2_?tæqó¼PϼHË#)‰G…e 1û Ì4¨U—˜ïDžÂ|pø…x¯_Z¤QÖ[‰1Οô 3>åøÞB²=Àçz¹£Î©.Æx>èíY>l˜é6ÂðH >¿‰’æG„ß^ä ü†1®^ˆáPiR®âw2£,ouExôLǹ¢^Áö~O¥Ïìôc¤×-sÄsÍù«ZF³¸u^¨gÝ`KûìLŃ- ÓÏ÷>™ø°)fA=ºD|'òâSe>½zâƒÏiÆãÄw2£ÄouEˆôÄlj¢^Aü~O¥£ÖGz#þ°çO$~ĺñ»Ö?”ÏF|ý4+J{#ðÒ§P‹8y6ç5M/®vý*Ôí¸Ÿ÷9«Y6ÚD’…¯—À*ÅÝë%‘™OÁ´»?»¢rŸéGÞî]Øý4£ÉÑ=ÿÍ?æö‡dß`ú ÃöŒbâ¾ÛZê"ü uýÙÕ”$æË+}+J > ßöWÅÙ2B¿~¶Óóîü¼U endstream endobj 2574 0 obj << /Type /Page /Contents 2575 0 R /Resources 2573 0 R /MediaBox [0 0 595.276 841.89] /Parent 2572 0 R /Annots [ 2577 0 R 2578 0 R 2579 0 R 2580 0 R 2581 0 R 2582 0 R 2584 0 R 2586 0 R 2587 0 R 2588 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 ] >> endobj 2577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.241 634.446 184.235 645.46] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [324.558 634.446 352.553 645.46] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.663 592.912 131.658 603.816] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.008 592.912 191.964 603.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.31 580.957 474.266 591.861] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 2582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [381.723 569.001 409.718 579.905] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 2584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 456.867 167.1 467.771] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 377.412 183.688 388.316] /Subtype /Link /A << /S /GoTo /D (lin_8h_fce62bec193631f6e6b58c5b786cd660) >> >> endobj 2587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.239 377.412 267.802 388.316] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 363.241 193.091 373.147] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 339.459 201.411 350.363] /Subtype /Link /A << /S /GoTo /D (lin_8h_ffec8a2c0650ebd2168d7772b2ecec19) >> >> endobj 2590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.909 339.459 247.069 350.363] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 301.506 205.177 312.41] /Subtype /Link /A << /S /GoTo /D (lin_8h_58c2822debf5b36daa18fe8711d724f2) >> >> endobj 2592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.675 301.506 250.835 312.41] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 263.553 206.373 274.457] /Subtype /Link /A << /S /GoTo /D (lin_8h_a6d3f59059c532b0217f570f2b4f50df) >> >> endobj 2594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.871 263.553 252.031 274.457] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 225.6 201.959 236.504] /Subtype /Link /A << /S /GoTo /D (lin_8h_8970e09d61fde987211f8e64061e1fa1) >> >> endobj 2596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.457 225.6 247.617 236.504] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 187.647 201.959 198.551] /Subtype /Link /A << /S /GoTo /D (lin_8h_a78f202b20674909aab523018106546e) >> >> endobj 2598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.457 187.647 247.617 198.551] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 149.694 205.835 160.598] /Subtype /Link /A << /S /GoTo /D (lin_8h_cb8c02645d7cc3d42e3db6ebf74de192) >> >> endobj 2600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.333 149.694 251.493 160.598] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 111.741 205.835 122.645] /Subtype /Link /A << /S /GoTo /D (lin_8h_7232df93295216e063c438671652c2b4) >> >> endobj 2602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.333 111.741 251.493 122.645] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2576 0 obj << /D [2574 0 R /XYZ 90 757.935 null] >> endobj 1035 0 obj << /D [2574 0 R /XYZ 449.758 572.154 null] >> endobj 262 0 obj << /D [2574 0 R /XYZ 90 555.833 null] >> endobj 2583 0 obj << /D [2574 0 R /XYZ 90 475.39 null] >> endobj 2585 0 obj << /D [2574 0 R /XYZ 90 395.935 null] >> endobj 2573 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2606 0 obj << /Length 3269 /Filter /FlateDecode >> stream xÚ½[kܶý¾¿b>Î ˧Dè‡ÄÀ…㤻›¦EjÚízÐyUš‰wQô¿÷R$gH=®/\,줣{î½$/%ŠÍ(ü±YNg™ÊH.Ôl¹½¢³8ûÃsW¸œ׿¿½úÓw‘<³Ûûæö”ÅÙìvõÛ<%r‘0Jé|³Þ‘O‹„+:³Þ”ö躼/«Óór·„S‚æœÍ•^|¸ýËÕëÛ3«óI‰Ôpþûê·t¶ßþrE‰Èõì3SÂò|¶½’\¸ãÍÕÍÕ_Ï6ìyçûÂRLŒÇÅ¡©jâz½;m˪8®÷»ºÏ[J‰Ο¿Ú°p~aa&´»ßý“sÕ&`nà añŒŠI’Ó, *!¦•¤D±ˆÊœ®ÜõëÔa1ÒÈœ!…nñ±¬ªmýð±Ÿ3J4¨½Ž0r“g<`üO‡ƒsè¯ÓbôXŒ12gß½}ÿúúúãÍ//_¾¾¹iÓ hó4Í‘ =!&ò€ôÏ0œ¤žÓo;| LO ×c1æÈ\îû_Þ½ûøóOoßß¾¾nû %t¾,Cbö„YJMà_7fÖ‰Y¦šd<³ÇbÌ‘¹ æÄCÚ” šAƒ1FreãÇ×?þt½HÕü1¦rBs6Kµ‰§_v=& @ÝÑe„W_ ¹”¡å”°,'©1ëðØvhœ¿e2ìûoßÿðË»ï®?þxû÷ÎøË5¡:Gã÷”_@s¨,ï‹_ØŸÿîXØ 1w%‚ôa›óÍi·ÒöTÈr:¨îÁõA}÷˜1…ǸÎ:• ×»c‡ÃÌÇtÌ7Ügn™tbÝ9FÃ(Ñx°ƒS*ížÇÙ¥Šš€›æ/6›ýò[{|>¹+×µ;Y«Ó²“®ɲtbv<uµmÒeçPug@͉)šéP2PjI´ÈZ١‰HÞH®mç¤u;hFXÊg)Ó$•¼Ï+–B1•Áao{r zfÆóÅ@ã1BK§©íB zúÌaÜyUÞ§k¹% ЦÁö•=qÊî,Ÿ‘Œæ±ÇÈ(w*—$AÅäÎcÆä.°5,w(¡“»‘»ˆo\îPæ–I×–‡£ó§î”Ï¡€xÀƒÓ‚Žp¦â I^3^P¡ƒ¢‹J61/:Ø6‰Œ‘Œ’”14'Ó¡Œ„.„QÖÊÉÐñ‹ÐÕÕè‘æS»G£éi›NPi³ÖÅÒã1hz„ÒDkýÇÓ³ªØT5ÉtöåSA``h*ðãÑËýáɶVµj¾?×»rÂ<@AA¡Ì‹Üîã:×6‰ôqP môi8W‰Çà”°ê¢Pê„”#ó€‚E‹éjÏšØð<J¤³ Ÿft¸ØBæŒÐÏ!6„|挹eÒõ…ûª,»“€€Hð`-g„Ao6Ì-ÌýÆ JMØ¡qþ–I¤÷ÃJk¬y=¦C)<rÚŠù™¥¬’À,Ä3ôëb`P¿Ä–²Ó‹W–§„Âr!òq¸Ù÷¨ek6H'¬½‘%ƒRš'c\DŒcšiË3ùÕ4‹e„rk–ÃŒjÖÅ¢Y¡×¬€Ó¬o‚faÌ-“ç®Ð%—9Q4Ńuœ;ykTk¼D…¹V‚iá{4êKÛ$2̬+¾Çt(#æ±l…ÿ\£Ftþ »01îü\W¸“¦>ýÅ›2Ü»¶I¼ÐH²Á)!!J¥刚ɜÆ¿ÖB\fX4*f3&f­a1C ˜…„ˆ˜E|ãb†2·Lúµ]9(fh°^ÌPJ'fQv‡K0(ÙsèIcvhÜ–I¤ûCGPŒ£1{L‡2R0è”òVÌV‘˜‚ Îå—+X``HÁ<ĸsSO‡/R0 ¾Ø]DÀ0ê[Ë &_°ˆ£ËTâ18£`°€”å˜|)(ßÒô«é—ÈÕEõËaFõëb Ñ/ŒÐëW@ˆéWÈ7A¿0æ–IßøcßúQÀÐBƒuœ²YF‰8»ÈÒ¼Ü̦Æìи-“øRè Ùc:”ñ’CÌ­5¥ë¼>Zî÷Õªs¶Ü”ÛÖcW™ÏWûÓßûrX?.«Õo‹„¥ÙüƒÃ†€õöÁÒùT7AÿÄ3ž¼]îTM‹hʾõc¹IŽûäó¾Ú¬¬«—²ðzY-˜š»tÛìV”fϾÖòNš×óø‹XÕ“³%DN6¯&6LL² Z‚ÐÆ]~ä‡A%AÂ< Âçu$H긌LŠö¬"{lp‚† G{‘˜¯WAÂhÿŸèC¿€ 3" B+(ùÒ/WÀÀ„xˆIÏ|9Ay–ŽˆLÂZ,ûZ:"RFRŠ ‰ÇŒ)I`kXJPB§%!!"&߸š Ì-“†Ù4Ìn!éü÷®¦(Âò‘€§Uæýug8|Źë¾Þ G¸è‡@ß$k½÷£$ÒlÃ{Æ^‡ÀÀà qfÇXq¬Ö‘›f³,×èXŠdô±}»`°"¶ ¾¿™a\TëÒÙ·UŠkJ´ƒ+¸>8°ºXv{û[î–ÅòYŸ6—"µ1 e Wnˆš×ÿ ÏEàdÏ,K¡·™ïã›C'¼§rŠM^¶àšú©·ÔÑf­Œhwy‡Á©[† u7dyʦ†ìÐ#¼±ÉxÞPØœi"¡äÁÂö”¾mȆ*›ŽÞÙnÇT4ã÷hÜ–É`ûÉ`ð™ÙRÊñàçÎR’é8÷Íø5ýþPíÍœðûº‘-s渷¿ÛbW<8TÏ tN26u\x4êhÛäð aÆçZ£¹ñ”R²œp(.CJ;Ý£IA±3JhÚªdÛ£Ìfe(Öb':»ž-§N),šóˆúRÙ¹dÙT€ÇÉZBî§YÙ> endobj 2609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.518 697.247 211.797 708.151] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f) >> >> endobj 2610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.529 697.247 307.665 708.151] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f2544660be2086b8225623e8a7b534dfb) >> >> endobj 2611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.421 697.247 445.974 708.151] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f84e4dcf5e518ba3dce985ef7c9687513) >> >> endobj 2612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.73 697.247 513.996 708.151] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d) >> >> endobj 2613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 685.666 160.087 696.196] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d) >> >> endobj 2614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.657 685.666 299.085 696.196] /Subtype /Link /A << /S /GoTo /D (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1fd2248fa36c9d85c91187179ae95207e8) >> >> endobj 2616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 630.432 149.955 641.336] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.78 630.432 283.342 641.336] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 615.812 252.618 625.717] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 591.578 153.721 602.482] /Subtype /Link /A << /S /GoTo /D (lin_8h_b8fc0ef6b34eb3327b13a00de78232b1) >> >> endobj 2620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.044 591.578 271.607 602.482] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.831 591.578 357.394 602.482] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.898 576.957 228.804 586.863] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 552.724 154.916 563.628] /Subtype /Link /A << /S /GoTo /D (lin_8h_ef9ead7c6ea6ab08f3ba3fc6a1c30303) >> >> endobj 2624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.359 552.724 211.921 563.628] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 538.103 220.985 548.008] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 513.87 150.503 524.774] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 2627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.467 513.87 231.029 524.774] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 499.249 228.31 509.154] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 475.015 150.502 485.919] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.945 475.015 207.508 485.919] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 460.395 229.799 470.3] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 436.161 154.378 447.065] /Subtype /Link /A << /S /GoTo /D (lin_8h_e4947608476c198ad27759d1e562d655) >> >> endobj 2633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.821 436.161 211.384 447.065] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 397.307 154.378 408.211] /Subtype /Link /A << /S /GoTo /D (lin_8h_5490027e9699680dfefe370c28691243) >> >> endobj 2635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.821 397.307 211.384 408.211] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 358.826 156.191 369.356] /Subtype /Link /A << /S /GoTo /D (lin_8h_cc7d26efba3ca08d36047253a9315dcc) >> >> endobj 2638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 277.69 209.7 288.594] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2639 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.421 183.288 132.984 194.192] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2640 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.772 141.753 182.44 152.657] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2641 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.965 141.753 219.399 152.657] /Subtype /Link /A << /S /GoTo /D (lin_8h_b8fc0ef6b34eb3327b13a00de78232b1) >> >> endobj 2642 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.229 141.753 274.858 152.657] /Subtype /Link /A << /S /GoTo /D (lin_8h_ef9ead7c6ea6ab08f3ba3fc6a1c30303) >> >> endobj 2643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.722 141.753 417.284 152.657] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [498.166 141.753 513.996 152.657] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 2645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 129.798 108.7 140.702] /Subtype /Link /A << /S /GoTo /D (lin_8h_946005b038f5c584691630b5d39369e3) >> >> endobj 2646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.613 112.174 185.829 123.078] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.772 112.174 363.334 123.078] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.092 100.219 359.308 111.123] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.526 88.263 222.571 99.167] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2607 0 obj << /D [2605 0 R /XYZ 90 757.935 null] >> endobj 2608 0 obj << /D [2605 0 R /XYZ 90 716.221 null] >> endobj 2615 0 obj << /D [2605 0 R /XYZ 90 649.406 null] >> endobj 2637 0 obj << /D [2605 0 R /XYZ 90 296.664 null] >> endobj 266 0 obj << /D [2605 0 R /XYZ 90 240.37 null] >> endobj 2604 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2663 0 obj << /Length 1398 /Filter /FlateDecode >> stream xÚµ™[oÛ6€ßý+ìEb–‘’ú¶6MÑ"è°ÆCÚbP-9fËž$/NýEÒ¦$‹¶FŠ:<ׇ²L< âÅØ yˆbƽÙr„½{˜}?"úînO¬ûo¦£W7 V¡X0o:o– ‚8%Þ4ýê Œ'cì/ò=Œ'”cÿ&_djô9›gå˜D~VÌ`Šá˜ŸÇãïÓ£wÓUígBÚüwôõ;öRðíã#GÞ#Œ1"qì-Gez¼ÝþÜéPó æ…%ïNX€¢PÝ–“å½¾û¹?e‹}ü”¶ã×·eüõšn¿aŽátã"”" Y {ž§UBÄã–å¤H{æ‚¶Í Fj¤Ý†;*uÌ[ºŒ9dˆ áŽY˸M‡aÞ6/׋l™µÂ«~М}y{§à[6&~Rj2)ªùª\&u¾**$õ&‘R n AƒFñï,`ÔO6Û|‘'哺„ue¾Uã¼ØÿoL¸Ÿ•¨SÓåjSƒÑ«nh@QÀ/Ä9R #=±Ä{骔ŽËÈ”cC¡G&Kh;Ò)ˆ‘q›ï(’æ¯d„ŸW&G³Å&ÍR$÷zà¨Õô¦Ê´Àí_ÈhRÜoM`j>&ØOfõªÌ6eRÓyý FÕ,Yd©*‰´£„ ˜+(ÖIYçÉBU|)‡*Qì¯ 3÷MÉÛ- v8£ÐA¸é`ˆêv}تëÕl#YSNIóX ± Þ¯DD¯ý-m-¾ýðéöÝ'5–•©rÀòg¶š7u¹™Õ;b×åRîU•¼¨åŒ)g»¸Eî,RšVóý®ènJÆñ‰#ѱ¾ÐÈN,áþÖl©3}°\öÌÂIÅjÙí¶%â6'r-ƒv óB%)°ÖÈ^/b°Ñ´ h½4 hM‘×Õ•Ò°¦jôã©Ófnäæ_•²«¨‰Ç2YC]×ЀÖôv0ÙÃm\È"|þÎJH%ñ«ûÝl3×üFaˆC“œÊ/CqÄ=È›Ü,îºG1Â:—ÁÑÁÓ_ËÐu¶V'ü,©³þ‘ÄàX'ij”ö€R…!€¶—]J0E!ƒLZ¡ö1Á! Û¥£éëijª Ç€.k2ûç±i:eZ©©Ùj¹†mþ#_@Þóúi,¸¿Ç¡×QEŒÀX;ïí]K;}ïªÔ{j îŒBaà*üÄÈ8Í2¹‡³Õ6›æe6«šýb%ûé£ÙhU%é!Ô)UšàI 8\÷¬³AÖgë§³Y‡óa*.ÄzÊEÄź9uKé³X·BdÝȼ8ë­¼gÝå{Wåi¬; ¿gÝeÖ°n›½4ëÁ ësNv6ðLˆ¡o5¿<“ÏOðéÞˆœ¼¥ôYÀ[¡od^øVÞïò½«ò4à…ßï2k€·Í^x>üº¬Ïf†ÐB/Ä:A ]¬‘ÓY·”>‹u+ÔAÖÌ‹³ÞÊûqÖ]¾wUžÆº£ð{Ö]f ë¶ÙK°Y¬‹AÖ«ì|ÖIL ø¥X‡ïÃÎÇ%pçFá³(·‚¤Üȼ8å­Œ§Üå{Wåi”;J¾§ÜeÖPn›½4åápG§Ûó)Ç p P.N¤œP†àéÚŹ9tK©›uq„õ}¨Ã¬k™—gÝÎû ¬;|ïª<‘õáÂ[¬;ÌîX·ÌžÈzç§#~øéƒ9¢^?ÿÚÍÏŽÛP Cxê×m]ºÿ>+²²AQ½¯Ó/‘¦ã˜ú½Ïþ0/µõį1}Ͱº¢˜ŒŒÝ`óåíÝ-Ðñá^Š"ù†É~…u½Ú>ÝgE7;\¾.é¥çõÁó… endstream endobj 2662 0 obj << /Type /Page /Contents 2663 0 R /Resources 2661 0 R /MediaBox [0 0 595.276 841.89] /Parent 2572 0 R /Annots [ 2665 0 R 2666 0 R 2667 0 R 2669 0 R 2671 0 R 2672 0 R 2674 0 R 2675 0 R 2677 0 R 2678 0 R 2680 0 R 2681 0 R 2683 0 R 2684 0 R 2686 0 R 2687 0 R ] >> endobj 2665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 719.912 123.096 730.816] /Subtype /Link /A << /S /GoTo /D (lin_8h_e4947608476c198ad27759d1e562d655) >> >> endobj 2666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.47 719.912 174.562 730.816] /Subtype /Link /A << /S /GoTo /D (lin_8h_5490027e9699680dfefe370c28691243) >> >> endobj 2667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.458 702.288 277.363 713.192] /Subtype /Link /A << /S /GoTo /D (lin_8h_cc7d26efba3ca08d36047253a9315dcc) >> >> endobj 2669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 616.165 162.667 627.069] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 558.59 138.508 569.469] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000007) >> >> endobj 2672 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 538.5 313.271 569.469] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 470.962 138.508 481.842] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000008) >> >> endobj 2675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 450.873 313.271 481.842] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 383.335 138.508 394.214] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000009) >> >> endobj 2678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 363.246 313.271 394.214] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 295.708 138.508 306.587] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000010) >> >> endobj 2681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 275.619 313.271 306.587] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 208.081 138.508 218.96] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000011) >> >> endobj 2684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 187.991 313.271 218.96] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 120.454 138.508 131.333] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000012) >> >> endobj 2687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 100.364 313.271 131.333] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2664 0 obj << /D [2662 0 R /XYZ 90 757.935 null] >> endobj 270 0 obj << /D [2662 0 R /XYZ 90 676.759 null] >> endobj 2603 0 obj << /D [2662 0 R /XYZ 90 654.447 null] >> endobj 2668 0 obj << /D [2662 0 R /XYZ 90 654.447 null] >> endobj 861 0 obj << /D [2662 0 R /XYZ 358.211 619.318 null] >> endobj 2670 0 obj << /D [2662 0 R /XYZ 90 602.591 null] >> endobj 863 0 obj << /D [2662 0 R /XYZ 90 529.534 null] >> endobj 2673 0 obj << /D [2662 0 R /XYZ 90 514.963 null] >> endobj 864 0 obj << /D [2662 0 R /XYZ 90 441.907 null] >> endobj 2676 0 obj << /D [2662 0 R /XYZ 90 427.336 null] >> endobj 865 0 obj << /D [2662 0 R /XYZ 90 354.279 null] >> endobj 2679 0 obj << /D [2662 0 R /XYZ 90 339.709 null] >> endobj 866 0 obj << /D [2662 0 R /XYZ 90 266.652 null] >> endobj 2682 0 obj << /D [2662 0 R /XYZ 90 252.082 null] >> endobj 867 0 obj << /D [2662 0 R /XYZ 90 179.025 null] >> endobj 2685 0 obj << /D [2662 0 R /XYZ 90 164.455 null] >> endobj 868 0 obj << /D [2662 0 R /XYZ 90 91.398 null] >> endobj 2661 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2690 0 obj << /Length 2998 /Filter /FlateDecode >> stream xÚZëo#7ÿž¿ÂèÝXëôœG8 l±Eší%YÜÚb1±µÉ öØw7ýëQcÍÓ»…?X£¡IŠ"$%‹‡X¤|›˜¥Ê,Ö» ¾x‚Ùï/½]ÁëUðþ›‡‹¼Vð+–Fjñð¡ùy$˜‘bñ°ùy1}¹œóå6/ØóåJ¾|o­ÝÙ¶¼ÉÒk˜R<•bñË_~¸¸~h¥’NFE(ó÷‹Ÿå‹ èöÃg*MaÌ™HÓÅîBKEãíÅýÅ¿[n^ÁüزŒPç×%ã‘ñëb’%´¶¿mì/œË‚VKý$ïmYî.Ųzjg›)xî-/1Œ‹tÅ ãZŒé§Xš˜…m m ΖOôú.XI’2Îõb¥°˜4] Ñx\Ðwöà6bÕvÓ×P(°¾‹€éÀ„J³8N«Pˉà’ÅJ‚r§¥6ÊIyRNð˜Å°žµûz³¥3~Ø—nð˜­ûx)ø2+7•›Zïw‡¬Îó-Ø=¯_.#³|å^+Û_”ŒRºvŸ´«§žÕ½ÏuŸÞw%$“±žÛø•§™«Ø<3»ÉK»®·/nùÅþRšåG÷Um³ C}ºŽ±’ÒqZ)ɄЭ¯+òôë⸳%Øx_8^—±^¾Èó¿Û¯Áò@RÔŽ$À:VÀUéôÄ âg_?<ÞÛ¢a2&©Í¸É* ™r~“FÌp§“_Õ¾¼x>¹ìˆÔi÷î‹×IàÞ‚3‰ò‰åß¼¹½¾»{ÿîÛo¯ïï*¤ Ÿœ]xjXœ€ðÉùØ3‘dQªç•#š@¹Ûw77ïzûæöáúnIŠ3®N?•/c¦¸$ÅuH¬æu$š@ǯ|{‡(ö¿1&±XŒ‡6Œ˜PégQ &b1¯ Ñ„;üæöûw7_ƒ¦ÿQ°°#`=ïiò{©J§àää\p> ¿>ëSìB´úP…€›ŒVÝFk^Ôm°ÂÇá†ã‹LB;¤Š“Cd”m·€ ÀÁd! ÑT’2`&¡¦HR",²Oy5d&³tÜeVÕåq}ÒúPîÜïÛÚßE‹ZÞÈÕP|Ìt,‰ØŒ,D0'-#c‚)%Ä,FfÌ"©ýïÑx ‹NòõaÏZ¼aÓhÞX3å¹ÝíË—^>ÌÊ2{A‚ inàdô„ÔPêðDËyD½ ȇ9¯Ç’–H–îK“žð¾‡ͼÈDÀ~tE†T,T¶®Z ¶¶{´%ÍîÁï?¸aýL9,dTïÝ÷Æ~h*ã–^üé4Ûm5–EEêôs»î*ÆŸn®¿¾¿†WéåíÛK ©óújè1d¥Ø;E)\ ³´°ÝH,Ò ­ÒÆÃæw’ˆWõ°ðê2œÙG‘0¨ï;’ûÛèHfåIŒim:½ñ•2ËêyÜnœÅ­›ƒÀ©ól›ÿiý‹—‘X3ir ×ép‹{ᨡL´<ì«*Äâ e”ö`±*Þ6%`‰ôòmá4jüØ”UMqn  ÖÂ(BR7~^÷[Saeš$ä¬ LMµ–x_Lx˳yã0oÈ]Ðê@µÎÏ7Ò®â‘ÐÙâê Q2´˜ê*Ð/h‰fV°âƹF zwô†x$ë@t“½öî{…p™ˆöùä-î¹ÅMgEöd1ý½¢-Nf¸i¥Åà{º4Ødlmåaƒ0ãã³…­*‡˜`ž~ŽŽãýÇÜÃU¶®€]ö¶íf6]„ `†I¢“#‡/¤U ­E*g é€fªV)´Õš@ÎõcÙÎÖ€±“ÅôˆäéR«¯B˜¹}¯èiœ%5&pyX÷‹‘ŽrŠØTΚÅÓ ”êà¨ãÅ]¥Þø,Sí«nN¦t(Òp/‹MŽA~Úýaªoš¹Sþê‡c Í\£'ñÀSÏ®­Ïr:Ih.˜Læ½ÌÓÌŠÔ\aoJtY‚y¨…Uc²U,¡4Ò˜[¦K—µ·Ucs@ò¼vóyå¾³ª‚ CI¡3z}ØC êŠxjB¬yo+K¿óãç ÙeiGø›gmáHÝã ±{&2âÒM5(óim^½­D|óâ…’ôâè@µzV'­•t% RˆQùúÙM­3ÔGÞÛ‚kpö‘ÞzÏÜ8‚Æí”Ó|çF\Ĥu'¢Ø›ÂÑìhl†Í1;ÜT˜^ lRçÅSg Q™m¨PEX˜¼žŒŽL:0ˆˆŸù óÍi×`lkð“?m¹g¾bE+¨eÎ6„Ñ4JÍg¢TÛåtQJ2ðG)G3Pª‹R1Ä“é(õàkàâˆEr/Ù¹MÜnüYlh^ ±=†eŸÜ½šJRL »ÜŸ“6QD[ ûU±É˜¨%NÖêˆQËS ñ÷3&§Ö®{ô émRzßÑ¡ch1)£V‡X†¡ ¢Ê¬¨ ¾vt¢†s‡6bPÅñòvVšJ`k«"Ižb`YÏoï¾ÃŸÛx&x&ÝÖ>ÔNS&¢Àâ“éÂSN®;dE¶]9ÄVQÊŒÀŸ©*ôç ý ×§KD³ ˆ†;%Í鉧iR 5PêRue²aàü6ru%¼œ»¦‰™–ú˯iÖû¢ª‡GæS—,Ps)}É%KUŽh"“Fþµ;ž/ºâÙTõè SÌõà–Ga‰oLÿ–m?<õ‹—rxê§år³oÚ[e4aíGŒ}@${qóMK†ßÅðO  bC< Å”9wæã©WùÈ9}—åÌÅD>¡v„÷oˆf^¤qEm(²ÝeXxS˜£ wÊm ¢…VÐtÒÁBµ T5ÉgÅSÏjØgy:è <ÀŠ•š5ާ™ @! @E·9*´x±[’Û¸–yíý¬½3”m_!Ǿ{þû1/1‰®´ oÝMEä››(Z~…ÿ¸)‚V¶y»w/›Æ žåsíùÆn¾¢©¬¬Ý¨qêKsÚðˆÚ,ø†8ÈíæŸð«&JpÎÝí9y}t†ºzoÁ}Òø\¢pÄ«€zˆÒ]†ªl=™ K¢»*ôóÑÌK†*SôD{³øý Í€Þä~öÙ+‘ðÚ³´» P‚ÉŒ\¤|a nÍhKÆØé›¿þß¼æ_…Øœ‹4ì"#€Mÿh 鸄ïmÖñõÔéŸH©\ú#÷>h÷%Ò+.¯wO’ áëCyªýþóíý ¸ñ›oè§,Á”Ú´Î/þŸ^žì .ÃÍó©Ù• endstream endobj 2689 0 obj << /Type /Page /Contents 2690 0 R /Resources 2688 0 R /MediaBox [0 0 595.276 841.89] /Parent 2572 0 R /Annots [ 2693 0 R 2694 0 R 2697 0 R 2698 0 R 2699 0 R 2700 0 R 2701 0 R 2702 0 R 2703 0 R 2704 0 R 2705 0 R 2707 0 R 2708 0 R 2709 0 R ] >> endobj 2693 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 694.978 138.508 705.857] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000013) >> >> endobj 2694 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 674.888 313.271 705.857] /Subtype /Link /A << /S /GoTo /D (lin_8h_7bdf034bd750df1e518db9feeebf7a79) >> >> endobj 2697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.422 453.93 279.985 464.943] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.644 436.305 219.206 447.319] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.704 424.35 303.749 435.254] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.723 369.139 402.286 398.205] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [498.166 299.846 513.996 310.84] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 287.891 167.16 298.795] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 201.067 188.241 211.971] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2704 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 169.454 350.388 180.358] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 169.454 476.803 180.358] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.978 110.199 250.541 121.212] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.061 110.199 373.73 121.212] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2709 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.264 98.244 458.48 109.147] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2691 0 obj << /D [2689 0 R /XYZ 90 757.935 null] >> endobj 2692 0 obj << /D [2689 0 R /XYZ 90 733.028 null] >> endobj 274 0 obj << /D [2689 0 R /XYZ 90 661.394 null] >> endobj 2650 0 obj << /D [2689 0 R /XYZ 90 637.18 null] >> endobj 2695 0 obj << /D [2689 0 R /XYZ 90 637.18 null] >> endobj 2651 0 obj << /D [2689 0 R /XYZ 107.713 578.456 null] >> endobj 2652 0 obj << /D [2689 0 R /XYZ 107.713 562.695 null] >> endobj 2653 0 obj << /D [2689 0 R /XYZ 107.713 546.933 null] >> endobj 2654 0 obj << /D [2689 0 R /XYZ 107.713 531.171 null] >> endobj 278 0 obj << /D [2689 0 R /XYZ 90 515.465 null] >> endobj 1330 0 obj << /D [2689 0 R /XYZ 90 492.212 null] >> endobj 2696 0 obj << /D [2689 0 R /XYZ 90 492.212 null] >> endobj 2655 0 obj << /D [2689 0 R /XYZ 90 160.934 null] >> endobj 2706 0 obj << /D [2689 0 R /XYZ 90 146.444 null] >> endobj 2688 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F48 2408 0 R /F14 1084 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2712 0 obj << /Length 2427 /Filter /FlateDecode >> stream xÚµZKÛF¾ëWè° °Úýnr6»vÀ‰³žö ZjÍ‘H-)y<ûë·šÝ-6_M9Þ…¢ÈõUU³^M‘%†Y¦x©„B)Ëíq—pö‡qW7py\ÿþañú-ƒ»P*ÙòaßÜ. ”,v¿­$âë Á¯yžÖ*ðêm~ÐöèƒÞëjM’•.¶pŠá”’•$ëß~Z¼y¸²:“†óß‹ß~ÇËèöÓ#–&Ëg8ƈ¤éò¸à”¹ãÃâ~ñ« {žÁù1³8“s¢c˜D LR0'ˆ:j~’"ŒùRQ‰ˆä ~]¼Êªì¨Ïºªïú¶L‘btHõÌ ¯‰X¹«Ÿ´.ìQ­ÄO/WöàRëÊisç—­>9h¾o¡påÅ3®‰•¯VÅŽûãÇuÁSÆ\ì ¡ÏOùÖñ6«]‡Ëôœ[´·ßÙÁ°4«ºë,e³G{T5:>®(¸;èºFSa"e‚¨$ãO¢4scx@úª«‘ø`ˆCNˆjå0­ºñ‘ ÞÑéÂbë=ûè€ÏË“I&>$ªò8í'A£s~jAÓ~r£Ó_æ´«ÏC'Q”(WÉa*u¤P"hG%ï&æ"Ì|·n²gN¢T $°­ÑÈ\¨âC ›GGuë‹tî8UÇ»»³ìq „“¥ŒºÅcâÔ ª,,]H]?•—ÃÎ:ÀD"óY$ôÓ†Øo“*Ì·[¾æø¹©ZµýQ”îì •ŠÕç¼¼Ôçß¼ÈÏyvÈÿñm$—H%¬“8>b÷Ê-hz•fn•c|~•£tn•:êVùç Oº†ºSWó›<ó“uTȱ$iºÒ”ÛÜÿÖ$#ßcÙÄPÛÂM‚LIšÁfm®"”Îu·½ àó'rº"P•@"ꑺZ‹‰S&‰4íP^çeÙŒÂýX†\H ¹ÑnŽ*Ñéì†ÏTø0“Ðaicö{LœŠà´k±{]s˜‚Z"è­v;tœ¼'ÒOÀú<™6 È&JFíö˜(u_Ð5mt&³¸Ñb޳vί3ç_錽gæÁ³Þ¡þÃTy­OîQÏlÌWz[V;{ªÜÛÌĽ;Ür›CÝ?Hù<⊳Ù/ÉrI"ÛDøõ‰¬³T~JËÎg}<õv5LƳ-Ãù)¯ÇJ„Ùb$˜uòë¯ïÞüõþ•ðËû5Ç«‡7wÃ21ÒטT&FU>^j§[3ñ†ÛXP x3Z9vyvÞ8ß š†‡L…Çò\scÑ›>ÒÜtEN§aÆ0b¤GÞOC§„êmªsHV\¿ÛÙѯþkçr¨ÌÎeÃÔÍ¡€*™Üè+Ž*ÞyCH§A4F}æ1qêž ÑævXšÂ@¢fjC‚Cd$)ûš#ÌÓ{}Æv =æöÕj Ê-Q§xÌ@¥N33ÈŽJïòBg~ç¹ÊŠz¨c0Z—ÁSj¼6¹\B"ÂÒørµ˜©åbŠ#’Ò›÷b´íõxÇö<æÛö·oØ¢Óvšœ¶=ffÚŽò¹i;Ng§íîÖý#ò©˜³µMÛê0s¶Æø¼­Q:gk@wËþQ‡w~ÿ(ªBOäüþQÔh¿¥tûG!åÔþQ¯¹HíÃñ“ŒŸ§êÜNžÛ²ðý”DÈÁ:1„JýRòÿBްÙhš$Ñzý<Ò¶Áp-’ÑèT½uç-©yñž¼ž.÷-%|É–T‚÷”š›<zÀ‡c`Oddò„j R—¼?y:Lœ’ ¤RÞ¡ [žK÷9)GâVÃl\‡Ž8·yÓ,Í~ròd 4<`7úþ  ]µòyéaÒÕÅ5#ï}!æö‹¤w˜Þ1lQLˆWFÛ÷`ÿüÛý;Èk?~ïnE ¢×݈æûïå——G=ÈÇ¢yëÞwÏË4à endstream endobj 2711 0 obj << /Type /Page /Contents 2712 0 R /Resources 2710 0 R /MediaBox [0 0 595.276 841.89] /Parent 2572 0 R /Annots [ 2714 0 R 2715 0 R 2716 0 R 2717 0 R 2719 0 R 2720 0 R 2721 0 R 2722 0 R 2723 0 R 2724 0 R 2725 0 R 2727 0 R 2728 0 R 2729 0 R ] >> endobj 2714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.817 649.168 273.862 660.161] /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 561.631 188.241 572.535] /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 529.75 350.388 540.654] /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 529.75 476.803 540.654] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.377 469.969 279.939 480.982] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.215 469.969 349.883 480.982] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.656 469.969 408.872 480.982] /Subtype /Link /A << /S /GoTo /D (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) >> >> endobj 2722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.954 469.969 442.622 480.982] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [302.75 440.389 331.313 451.403] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.772 440.389 491.44 451.403] /Subtype /Link /A << /S /GoTo /D (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) >> >> endobj 2725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 321.106 188.241 332.01] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [215.737 261.324 244.299 272.338] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [293.504 261.324 339.76 272.338] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 2729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 142.041 188.241 152.945] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2713 0 obj << /D [2711 0 R /XYZ 90 757.935 null] >> endobj 2656 0 obj << /D [2711 0 R /XYZ 90 520.784 null] >> endobj 2718 0 obj << /D [2711 0 R /XYZ 90 506.214 null] >> endobj 2657 0 obj << /D [2711 0 R /XYZ 90 312.139 null] >> endobj 2726 0 obj << /D [2711 0 R /XYZ 90 297.569 null] >> endobj 1329 0 obj << /D [2711 0 R /XYZ 90 133.075 null] >> endobj 2710 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2732 0 obj << /Length 2510 /Filter /FlateDecode >> stream xÚíZ[oãÆ~÷¯P>HÀj2w’P I»Aƒ4Mw ôa³h‰ö²•H•¤bûß÷ ç 9$Å¡÷¡…D‘ÏuæÌ9ŸÅVþØ*¡«HE$jµ;ÞÐÕ#Üýî†áÓ-<ÞzÏ¿¹»ùê½€·H¢Åêî¡}]3¢8[Ýí?­5‘›-£”®yA¾l¶\ÑõûüÙ«ÙCVmX¼ÎŠÜ4ál­ùæóÝ÷7¾ë´¢MJh£óß7Ÿ>ÓÕlûþ†‘Ä«'¸¦„%Éêx#¹ÀëÃÍÇ›¿w2ì}÷/¹¥˜Xö‹ Bµr~ÁŸBßò¢±þ€“u†×?SEë¦:ïºg¶.NÕÑx÷Õ{&{áL$`±SŒìŸ)#ãqD€ ð-dŒÐ(éd(f «-§"ÁED4—î}cf+‚ó^çD'²A˜w>>€I¼.²]V×iõ²ÑjÏÒÃ|+wi“ÕuÌŽ%@Ú뇲²Í—lœY3"¤^ET)™ÍyP="⃗%‡Þzð6S'F"Ñaüíí)Îc#„dDÇñЈÑq˜ j!%Ñ*¨N‹ýDŸæ„2v¥ÓÖ<é; ƒßc#$$[(tÚa‚ª%WDÀÓU•¾àR0h/`Éá­óÉ|F—ì3"c½Sˆ<äÄ,OPŒ±6Æ4| 4Žb€ .ƨ l ÐßúénWVû¼x´_›Ò~ælc [§ÉËÂޫϧÓ!ÏööÛSÞ|ÉñIŽÂ¶ö£jKç@ž g{‘m˜Z?Ÿi‘ö’ˇé³ueÀ:‰±Hšº–N6ŸŒ4a2œ‡ « 2ª‰­"Æ÷Ûh+øecN)!liã®òÚ^Uå¹É‹  ä™|˜ÛE‰È{|w¥Ï=ÜçU¶k/_Ãׄ·ù2·Ÿr¨Žƒ— £’®ÝpHÊ¿6P?„û—I©ˆa:^éH‘X/– Do=ø´TŒDºñgWñ')‚°q §1AÕ’S8`¢ê õQŠ˜(ƯtڡÚG"Ñég~šu:[ÇFL֥ńUG’P¨‹¾js˜Ú7)€2^@_í<¢ÃŒD¢ó[»9$EÐ@$ÊnŽÀ~eê¡aZ„ÎÔLÄl=дhšRM™Ã´q©±`¦‚½˜â‡5³„P¹r÷%Å’–ÚS•í3°–›Ë•Îcú˜ïì%ì4=Ê9#cg`+P–¬4¬Ë(’}AÈÖÃLšÃ<¡r¥a‘ÅÜzò“Ù×i•³&«êÛI)'‘‰âTó4šˆ˜0h!)´yÐÄ:Œ±á÷Ó.’q"•¶‘»#\ª`DfbÏ »B±ðíù*jê’X¥EÝý ujãeŽCÙ\®T5\ò`®<Ì\®T¢Ú^רõ!kΕYpÅ|¢Bj»õ‚ r£øc“6çÚç`D1Z°ÌA)0cÅlf÷!fë.ì>»¾Ôvüœ«év7-mXŸ…,¨Kˆ†4øêè­>žwf¤ ³¾J8½©XðµÍûŠ˜%_Cúœ¯Auè«§Ž¡¯?ž¡«ÕpŠÀè­ø6a$2ÐÇpnKv1a•°±"¡*O%LÆ®lŸÒºÎöóYf:_Hr‡™Ï±…,¥8 Ìe8¤ Üëâ˜ß¿º¹WµS±‰»òöÐ ù!Ê£x! =h> ˆYŠCHŸ DPFÂS'n/p”ÄÂq?}‹çõ s;ò©E’(ÂÇ¿L_—$‰9òÏtJl€yN, €#§‚yØUX}kh4Î8œ”rCCÄàÓ©îPo‰²ò vlŽg+l!™ó‡ ÆPØMøØ°+^'³ÏšvàWUNÙÑp.f¼“Io´£š¦ç¸ æøUÐúAK¢øÒ܀譟Π#‘þh–NI•6Z0!U,&¬WÁ‘‹Þ–Œ2*Ò{×;i7 M-´eWÆÁ¡ƒöŒE{žv5„àkÎüD+‰FÁˆ8LØ‚‘ nÒî™v´ÂX7[âRûÄ%8„ ½ö‰KɸwpŒZNÈžáMC¬%4[ñ"i鯄ŠÖ¨‰ Gs Ø•eµŸJã1‰º:°(ÍmÑ";dÇ Âd;– „íʢƨìË3äúOkFBgè)Þ]4TC£ê ýÉÐÑú3꘼0HJ΃Z~|Ü-FÂ)èIa|ìó!¸¦œ0ŒrñˆµðXŽ Éõ1;دmŽò"m ¡Ïê1ómÁ1Ûçiƒ”Õ“9Ëê°½œÍ"6çSxhó0sƒ€4Í;}ÕÐvAóüL06áÒÐæ0oÚB醶±=—†6ßž· m]ÈtL’¥ñÉ͇ 1v9Jº-[)Þu[|`[µ [È6ÄLl¶¾Œ l»3\¬Ðl]œ÷¦6×åƒýôV·ùJ¯³t÷eˆùµÝK»¦ÄwYñØ ÆºÓ^ÞñÜ8¹ôEKš´ïä)Òç¼¶»Rh¬vÅ÷–à ‚³¢ $Î>G t‰ìAó‰DÌ•‰ì+éÀ*3lDIØ*ÄL¬¤P™¾y`ÔÍÿ0:êìãÕƒæã…cÚï‚ÕŸ Ã`™å‡MBÌĤa°I†]Ö|‡bq}™ç1xÆ“`™÷0se^P =»šï ©íò6Ö{‰ïq˜·ñ=\k¢—84;:ÌÂ`Ô‡ƒaX }u×ò=/0=fÞS Yr4 ÌùÒ…nöº®az|¥ËDOHÿPà2Ír×±·ˆYJnHŸËnP¦×S÷_bz8KˆÔj!=h>ˆY EHŸ EP†ÂS÷¦çˆéáT@‚’k™>Ëô8Ì•LÏÀ‚9¦'¨™_ï«™žëâÐ1=!{Æ"_Íô„"Ò1=A F‚^ÏôD>Ó#’¨Ùú™ŸìWŸìÁÇ3dOlz¾×còê_¨A&cÍÐ3ºÉ_Gö\)í:²ÇC²G$z–“ÑæŠMºî+¸˜V‡“=Q¬‡ÿ• ›ä‘=öñè€f¼ìu÷P«æœ!÷óŠ! û{h:æ~¡æ&€27˜CUâ?|¯äy¦zçG‘—&8„¼‘ä £ãxFÆ\¢x> endobj 2735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.349 702.288 342.685 713.301] /Subtype /Link /A << /S /GoTo /D (structlinprm_eaaf26fd243da58fee173b075bed1de7) >> >> endobj 2736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.015 702.288 423.35 713.301] /Subtype /Link /A << /S /GoTo /D (structlinprm_28a705f744a32cd05dd3aa86ca58998b) >> >> endobj 2737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 690.333 117.566 701.237] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.098 690.333 477.144 701.237] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2739 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [384.171 672.708 418.263 683.612] /Subtype /Link /A << /S /GoTo /D (lin_8h_e4947608476c198ad27759d1e562d655) >> >> endobj 2740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.516 672.708 471.608 683.612] /Subtype /Link /A << /S /GoTo /D (lin_8h_5490027e9699680dfefe370c28691243) >> >> endobj 2741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [498.166 672.708 513.996 683.612] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 660.753 127.529 671.657] /Subtype /Link /A << /S /GoTo /D (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) >> >> endobj 2743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 542.95 188.241 553.854] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 495.698 350.388 506.602] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2745 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 495.698 476.803 506.602] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 247.737 188.241 258.641] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 200.486 350.388 211.39] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2749 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.642 200.486 476.803 211.39] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2733 0 obj << /D [2731 0 R /XYZ 90 757.935 null] >> endobj 2734 0 obj << /D [2731 0 R /XYZ 90 733.028 null] >> endobj 2658 0 obj << /D [2731 0 R /XYZ 90 487.301 null] >> endobj 2746 0 obj << /D [2731 0 R /XYZ 90 472.833 null] >> endobj 2659 0 obj << /D [2731 0 R /XYZ 90 192.089 null] >> endobj 2750 0 obj << /D [2731 0 R /XYZ 90 177.621 null] >> endobj 2730 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2754 0 obj << /Length 2744 /Filter /FlateDecode >> stream xÚ¥Z[oÛ8~ϯð¾Ùؘë.fi›dÚn’Î,Ð)UVl)#ÉMº‹ùïs(’2)Jt¶EQX‘>ž+Ï™aøGf)žÅ"F)³|w‚gk¸ûú„è§Kx¼´ž¿¸9ùá‚Á*”Flvs×-”ÌnVç‹%ÁÏ·ÕzAÄÝ/–TàùÅf[¨««â®¨$™e·Žc<ØâÓÍÏ'ç7=g-—`‘äûçÉÇOx¶ù~>Áˆ¥Éì®1"i:ÛpÊôõöäúäß= uŸÁý1Õ8ÁˆFÉlÉ8JâQÁÅŒ‚ (C8:˜€ðƒ ŽQLØÌ`¤~ÇK~¸à‰…¤ˆ ¤%¤Ì«ª^–Å¶Ø •'q„3‹­/›Æx²QjqLb4vd»¹—fȼÜï>ƒ+ºëêNývBmʬ-šS¸“€›²üÞÅ|‘Ž-ò¶Òk·E¹n5F©Ó]~^P<ß·†nÙf›rS®õšM‰ÊìiÓHÕgKAP”F A©Pb$QûF.ʶAž±´“€JSv¤št¤Á<Ó‘›Ý:¯WžTlžF-!‚"iŒ'’kA‚HäH4bA¢Û×Ûc-ØòºÍÀ–í¾Q€ºh÷u©®¿,¨˜gÛ}qæ)ASAÂŒ¢ŠΨ³´@¾,E±ÜÓmNJ…o5†hæ§ av°5iDvøLbŸçE3²‡Œ®B ˜ÆGt=€¦uÕ˜cº†ø]C쌮;¢u}»ßnýìœ"†…ËW>¨×qåäi…‹0 )E€ùP{¥b»X•6˜ KŠÄ"—åCÕåYÓ«i/s 9›ñò4íe9æå?ãå;ãe‹Õ^þ¥ØUµÎÙv[åY»©tlßÉ<šAû0…üÇ6ü4m 9fŠ?cŠ;c ‹;SIÚnî AJLŽ~ÿR'ql‹-Yé*è/(cýøÖ_ÍQšPýøL=w¥DúØem ZÕ:è&öÛ¬^è3UÙŠ@Y+ )_®¼Y½ªí¤Ý(fÄ’êƒVS1û׈0Ð+SS½SÔϪh»í¡Û”º6Ìv$3è‚çÅ@î¢5E{è`FAe˜$89’Z ziÁ=gIRËÙëICÇH\[LCÂ\c†‡çF×Ù¢Ì>ƒµN-Š¡œ1$DôLtPš!I)ÏcÞ€ú·Jœß±ÀðŸx²¤ÐÍ€ãCæ0˜°BRä‡Ì’cMŒE(Ž…ª P¢+ˆØ7\6¥èµý+‘úic,<Kõcð†À²é)½7WÕìâSb}Ø‚,#YcƒøRGñü“f ©.äÄàæ1ÂÜÈc4ô‰SˆS> n<•a$YtQD…‘Ñ¡æÔÀñÄðì÷€ª~E}WÕ;²NúÑÔd³X7}€¾Ì»ùFþuùa +2 ¬B"ǦÍ­úò¸iõŒÜäYŸF²ºÝd[ÓšÊþò‹œ§*Ù‚¯%a’Î¥ãñª!K ãÍóI øLpŒ°PmßûNî:ÛÐ4gS“Ãçé b(ÂØa0ϧýê Ž‚&1O ·:c%±#лzeú$3@´÷…¿Yä¦ò« L"iš¸¡i›2vÊûm‰©OA]8l‘eéµö5™œ÷;IDxÞ³@ÓÞÒ˜gzKgG$&Œa‘4ÆÉmÀ_‘èíÆÀO•ü%óÏ…úu⹕åZ'&ȼX•)QY£Vƒà}w }/DŒS\ý)%òϺ„é—þð}ÊQ—RB=ÞuáSbšî6f6%( Ôô:Y¹Òg2-I FЬ.´Yïµ=ëJf«Gm¶r¥çÕv¿+ÅW›¼#éÓ* ¼ûø§.š‡"ouæëó¯‹H7zc;™'%äÈñšÜÉóœ“ «²¸[™"–¨Cxò¸i'†êDyÞ8µ§pŒ©AIésR“í¨Ü×Ùº0ÍRÖ¥©ÚÂåäó`m±0Sµ…G¸ÛRŸ+ÙKÎåta ±=8vÀ×íݵc5F2¾n³ÿ÷$ÇP¡<šGa–ȇÊ㨡Éar™Æ‚üä;5€Ú쎞ä]aÂ숪=fZS9¦h€™Ñ3ÄK«yàõ½Ó½Ö¥Ð%¶‚š4ƒÁ±CŸ6D˜²„ÍŽ‡oìŽT5*ccÓ‡ &=1r 1/w~]¤2ÿFŽNŠÔ«*ßËãy0-䙪«~ òäe<=@D“°Fü>«Gz  ûñš æ‹ ù16ƒŒ´·0Ïíšu7DP"½ºµLåàëñ@©u>œ× d› ”;Ù”§@Ù£Ïv21mü]]íôØ›*wû2ïÓl§){wÒb0ª²(þ¶·iž…\œ—ࣺÛýÍÈû6ÊáÄ˲´£Ô?ɱà^–ô4&÷8†%0™…xL˜!á(űðýüRœB>à.ÃéÃZ³ì¶_µÖÛïvL ]†:RÛ`‚¼)¨ sˆÃûžÎÆ6¾">v‚bÐK >mn‘|/ß½>¿ºº½þðòåùõµP C”yGï Za‚¬åiv*R‡õòű˜ãS+ tÐN>Suƒó´Tûáòòöý»7ooί¼ƒ4Π‰NƒúL?ã²_g¾þ\žD¹F4bÏu½A‡ùHZú¿X01ÿéÕ-üy{u~qûë‚ÈP.‡‚ ,óP4‡ÁÅ‘cKÈÀÝÁRèÍcîÌôt¬Ì&8†@‘#ѱèÐè¥)¹.Éýg,>„H\1FâCb‚Ìe|`ž8ÌTÕN¦0µH’g§†|:5ḧò¿É.ëÝÕå+?\a¶‘åÀgh Ae™åm!´¸úùk¤Í!L­R}Žê/ty«òM2èd…´žOVHƒ9V!C¼ú d¨ýb3ÔÅn8À8O—_ :Ìy@RÈ'êÙ”ÀäÏ“$¬¬Æ„YŠ¥ñÀºX`}Œ­úÌZ÷j§ý7ê¢|Þiü;òغZç§ýÔ<8)ﮟ¬óîá3¹Úô¦õV+¹§ÙÃY„€ZÝ™ÀèŒD@&e¦Æ ÝÂò°¾³ §³,™±'†C÷¡|±ÖMçYÙÈÃp·1ÞV2ª×0´÷»M~ølbÁâùôw&Z Ñ0^‚š0£ˆì•¦[U¹÷9;ˆs4´bhÑb D›ß31Äy@RbCŸ&1¤lˆ!–&më>;­;ÄF7üÌóɈÅ>ÞÆÃñé»ccÄ¿#ÍòÉHì@ü®LRÄù·Çˆ˜Œ4)ßðõ9â·}µÙ°ü숤ö1¢ÜV\r*`Ê6¯‹RŽ´fà6ç:7ò„ÂÌäïòÖiHz†éÃê/Š 1‡Aôð©Ào/¯/aÛ½y¡—¢Quùù«9óxúº.¼÷NB¾ QZæù¬ù±¼ endstream endobj 2753 0 obj << /Type /Page /Contents 2754 0 R /Resources 2752 0 R /MediaBox [0 0 595.276 841.89] /Parent 2751 0 R /Annots [ 2756 0 R 2757 0 R 2758 0 R 2762 0 R 2763 0 R 2764 0 R 2765 0 R 2766 0 R 2767 0 R 2769 0 R 2770 0 R ] >> endobj 2756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.308 652.574 206.871 663.478] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 2757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.146 612.388 372.306 623.292] /Subtype /Link /A << /S /GoTo /D (structlinprm_2975830d4214bb6b35cb1ca922875057) >> >> endobj 2758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.559 612.388 498.721 623.292] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 2762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 243.446 213.028 254.35] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36) >> >> endobj 2763 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 229.136 203.922 239.322] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c361f9859b85143e5ddc55744beff6d433c) >> >> endobj 2764 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.258 229.136 344.685 239.322] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36a1df3b688a38178c3bb75225c8921259) >> >> endobj 2765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.021 229.136 505.344 239.322] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36fd604876bd42694c1a04cdae2be719e6) >> >> endobj 2766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 217.18 203.554 227.367] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3685932a7f3c52c3090c1a1c5e82ed1c22) >> >> endobj 2767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 201.809 222.821 212.339] /Subtype /Link /A << /S /GoTo /D (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3605b7fdbe8fcf799db114f90f04083273) >> >> endobj 2769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 148.309 155.484 159.213] /Subtype /Link /A << /S /GoTo /D (log_8h_239e115e583af4e67e60de4a4f95f09e) >> >> endobj 2770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 111.279 155.484 122.183] /Subtype /Link /A << /S /GoTo /D (log_8h_c80fd753e48873cdbd9a332609de150a) >> >> endobj 2755 0 obj << /D [2753 0 R /XYZ 90 757.935 null] >> endobj 2660 0 obj << /D [2753 0 R /XYZ 90 607.983 null] >> endobj 2759 0 obj << /D [2753 0 R /XYZ 90 594.233 null] >> endobj 282 0 obj << /D [2753 0 R /XYZ 90 383.509 null] >> endobj 862 0 obj << /D [2753 0 R /XYZ 90 361.197 null] >> endobj 2760 0 obj << /D [2753 0 R /XYZ 90 361.197 null] >> endobj 1036 0 obj << /D [2753 0 R /XYZ 374.54 326.068 null] >> endobj 286 0 obj << /D [2753 0 R /XYZ 90 310.161 null] >> endobj 2761 0 obj << /D [2753 0 R /XYZ 90 261.508 null] >> endobj 2768 0 obj << /D [2753 0 R /XYZ 90 166.37 null] >> endobj 2752 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R /F8 1129 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2781 0 obj << /Length 2288 /Filter /FlateDecode >> stream xÚYYoÛH~÷¯Ðû@£ž>ydŸÙ ŒdÖö$dƒ¡Ú±©!©Øþ÷SÝ]¤Hñf "›ÕU_U×Ùf3 ÿØ,¢³@$j–l/èl«ï/~]ÀçEëû»‡‹Ÿoì"‘/fOv»Ïˆâlö°üêùDÍŒRêmòÕœ)¬ç ®¨w“n´{ºÓOº˜³ÐÓYK‚õ|9ÿöðËÅõC#q)á¹^|ýFgKÀ÷Ë%" gÏðL ‹¢ÙöBrÏ›‹û‹ÿ5<ܺ€õ!Õ§uã‚P_YÝ>Ï#îÅEßèr.¥DޱþjÅp~èO¤q¿‘ôçêX£°« )5Å”(&IDƒ–¨$ÏÊÊL²Ž #õç&[¤ L Á£Tô€ùÊžR ˜Y.Vøý® i§ vØ¡àIº(¶åêX4g”DÌŸ°IM1!3A$m ü .ìÞ·þ„ù|懊Hå d>x“±ÖàqI(8ã¢ÅÀ‘|ßêÏ#BÃF†Ás_ÅÕ¾t‡TÌEàéj_dî}«Ë2ž3ê­Ìº$£ I$ÄÍ?}`0)¾äDPQgÂ0\é*†Ø_:¸WºLŠtW¥yæ\­}% LÈÈ2yXëÒä‡yE¾¯æÌK3ˆ;»nw½ÕYå^ÍÇ5ÒîâWó'óK½ªþtóááÞ-}¹¼wKeg˸XÖ”1î]êxSºÅç´Z»E“Ò”ÉÕz›&îk’çÅ2Íâ Mo”`ŒDJÕJ˜,ø Ä~\!€x¦ÝÛPëj/K÷^åî÷;~ß—Æjæé)/ÌCÒ¶»}•f+·ÞkÏÆòb³¬w4øW‘oÝSšUºØêeûéãíme|Ì-^æ4ÿ ŠÆîq‡éÃ>WEœ•O90-¶±=j»lÎÃü¦Ûx…µ`—¾óè f ƒ`Í~r«pBîáGšà¾vWQÆd «ò)‹N¤"““[”½´Ðb„Iè…TÔ ë” NUWt/ͤTÆñ#¿#Úè,‚MüLUkêiÉG,Qé’¿Œ*(á´ÒH3-: ÷ÃŽèV„[—ZãÉÛȵ×ò}“’cêø":¢‹ÑnîZ„N:`%>wàmaSêþ YëäÿxoÓ–Ýzˆø/Uóhãta€Î,ÿ˜sÐ`³·á;â·æÙæÕ‘X±6³/Ý'› ÌCwsˆ¹Ë|q!¼ßàŽB—ûMUcrĦŽç±K$f}—§’Ø|õ’h›£Ë”Ö„cs&e¼Å§´¬­¾Ç‡·M½+ =ÚU˜¶Ðµ„.ÂQ½£Ý³J’}'¯'Oæ£Í¯ÒÙ'.À1*›—……m¾¬R#Õ%—Ì-aêXE`%vòš´.]¡q$%™Š…å ÞLYý4,“|g0½éj]9š,¯ Û™°ûÏ|!9³Ù:[bê¦8C§³ÝÛvŽK8•*-Ÿ^Ý‹;PdnK½q:–î#¬¥…{Œ—úÏ}£ÜñN·âX‡„·Ý¾Øå%tòÌûon,ø¬v,æ’z&“ ¢M^î d£Ÿ Ñ“Nª–Õ7(Õ˜Èüšâ›fz.óý÷z¢Ø:I˦΀íÑPæ :G[‰Ü›;{ôÒ¥Þšî·D—þþŠÎªë¦—! &šçušàluº0/KëÒ°ñ©ÌŸ*t¹gfÕtN;§ë òOÑ* ó@z¯;seÔJlŠŠë~ꨅ²ÜšNL¿&wbGý~Î$u`Øq´=ñ2l;J®lù·ŸÞ_ßÝ=Þÿvyy}ß›((#¡˜Ô;"S.Œ b56½3= iZØ>þv{ûøë§®ïz… BñY‹u_¾ ôÎC(B;ßN"DšÂw&bß^=ÂëãÝõÍãçyè{oo{`lÖ’Ò‡"#"ýè<´¼™Ÿ@‹4hï9\莹ŷïæáæ¢ÀÂc'ðÁ$ÏB9ið}1)ðÓÝíUÎ,¾ÿI×Ñô@Íi<‹Mz˜nöYrÈ4Wy“XLµË-¢É-®}`!öÉîÙ”=ÌÓ6íuÍ!%Ã{…¤øoú¹‘ÃD¤"ed%õ¸aà×̲—>'0>Í™Œ®à’°¹ 9›Ø$PŽ*X—W}Æ3œ!%n@(IÔ˜µ¾È°ÜÇYJŸp^ï mSþ0Ûa@–T5L˜²«žàLÑ1ÏzИ-$T{(àtQakë÷yœñpE…ÓJ·ýÇbÜšyuÓ0œ—FPä÷çþ°Ñ¿wÁòÈ`¦þd=ŒÕOIŒ¸ÕïW×J@Ë š”£5´/wŸŸ›3:Ò8‰’ž8(—';ˆLã!7‰izˆ:Ê 8)(êmD`Kˆ4h÷ë‰p£³Uµ7‹§N™å@4n¤9Ó,eß,&™q1izˆºfqM[QÏ,0¤K=n%N™å@4n¤9×,uaè†5ƒÑ%œ…4=PÝІ¦,Òõ·-xUtÊ2¢qË Í™–ðEOBš ®¿Pè颠CŒV0HyåOuÝs¿÷Üï>K«rÔ’‘O|ušQ;"‰Aý¯6t.Á§Ñ É1šã‹ME´…ævº–×63ý9f3WÅУ¨ÁÆÜÔ æfŸöGL{Sí‡`ѨÝ#ø$ d}Qí¤ÕÞëL·.4Woêß§/7¤ûaÑÊßêÞ``ÃæÉ^ÐÔÁ÷åòþ òán%¡¹¨h_š\å/¯+[Çü™µož¿(/š endstream endobj 2780 0 obj << /Type /Page /Contents 2781 0 R /Resources 2779 0 R /MediaBox [0 0 595.276 841.89] /Parent 2751 0 R /Annots [ 2784 0 R 2785 0 R 2786 0 R ] >> endobj 2784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 697.247 211.912 708.151] /Subtype /Link /A << /S /GoTo /D (log_8h_8b8e0a071c9539f4be52eaf789f385ea) >> >> endobj 2785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 573.266 124.201 584.17] /Subtype /Link /A << /S /GoTo /D (log_8h_239e115e583af4e67e60de4a4f95f09e) >> >> endobj 2786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 573.266 176.774 584.17] /Subtype /Link /A << /S /GoTo /D (log_8h_c80fd753e48873cdbd9a332609de150a) >> >> endobj 2782 0 obj << /D [2780 0 R /XYZ 90 757.935 null] >> endobj 2783 0 obj << /D [2780 0 R /XYZ 90 716.221 null] >> endobj 290 0 obj << /D [2780 0 R /XYZ 90 659.927 null] >> endobj 294 0 obj << /D [2780 0 R /XYZ 90 453.329 null] >> endobj 2771 0 obj << /D [2780 0 R /XYZ 90 429.114 null] >> endobj 2787 0 obj << /D [2780 0 R /XYZ 90 429.114 null] >> endobj 2772 0 obj << /D [2780 0 R /XYZ 107.713 369.945 null] >> endobj 2773 0 obj << /D [2780 0 R /XYZ 107.713 354.005 null] >> endobj 2774 0 obj << /D [2780 0 R /XYZ 107.713 338.065 null] >> endobj 2775 0 obj << /D [2780 0 R /XYZ 107.713 322.125 null] >> endobj 2776 0 obj << /D [2780 0 R /XYZ 107.713 306.184 null] >> endobj 298 0 obj << /D [2780 0 R /XYZ 90 290.399 null] >> endobj 2777 0 obj << /D [2780 0 R /XYZ 90 267.146 null] >> endobj 2788 0 obj << /D [2780 0 R /XYZ 90 267.146 null] >> endobj 2779 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F48 2408 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2792 0 obj << /Length 1908 /Filter /FlateDecode >> stream xÚÅYMÛ6½ûW¨i63ü”ÄÜÚ&)Rh›]´‡4(Y»ëÀ–RInÒß¡8’¨/Êi 9¬c?ñÍ<g†#PøÇMƒHED ¤ç îáÛ6 ÝÃÏ{ç÷ïn7O^xŠèP·wÍã!#гàöðf’p·g”Òí‡ò=yØí¹¢ÛÇSf?½Îî²rÇâm–§ð•  Cµ{{ûãæùmÇŠ6)Î?7oÞÒà¶ý¸¡Dè8øŸ)aZçä?Ÿ67›_º5ì÷¾ŸsK2Jx{!IÍBå$Üç‚аwŸÉÞ}F#1´£ÁWÆ'/dìÀ8‘Jºæ÷ªNê±Ç ìP!®©Aˆ™ĹÃ$4QR ºÂKew ÌêK™ÛÏí¸Ú&§ nNÕ¤ÞÞ¥ý2KÒ‡ÍÔ6Këî—SvÎòúéÄ®I!4L‡ó® fï€f]‰´è2®üÎù$Z˜„Ç~> ñÓÉB‚ èèSRF·7—4ÍªŠŒ©cE(ÓA*•YfDì{ÈäÅšP*ƒ0$ŠyÃûÚì’Ñ;¯¦úb\zH»Ð±ÜÅÈEÈUq2c ."5‰ùBØ"fÖpFXØ/´¸×\ˆj/Ÿ…¬ÐÙøséÖöºóU¢U¸âkZö1k¾úøZ_½tè«CÇÑ×—ùNvû{<Øí>÷û´(ÊÃ1Oê¬ HÜÙŽm›¼= bÓÑ{Ç[2¢!ÚÊ B¬Ǽ†e47dÿd?ÿN=—wP-¦”…Ì#L¡iùWršòrJ$IJÅ<ÞíCª¦Éj&9*ÀlHgã$ÔêÚÅâ6¹/,Æìs-«>MWŠI ›8X(-ò å\’98>6o"ƒ´×­üö)Œ¶o‘aiYH™ŠµÖÎ+‰ŽÙü’³ÞCà@+ö "G©A½™+!ÆæB15¿ùy^…\¶n›PkVr‡ÐlË„`³Hãu™ä”ÂsÕŒ}y¬ÎÇÔ~÷q稀“Qžðüôg« û\ÎÊsv8vÇÊ><÷äR©Q,&š*o­q0KÅZ+Ð7j|þÙ‘”É9ó–ëÍ órá›0×3µcÃ7+=Swà‡…Ÿ’Pz%AÈÄžaáW#l`Ï«Å8N€°óme‚g&P%*nÉ÷¯wJmÝ1¡¶ß¾B¯i†$­xëõ1™F+Œ.\YÜ0 ¹D„þÁ-ob,£¤+{ÕåÓá^qCwå5 1£†»‘X9s{ÓS–ß׋ÊÈr]¸¢ŒZT¦Å\©L5¯ ´p©ñ…˜‰QCeBÂ"=0j¢LU—ÇC¶¬LÄ×+"´¬ b®UæÓÜ5‚rá·1‹†× )O ,úlY”".~Yzв,ˆ¹R–Ùx|Å&ÄLlÆ 'jkÓ«™ çT¥ÇXÈL#h?Þ¼´/ù±®–õ3·R¥WôëAËú!æš{öLH)·<¿5ˆ™X3 )J öÖ¼¼¾¸ƒz’Ÿ'#t‡ášŠfYD ùÒY…ÏšvT1²fnRáXóÿ *$È÷nÇ,Ž)²2¥ð‘áÂÇ…3 ‡kõÚŠ. ×?ûÝt@‹~¶˜G½|è©—]ué˜ïÚ: ’â®ëÙÓ¥fZ(JDìo¦ÌR3-˜H]=¹ñÑvçxÌ;7»i1_6¼pXeìŸgô˜ÅqBV¦>2fx¹0˜{®kÇ6ºû±7{вŸˆYsÔÇ×zê¥CWºÿ|l3+”‰@¹&TZ 1kBùøZ¡¼t(”C'Q¨Ÿò6`-8å(?ÔãrmT4÷yWÈN6ÝÅ Õ0œD}ÖÛ­ÉÕ~¨þ×9§Ë!3Ó0º}ô1­@-òðhª*Åm·CúgI`ÏX——´©6ÀXͼCcLAƒ¯ßë9¿Ï”˜jZÜ­±xˆ)<[çãj1~B&¡ÎGªñpÚBã(äÒüPÞ#âõ µh?ùhIC[ü¡ý}Ÿåc…•ŸYyþ÷lö endstream endobj 2791 0 obj << /Type /Page /Contents 2792 0 R /Resources 2790 0 R /MediaBox [0 0 595.276 841.89] /Parent 2751 0 R /Annots [ 2797 0 R ] >> endobj 2797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 112.156 167.648 123.06] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2793 0 obj << /D [2791 0 R /XYZ 90 757.935 null] >> endobj 2778 0 obj << /D [2791 0 R /XYZ 90 622.014 null] >> endobj 2794 0 obj << /D [2791 0 R /XYZ 90 607.476 null] >> endobj 302 0 obj << /D [2791 0 R /XYZ 90 286.046 null] >> endobj 2789 0 obj << /D [2791 0 R /XYZ 90 263.735 null] >> endobj 2795 0 obj << /D [2791 0 R /XYZ 90 263.735 null] >> endobj 1037 0 obj << /D [2791 0 R /XYZ 374.54 228.605 null] >> endobj 306 0 obj << /D [2791 0 R /XYZ 90 211.91 null] >> endobj 2796 0 obj << /D [2791 0 R /XYZ 90 131.094 null] >> endobj 2790 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2800 0 obj << /Length 2365 /Filter /FlateDecode >> stream xÚµ[moÛ¶þž_aà~±™ã»¨ûЗ´h‘ÛöÆÙV`‚,Q2‰Óë8¸í†ûßw(Z”dÊsƒ¢ˆb?:Ï9äǤ¨ˆ ‡bRòIa V*3¹¼;â“øôõ‘Àoçðõ<úþùÙÑ·¯ÜÅJ«&g×õíV0#Åäìêç©ev6œóé§õì÷Ù\>}µ¼­š«ÓêºZÏ„›V«KøHñÖÎ~={{t|¶eÅœŒ²žó¿G?ÿÊ'WÛÛ#ÎTé&ÿƒkÎDYNTx}{´8úÏ6Fó¹‚Ïw•e„Ê×%ãÖÔu½¬~á\®ª‡]©rÎtºñ·5…”-…à–iåð~Ïò‹”¦O 8Ü Á•ЬäEDõ¯+¬hÀ§-+dóù×7øýiÌŒXйÎ3øñÝ€Ó‚nŒ¤jDÅdK&´Š˜6fÁ„•ë ÓÆî¢4QÀåÎ4¤f$5Ô‰h9qˆ­‘%ãnËá39›•rz¿¹¸m†Áêñî7õõýuóóÓz¦Íôþêr³¼_ág0XÌôâ®Úøaç,YQ¡™†¡±oE ’•о)[?Ƶ%u09%G±ÒZ& QÍ1aVÏÖ¼¢Iþ^ÈZÕ§o?ÊÅù³Ó׋~Ú–CÛÒukæ|7@eZ KHÍrIê!>ëW *Jññmz‰ú»ª.o/ÖËÕMøu—H¯W±d¡Aê÷›/Ÿ*B®Ê0 ƒõ ¹Š´\¥d¶”´\“•k‹+Eäæå³Ž+Åß ‰r]È´\ɺ¿’\A…v¤\²¿\ljÕx±ÂšeJ ֔Ј®|*Á§˜SŽlÀäÅJ –$DÁÆ„YÁvXó‚%ù{!Q°'ÇÃ…ƒ“LM—ŒšÒið#ÓmcnøÃòÏêþº¾Ú¬/7ƒÁ¢J$c«h2•~HŸ ,¦?­ïä°(r‚îð€¡){°zñm[þrµñŸøÿÉ!b˜ÂnH¹A€ø \w µù}(O¸ÐM.-ODÓ©ôB¦;H”°ƒ(©†™#„&, SªKˆr þÄu—nïQ‚9;  × :Q+WË á}éýá×X[ vãí}ˆÉz_‹ð>Š0x_D˜÷¾˜u„÷Qü½(®åjy^­×w7€íŽ¿—¨\ÂÎ@„>J›W°_ÑtzÔK/•›ö*é^Ñœqhðƒ×FA U’îfG³¿*¦ÕåŦºJk_Ôw>Õ´ò†Ühé#&+ý6!}Š0H?"ÌK?f!}Š¿rë«›¤ôaC%UùXéCwqI§@½ô颠{¤oŒÉJß’Òw“9Ô3’¡¤ {H_;Τ´{§¥0«Œöµ-˜, ©ý€Éi?Š•Ö>IˆÚ ³Úï°æµOò÷B¢¸ªœö‰Ê÷Ô>•^õÒËhŸì•¯¦}#aq$Hí#díkÁT!Ó~zÉ£¥cš~<¬ò·‘álA÷-[^öåÕäÝ€(ªÏò!©yͤDÍ^ò#´°ô¥R ˜nj©¼ gÚd_hÅ”4‡¯r´€XA>x}äÎ%¸IñTËåJf,ýô8`r‚b¥O¢äc¬æ;¬yÑ“ü½ÁêåçŒì‰Ê÷Ó=•]õ²Ë(Ÿì”¯%}Uhf%ùl;@ö¾²ŠY«H« °ë&¦móLåxõxW­/üÈ]‰ŠÃþž«ô0j¿O#Äd‡ÁÕ#Š0 £ˆ°‚ú„ ¤¡t—0=‚MS÷Bv5z¾+ )8SÖ‘e Éퟎ;Ómç¿5cÛÈÀ6[3¢ç<Ù܃ÏDOOÏ?¼xq¼X >9ðtÙMbðô©ÁÔ’VÀÖ!¦þ~6/Ÿòo†Dýt#Khš¿2*ýÝ''çÞ¿ywv|ÚÏDiǬ!ËGÉ®ŒÁ vU/Õ+§YŽ4®ú€¦ù{!£êŸÏ”™>{yþÁŸ.?;}öï~:Ú¦Œ#Û `È$4|gÁØv4‚ü&©~Ø?–ÜV O«1»áÍÇá(Oì$2 †¦/Áp`Óß<{Uéò-ü´ãËoáéò³£üŸüëïOO^¯`Zˆn:çk0dRÀ%ìã$°tóãÿÍCæxœû‰Ùß5W’‰²Ù9¾ÂC¸]s 7a‘è+?Fß'çÀ€ÉÍ×v$ C¿D„ø¬½Ã' V ×åK+Ñ4s/dû˜x¸‚írK‹šÒV–ÝbÓc¢€a…6²fDÓ ôBc°¶Ë”Œ¡ÐñÄÍbzsµ=lií‘•NâQ dD’ù³aXGR«àiVÁ×·xPt c®î­p„~.vœœIXÁËnÆé™Ñd~ýD˜p`CJ4×<`hJ£a½Ö¥lÚ ¹#ðgÁ°æyªÍ°(ƒ¬H ˜œƒE±ÒF¢ƒÅ„„ƒuøòF2÷B¢®×Õp}è·Pdµˆ¡9 ôŸé5oÚœo5¶hDÓ ôBÀ¿…#YsÀ (;&=ì—øÝšS.&Fº4¤˜Øöþ¤‡5ˆÆÂÆ›–(-ã…í$˜î2“ét&amè4Ñ4ó¡ø¤TLú‘ÝòåìJû¼x2»‚…[ƬjDÖªB¨ÒTÁ¦¶T”IµL#,*ÍÙ ×F݉3‹(ÌeF›¸-Á—êùºÑzâõ#.#Ĩ’–È¢ŽÐºõ¡fºä€è‘uŒI)æåU|¨+ùmÌ!ouG’¾„z ¶ö*¬»§y‘ðq³\U#VVþ% .ºùÒïepAg×Iù”cʯÁÒ5šRù¼.eΪ¼c”ÅS½HTªz Q^…œYµ‘ÒnE±¡]El„_Ådyâh»Û3ä”eQeÏ¢øÐ´âF%VSÜRŒ+¶Á’ÜpôVÐrG• }ºî*Š×»RÿáV¤jüÆr§sr%¬ùç÷Ô¼ÿîX!ÊøH†W¡ñHÙ}Н«•?¨®ðEJ|1ºþ{•G´²÷á=C|Ì#Êï¸üNñæ7 ZÞL¶/gÿôbq2Ó7ÏñVæ˜l.ûÒü|yÿùËMµê·Žÿˬaóü ð†Ü endstream endobj 2799 0 obj << /Type /Page /Contents 2800 0 R /Resources 2798 0 R /MediaBox [0 0 595.276 841.89] /Parent 2751 0 R /Annots [ 2803 0 R 2804 0 R 2805 0 R 2806 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 2820 0 R 2821 0 R 2822 0 R 2823 0 R 2824 0 R 2825 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 2835 0 R 2836 0 R 2837 0 R ] >> endobj 2803 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 699.305 167.649 708.151] /Subtype /Link /A << /S /GoTo /D (prj_8h_c8dfb42cf72db0c4bc690d030f75c662) >> >> endobj 2804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 659.369 213.048 669.297] /Subtype /Link /A << /S /GoTo /D (prj_8h_37ad31c5d2926862d211db0d14f401f0) >> >> endobj 2805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 620.515 213.048 630.443] /Subtype /Link /A << /S /GoTo /D (prj_8h_acc46318c778bd844e30d6997394cc8a) >> >> endobj 2806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 580.684 183.15 591.588] /Subtype /Link /A << /S /GoTo /D (prj_8h_2cdabd9dfe78fe18b9e6597881d8ed92) >> >> endobj 2807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.701 580.684 267.812 591.588] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 566.064 194.086 575.969] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 541.83 201.959 552.734] /Subtype /Link /A << /S /GoTo /D (prj_8h_7f080405538ea2ddd2882c991e25bd2f) >> >> endobj 2810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.457 541.83 248.165 552.734] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 502.976 202.507 513.88] /Subtype /Link /A << /S /GoTo /D (prj_8h_f862254dceec64a987fdaabc40e4963d) >> >> endobj 2812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.005 502.976 248.713 513.88] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 464.122 202.507 475.025] /Subtype /Link /A << /S /GoTo /D (prj_8h_94f59295c312536ce66482b3d9bebec4) >> >> endobj 2814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.005 464.122 248.713 475.025] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 425.267 205.277 436.171] /Subtype /Link /A << /S /GoTo /D (prj_8h_3672afec3db0f850d67404814ebdbc64) >> >> endobj 2816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.775 425.267 251.483 436.171] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 386.413 205.277 397.317] /Subtype /Link /A << /S /GoTo /D (prj_8h_df9cca0265038851129d1966017cd525) >> >> endobj 2818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.775 386.413 251.483 397.317] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 2820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 305.65 211.364 316.554] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305) >> >> endobj 2821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 290.427 199.509 300.614] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d05743056f3a73d3c0a7dc7d15ceb00e00714bea) >> >> endobj 2822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.632 290.427 349.646 300.614] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d057430560d6a804ddfa2f2d0f25f397d653695b) >> >> endobj 2823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.77 290.427 486.355 300.614] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d05743056a0f63e2f52f594637a12db14e5814e6) >> >> endobj 2824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 278.472 198.034 288.659] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d0574305d33460ba0b865ff7580e6d2cebd92c74) >> >> endobj 2825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 262.188 218.408 272.719] /Subtype /Link /A << /S /GoTo /D (prj_8h_2ac22403e59a9e8d2b2f53f6d05743050d15cd17822bea2f7fc0209a180cc998) >> >> endobj 2827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 206.955 150.503 217.859] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 2828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.945 206.955 208.056 217.859] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 192.334 253.613 202.24] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 168.101 155.464 179.005] /Subtype /Link /A << /S /GoTo /D (prj_8h_50db1538981df162709b81be0b2961ab) >> >> endobj 2831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.907 168.101 213.017 179.005] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 153.48 221.98 163.385] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 129.247 151.051 140.15] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 2834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.015 129.247 232.125 140.15] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 114.626 229.306 124.531] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 90.392 151.05 101.296] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 2837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 90.392 208.604 101.296] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2801 0 obj << /D [2799 0 R /XYZ 90 757.935 null] >> endobj 2802 0 obj << /D [2799 0 R /XYZ 90 716.221 null] >> endobj 2819 0 obj << /D [2799 0 R /XYZ 90 324.624 null] >> endobj 2826 0 obj << /D [2799 0 R /XYZ 90 225.929 null] >> endobj 2798 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2852 0 obj << /Length 2358 /Filter /FlateDecode >> stream xÚÝ\]sG}çWð´û»{òæd7®¸¶vKU›Ú$•be,‘’@ hcû×çÓÍô4Ì™*N¹ÊBpçžîÛ÷œéC#ÄÓ?1,øÐÇ e†7>¼¥gß DxuB/O’׿¾¼úVÑU¬°jxýa{¹ÌH1¼~ÿÓÈ2;žÎùèqõ»O¤á£oç÷³êѻهÙj,üh¶¸¡§wiÝø—ë·ƒ¿_ïPØŒ²%æÿ?ý‡ïiloœ©Â§Çœ‰¢> ´TáñýàjðÃ.Gõ¼¢çMKsüòÉÒÌ»C!ÂÒœ=¸i¦õðO6Ä`HãwºYÝþ›fc³Ú/y³ 3š.ÖÄʇiÙÎ}H*¬aÎüEXj,³¾8—0Z1§FÓmŠË*oŒéRÞ$W»òBÀ ¼) PÞ^·òBä,ePÞÕœ 1²<é“¶YÝþ>FAª`NPœ:A«ä„ ø˜/ž¦š3!ÏvF§©?…Ãgt1¦“¦u.@Siš"š¦x=hг”qƒtØÈliŠ&»£)‚Œ4M«ÛßÈhZX©N8£K´Ò4„\Âȼ,O}O_ÞÉh–îlGŽÊ{¦$>rŒ1]DMrµ¢¦€€¨ ¼n¢Bä,e‰¼¡Î;äd­ žk‚b–Ö¥Q[àc3…é;ã¥D>Æ3'œrŒÙƒlúje®³9Ÿhd”SL¹Ž^“m‚Cžçe#ë63pYÊn;ÊRû M yœ£¹],–‹xZ}X^uùÞxˆ¿~ýÏK‰«²’iq¶so¥ FÛe,®!¦S\ë\@\`׉kŠ×C\r–2ˆëA³¢¨êx®U4T[Ù,m§¢hu<á¨7IЪ(!äNåÅè÷âDIÅ ­Ø¹¶6‚3+ð‘gŒéd_ °Fö%€ˆ})^ö!ä,eÜÚò ûÐ\#û``_ZÚþD†Y{Âyg’ }1ääÏK?é5sülg™Ò !|–cºè—äj§ ôKýxÝôƒÈYÊju{ÐYT„“ 1’H*¸jVz ®]ß9‡h<€,%öt·‚sŽ1{MoA…16›ó‰ÞB’’•±;^‹ê­ZBžç-#ëöpYÊnoÊR{ ¼E yäiÉ&üÊòv5}¼Ã2kÜö´á-œë7—ÒYm˜7æ\&C*z+¬³!¦Sgë\@g`ÔÙélŠ×Cgr–2èl‹ÉP^âɆ ihalV·¿Ï‚FlO—Ýõ­ÚRE\â8äKà!ýäül'“¢ 8O&cL“\í<„€‡) àa¯›‡9K÷;‡íFÉ18ÙÈCxبnÇ!\AÛ¥N&“mLŒ!9òx6}_þ7aiS§ÏvþX¶„(ðùcŒé$c F2&€ˆŒ)^2"ä,å¶=æ `>àd£ù€Á|4ªÛi>zÎ9š8€,e·ù@sÞ™òùhÎùDó!4íËÍ '±I‚VY !Ï3‘u›8Ž,e·ùe©Í„ æ#…<Î|,W›»¨±¯ÖŸtÁz¾Fj[H¦¹jûÝ¥Þé)W[g;C”Di|†c:ŶÎÄF±M‘ئx=Ä!g)ƒØ'»Ûù ȸóI«Ûß”jPÅ g§I‚V‰ !0!_  ¾åıtT¼íóÄœZCT_äpÜ·qT®[žåé׈Шœ_#b fŒ®ÿ yº™½¯j—ìz\ÈÑSø8Í¿¢®êê‡(¾âò+Å«ß$"¬óXRåÂZÿû›«ŒÅ軯åÌ3Y=üï§êçß–?ÝÎy…Pq€Iyþìíë endstream endobj 2851 0 obj << /Type /Page /Contents 2852 0 R /Resources 2850 0 R /MediaBox [0 0 595.276 841.89] /Parent 2751 0 R /Annots [ 2854 0 R 2855 0 R 2856 0 R 2857 0 R 2858 0 R 2859 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 ] >> endobj 2854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.02 720.235 260.921 730.141] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.002 153.82 706.906] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 2856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.148 153.82 668.052] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 2857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.293 153.81 629.197] /Subtype /Link /A << /S /GoTo /D (prj_8h_bf6696d3455c684cb44d06da7885ce94) >> >> endobj 2858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.253 618.293 211.364 629.197] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2859 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 2860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 579.439 156.58 590.343] /Subtype /Link /A << /S /GoTo /D (prj_8h_8ebb4c79b635cef463b4e7242ff23c25) >> >> endobj 2861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 540.585 156.58 551.489] /Subtype /Link /A << /S /GoTo /D (prj_8h_bc26dfb2d0b0bee71f6e4541977d237f) >> >> endobj 2862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 501.73 153.262 512.634] /Subtype /Link /A << /S /GoTo /D (prj_8h_faafab5c440384667d7af444b7aca750) >> >> endobj 2863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.705 501.73 210.816 512.634] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2864 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 2865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 462.876 156.032 473.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_2fe67a5ecf17729881efa24c83482611) >> >> endobj 2866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 424.022 156.032 434.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_70b750ec65eb4a277057200c7fbb251f) >> >> endobj 2867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 385.168 152.156 396.071] /Subtype /Link /A << /S /GoTo /D (prj_8h_34d303d7ae44a6aca43c1a81bfaac10f) >> >> endobj 2868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.599 385.168 209.71 396.071] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2869 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 2870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.687 154.926 357.217] /Subtype /Link /A << /S /GoTo /D (prj_8h_cd4f54c072b6219242daeb6d4b9a74cb) >> >> endobj 2871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.833 154.926 318.363] /Subtype /Link /A << /S /GoTo /D (prj_8h_9d3358bed907342e3309e54bd2ab89da) >> >> endobj 2872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 268.605 151.608 279.509] /Subtype /Link /A << /S /GoTo /D (prj_8h_66b51f10624b6c17a84b5b54058dd72b) >> >> endobj 2873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.051 268.605 209.162 279.509] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2874 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 2875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 229.75 154.378 240.654] /Subtype /Link /A << /S /GoTo /D (prj_8h_88c15d0b6f789cbbd7c5d323ef131360) >> >> endobj 2876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 190.896 154.378 201.8] /Subtype /Link /A << /S /GoTo /D (prj_8h_b46a0a668f28939626287d048153863f) >> >> endobj 2877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 152.042 151.608 162.946] /Subtype /Link /A << /S /GoTo /D (prj_8h_b6ce2bb75a87b1679d05f251227d2f1b) >> >> endobj 2878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.051 152.042 209.162 162.946] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2879 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 2880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 113.561 154.378 124.091] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb7881cd5d7b4b5e26281a512b8f62ac) >> >> endobj 2853 0 obj << /D [2851 0 R /XYZ 90 757.935 null] >> endobj 2850 0 obj << /Font << /F31 604 0 R /F42 818 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2899 0 obj << /Length 2495 /Filter /FlateDecode >> stream xÚÕ\]o7}ׯÐÛJbø=dßÒl$Xt³¶~£ÐÚJ¬À–UIîÆýõ½3CjÈÑðrä±ì.IJtçÞ;¦,ýÎU»Fá®ÆA®,ƒ2I,-"Àåjw€ÇáN1ã•/l>¹ˆ³ÙEãÈ­”%òv¹Úò/àJa8^¬‹Á!•‚ÃãîRE?œ½?ç?üöúìí9üÊ›]¦á2jg¼ Ÿi˜È<ì—„Â|™ ª±I>606]·ÃjöåÐÎ×׋Íòr~3ÛÝÍÞÌ7»Åv9_Õ~³]Mæ«íÇ»Íí|·¼sÏï.àzQÖQ‘ªÑšRÁ°Êüw›ÝõݧÍ|}½¼|µ}XÁ%Ûå¶¾¼lK}½¤Íõ–I wùù»ïºÖEøfÆ•*¹qëÍTªÉÝçÅeYIu^Û‚p%Žî¼pgœÍ’ŒÔF¡9ÊH“cd+ÍHÐ12Dáå‰"·R–ÈóÍåvq®a™ZëH«%‹{ o»ÛÜ_‚x;0ªoÅ.@+e=%?¯7·mp¼,¨@Kö1L6œA_¬lÕLEÍ“pp0 Ûóä3¦LZ[xS³W¦ AJ™|HE}˜•LܯëŸóƒ‘i :Æâ‘¥o–‹ÆÇÑJ™¾YÌ(˜ÅÚ2ó18¤)ˆÐ1¤›œ=ÔV¢¼Xþ¹X-w×ó›Wó?—·÷å£úÂÅï÷Ë«åv7_í0áe&ªòÂýúìM·òʬðG ¯‚ÌÉtW*R0‹ë®‹Éên“ Ñ] Ðënˆénˆ×Cw1äVJ§»_ø¶k%šÖZ‡à€ zËâÖÖË øyv¤…»ªˆM“ )6.¤Ú~åS.ƒ¶~M4l…«§d¦Î1³ÇšèXj2[Í×Sq`¨Ô87]L–›M.„› çfˆq3ÄëÁM ¹•Ò¯‰º]JÉM¬VÏM Ðq3lm‹¢`…άx<7ƒ)núç°(riX,,¹§"§Ò†ˆB äô19r¹ÒäD9C@„œ^žœ(r+e5cÖ«NÃ" ‚ãź²üA󸻈eÄ­ÉY–:@+%bYÍÞ`s[’¤[5´, º­ØË$H*• 9βD#Ë[t­”yË‚´¥±,(¤³,!äÓZ–õÝÍÃêîvéï#½?}øî¹ÖEJr¢ô0åM /L¬—Ý*"+º>"¹i(/¸{(Ln¤b›ÆŒÒ9¡ít(¥ åX.ש{Ùßž(莑ìI ),.äíÉs³ðØ…·)s2w"-#”ãîÄÇä¸äJ³t| FFxyN¢È­”~ÔåNjÖ¡Åzf¢Ž›QwûYF1À  Rìô!/iPž”žOþ±ž…áìdöD*N„Âí‰É²³É…°ôì 1v†x=؉!·RÖóeÞiO8á0Ðb] ©$LθXÌžp¢-ë[³‹ÆÐJ‰í¨X02­ÙÇ@Æö^kU<МHQ5@£üåI…ª޳%Á˜ò¦A”.oH’­hìæÌHöä»'þá¼>þ1Gå–Á{ŒÏÉí7¯ŸË“H®‰’ìdz ]\në¬Úî3!b‹ y­mÐ0© Àz(-'t:ÛéNTµhÁÊt!(^y†ˆé¨©ý а†^<^^‚)ñ!/»ò2Ü<Ò©Ð(£O¶Ç) ˜OÿÌÀÇäØäJÓtü ‚Fxy†¢È­”~-ÔåTj¢Åz’¢Ž¥Qwû;o”°œ@Ó&A’¦.ä…·RNÀÓ'·,BZ¬:M…&BHœ¦.&KÓ&BS ÐÓ4Ähâõ )†ÜJYmw.7]–/ÖÅàŠÁÂ<.±,\(xßš]4>€VJ̲„â÷×…F†æ>.8åXx?Ç"8#Ò «ýõI­ª#Ž3-á°ò®Dœ0ï[Ò iŒ †çœK€×¶.º'Tµè6›—›‡LE1AÔrC ë—4¯ß=—˜2Z¬?Í& ·ѵÖ&µÔÇä´4È•ÖRÐiiˆhi„—×R¹•Òii§-á„ÃÍD‹u18dùñŠ‹=™pë½åG«H %#>dˆ39$ 4G©ÿ êñ‚#Of7¸2Õ»)Ê=“å^“ áè¹bÜ ñzpCn¥ôë˜.»á¸‡»çé¹v·¿ÝàR‚»`7‚Iî¹!v£ƒ{V3űÜ39æ=½ÓçBVœÌBpN‰`¸…ð1Yê5¹êa€žz F½¯õ0äVÊù²œOëÄÁ,—£»V•‡™EÜaô`–V½ëvÑøZ)ñƒYE¡Ñš}Ìdû`×E«æ{œ*"5 DM‚¤¹ãÌD4²¼›@ÇÑJ™÷H[CB:GB>n7äòáf¹º ÖJëÅf».ÅoÊèäò¿úW|`i´ÿXèÍžk„YIå§Òßò¹´Äm‡Ééo+­¿( ÓßÑß/¯¿(r+e ¿‰k9^°‹ÁaaÙ#ˆ;ÜßzTŸUš` RªãCžaSäoCÑ#—HÕñfnOFQÉapøN¥ÉR´É…Pô 1Іx=(Š!·R†K¤î ‘Š¢XÁ{Šb°ž¢a‡û;«vÆ‹$)êBžcCäy8úä 0?‡pF(J%áÿv “¥h“ ¡(è)b ñzPCn¥¬& zv -ÖŸÝB!ÝÙ­¨»Ù³[=kög·Ð´RæÏna5ïÏnµ!ÏnÅô/Æ)Ø—æú”H¹ˆãÌK8¬¼wÁ'Ì;—tCã‚á9ßà=‘m9rçÙàÐ^oO@ÔPY¢ºP˜›¬þš™Ç}ûâ‘èo´¡˜¢…tßäÐË¡¾]¬›ùnqU7È¿Ý]L-ŸÜ»w©û["ëÌ~EùW‚Ö¿qʘ»cSU»»öý›óMÙäÝ×îRM®þ÷¡þùÏ»/Ÿ«vwíù ¬ä= endstream endobj 2898 0 obj << /Type /Page /Contents 2899 0 R /Resources 2897 0 R /MediaBox [0 0 595.276 841.89] /Parent 2930 0 R /Annots [ 2901 0 R 2902 0 R 2903 0 R 2904 0 R 2905 0 R 2906 0 R 2907 0 R 2908 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 ] >> endobj 2901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 720.286 154.378 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63) >> >> endobj 2902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 681.239 152.146 692.143] /Subtype /Link /A << /S /GoTo /D (prj_8h_c038f2474d5d58de157554cee74a9735) >> >> endobj 2903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.589 681.239 209.7 692.143] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 666.709 186.115 676.713] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 642.94 154.916 653.47] /Subtype /Link /A << /S /GoTo /D (prj_8h_666322bfe8c4b8e73f00afeb47283f97) >> >> endobj 2906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 604.266 154.916 614.797] /Subtype /Link /A << /S /GoTo /D (prj_8h_aba5ce89ae711728d8ba8105ac5fd599) >> >> endobj 2907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 565.22 154.368 576.124] /Subtype /Link /A << /S /GoTo /D (prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) >> >> endobj 2908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 565.22 211.921 576.124] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 550.689 186.115 560.693] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 526.546 157.138 537.45] /Subtype /Link /A << /S /GoTo /D (prj_8h_574e44daea81568a6d5e324a6f339d6f) >> >> endobj 2911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 487.873 157.138 498.777] /Subtype /Link /A << /S /GoTo /D (prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) >> >> endobj 2912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 449.2 153.252 460.104] /Subtype /Link /A << /S /GoTo /D (prj_8h_3229533df20718c0d5671cc9eb5316fe) >> >> endobj 2913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.695 449.2 210.806 460.104] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 434.67 186.115 444.674] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2915 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_849a1bbd679d0c193e8be96a8b9ed534) >> >> endobj 2916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 372.227 156.022 382.758] /Subtype /Link /A << /S /GoTo /D (prj_8h_dc4da028cde2d970e9e5e22adca22f37) >> >> endobj 2917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 333.181 150.492 344.085] /Subtype /Link /A << /S /GoTo /D (prj_8h_025adf8a63b5d4a8d2a4de804e0707be) >> >> endobj 2918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.935 333.181 208.046 344.085] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 318.651 186.115 328.654] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 294.881 153.262 305.411] /Subtype /Link /A << /S /GoTo /D (prj_8h_2c87fbf68277f03051d3eaae3db785e9) >> >> endobj 2921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 256.208 153.262 266.738] /Subtype /Link /A << /S /GoTo /D (prj_8h_75b6b1cb0a748e9b5d3a4cd31129ace6) >> >> endobj 2922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 217.161 154.219 228.065] /Subtype /Link /A << /S /GoTo /D (prj_8h_36cf447dee9f2e90e42d43d7adc5a0a1) >> >> endobj 2923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.662 217.161 211.772 228.065] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 202.631 186.115 212.635] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 178.488 156.989 189.392] /Subtype /Link /A << /S /GoTo /D (prj_8h_ffdbf993ce959fce2c148c07cd0f2c0c) >> >> endobj 2926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 139.815 156.989 150.719] /Subtype /Link /A << /S /GoTo /D (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346) >> >> endobj 2927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 101.142 153.252 112.046] /Subtype /Link /A << /S /GoTo /D (prj_8h_68ce41ad199c3385bed7e7d4ded2bd8a) >> >> endobj 2928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.695 101.142 210.806 112.046] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 86.612 186.115 96.616] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2900 0 obj << /D [2898 0 R /XYZ 90 757.935 null] >> endobj 2897 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2950 0 obj << /Length 2371 /Filter /FlateDecode >> stream xÚÕ\]oÛÆ}ׯÐ[¥íÝï¾¥¹IРA[ÛÀ-ЪÍ$dÉ•4ù÷Š»ârEÎR¦) ðƒey8ggÈs¼gwe6¥ðŦŽN2Ä 5½}˜Ðéx÷Í„ùß.à׋è÷?ÜLþóZÀUÄi1½y¸\3¢8›ÞÜý>ÓDÏŒR:{Ü~"ç ®èìõýª¨^]ï‹íœÙY±¾…·5©ÝüÏ›·“W7GT?&%t‰ù÷ä÷?éôÆövB‰pvú¼¦„97}˜H.üëÕäzòë1Gõ¾€÷ÛÊ’T+ìt!$±¦-„i¨ÙÀ˶Ëá* ™Œ•w6ŽÁȤ<6ŽóºqŒj"a!¦ìÞœ«´ŒÂ%\M£\'X!d’8j€÷ëý ‡›Íl¯üÅöƒ¸Š‘}4Žœ¤,‘o‹å¾;WŠP®ñb} Y>>L7»Kýåêíoüúÿ/®Þ\Ãì´Ù†0ͧÚ)ÏϹãþ¹¨¯?ŒLò©…‘骎PÊq½\n÷Åî~¹^ì7‹ÝãÇb{»\U„Ù[Ôl¹Þ½ßl–ûûͺz~ô‹²ˆ)k ­ˆQ0¦C§¿®î×wQÎâïÏáå²"ã²ú©lP•LÒ:™µ„«ìå«mpÐcºÚ,jåÆGªò–脬t2Ò‡”C»,,)yäç0Jjbä·ÎI©ˆ4v'y7''Jiœ”>&ËÊ:BK 0ð2Ĉãõ`&†œ¤<<0Ëí®8WŒ°L­U¨Ñ’5{ ÏÝn¿ý|{ jaºgUߊ}4>€$eõH~zÜ>¤àœZb¨@K1'@ˆ#$gÐ'“š©¨xËŽ<ù„Ê3ÐÈ!ó†:A§LùƒLÁ#qP‰Ï^;NF¦)R›#ë¾Y>G’²ûf1«ckË"ÄàÖ¡›þáì!½ÒuºÕrï½Pjû‡P¬À„VQbìQh_\µ ­pY¥µg*-ÈÌ€ÆRZå1š£JbrJåêVZÐ+m ˆ(m/¯´(r’Ò+m«1P^k‚–s ÖlmW¢Œ%Vº§ËK” K^BÈŒÉ8\|öIÒ†X7<üÚâLô1Y&Ö¹&b€‰ ÆÄ¯1ä$e˜ó´ù‘ЉX­‰ gbÜÚþ~DIJ¨R˜X'èd¢¹„ùV¨XvÆé±ÖT9hƒ/ „˜,ë\1ÀÀÅãbŒ×ƒ‹r’²D~(Úý‡<øA´XƒCK6º‹8h }köÑø’”ˆ‡ˆÂ“ŽÕbN ›DchÖ<Ð(Ê×l€0Õ :…ɇœç@#Ë;tIʼAÚR;Ò;2u '(†û÷®Úø¸]î7ÛïæÂÌv˜ÀJC” žáÝ«‹ùé(”¥°Ò@-C6Ää6ÊÕ­°( WØQØ^^aQä$¥WØVßa—/ÖÇàÊ“v·¿õš©ÍÓu%JÐ¥+!dˆõ8¥‰*×w¾1*Fµ£‘PX¢¬ÁIèc²$¬s!$Ä #@Œ„1^bÈIÊ0Íi³ž„X±Gb„qwû»ÉÑfÀòb” “„>dˆëh!¡&™IøìVC‰ “cqP8xœ@9brŒrusôŒ6ðòD‘“”‡iU9 n3Ò‰{ˆÀÁ¹ZÇš½í6åb˜Ð}+öÑø’”ØV‡"NᇘȆѠÐ)“š»Œïg4„-Î X‹ŒtiQ9Ïh4F–7è8’”y£´¥6(¤71äÓ¶:®Aœ7ëÅëÕòa·/Š;LdM¹ v¼ðõO—šésX©Kdáö9çp‘õ1Y‘­s!"‹‘1‘ñzˆ,†œ¤<Šl«ß`„¼Ú*‡,w”˧8în·!¤þX^tŠ‹¹ÀFÇó3ñÙ§;B€6ñÑVVçþVáLô1Y&Ö¹&b€‰ ÆÄ¯1ä$e=Ýi3±j1ÈÀĸ»ý-‡€ïÜ XOŒt2ч\b£ãl*Úgø£x&¹ÓDˆÑþ*r+ˆdø\ˆÉq1ÊÕÍEÐs1D¸ØÀËsENRnPç)+C-^¬Á!•<TotÙåà ô¢oÍ>@’3î°ÎÕbN ÓsVFñ¤æ»\ƒ£qV#£]ªBÎ3‘åÍ:Ž$eÞ| m©Í éÍG ùÄsVËíò¯Íêþ]ÚaD¹0•ùåb»ÈüðÑ’Ñ–W¹”D3|y5ÄdõµÎ…è+ô5Äô5Æë¡¯r’Ò?­ž£Ú!F‹ »È(¤ßEnt·¿ëà@üòÜèÓU¥NЩ*>äÇ«zSPå(8‡Y˜•¶¼Z®‹YŽ/¯†˜,ë\1ÀÀÁã`Œ×ƒƒr’2ÌqÚ܆ç V쑃dà`ÜÝþ~ƒ9 ½°¬%èâ`¹ÈÁª‹’ðÌÕ7fà¶)6ÖÑF¦ ¡_~ 19F¹ºIˆzÆ€ xy¢ÈIÊÃ>ãfÕuœÊ¼XƒC–$4IwñãT@Õž5ûh|IÊÌq*ÉКCÌ äÉq*pÍÍšòôc>w%è”#ržÑhŒ,o4Ðq$)óFiKm4PHo4bÈ3SmV«Šû»"¿ƒ Öœ³ ¯ï~¾Øæ“åG¯ÌhòÊ-á™°†˜¬¼Ö¹yѼF€˜¼Æx=äCNRzyí:K¥ ^¬Á!Ëc2énŸÁ˜ ‚ó¢R'è2æYªo€”ƒÌˆ±h‘_Hõ!9þÕ™ºé‡¡yöEhùb°<÷0ØfÂ0±é8@¥ Zf †çy75o-àNÁuJµšM ÙÁ5?ýߌT\3Ë\üÿQÊù—ôÿÅ£—Ã}S¬‹íröÛnæŽÏ>ûO\üþÊêsßSþ½ ÕOœ2æ):ç@oEþ÷òú§9›ýøƒ¿”€2U/ÿúZ}ÿïæË×Å:íŽ*½Ÿ´ç_n?¨ endstream endobj 2949 0 obj << /Type /Page /Contents 2950 0 R /Resources 2948 0 R /MediaBox [0 0 595.276 841.89] /Parent 2930 0 R /Annots [ 2952 0 R 2953 0 R 2954 0 R 2955 0 R 2956 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 ] >> endobj 2952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 707.365 156.022 717.895] /Subtype /Link /A << /S /GoTo /D (prj_8h_ff09e87b2246bdec83f6a7bb1bc0f471) >> >> endobj 2953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 668.571 156.022 679.101] /Subtype /Link /A << /S /GoTo /D (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe) >> >> endobj 2954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 629.403 152.146 640.307] /Subtype /Link /A << /S /GoTo /D (prj_8h_36ccae7b426311614a4e80432a2b62c3) >> >> endobj 2955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.589 629.403 209.7 640.307] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 614.813 186.115 625.153] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 590.983 154.916 601.513] /Subtype /Link /A << /S /GoTo /D (prj_8h_f363383621fb2b72243c1d6b894874d5) >> >> endobj 2958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 552.189 154.916 562.719] /Subtype /Link /A << /S /GoTo /D (prj_8h_b4325a957786611772b90e7a080327f3) >> >> endobj 2959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 513.021 155.474 523.925] /Subtype /Link /A << /S /GoTo /D (prj_8h_cf989261fd56f1e8b4eb8941ec2c754f) >> >> endobj 2960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.917 513.021 213.027 523.925] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 498.431 186.115 508.435] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 474.601 158.244 485.131] /Subtype /Link /A << /S /GoTo /D (prj_8h_5380727f9aeff5aa57f8545d6b54a8f8) >> >> endobj 2963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 435.807 158.244 446.338] /Subtype /Link /A << /S /GoTo /D (prj_8h_d9a80b98c04b0e06d08fd84bacc58b27) >> >> endobj 2964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 396.64 149.397 407.544] /Subtype /Link /A << /S /GoTo /D (prj_8h_7c719c0387d23c53b0ceb3ee161de66a) >> >> endobj 2965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.839 396.64 206.95 407.544] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 382.049 186.115 392.053] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 358.219 152.166 368.75] /Subtype /Link /A << /S /GoTo /D (prj_8h_310444979f8f0e62db2bcbe39b0e3d35) >> >> endobj 2968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 319.425 152.166 329.956] /Subtype /Link /A << /S /GoTo /D (prj_8h_5517fccc15882e298ac9433f44d1ae4c) >> >> endobj 2969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 280.258 152.704 291.162] /Subtype /Link /A << /S /GoTo /D (prj_8h_d2a2b56c0900516dd24eebf430bcb29c) >> >> endobj 2970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.147 280.258 210.258 291.162] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 265.667 186.115 275.671] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 241.464 155.474 252.368] /Subtype /Link /A << /S /GoTo /D (prj_8h_17be11269d86b3308fd925949877718e) >> >> endobj 2973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 202.67 155.474 213.574] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb5951ec54b929d16ab464939a37d74f) >> >> endobj 2974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 163.876 155.484 174.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_151140d870ed4f490317938bd6260a6a) >> >> endobj 2975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.927 163.876 213.037 174.78] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 149.286 186.115 159.29] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 125.456 158.254 135.986] /Subtype /Link /A << /S /GoTo /D (prj_8h_853c1df5e8327d83e9cfdde9455355f5) >> >> endobj 2978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 86.662 158.254 97.192] /Subtype /Link /A << /S /GoTo /D (prj_8h_6f3cbaaf367984579aad5ec7eb00f397) >> >> endobj 2951 0 obj << /D [2949 0 R /XYZ 90 757.935 null] >> endobj 2948 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2998 0 obj << /Length 2409 /Filter /FlateDecode >> stream xÚÕ\]sÛ6}÷¯Ð[¥añI‚}KÒ6ÛL[wcÏlgºÕ¦celÉ••6ý÷{)"‰”)i6“™X‘.ïÁ½À9Ä!‰§?bTðQnrV(3ºy¼à£ôîÛ á>ÒÇÓàó××ÿøNÑU¬ÈÔèúnsy&˜‘bt}ûë8cÙd*8çã§ÕGv?™JÃÇßÍÊúÕûò®\M„—‹zKñœ"s>ùíúÝÅ·×[T7&£² ó‹_ã£[Û» ÎTaGÑkÎDQŒ/´TîõÃÅÕÅ¿¶9ê÷½¿¯,Í ³ÊަJ3›ï ÕœÓË}— ©§ÔÓ\*Ƴ¦5ZŽ,µ&«Z#dÁ¸ùª=WO÷åj~3{˜®—Ó7³Õº|žÏuoÖÔ3ž-žï–«ÇÙz¾tïÓ?«þlÚÞä6Š] ¯Jûãòáá¯r~[~5Qùø¹¾î?ÜðúBÍ› `RÝå{RgLh@9„Ëf˜”úi5Ñf¼üXÞT#fñL ž3‘ÉQ.$<;¸ÑÊõ™./Œè\¡YQ0aši²Y¡Ë4MµÙÔ%¥Ù*]"Í(ȵ;ï. Í ž·ç‹õž$V ÛÆ«>X}pï[+®ŽÆÈQÊ y6_?—»àšfS[\¬‹Á´ ´*ÚÝ¥•÷¼^}ºÙ…Í ¦¬î[³‹ÆˆRÖ‹òãÓê1—´ —°f³I”ØBJN)dT3W5SÂÁÑB°rË”žNû’YMÌ/—¢ A—ùÑ¢Øèħ§úçlgdßD·FÖ=Y.#JÙ=YÂ&DÚ2õ1ÒæLemH·8·òZëï}¹+†Dã¥îŸ³ÇGº{‘ÂN_Í×Ë»;¤³™fÙVŸ_}½_g‰8)¡µ‡ m–+&<™ÐÒ*.°Ðº˜¤Ð6¹€Ð"@/´ Ú¯‡Ð"ä(¥ÚÏòyœô1Áãb] †4´~yÑî.-½Ÿß¿ûE^ý÷Õû·WP^´aÊ Øé :åÅ…TCÛnnªÎ³ßö¤w:ÝT™a¹9¾çɈSÕnue7%Ýyu†©èb’Tlr*"@OÅQ1ÄëAE„¥ô{ù¹“ЍØ-¤§bØÝšŠWò—4ÝãåTltRÑ… 1ˆŠËõ—ÄESòKúT\4V2SHÈE“âb«›‹Ðq1\l᥹‘£”òÍòiŸÿ ÿªr‰‹u1Ò‘Ïd»»ÝþÃ*fƒÖ$jvÑxQJà?ON°Ùlù¡˜YTs—ÿýü‡Érb¦}¹* ºTɇæ?Z#Kû8Ž(eÚ€¶4þB:ÿB¾ÌÜ,ó›:ö©\=?U’7|ügõW‰D7çÌ(ŸæÍåÏç]“±Ì§ò"F+–+‹E×Å$E·ÉDzÑ ‘è†x=D!G)èîõ"Õ,K\¬‹ÁƲLÉvwû{#-Ë =@jšRãBÎàEòÒ¦xÙã!Á¡Ä9³ûø…˜\3k5&¦‹I³Éˆ‰=1@D̯1r”Òï†ö9GLTì–˜Ò3ìng¢-eÀËæú.ZºˆsØ’ÿZøìNçv³_;‘IÑÔ. HK“¢e«›–ÐÑ2´lá¥i ‘£”õZ)÷šÉ,m‹`±.C’IQÜ´» MŠÔEßš]4@”›•å°f³Ù6)Ô­¨¡&EA*b(T“ S¢\Èa&¥5²´IãˆR¦M hKcR ¤3)!ä`“RþñÉï²fõ¡ÿ >¢!ÈFu¿=›êj΄<ÙÑ´&¹9>šö1IÕmrÕE€^u@¤º!^ÕEÈQJ§ºÕm~¯S1Ô v1¶úÕ• s:M“+Õ€CÙ A§Þ¸ó:•/…œ\0™Ÿì8SYKuáãL“"g«›œБ3älá¥É ‘£”~K´Ï©fÈXÀb] †$§ÂsÝîn§¢òêÙð€ãÌ A1}È™ÍÊI˜yôg{*“L‹“n*]0Ú9bbº˜$1›\€˜Ð3DÄ ñz!G)ë¥r T`±þ@Bº•Vw“*=kö*pQÊô ªy{ Cî;Pi×<Ы(ZêF8æ tJ” 9Ì«´F–ö*pQÊ´Wmi¼ „t^%„<†W™ßΟ׳Å:ñdHj±ÛoÎ%¶R1C ðT» âH&ðéµIŠm“ ˆ-ôb"± ñzˆ-BŽR:±)°Xÿ¼Bºçµ­îö·'²0,˜٠º$ƇœÝžôæ£Lññø¶DZÍr~²“M™ ê >Ùô1)B¹º !C@@È^š9Jéw?Ý(°XOHéÙên[" £zürB6 : éBÎoKŽÇÈ£ß!¥¦]«1§²#RÑç\aBº˜$!›\€Ð2D„ ñz!G)ë%²vëí„tv¤ÕݤéY³·#pQÊ´A5oíH ¹ÏŽ´khG¤ ¹Ë(ÓöúNaª#ó"á°ÒV ¢0mDºÒø„çlH€7Ø…,Wëûå#])øøéÞ¿»_h-g¦hžû\žmëC?9?Ù!µ((NãCj“RÚ W·ÒB@§´! PÚ^Zi!r”Ò)-ð"°X¿õnëÓên/Rý?<ÁÍ ºƇœ×‹| ¬™¥>Ù!fu>Äô1IV6¹+ geˆXâõ`%BŽRúýO·!ÅnY‰ =+Ãîö7$BÓ]Ñ 8À t²Ò…œÙŸ–Gw%Uƒdq²ÓKAI”Ƨ—>&ÉÊ&`%ô¬ +C¼¬DÈQÊ ù÷å¢Ã• ×Z‡`@"nÅí°µÀ’hÚ'š¾»hŒ¥D–D0mqÅ>f2¶$E®£šZÁSÅ€CÜ A§8¹Ã\Ikdi[Ç¥LЖƙ@HgMBÈØ›ì 23^OÜëåbÑãËDèšÜzÕ|}ùÓ¹v;ßhÛKeUñ®ß²æ´ŽEýu./ûÖ™úæZ–‹"üºœlCžúërLÁŒ©ß½-åj¶.oÝÍݯ'…r¿¢|égM×?Dñ5—_+^ÿKr!ܤN$uÎÝIÿýæê‡‰ÿÚ]Ê,“õËßÿ®~³üü÷‡rwØå´çö½´ endstream endobj 2997 0 obj << /Type /Page /Contents 2998 0 R /Resources 2996 0 R /MediaBox [0 0 595.276 841.89] /Parent 2930 0 R /Annots [ 3000 0 R 3001 0 R 3002 0 R 3003 0 R 3004 0 R 3005 0 R 3006 0 R 3007 0 R 3008 0 R 3009 0 R 3010 0 R 3011 0 R 3012 0 R 3013 0 R 3014 0 R 3015 0 R 3016 0 R 3017 0 R 3018 0 R 3019 0 R 3020 0 R 3021 0 R 3022 0 R 3023 0 R 3024 0 R 3025 0 R 3026 0 R 3027 0 R ] >> endobj 3000 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.002 149.944 706.906] /Subtype /Link /A << /S /GoTo /D (prj_8h_33f92621800eb880b75611c439526d19) >> >> endobj 3001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.387 696.002 207.498 706.906] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 681.381 186.115 691.385] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.521 152.714 668.052] /Subtype /Link /A << /S /GoTo /D (prj_8h_2da3bbd3c42c6ad324117cc5f249a834) >> >> endobj 3004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.667 152.714 629.197] /Subtype /Link /A << /S /GoTo /D (prj_8h_8cca776751549082521a72a743d6b937) >> >> endobj 3005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 579.439 154.368 590.343] /Subtype /Link /A << /S /GoTo /D (prj_8h_c2f3bc42ac6e7d458364ebcf2b35814f) >> >> endobj 3006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 579.439 211.921 590.343] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 564.818 186.115 574.822] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 540.585 157.138 551.489] /Subtype /Link /A << /S /GoTo /D (prj_8h_588e9a86fc4dcd1195f867f718ce5429) >> >> endobj 3009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 501.73 157.138 512.634] /Subtype /Link /A << /S /GoTo /D (prj_8h_77283589634cc9a054f3a7c7fc91d38d) >> >> endobj 3010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 462.876 153.81 473.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_b1264f0201113c1a8e931ad9a7630e2f) >> >> endobj 3011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.253 462.876 211.364 473.78] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 448.255 186.115 458.259] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 424.395 156.431 434.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_d70968320728202aa12048162248d368) >> >> endobj 3014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 385.541 156.58 396.071] /Subtype /Link /A << /S /GoTo /D (prj_8h_fa8d27e481bbfffacd3e671e6715d5cb) >> >> endobj 3015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 346.313 154.368 357.217] /Subtype /Link /A << /S /GoTo /D (prj_8h_fbf5f05496f1e018425e02d60a4e0b74) >> >> endobj 3016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 346.313 211.921 357.217] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 331.693 186.115 341.696] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 307.833 157.138 318.363] /Subtype /Link /A << /S /GoTo /D (prj_8h_105e2bf177120eb34f41e6af768f855d) >> >> endobj 3019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 268.978 157.138 279.509] /Subtype /Link /A << /S /GoTo /D (prj_8h_fedc43dc512008174ec9b87753519031) >> >> endobj 3020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 229.75 154.368 240.654] /Subtype /Link /A << /S /GoTo /D (prj_8h_344308a1d96a93f9bc682141f3df1a14) >> >> endobj 3021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 229.75 211.921 240.654] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 215.13 186.115 225.134] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 191.27 157.138 201.8] /Subtype /Link /A << /S /GoTo /D (prj_8h_2f42dcec4ea56bbb25b563859228b02e) >> >> endobj 3024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 152.415 157.138 162.946] /Subtype /Link /A << /S /GoTo /D (prj_8h_ed0317c8ffef248346da897568df266c) >> >> endobj 3025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 113.187 154.926 124.091] /Subtype /Link /A << /S /GoTo /D (prj_8h_aec02a8e47d68e126983e9bb07a0c0aa) >> >> endobj 3026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 113.187 212.479 124.091] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 98.567 186.115 108.571] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 2999 0 obj << /D [2997 0 R /XYZ 90 757.935 null] >> endobj 2996 0 obj << /Font << /F31 604 0 R /F42 818 0 R /F40 783 0 R /F22 597 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3046 0 obj << /Length 2392 /Filter /FlateDecode >> stream xÚÕ\]“7}Ÿ_ÁÛÂZ}v·òO'®ÔÚñLÕº*›ÚÂÛ¸Æ0f˜Ê8¿>·i‰V7訡ÍÖ<ÀÀí{t¯t:ŒzÄ€ÓX>ÈMά2ƒé—+>øH¯¾¸îÝ1½=Þv{õÏ]Ål¦·6—g‚)·ïf,ç|x¿úÌ>ÆÒðáó»YõìÍìÃl5Åp¶˜ÒKŠç™‹Ñï·/¯žßnQݘŒÊJ̯W¿ýÎïil/¯8S¶üAÏ9Ö¾\i©Üó»«›«_·9ª×½¾¯¬òݱҬÈãUKÅxVW-e]µàÓªø˜²ôÿHiÚ…N—H3rí`ù (4³À÷­Y”aRæ.â~5Òf¸ü<›–£e±&g–¨Y˜ƒ›¬\•*m”wYa7äIñ.Èçt¼ ïxiÞAäVJÇ»ù´Ÿw°ÔŠw®â]£±ïnäÛ$ﲜ“Z›ãy$ˆñ·”C»ñT+y·%áQ¼SDæüÞ™ï”=9ñhŽLžx:g\ç˜x.&I¼: ôÄ ñB¼ÄCÈ­”› š.f»à´xT.q±.CÊL6»KKïa½zœîŠAk5»h<€VÊjQ~¾_}iƒKÁ“ìcv é³h )…bZd­š¹ª˜ŽB!¶Lù uH•K<ë¡Cu‚¨¹Ñ¢ØÅã}õ8ÙYÆ™¢9²ød¹h<ŽVÊød RsQªz¼-cƒ!‹œ©¬ éçV[+ñý4ÛUCM¦­Ô-ï¾M—‹ù ¬&Caý¾åõõ«Kml$áfùÙô•t“†B}u1I}­s}E€^_@¤¯!^}EÈ­”N_#†BМÂb] †4£¥ÛìnwWAk‘‘¯*A‚˜ªø>®"Î@‘Ñ–ÅLA“¢àé÷8†>‰Œ)ÎÅA“ Æ«÷£ô1)¹â„€Žƒ! à`/ÍAˆÜJé÷8ûÍEÉ/X¬ç „tlt·»Ã0„axуƒu‚(]H‡8H&LÿoHXHBmÈÙ³‘P)Z˜ƒUH’‚ÛL€Í°FCü À:ÐÀ6–°ë‡é^ƒÁÉkX¦ xå—KÚ4š Ügº°«uÁ½™X Z}Y={… iã5uÄ6—P__aDÁ´µ=Ô§NUr˜¯hŒ,í+à8Z)Ó¾´¥öÒùŠò8_±ž,>Îë¹ß'µ¶MÓÇw3¤´‚óòoU®Û›ë 9CFŸKgµ5ŒÓ„"¡õ1)¥ rÅ¥:­ Ø6ðÒj ‘[)Þî5’Rãb] †4†)¡›Ýín8t)™=Ô¦¾>&6.ânã$Ä)fžÞˆèÌ2£ÄÙ¸irÆ› “äf pzn€ˆ›!^n"äVJ¿ÚgD7Q±[n"HÏͰ»ÝˆÖ’¶3¢9ëQvºK‘¿ ?ô(Z•§äÙøI;kæ§‹Iò³Îø‰=?@Äϯ?r+e‰f²iR$S¢UrO"-gZ÷88$ˆ)”9Ì£4F–ö(p­”iÚR{é&%ÀA®¸C@'À! à^Z€!r+¥ཆÅ0®2\¬‹ÁåýA2kv·»a‘$òZõ8($ˆêŽ ¹€aù?'©´>Û¹KIeYÏ]ú˜$Ië\€¤Г4D$ ñ:!·Rú]Ò>ûâHŠŠÝ’Az’†Ýín_$õJËç.ƒQ’ºKØ—S²Ô¤Xzú/ÿ$WLgg;š)h«b>šécR4 rÅi MC@@Ó^𦹕²Dþtÿ¹ýÄ*\k‚ õV6[ œŒ¦}¥éZ°‹Æø­”èÞúœ(pÅ>f²}ï‰Íu«æžVFäÔGÑã„j ¦V>ä0+ÓYÚÊÀq´R¦­ hKme ¤³2!äqVæ§çßÿòzþOÜ*š îO¯ß^J[ËÝœ6g;q[~§‘øc¶ I*ë6V€æuµFC²€uPUÛLè45z;*²º•aUwÒ†ýìîK„*˜æ=Ž~ ¢"âB.àKNƸ“{ŽrEè³}1»Y柼ô1IÆÕ¹å ç\ˆHâu`Bn¥ô{™Ø=ì°TG<ç˜6¶»Û(O2õøSÉöò(í6—ð_Ö–i}ü™JjdQìÝJpZ"ëñïbÜ¿ž`¹°áÿ¹É6ûÄêÿÜ”wß›JÑ_ÌäáÖÞÁùIºY9|tîí•ß èêAØï¸üNñê7É…p3;’Ô97»ÿ¾¾ùe$†??s—²‚Éêé»oÕã˧og‹v‡ËSn€A{þ ¹* endstream endobj 3045 0 obj << /Type /Page /Contents 3046 0 R /Resources 3044 0 R /MediaBox [0 0 595.276 841.89] /Parent 2930 0 R /Annots [ 3048 0 R 3049 0 R 3050 0 R 3051 0 R 3052 0 R 3053 0 R 3054 0 R 3055 0 R 3056 0 R 3057 0 R 3058 0 R 3059 0 R 3060 0 R 3061 0 R 3062 0 R 3063 0 R 3064 0 R 3065 0 R 3066 0 R 3067 0 R 3068 0 R 3069 0 R 3070 0 R 3071 0 R 3072 0 R 3073 0 R 3074 0 R ] >> endobj 3048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 720.286 157.696 730.816] /Subtype /Link /A << /S /GoTo /D (prj_8h_53315ef8d3bd4002d1e98142fcf62566) >> >> endobj 3049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 682.277 157.696 692.807] /Subtype /Link /A << /S /GoTo /D (prj_8h_3b4cda48838c613460bff00c76fceb44) >> >> endobj 3050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 643.894 154.368 654.798] /Subtype /Link /A << /S /GoTo /D (prj_8h_abdc7abc8b7c80187770cfd12c63f700) >> >> endobj 3051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.811 643.894 211.921 654.798] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 629.696 186.115 639.7] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 605.885 157.138 616.789] /Subtype /Link /A << /S /GoTo /D (prj_8h_28b623c88d38ab711fc61f36a97d0b27) >> >> endobj 3054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 567.876 157.138 578.78] /Subtype /Link /A << /S /GoTo /D (prj_8h_1f1714691f99f11640dccdc74eadfb49) >> >> endobj 3055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 529.867 151.05 540.771] /Subtype /Link /A << /S /GoTo /D (prj_8h_ad75dcd0cd2fd0b6a162b5587cba9c2d) >> >> endobj 3056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 529.867 208.604 540.771] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 515.669 186.115 525.673] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 492.232 153.82 502.762] /Subtype /Link /A << /S /GoTo /D (prj_8h_bbfbf3cba73850d7608765725993dfe3) >> >> endobj 3059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 454.223 153.82 464.753] /Subtype /Link /A << /S /GoTo /D (prj_8h_167a49d730bca43483aef311f7114ae4) >> >> endobj 3060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 415.84 152.704 426.744] /Subtype /Link /A << /S /GoTo /D (prj_8h_8bc552f12260f944e0b8f9b714804983) >> >> endobj 3061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.147 415.84 210.258 426.744] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 401.642 186.115 411.646] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 378.205 155.474 388.735] /Subtype /Link /A << /S /GoTo /D (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4) >> >> endobj 3064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 340.196 155.474 350.726] /Subtype /Link /A << /S /GoTo /D (prj_8h_c9a7ed6b032cfdaba0e8caba17c6c149) >> >> endobj 3065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 301.813 153.262 312.717] /Subtype /Link /A << /S /GoTo /D (prj_8h_6d1f0504f9b864d4aed4a59d60bab819) >> >> endobj 3066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.705 301.813 210.816 312.717] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 287.615 186.115 297.619] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 263.804 156.032 274.708] /Subtype /Link /A << /S /GoTo /D (prj_8h_fc5276e759c799deea36271d9cafc5e9) >> >> endobj 3069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 225.796 156.032 236.699] /Subtype /Link /A << /S /GoTo /D (prj_8h_847b7c3f5b7361596912d3d876b4f4fe) >> >> endobj 3070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 187.787 154.926 198.69] /Subtype /Link /A << /S /GoTo /D (prj_8h_a2167e62576d36eae341c2583cb5d678) >> >> endobj 3071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 187.787 212.479 198.69] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.215 173.588 186.115 183.592] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 149.778 157.696 160.681] /Subtype /Link /A << /S /GoTo /D (prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) >> >> endobj 3074 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 111.769 157.696 122.673] /Subtype /Link /A << /S /GoTo /D (prj_8h_f44375ad9036898dd6d12d2cc58bf53b) >> >> endobj 3047 0 obj << /D [3045 0 R /XYZ 90 757.935 null] >> endobj 3044 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3094 0 obj << /Length 2579 /Filter /FlateDecode >> stream xÚµš]sÛ¶†ïý+4½’¦‚o€½É$¶ÓºãIÚØéÇñÉœ¡%Øf$ª$•Ôùõ]€ER"(ÇõtRQäjßð`± AFþ#£”P(ab4[áÑ-Üýáˆø§Sx¨ú˜“V󯣫x4‡Ø~:ˆ%zô®1"I2ZqÊüõâèâè—î>ƒûûš%neKQ·ë×IBÇi‘¥× Sî cÄû;0<­e(ÝÊ,gÚÿÞ*ý—RÑ ~@ED%XĤG V ©Y¾*+70³»´°ª/Þ¾ý gˆ u`³À¤¨G©˜½]Üúçï›!zÛXˆ-wV(úŸ)ŠeyÛ•¦Ðb*h¤O‚ED‚g Á+ÀWªñÇÝ!PˆH:’Z .ä>A"&Û[{ˆr„ÆiÃA§# áȺý4AX?hØx.ª´Ú”nŠ ScSmŠ•û¾4e™NßÚÿ™õ­8â0o4ó1ŠèÈ>¼¥M\F6Cˆ7|õCô˜7 g«jGZ1iK÷cì­ãAt\Ú Žß½=;ÞÑÖ Y´ÙJ ª¬24Œó'Ç!;c%Ï›ØxÏæfUe0ë)¤ìºïnrý™ÍÜ庘p1Îÿ4³*ƒ^îG $a¦= AÒ ¥H&4Ž ·Dpë+‚`L0 Ø<Á¦ôÆ‚è¸ôþzúöòìÝÛ ãWç;9(r à™ÀlGÅQCð@†â:Š£7ÆqÂñø“5ÈWéâqdŠD"¥“G7„ùv )4Cšé(™ÁfˆÌ†¯~2£‚žÌ¦àad¶¤‡ÉŒÑqY“ùÇùÙÛ“÷gÇ{ $€…h¼]Ç“J!5Ò AL† ¼_d«y‘ÍÍc5~8ý‹µàÐEšÅyô6ƒ€ÇX—6ˆŸßCM…Çì]µ) çÉ@û1¢Z=}Ù #Ì’(’ÞdÉu¾¸ÿŠ¥[Zä™VnÌA3âÝÍ•ò ‹ö@’µäé«71F¢dz“2ÿÚ¤óÙæÚ<HNSô¹–nN5âñ=Ž7ÄñÁS„ƈZ€q«v ‹ ÝPŒDÐvh#øÏéÛ³Ë÷dFXˆ¥æ±6' ðþtþC\Eßí“þ¾˜UVÝ¥‹é—l¹±W$Ã.¨çÚÔ0 !ão|‚Í‹ _ý0F=MÁÃplIó ¢ãÒñãé«óŸÏ~ßQO “ym¸–HP<ÉG°›Lˆ¬î|2¬[•ý½Ç^™dHJöl8Bi£H<3›A·¾"8ÆŽ Á=oÚÛû'›f'TIßÁW˜±@»ŸƒEÇ3\Yrœ2DQB –m×¥· óÀ;¯§z7­ö¸Èþ_Ÿ}p/uÇß~ëÅ"-ýÙ‰ë‰ Ü§ÿϰ·öëpŸ<±ç‘Òu¹Y¤Û˜ZHÁÎÈý¥ç½ k‡.ʀ„0™~°ÖñÖÓ†ù.g—ílû2áÙWp)È|­ vÞþ:›¸´`H‰–rý ŠM06|ʰóªÜ=Àª,]@"wß÷$*íI,z`/ëh¨]—ý €j…`ïëo„Ý:OTK0LAÛlÏtÌÜÜX&ÓÍÂ?údN u'8h’âP~‚u4ЮKß37…1}q*`·Æ£}l¢Úœ*¤ii¦a¶ô¥+¿¨Øž‚\”÷.iÁd¯êf·[b]©:¥÷îâ.µù“uâ'ýµ1¾.€D›ÛÜÜÍi ¨½]Vy„·4EÞkÔ‡¨nÍwÁ`¾3DP¾Pn§º€=ÃÐ꬧ óÝ!ê¸|€·ê!f‹'ØG·‚èÖéÞ&. óÆßhKCböy2 vIúÃÕY¶àÄþØÇ6'^˜jõU²Q½P¥üZ·MZ/‰pµ-PÜw?]Àx•.Ýï¤Û Á§[£¥+¡š…µg‰0÷ç_¾| KU³ã:-fÊfol‡Y3XMLh}¿ÿÆ©eeK^Žçy½ô¬¦3_çÔa"M}§Øº¡½ùÒ•qÞj²ýnËV»ªIí—vãîCç›b þ¡BHÝMñ3ìz_º[™÷³'Á2Wb'öø$=€P°n÷ò¹uןZ™€8iëî@éL¢r"¦TS/dVÛÞ›"_úM €¥rEFÝsþ³ =“ú«Ï¦0{Žé‚{·ûÂ!R|ýycw M#E’æîöPŠ¹ÝƒW·íûÁ¬LáS•}àóÒ¥=f¼ñÉêÝÌ'?î>Hò=¦ß3ì¾QLˆEkQ é ªùs`æìµÿ)Òˆú<é3èIþ÷ý­Yu{ÇžˆÞ힯35 endstream endobj 3093 0 obj << /Type /Page /Contents 3094 0 R /Resources 3092 0 R /MediaBox [0 0 595.276 841.89] /Parent 2930 0 R /Annots [ 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 ] >> endobj 3097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 697.247 210.248 708.151] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 660.45 183.429 669.297] /Subtype /Link /A << /S /GoTo /D (prj_8h_dc97181f64d72234b8c6903b22b33df9) >> >> endobj 3099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 621.596 230.662 630.443] /Subtype /Link /A << /S /GoTo /D (prj_8h_c940da0fb0552876fb40a92f82c9625f) >> >> endobj 3100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 582.742 219.952 591.588] /Subtype /Link /A << /S /GoTo /D (prj_8h_86e25219d2169702c7db6508750097cf) >> >> endobj 3101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 543.887 208.445 552.734] /Subtype /Link /A << /S /GoTo /D (prj_8h_afd25a96ccc5966c04d7732ca482c0c1) >> >> endobj 3102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 505.033 258.696 513.88] /Subtype /Link /A << /S /GoTo /D (prj_8h_5a2f80bed69a84464e5654f91ed4fb63) >> >> endobj 3103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 464.495 207.279 475.025] /Subtype /Link /A << /S /GoTo /D (prj_8h_749605599f1bf2b883c5c88b6cc9c06b) >> >> endobj 3104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 427.325 201.681 436.171] /Subtype /Link /A << /S /GoTo /D (prj_8h_4b25d630b7590f31fa0aa6d5861c9bfd) >> >> endobj 3105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 388.47 195.045 397.317] /Subtype /Link /A << /S /GoTo /D (prj_8h_6e2db45f219ba5732ddca43a9fc17408) >> >> endobj 3106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.068 347.559 215.349 358.463] /Subtype /Link /A << /S /GoTo /D (prj_8h_9bceed17f625eb88a0826871dc8296b5) >> >> endobj 3107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.443 308.704 192.276 319.608] /Subtype /Link /A << /S /GoTo /D (prj_8h_2d30db5685dd1faa18680a0e69bc5854) >> >> endobj 3108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.068 269.85 197.795 280.754] /Subtype /Link /A << /S /GoTo /D (prj_8h_4089618a84e11369bf9e5fd7c11c7368) >> >> endobj 3109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.751 175.448 169.862 186.352] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.542 133.914 152.759 144.817] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 3111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [259.395 133.914 288.506 144.817] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.662 133.914 426.84 144.817] /Subtype /Link /A << /S /GoTo /D (prj_8h_50db1538981df162709b81be0b2961ab) >> >> endobj 3113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.244 121.958 359.008 132.862] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 3114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.084 92.379 357.194 103.283] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3095 0 obj << /D [3093 0 R /XYZ 90 757.935 null] >> endobj 3096 0 obj << /D [3093 0 R /XYZ 90 716.221 null] >> endobj 310 0 obj << /D [3093 0 R /XYZ 90 232.53 null] >> endobj 3092 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3128 0 obj << /Length 4244 /Filter /FlateDecode >> stream xÚ]]sÛ6}÷¯ðÛÊ3K€ßyé$iÒM§©³‰gv¶M™±Ù•EU’Û8¿~òB Ýhg§Y<:ç^‡¸)J\¦êâ²I/«¢Jš¬¸\<\¤—wêÝ/«ÃsëøË›‹ïÞdêSISf—7_Æ—")¤¸¼¹ýmV&åÕ\¤i:[oþHî¯æ²Hgoúe7½úÐ}é6W¢žu«…z+K+…¬²«ßo~ºx}³W¥˜Š¬Ôš^üö{zy«bûé"M²¦¾ü[½NÑ4—¹ÌèõòâãÅ¿öÓû™zÿTZ…ÈŽó’ÒÍKfIZc^ÛÇõzÙw·*:Ÿ}~šþÝÝë¼êbö¸UiÅ,¹šç"›ÝLïç³ínó¸ØM¯Ûå•HgëÿkŸ¶Ó{«®»ÝN»¸ÍG»-V±\µìðG·ØõÃêZs»Ç?®§—›áqׯýùJ¦³Çáhwez5ìtû«v™ ‘4Å”ðgê±E»\ŽHõº»Åì«j‡E¿[>Mïͧ6cÇŽ/wWb6ÐËûÎýd»juÜӛÿßeÕ$UU^V*!¦ŽÓïoîðÁêBžÐG½èêÄÔ¸\ož?ÿ”¦Y{çGÉ*ɪʉÀ:‚t=­›Œ<—}ZTI)óñÐëv¡œ’ÕböЮ§‡>žþî·ú_9ëÖÊK Ø­vº[ô{õíÚvëvÓîºé¯/«‘`K›éÅØ)#|}ßmzÕÁ¾ä3ªkó¬,“¢Öm þþûï·òë§´HÕbB;éI.*?ÓžPÃu;µ@žªQ¦Ll¶ÛªyRÕùAü«ÜFŠS«7i"SA>I¾P穆l&šLÆñÛM%‹Ù_zÄê!­ß#CmŸùÃEÔy’¥ÅeYfI“–kÐs ~4t|J³*N;eÇ5B§Ôr‚ð­Á@iŸhê½#5Õ†"2cTBÊ×ëb'‚¼ID!p¾„ÁÊV™f´º'§4IÓèÌ ð(M_»ÞrÎOÊ×Îe3¡íê-5Ñöñá¡Ý<é²ã™7ÅeÓqíTé©~¢À+Ó2©™¬‹Nëøñ9R˳zÏ¡Cü$eqtzNÕGÔùhåISKõ*pæ —V¨dG¥z¶_õœ›Ež%ªEMA,œª§„#üvÕïúvÙ³ ®C]¨þ멵%ÎvE¢tcãÏv„†aú”üÈW¥jRf9lƒÁ’ukx#ß’E]ª¬Ù!ig‡¤Á„†$Ð:sH¨dG56ù ɲªa[ –ÎËD”#ýÁ€;Z$¬7ê,Íž¥Tí*+7~FæS‚qXdjr‚57,Y”IªV³¶$‡e¥Ê‚†‡‡ãü8$LpòZçŽC•‡VT¸¨ÝCЇqˆ¤=¢“E­Èë¤,]1>ã PuÃE­¨§% Ì—0XÙ#:¯:y Õ¹‘ : ëR†kY)ʤRJÙ` ´O¤¥Ÿ«E­* 4%«>½øK;kNÜž²a^q{£ ÷‡yN Y¡s-B2<„Ô~[C:9œöߺùQSFU—æ¢q¤ød E]BJº¯P#æ:! ªCr:Ó&MªTFfJ`¨éšn¦“…òH†R5¤ëÑLŽ;Þ·Iꢦ˜¿¾?Þ«‘RõSAò·NÕ­÷íò»ö[ÿð¨_Q‘ –qj1©÷-ŸJPWV‰T+Ö¹‡ã¼u ô.¯u®yQTƽVTÛ€}Uã7°)‚…]ƾiRWÂÕþÐXÖ£¤|¡ƒóqµ & –öˆ˜ù³IÔš"6eBt]JÓÅÈÊY’¸ JûDnþxÒÍê\TJËÍÛekJ{cl×ÎÊËeÀËi•djÌzùpœ÷2a‚^æµÎõ2ŠÊxÙŠj×® —§ýoÔƒ¥="¦nT7z­Šá Ðu))ehg=3d8eÂ`iˆ±³:Øä±): ëRš^FvN“40eƒÒ>Q„o®štöâ—“´¾`r°ôÝjxVý‚±k®ÒÎEÎÚÕ:ÎÚÕ`BvZgÚFE ;ªíî.`W©û¨- K{D¬]¥¨\5hW躔”2´«PC­Â)K{DŒ]ËD6ulÊ„躔¦—ÑêµVÇ) ”ö‰bfß›O×Ò²´gß]·é†»M»¾çýª–ÌzO–õëá8ïWÂýÊkëW•ñ«Õ¶_Åø´ÅÁ¯HÚ#Â~µÕ"ü u]JJ9Ư(å½_‘´G„ý—òÞ¯P×¥4½áWòÁ¯@Ú'ŠñëÛS«h’´©-¿›Ý½±ëwÛ§Õî¾Ûö[θ¹¾j^ñÆ=çK˜ qy­s‹¢2Ƶ¢j7‹P]\å°- K{D|]\x­ëb…躔”r .Κ §L,íñu±ßÀ¸.6µGiz9P S6(íÅlZ}xub¢Í“´ŠØ³êþ|ìoõ†ÕVþ;ÎÇjÍ] þš£uœ÷1a‚>æµÎõ1ŠÊøØŠêÛzØjnš¶…Á`iˆÝmnªÊUƒÛÍu=JJú¸Lê,2a°´GÄl;‹¤ulʄƺ¥éeäã2)ýv?òñ„Ò>ð±±é¯ïa6ŸË˜Íçaù¤–½ÚÊí’ó±Zl×ü–óá0ïâ 41+t®‡AHÆÂ‡¾umh·¹F@¨êð[Í¥p„ðN³¾ûiº„”ihŸ9Íaªº. »É\Ôed²Æ¢¡éÖÀ³lP²‚t=šˆy÷××/Núµ©²¸‰×¼Ô÷ Íº–1m¦Š‘Fò—x­ã¬m &ä[ u¦qaT²£jûMàF !aS »4ì]"õ´àmu))_dàJ­»ê'L,í1VÅbYƦLh¬ëQš.FKß"IqÆÂMLùüöÃé«D…}•èE¿yâ ZÖI*ù«?ÖqÞ „ ”×:× (*cP+ªÅxSsèfŒ:¯`{ –÷ˆØ ¹–µ«+dƺ¥•v J.²§M,ï±Ur!𨴠u=J»·q¥,eÓ6(ïETʯþsú6¦Ì-ËN9,ûÕ-}È»¨¸A#ÓgmÉ_%²Žó¶&LÐÖ¼Ö¹¶FQ[[Q-bJfÔ¦f†Â. ¬š­pÙ e=JÊ7¢p† ›ÊJ{D°vŽLÙÏX×¥4].ŸQÊûúIûDSï«“t6~Q7àc§|ækgY«s ÿ¥aë8ïaÂ=Ìkëa•ñ°Õ¢ÝDl@£¶Øo@Cin@;já h¬ëRRÊÐ0e³ ¥="¸™²Ù€Æº.¥éåð4Jy¿¤}¢¿øÞ€~¿¿ô;}]{ó)+;ñ¦µ:‘ðW¬ã¼i 4-¯u®iQTÆ´VT6--A[ÖžHÚ#bæÞL­3W ̽ëz””24­Zªæ5N™0XÚ#bêh5>õl—2¡±®Giz™V}¸ÉaÊ¥}¢Ó¾{}Ê´EReöîÕ»n³hwƱªþêZ.ù CÖqÖª²*Ð:Óª0*ÙQmõc Y¥êø¶†Á`qˆ™aõHJW ̰: ëR[Tj‘®¦F˜4a°¸GÄ̱ji^±Iëz”‡žF›Tb¼{%m0PÜ'й?ãÍÏw3lWÛa5³l¶»®»åŒ«ۅ俽gçK˜ qy­s‹¢2Ƶ¢Z ã"É2 ÛÂ`°´GÄ®oõ®Ž\ßj4Öõ()e8ǪÅUÚà” ƒ¥="Æ´jp7±Oà€ªChºM°")k8ç•}¢¿¾¿ªòÙÉÊXªÂÚ.õq>KöþG©¿§™ñW€¬ã¼Y 4+¯u®YQTƬVTÃ2T ÛÂ`°´GÄÄzN²ÕpAò8.YóÄc(êšž =ï8CÉÒõhbžîöñÔS,ÔI¥´gJµ ½ëVúGè·?4ÞYüø™}Fc3Vg'J•ž(‹ÿÿW¼¦Ÿ‚¨“J4öÏ©)§ÊégºH]§1>í¹Ý™ö0¿{psÕÈÙ#Ý!}½ 'RæÓ?¢yžÊçY:ý¥F‘ ßGлâæ7þýêãÏWböö%}4©9½üL?FòÃðõI5Ÿß:úwÆŽ›ç#2[° endstream endobj 3127 0 obj << /Type /Page /Contents 3128 0 R /Resources 3126 0 R /MediaBox [0 0 595.276 841.89] /Parent 2930 0 R /Annots [ 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 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 3149 0 R 3150 0 R 3151 0 R 3152 0 R 3153 0 R 3154 0 R 3155 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 3202 0 R 3203 0 R 3204 0 R 3205 0 R 3206 0 R 3207 0 R 3208 0 R 3209 0 R 3210 0 R 3211 0 R 3212 0 R 3213 0 R ] >> endobj 3130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [278.78 707.957 328.373 718.861] /Subtype /Link /A << /S /GoTo /D (structprjprm_d304d66b3f3aa64fe9c7251d3c420d02) >> >> endobj 3131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.309 660.753 214.073 671.657] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.614 660.753 250.148 671.657] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [269.004 660.753 302.538 671.657] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.308 648.798 380.418 659.702] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 603.653 144.127 614.557] /Subtype /Link /A << /S /GoTo /D (prj_8h_d994cb23871c51b20754973bef180f8a) >> >> endobj 3136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.52 603.653 286.63 614.557] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 583.755 144.675 594.659] /Subtype /Link /A << /S /GoTo /D (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) >> >> endobj 3138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.431 583.755 254.541 594.659] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 563.856 144.674 574.76] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.663 563.856 181.197 574.76] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.186 563.856 217.72 574.76] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3142 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 543.957 147.434 554.971] /Subtype /Link /A << /S /GoTo /D (prj_8h_bf6696d3455c684cb44d06da7885ce94) >> >> endobj 3143 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.423 543.957 186.717 554.971] /Subtype /Link /A << /S /GoTo /D (prj_8h_8ebb4c79b635cef463b4e7242ff23c25) >> >> endobj 3144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.705 543.957 225.999 554.971] /Subtype /Link /A << /S /GoTo /D (prj_8h_bc26dfb2d0b0bee71f6e4541977d237f) >> >> endobj 3145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 524.059 146.886 535.072] /Subtype /Link /A << /S /GoTo /D (prj_8h_faafab5c440384667d7af444b7aca750) >> >> endobj 3146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.875 524.059 185.621 535.072] /Subtype /Link /A << /S /GoTo /D (prj_8h_2fe67a5ecf17729881efa24c83482611) >> >> endobj 3147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.609 524.059 224.355 535.072] /Subtype /Link /A << /S /GoTo /D (prj_8h_70b750ec65eb4a277057200c7fbb251f) >> >> endobj 3148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 504.16 145.78 515.174] /Subtype /Link /A << /S /GoTo /D (prj_8h_34d303d7ae44a6aca43c1a81bfaac10f) >> >> endobj 3149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.769 504.16 183.409 515.174] /Subtype /Link /A << /S /GoTo /D (prj_8h_cd4f54c072b6219242daeb6d4b9a74cb) >> >> endobj 3150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.398 504.16 221.037 515.174] /Subtype /Link /A << /S /GoTo /D (prj_8h_9d3358bed907342e3309e54bd2ab89da) >> >> endobj 3151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 484.261 145.232 495.275] /Subtype /Link /A << /S /GoTo /D (prj_8h_66b51f10624b6c17a84b5b54058dd72b) >> >> endobj 3152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.221 484.261 182.313 495.275] /Subtype /Link /A << /S /GoTo /D (prj_8h_88c15d0b6f789cbbd7c5d323ef131360) >> >> endobj 3153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.302 484.261 219.393 495.275] /Subtype /Link /A << /S /GoTo /D (prj_8h_b46a0a668f28939626287d048153863f) >> >> endobj 3154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 464.363 145.232 475.376] /Subtype /Link /A << /S /GoTo /D (prj_8h_b6ce2bb75a87b1679d05f251227d2f1b) >> >> endobj 3155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.221 464.363 182.313 475.376] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb7881cd5d7b4b5e26281a512b8f62ac) >> >> endobj 3156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.302 464.363 219.393 475.376] /Subtype /Link /A << /S /GoTo /D (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63) >> >> endobj 3157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 444.464 145.77 455.478] /Subtype /Link /A << /S /GoTo /D (prj_8h_c038f2474d5d58de157554cee74a9735) >> >> endobj 3158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.759 444.464 183.389 455.478] /Subtype /Link /A << /S /GoTo /D (prj_8h_666322bfe8c4b8e73f00afeb47283f97) >> >> endobj 3159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.378 444.464 221.007 455.478] /Subtype /Link /A << /S /GoTo /D (prj_8h_aba5ce89ae711728d8ba8105ac5fd599) >> >> endobj 3160 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 424.565 147.992 435.579] /Subtype /Link /A << /S /GoTo /D (prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) >> >> endobj 3161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 424.565 187.832 435.579] /Subtype /Link /A << /S /GoTo /D (prj_8h_574e44daea81568a6d5e324a6f339d6f) >> >> endobj 3162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 424.565 227.673 435.579] /Subtype /Link /A << /S /GoTo /D (prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) >> >> endobj 3163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 404.667 146.876 415.68] /Subtype /Link /A << /S /GoTo /D (prj_8h_3229533df20718c0d5671cc9eb5316fe) >> >> endobj 3164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.865 404.667 185.601 415.68] /Subtype /Link /A << /S /GoTo /D (prj_8h_849a1bbd679d0c193e8be96a8b9ed534) >> >> endobj 3165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.589 404.667 224.325 415.68] /Subtype /Link /A << /S /GoTo /D (prj_8h_dc4da028cde2d970e9e5e22adca22f37) >> >> endobj 3166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 384.768 144.116 395.782] /Subtype /Link /A << /S /GoTo /D (prj_8h_025adf8a63b5d4a8d2a4de804e0707be) >> >> endobj 3167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.105 384.768 180.081 395.782] /Subtype /Link /A << /S /GoTo /D (prj_8h_2c87fbf68277f03051d3eaae3db785e9) >> >> endobj 3168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.07 384.768 216.046 395.782] /Subtype /Link /A << /S /GoTo /D (prj_8h_75b6b1cb0a748e9b5d3a4cd31129ace6) >> >> endobj 3169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 364.869 147.843 375.883] /Subtype /Link /A << /S /GoTo /D (prj_8h_36cf447dee9f2e90e42d43d7adc5a0a1) >> >> endobj 3170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.832 364.869 187.534 375.883] /Subtype /Link /A << /S /GoTo /D (prj_8h_ffdbf993ce959fce2c148c07cd0f2c0c) >> >> endobj 3171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.523 364.869 227.225 375.883] /Subtype /Link /A << /S /GoTo /D (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346) >> >> endobj 3172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 344.971 146.876 355.984] /Subtype /Link /A << /S /GoTo /D (prj_8h_68ce41ad199c3385bed7e7d4ded2bd8a) >> >> endobj 3173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.865 344.971 185.601 355.984] /Subtype /Link /A << /S /GoTo /D (prj_8h_ff09e87b2246bdec83f6a7bb1bc0f471) >> >> endobj 3174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.589 344.971 224.325 355.984] /Subtype /Link /A << /S /GoTo /D (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe) >> >> endobj 3175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 325.446 145.77 336.086] /Subtype /Link /A << /S /GoTo /D (prj_8h_36ccae7b426311614a4e80432a2b62c3) >> >> endobj 3176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.759 325.446 183.389 336.086] /Subtype /Link /A << /S /GoTo /D (prj_8h_f363383621fb2b72243c1d6b894874d5) >> >> endobj 3177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.378 325.446 221.007 336.086] /Subtype /Link /A << /S /GoTo /D (prj_8h_b4325a957786611772b90e7a080327f3) >> >> endobj 3178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 305.547 149.098 316.187] /Subtype /Link /A << /S /GoTo /D (prj_8h_cf989261fd56f1e8b4eb8941ec2c754f) >> >> endobj 3179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.087 305.547 190.044 316.187] /Subtype /Link /A << /S /GoTo /D (prj_8h_5380727f9aeff5aa57f8545d6b54a8f8) >> >> endobj 3180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.033 305.547 230.99 316.187] /Subtype /Link /A << /S /GoTo /D (prj_8h_d9a80b98c04b0e06d08fd84bacc58b27) >> >> endobj 3181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 285.648 143.021 296.288] /Subtype /Link /A << /S /GoTo /D (prj_8h_7c719c0387d23c53b0ceb3ee161de66a) >> >> endobj 3182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.009 285.648 177.89 296.288] /Subtype /Link /A << /S /GoTo /D (prj_8h_310444979f8f0e62db2bcbe39b0e3d35) >> >> endobj 3183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.878 285.648 212.758 296.288] /Subtype /Link /A << /S /GoTo /D (prj_8h_5517fccc15882e298ac9433f44d1ae4c) >> >> endobj 3184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 265.376 146.328 276.39] /Subtype /Link /A << /S /GoTo /D (prj_8h_d2a2b56c0900516dd24eebf430bcb29c) >> >> endobj 3185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.317 265.376 184.505 276.39] /Subtype /Link /A << /S /GoTo /D (prj_8h_17be11269d86b3308fd925949877718e) >> >> endobj 3186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.494 265.376 222.681 276.39] /Subtype /Link /A << /S /GoTo /D (prj_8h_eb5951ec54b929d16ab464939a37d74f) >> >> endobj 3187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 245.851 149.108 256.491] /Subtype /Link /A << /S /GoTo /D (prj_8h_151140d870ed4f490317938bd6260a6a) >> >> endobj 3188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.097 245.851 190.064 256.491] /Subtype /Link /A << /S /GoTo /D (prj_8h_853c1df5e8327d83e9cfdde9455355f5) >> >> endobj 3189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.053 245.851 231.02 256.491] /Subtype /Link /A << /S /GoTo /D (prj_8h_6f3cbaaf367984579aad5ec7eb00f397) >> >> endobj 3190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 225.952 143.568 236.592] /Subtype /Link /A << /S /GoTo /D (prj_8h_33f92621800eb880b75611c439526d19) >> >> endobj 3191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.557 225.952 178.985 236.592] /Subtype /Link /A << /S /GoTo /D (prj_8h_2da3bbd3c42c6ad324117cc5f249a834) >> >> endobj 3192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.974 225.952 214.402 236.592] /Subtype /Link /A << /S /GoTo /D (prj_8h_8cca776751549082521a72a743d6b937) >> >> endobj 3193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 205.68 147.992 216.694] /Subtype /Link /A << /S /GoTo /D (prj_8h_c2f3bc42ac6e7d458364ebcf2b35814f) >> >> endobj 3194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 205.68 187.832 216.694] /Subtype /Link /A << /S /GoTo /D (prj_8h_588e9a86fc4dcd1195f867f718ce5429) >> >> endobj 3195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 205.68 227.673 216.694] /Subtype /Link /A << /S /GoTo /D (prj_8h_77283589634cc9a054f3a7c7fc91d38d) >> >> endobj 3196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 185.782 147.434 196.795] /Subtype /Link /A << /S /GoTo /D (prj_8h_b1264f0201113c1a8e931ad9a7630e2f) >> >> endobj 3197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.423 185.782 186.567 196.795] /Subtype /Link /A << /S /GoTo /D (prj_8h_d70968320728202aa12048162248d368) >> >> endobj 3198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.556 185.782 225.85 196.795] /Subtype /Link /A << /S /GoTo /D (prj_8h_fa8d27e481bbfffacd3e671e6715d5cb) >> >> endobj 3199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 165.883 147.992 176.897] /Subtype /Link /A << /S /GoTo /D (prj_8h_fbf5f05496f1e018425e02d60a4e0b74) >> >> endobj 3200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 165.883 187.832 176.897] /Subtype /Link /A << /S /GoTo /D (prj_8h_105e2bf177120eb34f41e6af768f855d) >> >> endobj 3201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 165.883 227.673 176.897] /Subtype /Link /A << /S /GoTo /D (prj_8h_fedc43dc512008174ec9b87753519031) >> >> endobj 3202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 145.984 147.992 156.998] /Subtype /Link /A << /S /GoTo /D (prj_8h_344308a1d96a93f9bc682141f3df1a14) >> >> endobj 3203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 145.984 187.832 156.998] /Subtype /Link /A << /S /GoTo /D (prj_8h_2f42dcec4ea56bbb25b563859228b02e) >> >> endobj 3204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 145.984 227.673 156.998] /Subtype /Link /A << /S /GoTo /D (prj_8h_ed0317c8ffef248346da897568df266c) >> >> endobj 3205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 126.459 148.55 137.099] /Subtype /Link /A << /S /GoTo /D (prj_8h_aec02a8e47d68e126983e9bb07a0c0aa) >> >> endobj 3206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.539 126.459 188.948 137.099] /Subtype /Link /A << /S /GoTo /D (prj_8h_53315ef8d3bd4002d1e98142fcf62566) >> >> endobj 3207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.937 126.459 229.347 137.099] /Subtype /Link /A << /S /GoTo /D (prj_8h_3b4cda48838c613460bff00c76fceb44) >> >> endobj 3208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 106.187 147.992 117.201] /Subtype /Link /A << /S /GoTo /D (prj_8h_abdc7abc8b7c80187770cfd12c63f700) >> >> endobj 3209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 106.187 187.832 117.201] /Subtype /Link /A << /S /GoTo /D (prj_8h_28b623c88d38ab711fc61f36a97d0b27) >> >> endobj 3210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.821 106.187 227.673 117.201] /Subtype /Link /A << /S /GoTo /D (prj_8h_1f1714691f99f11640dccdc74eadfb49) >> >> endobj 3211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 86.288 144.674 97.302] /Subtype /Link /A << /S /GoTo /D (prj_8h_ad75dcd0cd2fd0b6a162b5587cba9c2d) >> >> endobj 3212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.663 86.288 181.197 97.302] /Subtype /Link /A << /S /GoTo /D (prj_8h_bbfbf3cba73850d7608765725993dfe3) >> >> endobj 3213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.186 86.288 217.719 97.302] /Subtype /Link /A << /S /GoTo /D (prj_8h_167a49d730bca43483aef311f7114ae4) >> >> endobj 3129 0 obj << /D [3127 0 R /XYZ 90 757.935 null] >> endobj 3126 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3216 0 obj << /Length 3035 /Filter /FlateDecode >> stream xÚÕkoÛFò»…€û"¢=îƒ/÷S’¦iƒ"qc£ ššZKÌI¤BRµÕ_3û –Qrcw1rwgçµ3³3#Ò‰t{“ÐIÌýIº¹ð&K˜}}AÍê–çÎú‹›‹ýÀa‰>¹¹SÛJ|F'7‹Ó€³9õúl\d3NºƒhXäì–ósE6Ðãt;(í)yrDø¨Î È(áš3<ùÇ«ž ‰ cŽ'ÿøêùÏWÙƒå¼nNƒ€ãÏäǸé9$íÞt¹Ûȼ6wóJ¦ÿÉò¥!Ò­Jì‹/2Ñi¹^Ò³»:Ë%Z½ìó®OCˆÏZ› <œþ1cþ4Yïd¥ÇÅÞJ]Ùâ…Q#úØ#ÂâÐ@$ù¢ƒ$aƒƒ±>Ž’Lá(°¶<æI!›̨?5së"_fõna† ¨#_˜%Ç¥y (7Éz½7ë™Ù”åúÙ*“|)5c‘{²aåý£‘M8$ êñ¼8jahdÖ!¡ ø gH,Ä„“€ úJ`+PQ5Pßõ( "Ø_¥'ô¹Z>¡ ¥»¢8q4ÃQ«ñÁã-Ä3¼Ù<{]†æîÙ€áÊ€ðäExê(bèG>íA£Ãžä˜?~ ‚PoÜñÀ$|ëxd6ç…~,ÐáîåÁíÊœÎ3nÀ—ô˶ÄPäÄ!ƒàU8‰ûÌ‚&i*·&®%9¢ÜëAôp(1±™ñH07uÈçEm_0@f¥‡YMhsš82QR¢$ç¼%'TàFNW…~æeý.Q‡í:K³Ωp®Ô«¤“2l–ŒÚ&Ö@ 3Ügõ*Ë-jÃôp4‹b<˜}³iËöÏò ÿ<ˆÒ‰Ž“ð W`°~ßÔ¹kuWŸ6_PË!¡÷уuãÀ±nY7d"b'®Æƒ‡*ÓQÈÀ*»TÙ€&«ž`¢ñªlaU†`s œ© ó\ÉÛÁÆa,¡Á‘A7²$KÐÄt-“E†¡z‰«¬Á¶ÐuV!¥ªÐ‡’"hiê=?ö§ʲÀKq ßä$0ߊ*0>xŽš(çæS°¾=Æç¿_õuHuÍâ2Ún†'l„¹Ü®²³ößÌboúü퀭y„ò3yøi`?dQµÿ÷«·'u ôÙ¤k."¨KÃF/ß] 滇Œo]æ¨d½+ͱɲD—ÀW¦Ù]?Á帪¾pˆ‰Â‰ýßÍ {O‰\;€$ò‹ÙÔÛe|.@ ”Y“Ô7kZ”¥¬¶E¾¨t…­žÊ(áb{`¯Âu²ÝªÊæ‘ç;LÜ“Ò$œ0Ye »í®ƒ§eÜ"šÞΘ7ÝÕzÑ(ÞEº{\ꢦÜÛ°} óë8<[ÅF¿ûAåbT¹."s± 0zß‹[àf•¡žƒhZÕe–êk‡·ÅN¼;ÕON7ÉÞ€H=QÊuò Îc¡ƒã]Tm¤Ùgf*Y׈µSMr߇ΠØñÀÇø‰’ÖBÏð^eÙE‰’oË/Ûrsyií0! ù`à‡-&º¿ª˜QÒhã\P.ieÒ Oë-¡LÀ¶J= ÷J®W(ž-X um¤¯<¦1ºÇx°e“îåÒ6¬š|ëÖ$Z¥Ìò¬†“Ît_‹ôƒŽ×J¾Î)‡ÒĘs¦ßP¿2ÁŠQ— ŒFfîIÆšœW ŠÐEQ‚;&µ¬ú—gÑßãzX¤Û@ª¼ ˜[g›¬áT¿’Dy ¼•3uÍge$©RYÖIfd¿_Ic'¸¦U±ÞÕÍ-Ï<°3A[Ö¡Sପ+‚á?žþ8P‰4VHàÑ Q£E¡îxxk¶â0ÂÄZM›_3¹Ie½i”dÔ†LÚŽ4®.BÈEx¢º Pƒ÷7üàTƒr{„Å-jW©¸Ò x¹GÿЩ|K •Ê÷í R®@ÙÅSVŧÚO—Õ?–ÒãòúÇVÆÇ“.©Úµß`Ôé~kƒèqµÎÿfMõT] jLD·ïŒ4Ý•Iº?îßb½u̽ÎÜÀ¿j,Ø® ®,–c®§t…0ºf‚™DÓ³õÌ`¾g@*ä4 `¤®]õ…††3Œ4(Ób‹<íËl¹ª5 Ü¥Y*Í¥,–xµ49 ®ï*Yªà „ǹ=ûoà~ö9ñ¬=++aÜíbãPõ­8cM [O¯’J¿ÜJeŠðf”™A4aÒlÒæ ‹õ~«*ÄA«¬ÇqR&Y£Å¨]vÞ$zíû›E¦+}Œ&Û×ó¹«Ê…ºå—¥4 ú²Ñ,Ý­ÍPyÔïþq£7Ì_ôŒnùøAu8R¿#˜¼×4ɆÚû^‹ü'Ïòï”#mîàºÇ”EçD½í¨U"ÂKeA6/ És+×Eæ:6y¤é©`W ¦..¥|®LF^C-BIj®5ûŠY`vòÚÚmîÚήÉ"ug·Øl[=ÝZ×wøÃuqW› +‡S~Î…ý°0óiÛ÷m;7¼~_¤ªHš”v2A8¤-ÍNBÍÞ,Z›¯~}«_¸wÞïbJ[µýB&ßmn­Õ¡ºoT›™rë°ÍÖC^sý^ §¨1@dv¨o$š*aN‡®Cgî{~_ŸF»Zyÿæ»þ÷ó÷¯A†ë&¬tñë,f*u¾ì–©‘O<O˜®?´Uj¯Z5 sV«Âæfh¾n´«H¶ªË] ¦èï¡ZV¼àøÝ%<ÖüýSÍ Flr˜…-Ïôæ,7Xò‡Þ̾;S=ô§¶µ™ú‰»éfRbí ©‡ý0 Š_³aQìn1záûÃÇÏfó€}àÎnWÙà<8m˜ê°ññó Q;?,_•P&©¬ªÂ˜ñ&IK y0&ª¯vu˜L×IÙÚXd·æ¹ÛåÎVÁ[ö[Yçà„5Èköá[ R} Äg¤;`võÿÊ Å˜Aº–uÄ5²cÖÊ;ŸGù±ú g ±æ·T–ù×>†6ŸW‘ÆîW܇⪡Ž:x-s •Õrƒ6n }—š+Vè/=vÉÍ]Â> endobj 3218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 146.328 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_8bc552f12260f944e0b8f9b714804983) >> >> endobj 3219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.317 719.912 184.505 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4) >> >> endobj 3220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.493 719.912 222.681 730.926] /Subtype /Link /A << /S /GoTo /D (prj_8h_c9a7ed6b032cfdaba0e8caba17c6c149) >> >> endobj 3221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 699.987 146.886 711.001] /Subtype /Link /A << /S /GoTo /D (prj_8h_6d1f0504f9b864d4aed4a59d60bab819) >> >> endobj 3222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.875 699.987 185.621 711.001] /Subtype /Link /A << /S /GoTo /D (prj_8h_fc5276e759c799deea36271d9cafc5e9) >> >> endobj 3223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.609 699.987 224.355 711.001] /Subtype /Link /A << /S /GoTo /D (prj_8h_847b7c3f5b7361596912d3d876b4f4fe) >> >> endobj 3224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 680.062 148.55 691.075] /Subtype /Link /A << /S /GoTo /D (prj_8h_a2167e62576d36eae341c2583cb5d678) >> >> endobj 3225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.539 680.062 188.948 691.075] /Subtype /Link /A << /S /GoTo /D (prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) >> >> endobj 3226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.937 680.062 229.347 691.075] /Subtype /Link /A << /S /GoTo /D (prj_8h_f44375ad9036898dd6d12d2cc58bf53b) >> >> endobj 3227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.796 557.45 418.227 568.354] /Subtype /Link /A << /S /GoTo /D (structprjprm_b8dd3d8b1e462a2b261fc9e304885943) >> >> endobj 3217 0 obj << /D [3215 0 R /XYZ 90 757.935 null] >> endobj 314 0 obj << /D [3215 0 R /XYZ 90 389.692 null] >> endobj 2838 0 obj << /D [3215 0 R /XYZ 90 367.381 null] >> endobj 3228 0 obj << /D [3215 0 R /XYZ 90 367.381 null] >> endobj 2839 0 obj << /D [3215 0 R /XYZ 355.382 332.251 null] >> endobj 3229 0 obj << /D [3215 0 R /XYZ 90 315.524 null] >> endobj 2840 0 obj << /D [3215 0 R /XYZ 381.384 220.284 null] >> endobj 3230 0 obj << /D [3215 0 R /XYZ 90 203.557 null] >> endobj 2841 0 obj << /D [3215 0 R /XYZ 371.98 108.318 null] >> endobj 3214 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F8 1129 0 R /F14 1084 0 R /F13 1157 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3234 0 obj << /Length 1288 /Filter /FlateDecode >> stream xÚµ˜]Oã8†ïû+"íM*mŒ¿sÇGX`ÛŽf¥™ê´é.¤Ý40¿~Oj‡ºIㆥ¡¦ÎÉ9ïyý8iL $Ð8PB!ÍD0~ìààF?uˆ=ÁéÈ9<ìœ1¸ iÉ‚áÝêrI $N¾†ÉnD0Æá<ûýìFTàðlú˜£~r—d]‡I:†!†D*Ñý>¼èô†¯U­&ÁdQóßÎ×ï8˜€¶‹FLÇÁcD´;œ2{üÐtþ|ÍaÆŒokK¶»/Ê–¢ì QÄmo¿M’oÓÔvuÓ¿¸ì]™ãoXàÅôW—„Éìnõ%Ï–ãÜœOæÙ#Œ’ˆ±Ó4/FŠÿ‡ƒ3J×2À}¢¤|¥b™L³;ó™ÿLªæ& ˆsbš/†³{{¾ïØ`b#'xe„«`3]¡ÂtQ++)¢$Þ,\q½Œñ”)¬7Jº&NScw®aÅRC‘" ­I0b–é4_ün²-ÉÄýxY[j°íβ<¥fà)ÍabçI¶@¦‚KLD(EJBwŒB-—±0ršNo“ Ü$áâþut5ß+ÇahBR…”’ÛfHÇ"  IÈSk„1"É!£[)CІN“¹YÀãQÎÕØƒUKHà$­As¥”»•UN0]]9­Ö9Áp–qS¨;šLÊé¼›ev^G㞺‡£l²0CãÙã|”OLÀ÷iþÒ•"\óPmŠJ Ø¦ï¾–Ñ^íÕ”vY5Ì;#Åp¹gâ£2Æ[–XŲÉ4KÆùƒ…?u©ŸÊ•¶È“Ñd딚LÖ…rX—¬Ï³üͬ ÷v®w°.Z².$dƒëeH{Ö¤~Ö…Ÿu§ÕFÖ˘g}Ã÷ݬû´WS¶cÝ3ñkÖ}eKÖݲûf]5²¾HÞÎ:ð¤ tO¬s¿W”ò±^†´gÝIú.ÖVY/c>œõ ßw³îÓ^MÙŽuÏįY÷•-YwËî›õ¸‘õgº0 ‚émYgð#/ÖbO¬³² ê6¢=éë”ïÝé³ô2æÃAß0}7è>íÕ”í@÷Ìút_Ùt·ì¾A×Í7uúüfЩRˆÂKÁ~@§²Á‹­‡ô2¤=êNÒw±î´ÚÈzóá¬oø¾›uŸöjÊv¬{&~ͺ¯lɺ[ö¬W^L™%½—.“ <žÙÝaWñðenÉ?ñcIsŠ Ê³?¬VÙ±ùÈW]·I Y– Ë„@“Å2Üæ– ‰œ˜&ø¡;D±ÑTv5Ëkä[d·TmÆ»ZžÇÞC]þš°¨Ó¿èõû·ƒÏ''½Á &Aƒbåí[ƒ§,†Âiî_zDDÉm6ÆÑvõùòòöæúüjØë×ÃHh8©ëõá=2–ír˜µC¡q„ÞÞtcøìýQ“I8ŠNþºBPÌÛɤLß!ÓÆl“yþW}¢a†¹ œÌõ™æˆa’ CLK¿B³Eá—bSëºyZ7p“"pòo™o †nýÁŠA ‘âÿïÛ®vœe O í®t‰´âvcVh$„yEÿ”¤Å/Ÿ#똦áÒÞ¿®ËCn>ˆ>ÄôaóbBìC¨°¨|}9\ ëüØ^ŠbD7÷ OgÏ/÷IZõ±ØY¶{þû½A– endstream endobj 3233 0 obj << /Type /Page /Contents 3234 0 R /Resources 3232 0 R /MediaBox [0 0 595.276 841.89] /Parent 3231 0 R /Annots [ 3237 0 R 3239 0 R 3240 0 R 3242 0 R 3243 0 R 3245 0 R 3246 0 R 3248 0 R 3249 0 R 3251 0 R 3252 0 R ] >> endobj 3237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 702.288 163.215 713.192] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 644.713 138.508 655.592] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000014) >> >> endobj 3240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 624.623 313.819 655.592] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 557.086 138.508 567.965] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000015) >> >> endobj 3243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 536.996 313.819 567.965] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 469.459 138.508 480.338] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000016) >> >> endobj 3246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 449.369 313.819 480.338] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 381.832 138.508 392.711] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000017) >> >> endobj 3249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 361.742 313.819 392.711] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 294.204 138.508 305.084] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000018) >> >> endobj 3252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 274.115 313.819 305.084] /Subtype /Link /A << /S /GoTo /D (prj_8h_cb157519ef498bf669298c5508492f3e) >> >> endobj 3235 0 obj << /D [3233 0 R /XYZ 90 757.935 null] >> endobj 3236 0 obj << /D [3233 0 R /XYZ 90 733.028 null] >> endobj 869 0 obj << /D [3233 0 R /XYZ 358.759 705.441 null] >> endobj 3238 0 obj << /D [3233 0 R /XYZ 90 688.714 null] >> endobj 871 0 obj << /D [3233 0 R /XYZ 90 615.657 null] >> endobj 3241 0 obj << /D [3233 0 R /XYZ 90 601.087 null] >> endobj 872 0 obj << /D [3233 0 R /XYZ 90 528.03 null] >> endobj 3244 0 obj << /D [3233 0 R /XYZ 90 513.46 null] >> endobj 873 0 obj << /D [3233 0 R /XYZ 90 440.403 null] >> endobj 3247 0 obj << /D [3233 0 R /XYZ 90 425.832 null] >> endobj 945 0 obj << /D [3233 0 R /XYZ 90 352.776 null] >> endobj 3250 0 obj << /D [3233 0 R /XYZ 90 338.205 null] >> endobj 318 0 obj << /D [3233 0 R /XYZ 90 260.541 null] >> endobj 2842 0 obj << /D [3233 0 R /XYZ 90 236.326 null] >> endobj 3253 0 obj << /D [3233 0 R /XYZ 90 236.326 null] >> endobj 2843 0 obj << /D [3233 0 R /XYZ 107.713 177.157 null] >> endobj 2844 0 obj << /D [3233 0 R /XYZ 107.713 161.217 null] >> endobj 2845 0 obj << /D [3233 0 R /XYZ 107.713 145.277 null] >> endobj 2846 0 obj << /D [3233 0 R /XYZ 107.713 129.336 null] >> endobj 2847 0 obj << /D [3233 0 R /XYZ 107.713 113.396 null] >> endobj 3232 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3256 0 obj << /Length 2409 /Filter /FlateDecode >> stream xÚµZK“㶾ϯPnRUãM`ss’uÙ•ØÎîTå`ûÀ‘¨n$R&)ÏŽ}@/H;S[s làëF7º?$+ d¥ñ*)ÒL¬¶Ç;¼z„Öïîˆ{›Àë$xÿíýÝ7ïôBZ²Õý¾ë. ”¬îw¿¬%’›„`Œ×§úzÚ$TàõûâÛ§ù>¯7D­ór M § ™ÊÍo÷?Üýó¾Gu: & æïw¿ü†W;Ðí‡;Œ˜V«gxƈh½:ÞqÊÜóáîãÝú1l;ƒö9³a×í¢ a)¼]ˆ;ËÞŸËm[T¥5éÕö|ÌË6k‹ YC+Ø åˆq}錈ë^”­í 3T”…}þ Ü´õyÛ¿ƒÁ>ê£î›÷„_4#ܨEÃŒý+ÆÌÊpu‘IO½ÀXС.#àn”„jºnò¶±OÙá`Žùñ!¯]kµwoÇ~§„"“Š ¬©õœyQ?:‰½tˆw~¨9Ò™äfvÎ4JI:…—‰CrÚMnÙûÌn+û—ï7¯³óÁ½øcCLÙ9oÐ&áL®¿w/š§ê ñpØÙŸ¹ýnòÝpHðT[d‡âO'‘›ÿرÎë—±Á\ ¤½q¶½tÔôñ˳m`l¦»ƒ‚*¥F„¥Á£1 èƒ xŸaÐk>8‘$™d¥Æ|%¹BšÛL÷sç»:;æ-ö»10Á¥ŒÎ!O4ð²Ë§z¬Ðèð—éʇpç‚—þ@/FPªYtF¼ÌDŸpþ “(Mù@ŸŸëêSäÆS??KŽ#¡XÔ1Ì¢c°Bª…QâCÞžkòå²Wb°½7Ƹë7¼Œþ5àÜXËk£„›…~YϨãFIb”.¨ce’@hª%·/u9™R1„¬ -ŠgE®Ài˜n2€ÃÒøxÞnófêðÞV‰Q k(nëEhÙV'sÍÖž·5 çl àˆ³õÇ3Ô·1,ÈIXÜŬê¥ã*Œ†\ΪDÁBÂŒídâ×T 'ùTuúæ–vÕM™…!9]ׄ)Dö„è Ú[6˜/° (zõ R@î¾ ‚žÚ± á»÷ªN©Dˆš¡B`Á¾Îs—²Ò$¥ûøPU»çö)sö3×ô”m(q…Û¶<ä¹K'À©ªmÖv¥ßô®ìÿ¦­ê¼Gêþçu]Õ¯i²G÷¾(=p>á%F& QÂ!U†¡³í¶ªw†Ð pŠªù±¿F´sv>…¯öÏEûäÏn {”aË …§U?Vmw»ÊÜÙ’}*ûTWç¶(;º.s3ºi.+'ùàún³ÃÁ¿Ü5T°ÃËßà'Õ€n›Ÿ sÁvýx—ܳþÏÐ?ÂÃäþ‰¥Q¨RD@ШkgM^: ħ$j4¤óögÚ,ñ7Ņ*1>sr2QhNJå:+wF´É’&=š6·Nû«£úQxhNf¶…™‹­m:õLÓõ*ß)ký–•ƒcõÀvÓ©TÐßþÞV;÷æxî¶ÝJÛÛghñNØÙŸ…ë2s¨L!–˜†¥K„‰«×úN: ħ[µÑ‘=*paAè|¼Gu2qH jÙ§õ` ·w± Se|6 š”¿)fÒi5\9¼]^¶ÅþÅBõ.¬óßϬw½C·ð0AÔNkïwçk³ÍÄbý“ù&g¢®€í;Õ¯ qÊäú)3UŸ¥Á· ;ûf.R–”-&àÞôZ¤8é$Ÿºm4d$R xp,†àãHq2qHEI6Rþ:©vû)¹Ñ`/Ey½2Ž3K$b¸—‰C›/_L%  gj ƒ´Éo¶Ù Çq‡^/€ (š$n±“‰#kHx]ç&¿xúnиæÊ¶¶O¾ärŸÈÝjµãÚÕêkúð¡+ÝáO>~e¶ }õð§‰YQö—†P^ó¢D3ÞÁT ÁçfƒÙDŠ×’×}L(UW~‚S ‰4lãì'=ݘû]^æõåžÓ›v¿1_>¹CÒŸ<§æöÑï0}ǰýE1ñ×°†ø³²ÿþýã¿`~¾ÿÖuEÊ\Mw—¬/þ›¾Ï/¶à¿YšNÏÿ€W` endstream endobj 3255 0 obj << /Type /Page /Contents 3256 0 R /Resources 3254 0 R /MediaBox [0 0 595.276 841.89] /Parent 3231 0 R /Annots [ 3259 0 R 3260 0 R 3261 0 R 3263 0 R 3264 0 R 3266 0 R 3267 0 R 3268 0 R 3270 0 R 3271 0 R 3272 0 R 3273 0 R 3274 0 R 3275 0 R 3276 0 R ] >> endobj 3259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.603 677.939 240.713 688.952] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.886 677.939 513.996 688.952] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 557.587 188.789 568.491] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.868 501.813 475.979 512.827] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 391.36 188.789 402.264] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.939 335.585 247.049 346.599] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [296.254 335.585 342.51 346.599] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 3268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 225.132 188.789 236.036] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.827 169.358 188.938 180.371] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.208 151.733 411.742 162.637] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.172 151.733 463.706 162.637] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.398 110.199 290.509 121.212] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.291 98.244 280.401 109.257] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.775 98.244 341.309 109.257] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.414 98.244 391.948 109.257] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3257 0 obj << /D [3255 0 R /XYZ 90 757.935 null] >> endobj 322 0 obj << /D [3255 0 R /XYZ 90 733.028 null] >> endobj 1146 0 obj << /D [3255 0 R /XYZ 90 716.221 null] >> endobj 3258 0 obj << /D [3255 0 R /XYZ 90 716.221 null] >> endobj 2848 0 obj << /D [3255 0 R /XYZ 90 552.017 null] >> endobj 3262 0 obj << /D [3255 0 R /XYZ 90 538.058 null] >> endobj 2849 0 obj << /D [3255 0 R /XYZ 90 385.789 null] >> endobj 3265 0 obj << /D [3255 0 R /XYZ 90 371.83 null] >> endobj 1420 0 obj << /D [3255 0 R /XYZ 90 219.562 null] >> endobj 3269 0 obj << /D [3255 0 R /XYZ 90 205.603 null] >> endobj 3254 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3279 0 obj << /Length 2188 /Filter /FlateDecode >> stream xÚÕZkoã6ýî_¡öƒ Ä,ß³@m»3è h§I°[`2(T[I¡»Õš ¼|³ÛæÕEqST+’-‹ro1œ2MW¯Þ-þsÕDµœ“:æÿ>âd ÜÞ-0b*K>ÃkŒˆRÉý‚Sf_ï—‹_›1Ìû ÞK‹SH)Ó/Ê9†ÉÂDAú8C„ÐÑô3…0æIJ%"’Ÿ$x¿"x™Wù}QÕñ¼ŸÁ¥Œ&Þ¨.ò€Ã(ÞR 8E)aÍ€šÃ?uÔoÞð̃Qćqõç09^Œ T±1^-‹ð¡Ô Ä$JSÞáó¾:|*6õîPšuðÐèƒú<¬êRrÄIt^ZHhZdIKCᢨaé‰ež“HÐf*zQ;™Û™°õ²ÎëÇ£IºÒ ¬®¨XæûÇb„‹„gˆ§.²n1C.”ÀŠl†Ñ\®)ƒh”#)¢Á "K! ò{±ð9ìnØ—›MqÎr“%£°Í'²l0á, d*ËH0—e,–ͲEl–??î÷ƒ˜# ÛÀªß¯n-àÂoÁÑøÝí6~¨î‘3NÑhº§0¢YGۇî„MëöðñXlÃ3K$™š˜Úž[‹™šÜX<7»Ñpvz½pÔÎïåŠ7{v·µùjÚŠ,mYKÖ‚"H™Óá.A‡Ê¯GS¬‰W¿¸D ?S¬¿5Ÿw+ ¢®–“33Xn~l‹:‡óÖ’,ªÊ»‡}˜ßꃘ«åÎÖ¤cQ›»²¯+Ã܉İXÁ½öàûC¶køü˜Àá ²uôfÖBâQœzf½¨»«O™ÿb95Š>ç&ÉäL:ʧ?¤æóys~7t®±À🠸¤°,„ˆ â0q½4dV™Š®YfãÀX¤®ÃC ÛåA=p»áÓµ‹Jóñî7zùû¿a7\¼½tÙti@kIR$©Ù?vG™A¾Ï«º8îòÒ|Ïëd2‚2¨]fõëXÃýÃP–ºýñô/à*åòË` Ø•Lòv Š?ƒØÕvWæ@«Ù3§Ÿõmoöyi_nœ. @·PÔóFÚé’ò§. ökLJ»¢Úmò½ùÕÙgOS(j4­Ã5fÒJq)UjUL 8[á8°˜3;“âôÑU£G¯DºªSßåµË·Øì®1¦ ’«Y|é/| Ýz†i"(ƒº7u˜:ôÚƒ¶@H¿mÛA ©BTf] ½½ç0ñÀ½-Gš`XÁi´ ö0¡6˜+¸K©gÝNF"‡[â>…±Û‰Ã¼òvS¤¹ôùŒÝN|>ϸ4úH†$¦ñ«‚ ëb1fÓq¬* º`9AÈb„º›GŸD¼ChÒ62¿Þ¸¢Sä›;s±3j·å¨Ø÷EYz{ÝeC¡K³A¬È(u}âDð‚gÍb‘ Ž&*‰hÒ`rùI$hú¸ [P8G‹™Ê2Ïå ç2õ‘˜ Ñ[°Wû»=HùÅã vö©x¤/»2 . #-£âdŒÄ[jlªÒÙön,j[;zaÇ ^‡yÃË0 œNX¼(è9Ì„Cg²x8»¥¼ps}^ª8Âl"WÌÕa&rƳ¹ÆÃ™\ýpsÜÞNÜi»7J¡7ä´áMÚ9¾ÑÖòí„|†çKÓ a55Ë-(<Ë35˱xn–£áì,{á^éùŽÊ"}—¥…e‘­“%ÏÉ geñÂ1+Ë/ÁålåCÕ³¼t›8ðì"LLžAböÄ^nÛ}.ã]wŽ‘ÞØ{[ Ýjí9S]ÃïÔÚrßô]B8sL› RHëÿ“¿é d(‘sxðà‡™÷ C ð Õ>ð£>ûÀ<š1>ý!Ÿý &Hó Ê 7ÐóÈ‘GúÔypI{΀÷¾ý?Ó‡ÑCþ8ápˆÑìë^šÛ²ã\þðs Q³Å¿NI”/~’£=ûÜÃM ®^eýCRÚýŸ¶þ‰Ìsa¦ÿ4þ-d®ïïÇÙþ±¨Ýabw#— ‚UônäaBw£“ãkMÊ™¦ÿHäð=©OaÌcq˜Wšþ1EÓ¿ÏgÌô÷ù¼Àô‡¯‚¤*~ô@a],f®é¯=Êrܤ”)Q”šÅ ¨u$J!¢ê0{¶÷¯îò´˜ :2×ø¨Ï´ù?bú É£œ,¤Ï©où .|N³…¡¦#Ñq¢…/ÿûÆÓ_fB5II§ H¸šsû‡™6º&ý¶(‹ªmdÝ¢¿Z)ºtÖÑ/îìåæQ瘞3l~£˜ë:êsÙ%ÿ¿ï/‚"þãwö«(C´Û,ÿpxúr[ ºK3=”ç/è}“ endstream endobj 3278 0 obj << /Type /Page /Contents 3279 0 R /Resources 3277 0 R /MediaBox [0 0 595.276 841.89] /Parent 3231 0 R /Annots [ 3281 0 R 3282 0 R 3283 0 R 3285 0 R 3286 0 R 3287 0 R 3288 0 R 3290 0 R ] >> endobj 3281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 629.377 188.789 640.281] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 597.496 350.936 608.4] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 3283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.19 597.496 477.351 608.4] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.805 520.09 280.264 530.994] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 3286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 290.884 188.789 301.788] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 243.063 350.936 253.967] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 3288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.19 243.063 477.351 253.967] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.805 165.657 280.264 176.561] /Subtype /Link /A << /S /GoTo /D (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) >> >> endobj 3280 0 obj << /D [3278 0 R /XYZ 90 757.935 null] >> endobj 2881 0 obj << /D [3278 0 R /XYZ 90 588.53 null] >> endobj 3284 0 obj << /D [3278 0 R /XYZ 90 573.959 null] >> endobj 2882 0 obj << /D [3278 0 R /XYZ 90 234.097 null] >> endobj 3289 0 obj << /D [3278 0 R /XYZ 90 219.527 null] >> endobj 3277 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F8 1129 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3293 0 obj << /Length 2414 /Filter /FlateDecode >> stream xÚÅZ[oÛF~÷¯Ð¾É@4™ûÅ ¤ÝMРh³¶Mƒ‚•h[,iI©qòë÷ g†Þ†ª[»ðiêÓœû7ç EfþÈÌà™ &fËû3<»…§oΈÿt/¢Ï¿¹>{ùšÁ·‘lv}S}]$(™]¯ÞÏ%’ç ‚1žï‹èî|Až¿^orww™ßäÅ9Ñó|»„G +@*}þáúíÙ®k©^'Á¤•ù¿³÷ðlº½=È=û÷cf÷gœ2¿9»:ûo½†{ÎàùYœ`D¥ž-GZ B¦H1 æS†°lÌ'¼1Ÿ`…a³€±>øsl-zùšëI–¶ýÝúÅá.?d]ˉˆ7Ë êå =µ(„AH8¡-µ¾ßmoׇãʆ‚©y¶]Ù9ßd÷¸R9ÒØPòÿŠ…7ŠDÑgà<^#˜ü ‚/%ÜRÚ[ŽĈn–#«-eÌ#v7NOp“»Ù»çdž/ùÊ?Ù­·w»ÞºëŒ9§bþÇ9óÜXîïòb½Ì6²ÜíŠÕ€yé¼Û}ûõ¢áS@a nÔiÒ€ÆÓÄc¬ÿšÈ‘‡Ÿ{ú0 _ŸÐÇczú´òƒ)„y[Ÿwàßà\(ÕÈM£~‘Òk¢z̨W<ä§”‡ìÐ÷ GB¦µñ®6mŸ$8µ¹iÇÒù£ÈÇbëîÿ°)–mŽžÕnv…»É³¥¥ß.zºSƒ$ð©TE‡•÷˜EÔ^V/T¥¢'3DuZžƒ¤Åq üIZâð0:Áó«ãr™—Yl• #&lm@ã¶zÌ”­)yÁÖ”¸`k$Žx[¿Ûžó:Ö«Áô&ër¡H¿™ZU’ZírÂ#z‘Ñabf’Rdˆt”‡,"L¯Ða Ä1Æj³ˆ@}u(AD6 ¦'åöæ¤<™çË*7YŠÞ{<ç&mkµ5`&lMÊó¶¦Å9[cq¡8n6=±# eÔ’k?(n=â2ÖÀ£Ó*t–¬Ú¹â㾸ï ×à@CÓF{LZ¤fU·\õ>¹ß]öYYæ«ñ(+È A'¢Ü€Æ£ì1SQNÉ QNŠóQŽÄÑáî]ë²Þmƒ?Šì>?@[7/É/]g‘vKw‹ÇL¹%%/¸%)λ%ǽ[~Ü†ÍÆ§Äý®h¶ŸêjéîÆŒM˜˜Ü‡Äß·IÄdX®Ý‰ƒŠŸò"án×í8û§™®!²Ûôôu»úûçÆÊê¦ê=å×½˜nó³!ŒªÕ4…¸t%õÚâ‚ÿÜžQöýÁÁ˜K_÷ ´ƒeØ·IPÛ]V0ðÁ(ì5΋¢ptv›»Öqím,óCíŠNB1 “…ŒeŒ´ЋÞK®î’ ­]\€¦= 8|“·褴‡¤¥ He›Ò‘ÔµÏ×|›ýÎz¼‘wu€-OôB@'õé.iõù´,Á¿9ul„Äné¢ -„H:$`Òtªûµv«µ`Ú/½0S*¾ Ž”?€q³±Í¾/û:—¬þå¡8.9¡’ÂæÕ™Î¸€¶·iA1ëÏfÀÏÐüã-}= A’Ê#Ø–À¶G|î¬ôjö ŠJÝ"ŠªV âk帅Ök Á´šq`:[èTàЋ>д—L5@ØX´…÷‡I‹„ÙG±@³~ Š’‡c—/ùv}¸Ë6/³/ëû£½óiå>_B.€Z+ÊÄó¼IyÏ`Àõ†øu_ýòn ööÔ&w46uþ„MÜS´¥$­¤O·ß]õi€T0ˆ‡¢P“=žG/"øÀ@Ñ^Ò‡òm¬þ­;¬›[Jô!&-šiØ’MKt^¿”Ëb½oúx‹¯n^½ûnˆ4¸[:¤‰8CpÆ-›xwùögzõÛ+ÈË7Wu!ãVpü—ú¬‘Ò´_ÂZ€)>ì¥ûÿÛ¬€n`mû§‘ Á“'æߦ|ìQ"VîQîQ@Ã꤮Î×p³ßd[[Å®Ù*DŒHÕ¡]ËÕa]„¤*B-G‹P¢º~[ƒ°3iKÆ!:Åè3k箽óUKÃþ|rcÓ;;ìû_BÂqþœÇÊñr¡ý&¤µÿ$¨…Aò1ÍO¥–>J-ã©êfœZ4â`aK‰µ8LZ´=—t‰E?†Z ΃ì"ÜòŽ]"r1C }h‘Ëýy”\šö¾t*¹@RÏj±ÿuS—S¿°tÞ‚%Ïû:D#,‚e¶­Šã),AŠçaÈX³CZ-CÚk•2ÖËž!í3›Nöš µ´ØònñPºa„Y>âÇ"ì8MNmXáP´'“Jç Ý }˜¤”HƒQFIÈ „ÒÈ}2>‰»‚»ŒR¦F{ 46☪!zšG#ÊT+ʱGD¯¸1ãàsƒ’=£“3ŽC/"øàûãxÉÔŒybL[xoÆq˜´Há6-‰qJ ÿ@­çd¾ ™úäëj”/Øãù‚j؈!î'v!”+`°Sù¢Aò…‡œ>ÝÄŒ 7)¹~¶‰ä>ÍhsàŠ¡ÑXâÕx÷QŽ6Q§ÔÌí¯ ¢Ä>JL70àsò\ã Þ¼)Õn¼¡~ó¶ÂxCÝæm Ž7 ^}ôj°Q  Ã5°ñdì¯× 0¼Uƒ À`8ô޲Õpü¹‘'žw Úc­#'Hpý¾îugn’ðS»»ñðVvšn"ø(ßÌé3OK‰±%)Ú·(±èçéQèP20õŒñNÓ1 N=#¼#iL9’ô³qö$9õ­þ3¿!â:žz¬Æ‰©GÕýäÄÙhÖ&NP±z%ån]ÞØPxî'W9¹S eÚýKU±Óêg"CÑ£zh±0&OÙÒØ}@qzjK£ â§@ z”b<äô(Ö`Œ`Rr=¿Drÿ½t~ ¥~cl£Jܯ?÷ûØê—½ÀŠŠ˜øÇ<š^îØë¥[£ÞäÛ¼hÞ¶S®Ï ‡ß9ýzuî.Ä\`zÁ°ûbâGšËGÁI?}{õ½µþÿUSSûî¿wŸoóÞ;PQý|¥ëžÿTÛ[ endstream endobj 3292 0 obj << /Type /Page /Contents 3293 0 R /Resources 3291 0 R /MediaBox [0 0 595.276 841.89] /Parent 3231 0 R /Annots [ 3295 0 R 3296 0 R 3297 0 R 3299 0 R 3300 0 R 3302 0 R 3304 0 R 3306 0 R 3307 0 R 3309 0 R 3311 0 R ] >> endobj 3295 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 589.296 188.789 600.2] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 543.832 350.936 554.736] /Subtype /Link /A << /S /GoTo /D (structprjprm_30e78bb110dc7a8ad0303370ce20762c) >> >> endobj 3297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.19 543.832 477.351 554.736] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 486.83 190.602 497.844] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 469.206 136.644 480.11] /Subtype /Link /A << /S /GoTo /D (prj_8h_d43dbc765c63162d0af2b9285b8a434f) >> >> endobj 3302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 390.231 139.414 401.135] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3304 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 311.257 139.414 322.161] /Subtype /Link /A << /S /GoTo /D (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3306 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 261.862 189.496 272.875] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 244.237 136.644 255.141] /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 165.263 139.414 176.167] /Subtype /Link /A << /S /GoTo /D (prj_8h_9a387f05414e7b59487fdcb03ff79ced) >> >> endobj 3311 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_be28216295d9e7ad7dbb01bf5985df9f) >> >> endobj 3294 0 obj << /D [3292 0 R /XYZ 90 757.935 null] >> endobj 2883 0 obj << /D [3292 0 R /XYZ 90 537.221 null] >> endobj 3298 0 obj << /D [3292 0 R /XYZ 90 523.075 null] >> endobj 2884 0 obj << /D [3292 0 R /XYZ 252.409 472.359 null] >> endobj 3301 0 obj << /D [3292 0 R /XYZ 90 456.056 null] >> endobj 2885 0 obj << /D [3292 0 R /XYZ 255.179 393.384 null] >> endobj 3303 0 obj << /D [3292 0 R /XYZ 90 377.081 null] >> endobj 2886 0 obj << /D [3292 0 R /XYZ 255.179 314.41 null] >> endobj 3305 0 obj << /D [3292 0 R /XYZ 90 298.107 null] >> endobj 2887 0 obj << /D [3292 0 R /XYZ 252.409 247.39 null] >> endobj 3308 0 obj << /D [3292 0 R /XYZ 90 231.087 null] >> endobj 2888 0 obj << /D [3292 0 R /XYZ 255.179 168.416 null] >> endobj 3310 0 obj << /D [3292 0 R /XYZ 90 152.113 null] >> endobj 2889 0 obj << /D [3292 0 R /XYZ 255.179 89.441 null] >> endobj 3291 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3314 0 obj << /Length 1880 /Filter /FlateDecode >> stream xÚ½ZKsÛ6¾ëWè(„àýHONÚx’é´©¥™f&ÉtT™¶•±)WRZûßwA€H$­Ø’Kìbö³HÆþÈØà± &Æ«»_ÃÝóñOgðx<³½zÇà-d$/®Š×%A‚’ñâòóD"9Œñä~û ÝLgTàÉ»õmæfÙU¶=ÉòÜbX¤2Ó¯‹£_•Vo“`Òêügôù+_‚mF1£ÇÿÁ#bÌønÄ)óóÛÑ|ôGµ†»Ïà~l[‚°þ}Q†°å¾G„ùÍ­ó½ÛÐ~™ï2?ÿ‚Þí·ßWþú~J&Ûo÷Û;»½Wï?¬N¸Å Øbÿ‚1s2\dâŠz p¦M$Iªª5±"ã‘Q¦a¢à9/žz3‹%(=,Aâ‚–ÀÅ2…õ ¿s³ï÷n\6ÃD ðL“±Â° 'ÎÑöÁöÚK\./¥gxáöРæ’~óÞ‰5åZ#Ñ­)oD¹”éVi0 Ö±Ã(^m¶ÁöëàI™sßu¾¹ÛäëÕ!|Lqð‚BÌæeñÂâì·HPmJÒFPë ¤±®có-[í×›¹èSX@aR‹þ<ËZÞÃi¥ÆR+¤‰ê —žâm?6–ô¡ƒ<ª«isþ«Ñ ¡—éVÍtQN¡ê nÅp™íVÛõ½u•»±¹ò%|ãÁéìã{ÔÈŒ»µgŒÊÔЀGÐàî ðñâÃ':ÿë €àâ|^•(nÖ¦}©]› ¢d«67°÷»~»Üî³ÝÔ,s·P€#Èt°Ž‡£` '¼Ä¬òlLªÉck-"“¬3;!Ãñ«Íf{¹Î—`œ3t»±ð¹XŒ¼]æþʆĎ‘R#” Lh«Ö¬x¢Ö4bU[k)ÃZµæ7±q#ìo=¥bòIæÊq†ŒM[i#¤C•û›l»^-o]‚„ÎiúYÛRb½1; 7“EÌ$L)†èΆËy(!žÚÌ%À´ …’ƒxJ¼Œ‡(“4”8Éš-(qϺUs8 °©©>J ¯£h"Üò4±Þ‚>ÔÐdN?õ£‰}i(špª&,±Wl.î™Ë©.2ŒH%/‘n˜ž2{-D— cËÒíA1‚ˆ´›áÕõàKÀ!lY ­‰íXäM ‡…ÖÉ6§ì­Bß 7̺ˆ§µ´Ùñ퇔. ³)ú CP n†BF ž„ŒR¦ì>èCdÔŒHAF§j¡êƒ B†lBÆn}±dC>‘:"‘€Z S›Ù)ÇíÑlD¤ V\DûRÊËÎ*ávTkËuñH< ªÚ q]Ê´Ê”²'QÒg»½g×›ëíòþ¦ $8»¬ôùâüù±€BÂr.‡öÜþAÉ¡`ˆ'Á ”NEjF¤¨H§jOEBÕ' "*‚O§"þ¥v]Ê ÷ “³±×éS×@6ÔªûO]‰¨Q±SךhO];:oÃÄŸº”óÉüså¦1B8’Uç«6X-YmRö—[óWœDØH±›ãl}BØ/> endobj 3317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 702.288 189.496 713.301] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3318 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 3320 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 3322 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 3324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.721 476.047 187.832 487.061] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3325 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 3327 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 3329 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 3331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.721 249.807 187.832 260.82] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3332 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 3334 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 3315 0 obj << /D [3313 0 R /XYZ 90 757.935 null] >> endobj 3316 0 obj << /D [3313 0 R /XYZ 90 733.028 null] >> endobj 2890 0 obj << /D [3313 0 R /XYZ 252.409 687.817 null] >> endobj 3319 0 obj << /D [3313 0 R /XYZ 90 671.089 null] >> endobj 2891 0 obj << /D [3313 0 R /XYZ 255.179 608.418 null] >> endobj 3321 0 obj << /D [3313 0 R /XYZ 90 591.691 null] >> endobj 2892 0 obj << /D [3313 0 R /XYZ 255.179 529.019 null] >> endobj 3323 0 obj << /D [3313 0 R /XYZ 90 512.292 null] >> endobj 2893 0 obj << /D [3313 0 R /XYZ 252.409 461.576 null] >> endobj 3326 0 obj << /D [3313 0 R /XYZ 90 444.849 null] >> endobj 2894 0 obj << /D [3313 0 R /XYZ 255.179 382.177 null] >> endobj 3328 0 obj << /D [3313 0 R /XYZ 90 365.45 null] >> endobj 2895 0 obj << /D [3313 0 R /XYZ 255.179 302.779 null] >> endobj 3330 0 obj << /D [3313 0 R /XYZ 90 286.052 null] >> endobj 2896 0 obj << /D [3313 0 R /XYZ 252.409 235.336 null] >> endobj 3333 0 obj << /D [3313 0 R /XYZ 90 218.608 null] >> endobj 2931 0 obj << /D [3313 0 R /XYZ 255.179 155.937 null] >> endobj 3335 0 obj << /D [3313 0 R /XYZ 90 139.21 null] >> endobj 3312 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F8 1129 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3338 0 obj << /Length 1803 /Filter /FlateDecode >> stream xÚíZ[oÛ6~÷¯ð£ý`ŽwŠÝSšµÅŠaë’+Öƒg+ŠÄvmgKúëw(R1)‘´’4 A ‰:â9<—OçM†þÈPã¡ i&†³ë~‚Ñ7âîNàöÄ»ÿòlðÝkO!-Ùðì¢~\$(žÍ?Œ$’ã ÁVëÏèr<¡^WW¥=;)/Êõ˜£r1ƒ!†HxüñìíàÕÙ½Vg“`Òèü2øðç`ÛÛFLÿá#¢õðzÀ)sçWƒÓÁ¯÷sØqã±e ºë¢4\eKQ¯ë´,ÛF,Q¡Ô½X­ÆÜXr'žÂFzâ‰w”¶§4šÁz{ކÒ1‚ˆ“"4¢µÖF&¯šc¤±T_,×6lS{˜—›ÙºZm«åÂ,/ìq{éâ{ônLF?"ce˜&a§Ÿ0 ±âM® Ž(u S-¶N[!³Mé®ÍÚ7ÛõÍÌ]¯àþèój}mÕ@ZÀ²Íüç3+‹ˆB\Q'¾íšJ’TÞÏa}^”Â0Ñ„(¸oäYZOã;” Dåξz ¿±g7«ÆÁí¸BMM‡R1D¹Ü—\Nzâ‰w#ÜšÒ9Àù1P^<ènç”É+Ô˜ ý8zéÕ H‚³­÷¾–‹j{9½únúµº¾1gö¹òËM5¯ 6ÛéÂKtì™Âduö£“ãHØ °VØÃ XNqŸ:ËÏåÌ”²ùÁ0\P—|jH+„É{¢†'žDF¦Ar›F ëÞÀˆjX™¼j€Ât ú1¨… nç¶!|È` ȸ¥›]¼;yûžžþqùqòæô¾q!ïÁnTª[ÁZÚêøÃÔ³º”aèxºÞ–›jº°yˆ£9¬Ã—ŸÄ[+ƒr'qû=¬NÊÑ]g""“<›¢ æÌ–Ëõ¼ZLÁ*caÞ²–Z¿ÃÉêjº(í½:&04á!V¹Z„ l-6…3¥ Q"Ìö"Í®r‰F²0ÅFïE«"]z-ížxe™þÜ'0"…2YÕe|Õφ2A##Ú(óuµHó˜à=×a{â˜)áÌŒáñßl%=À=.8WÐqì'=Vzâ‰GHO8e†ô[éPy;›œL^¥¦H ¨ü¦´gµ¼º[,¯!ªf¨^üþîçç`=q,úv%€—ˆ¤7^ìÄÓxádú³žÀˆëɪv¬ÇWý<¬'hId,bŒã(ÝŽ¸‡º¥ káÝÊ-XCv,Óë ÓaÈþ¡˜ŽÔqª&ÖTŽÖÙpÒP8­Ç(Õ’-H®þÌ\¶þªæ:]|в'Ÿc:ìÉLÇØÊõæìm@‡¹ŠÞ4ÇOJ#ÓŸæF¤¬j×€øªÓ€¨X¡8)LÙµQzÅÙ¹CsÕ¡6Dú‰kDò‰Ë‘Âê°¼æó01‹@j¤‡ÁEcR0±¦4p´”¼ìpÑŒÕ|Žq>™#T/>cáæúßoOB:³·=¡ #Qð¾hâ‰'Ѥ‘éOg#Rh’UíÐÄW}˜&EMÊé£è à ¡úÐÝÇ¡4ÜÇqfÆöpÂâƒ÷p˜"CJ1Rû7ôÄîáøSæ÷px¡Cå‘M#“W œGÆo½‰ÓœÚ/eæ«ú4¤¦é7^=ú3H†Ö˜Üîý„b†ïMk<ñ4n8™þ´&0"Ek²ª­ñU`3GG@ã!´†7%œÚÄ‘RvJ˜=š›oy»FÄ e7qÅlT½ÏyƒC7]¿Á¥µ¿Í€{ƒ›1 3e6ºö{º̓®Í\®§öFªÍšÙ ñÿÍœ½} ¡ )Þ{³ØOâK#ÓŸåF¤ú’¬j×—øªŸÔ—´~2$À¥"Ú7™œ%öýö¸Õ?ƒ‚ÆAíÿ J" µ¿rÚÍ¢Þ”‹r É7wKpK9k:ºqËø¥yr{ ú¦/¶W×g\˜loœôÛñéOfõ/Ý£Z{úç=þ°¼½ûT.ÚÞ1?wêºçþ¤÷ endstream endobj 3337 0 obj << /Type /Page /Contents 3338 0 R /Resources 3336 0 R /MediaBox [0 0 595.276 841.89] /Parent 3360 0 R /Annots [ 3340 0 R 3342 0 R 3343 0 R 3345 0 R 3347 0 R 3349 0 R 3350 0 R 3352 0 R 3354 0 R 3356 0 R 3357 0 R 3359 0 R ] >> endobj 3340 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 3342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.196 670.093 189.306 681.107] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3343 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 3345 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 3347 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 3349 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.049 443.853 191.159 454.866] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3350 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 3352 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 3354 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 3356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 217.612 189.486 228.626] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3357 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 3359 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 3339 0 obj << /D [3337 0 R /XYZ 90 757.935 null] >> endobj 2932 0 obj << /D [3337 0 R /XYZ 255.179 723.065 null] >> endobj 3341 0 obj << /D [3337 0 R /XYZ 90 706.338 null] >> endobj 2933 0 obj << /D [3337 0 R /XYZ 252.409 655.622 null] >> endobj 3344 0 obj << /D [3337 0 R /XYZ 90 638.895 null] >> endobj 2934 0 obj << /D [3337 0 R /XYZ 255.179 576.223 null] >> endobj 3346 0 obj << /D [3337 0 R /XYZ 90 559.496 null] >> endobj 2935 0 obj << /D [3337 0 R /XYZ 255.179 496.825 null] >> endobj 3348 0 obj << /D [3337 0 R /XYZ 90 480.098 null] >> endobj 2936 0 obj << /D [3337 0 R /XYZ 252.409 429.381 null] >> endobj 3351 0 obj << /D [3337 0 R /XYZ 90 412.654 null] >> endobj 2937 0 obj << /D [3337 0 R /XYZ 255.179 349.983 null] >> endobj 3353 0 obj << /D [3337 0 R /XYZ 90 333.256 null] >> endobj 2938 0 obj << /D [3337 0 R /XYZ 255.179 270.584 null] >> endobj 3355 0 obj << /D [3337 0 R /XYZ 90 253.857 null] >> endobj 2939 0 obj << /D [3337 0 R /XYZ 252.409 203.141 null] >> endobj 3358 0 obj << /D [3337 0 R /XYZ 90 186.414 null] >> endobj 2940 0 obj << /D [3337 0 R /XYZ 255.179 123.742 null] >> endobj 3336 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R /F40 783 0 R /F8 1129 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3363 0 obj << /Length 1923 /Filter /FlateDecode >> stream xÚåZMsÛ6½ëWè(„à›@zrÜ$“LgšÚžiÚ4“Qe:–Ç‘Iníüú.ˆ¥ Åȱ.BKì»û°$Rø±¡¥ÃLeÄ 5œ}Ðágè}=`øïþžÿ¿¸<{%à)bµ^\kFgËË#MôxÂ(¥£Õú†\'\ÑÑ«ùmî[gùU¾33Ê3è4IÃÆ/Þ^^ì´¢MJh§óëàÃG:¼ÛÞ(Ö ÿ…6%ÌÚá—äÛ·ƒóÁo»1|¿€þÔ´ûçÅ¡Z•ó"’Š“›/¶~Bßòé†ßûö_TÑwgoÏùûOc6:9{}=ÅÜ@ç„eDsY †ÁÏ^q^éä ¢5;!7ZñüDò Vsy“϶·˜nçc®FÿŒ™å®ÏŒ6«ë|=ŸMo½Èl¹\_ÎA0ßxE¦Òô‚©¨@‘aÁü1Y%!ôO0s­¡Éys<ŽeÕp¬95C˜à(±]zO§k°n>]4T ÝÊÞöÝÃröe£‡¤qÐêk\¸n…•ó…¿n¯q¡W·ÓEîû–Wþ:õc†ñ± Y¡,8ž«:~1ß^OoŸM¿Í¿Ü¹–œüë]Ñ”v4õé1­BÊ-i0%Áˆáåúüùò¤©ž¹Èîžµ"†”Àðš/¤ˆ× SŠ(ˆ}¶Þúó<¯'*£ü u£iæSÍý±þŒgAÒ•Ò“@¼H¼Ð¬úÞ¼H˜]FÔ†Hfb#jù^Êt«–”Xj#ÕW˵wzä2ßÌÖó•[*ßábÀ]‹øp“wŽoH"$”~"8à• q…Õqe:_oòm›íún†÷+}³ZÁ¬á 2"³ B¨Àè ÂIðßo±ÃÀåº;C—þDe2 4³‰d‚d¶dÎxßøÖݪ\غ?•%™ó'ׄJ¾/¨Pzˆ7=[çŽk)7~°ïDÊëÁ„2Ý*%‚ëHeèÅ*°M@¤ì0ëd¾~èB®ÛAáÉ›³'k %y´‡uõ¹Ö *ñv0@™ òm;(¢!Ü##`àeºU ·-ØHõ!`DéÇöHU<÷|Uïùù§ö jæ%Ä"ãÍÄd æRÕî¾}w¶°±1½ww.÷§{,Z¶f¹'.m–¥¶fg¢ÛšÝÕ¯64pkvÍÂpMeƒ•ʤ‰ó d[òK’ÌdÎ/Él#¿Ðü¥¿Ö«:×WUuE& F0¬)º =éC·¯§zÕy¦sžápˆ#ÒȾ•„âBÔö@¼”“,ëÍiñv¸A™þœ&2¢­8éTÅI¨ú8ʼnN'ßýÖê8‚‡œîÑ }aôÂm7§QDv\NÃv'E ÞÍi(•Çb5•e1^ ÄKQâ¥ó²`)ZÀRºÃ¥,'ˆIPňôˆrÆ0Âvî“T3ŒJbŒî[ÍpÀDÑû¸µ’néO|B Ú ¥K/"K ÷8‡%YXòéa¯],aÜþÖ“%X!œ›¸xòf6¡ 6f)§= –®PL«ý/óPzˆ'hO38Ë‚÷)à)M,”›þk,ÔîŒ{/ò5DÛ%¦7¦ùÅØòÑ®ö¯%àKaö9åÏÝ\îŽS†ûâ•sS ¿Ÿžÿ⪈ø(­×7ÿÆWð?/ï>ç‹úê¸ÏÉšËó£> endobj 3366 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 3368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.721 622.889 187.832 633.903] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3369 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 3371 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 3373 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 3375 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 3376 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 3378 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 3380 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 3382 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 170.408 189.486 181.422] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3383 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 3364 0 obj << /D [3362 0 R /XYZ 90 757.935 null] >> endobj 3365 0 obj << /D [3362 0 R /XYZ 90 733.028 null] >> endobj 2941 0 obj << /D [3362 0 R /XYZ 255.179 675.861 null] >> endobj 3367 0 obj << /D [3362 0 R /XYZ 90 659.134 null] >> endobj 2942 0 obj << /D [3362 0 R /XYZ 252.409 608.418 null] >> endobj 3370 0 obj << /D [3362 0 R /XYZ 90 591.691 null] >> endobj 2943 0 obj << /D [3362 0 R /XYZ 255.179 529.019 null] >> endobj 3372 0 obj << /D [3362 0 R /XYZ 90 512.292 null] >> endobj 2944 0 obj << /D [3362 0 R /XYZ 255.179 449.621 null] >> endobj 3374 0 obj << /D [3362 0 R /XYZ 90 432.894 null] >> endobj 2945 0 obj << /D [3362 0 R /XYZ 252.409 382.177 null] >> endobj 3377 0 obj << /D [3362 0 R /XYZ 90 365.45 null] >> endobj 2946 0 obj << /D [3362 0 R /XYZ 255.179 302.779 null] >> endobj 3379 0 obj << /D [3362 0 R /XYZ 90 286.052 null] >> endobj 2947 0 obj << /D [3362 0 R /XYZ 255.179 223.38 null] >> endobj 3381 0 obj << /D [3362 0 R /XYZ 90 206.653 null] >> endobj 2979 0 obj << /D [3362 0 R /XYZ 252.409 155.937 null] >> endobj 3384 0 obj << /D [3362 0 R /XYZ 90 139.21 null] >> endobj 3361 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3387 0 obj << /Length 1854 /Filter /FlateDecode >> stream xÚ½Z]oÛ6}÷¯ð£ý ŽßÝSÚ5ÅŠëâ+Ð…ç(ÇvmgKþý.EJ&%QVÝÚÉÔï%ïåá9’ÈÃ\;ƒö¶a šã¢4eKQŒk’çõ –H+U™nì…ÍWoq8,­³À¼á´Þ¥õ óøD·Ÿ°ÀðOA08Ñqµ±–6Ý®9F›ÈõíjãÒ6u‡›|;ÛÌ×»ùjéV·î¸»óù½x?&£ß‘2.“L¸î3F!W¼¬Ä!C¾`æËëd–O·ôÉÛq¿¿z;¡¾@ÏWo&å,ÀØ2¢¤.VSá8)ÁØU³˜Qn+tuæ³ÝÖ5,§»ù˜ŠÑ¿c"FvDÌŒ¶ë»|3ŸMÎd¶Zmnæ`˜o/L¡Èør&$˜ùå•“¿ÂॄSJ[úC ÒVuGš£“ˆJâ-v+â«)¬°8Ÿ.}BH…·x‚žŠÕè¹5>ÉÆG½E8uÅÔΗ.`W=а^L—¹k+* š¦ÍR"„#^E8{^Ì—YQ,vD¡*¤ÁUÅM™:(¥üÛcy:u4ÝטsÃñÞüQåì¿z}шEîñ ¤qÙ‡-7¨5X<È…K0_ÆüÎHΠ”U_œ Ì“8SÚxœtg¢ R8ÓéÚãLèúd8#œá¸3ÓÍ6ßík`»Û<Îüï5ô¿¹_oüúàá "ÔTyÇÌO°4T(­ò~ßVÄrU«˜B©¥:* fÙâœ7‘ ¢û­;{\—3[O(lÚL‘¡0°Þ!ôUå­³À¼™ÚZ—~ð~#ç*E›Øy½š¼M·KéÖ‘Ç0‹Aa52À’¼Z› €¥ª*6Ÿ˜ y8¨(ZÃÅÕÏJ%RFE{\8P Œ§'8æIp(mJpÈwippsÑgÓí„0¹>Z‘»¾› „“dÎ1trˆ¸›z3M`,>ïÖ—¦vëNìÛPà’ÒÞÔâÉóŠÄ¦ÍlÚR™ÖMB.6mÕÍ64”›6œ™€k­›¶DFÕ—Ü.7¸5±ÜÂBüàr“€Ú´±Ü\w÷5èX 5,â!+ݬPÛÕtVRvWQ ¸ÊzS nàH{KšÀ<‰&¥MI‘¢®=Õ]Ÿ‡jÐ6ªñ’f¿ñ¤zÀ üjèh‹*WÐ36uò¼z†sê1 ŠÑž˜Ùã"DYà"}Ýè áÔÕ”nÇE„f.+–ƒ80ÒD¨Ó‹š@5,OIM ,$ïÍL8˜q*{cÉÞ<%Þ¦¿l‰‚HbI—ëK×gy<ÂYKòãd‹ P¿ê'ÈÙ”-Š ÁET>Ì&zi¤$=^¶p$A0 žðA1ì­³À¼E¶Ä]vÈC`]¨Øy½š¼M·KÃRèÈåQºå÷4u6Ý•w´ƒ—ã2÷¼>…^!I¨Üž ƒˆ6º·^ Ì“¨PÚô×+Q)½ÒéÚë•ÐõiôJD/x $´èÀ‚/ôÂßÔ¤VR7Ÿ+0& ½½–Ã6uH Í„œG²(D«ÒŒ¶fÆx±5ÛP‹ ·'~k¶×l2lSÛÖLí³Òö•foM®4-ÈÁ•F)°ªPªX·–ÙˆÛ¥ à ;µTßÃ÷ÔI•ƒô‚* P®=$0OIiÓ_ªDA¤èE§kO/B×ç¡¢^4¥JKö›}›TI` µ‹p/U ª›¯^DT¹ðÓW.D’|û¢ÈY«WÀñP­tâ!ä u®G8ûÈjï]„“*IîüD—RNÝ{žzïBtˆ‡L²½ZÑ5­r€’P÷îõ„”DYùÚ“‘XâFto˜'¤´é¯S¢ R@ÒéÚIèú<Ïlwy~Óš>*±rrùî(eÁÁ$õ Pv*X_šA(CŠÓÞè°7O£ƒ·é¯W¢ Rz¥Óµ×+¡ëãõJí‹a­È&–¸ïNŽû–§ø Ij@~„d_)pÿ±Ž÷nGô&_æØî|…•ã¸:zôcø³,_îļÀôÃîÅÄ/ó[KJÊúûÕ䯗þV¤u§ÿ<»ão«§ç¯ù²>;ök£æôü€Ä$ endstream endobj 3386 0 obj << /Type /Page /Contents 3387 0 R /Resources 3385 0 R /MediaBox [0 0 595.276 841.89] /Parent 3360 0 R /Annots [ 3389 0 R 3391 0 R 3393 0 R 3394 0 R 3396 0 R 3398 0 R 3400 0 R 3401 0 R 3403 0 R 3405 0 R 3407 0 R 3408 0 R ] >> endobj 3389 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 3391 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 3393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 590.695 189.486 602.082] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3394 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 3396 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 3398 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 3400 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.693 364.454 192.803 375.468] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3401 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 3403 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 3405 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 3407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.962 138.214 185.072 149.227] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3408 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 3388 0 obj << /D [3386 0 R /XYZ 90 757.935 null] >> endobj 2980 0 obj << /D [3386 0 R /XYZ 255.179 723.065 null] >> endobj 3390 0 obj << /D [3386 0 R /XYZ 90 706.338 null] >> endobj 2981 0 obj << /D [3386 0 R /XYZ 255.179 643.667 null] >> endobj 3392 0 obj << /D [3386 0 R /XYZ 90 626.94 null] >> endobj 2982 0 obj << /D [3386 0 R /XYZ 252.409 576.223 null] >> endobj 3395 0 obj << /D [3386 0 R /XYZ 90 559.496 null] >> endobj 2983 0 obj << /D [3386 0 R /XYZ 255.179 496.825 null] >> endobj 3397 0 obj << /D [3386 0 R /XYZ 90 480.098 null] >> endobj 2984 0 obj << /D [3386 0 R /XYZ 255.179 417.426 null] >> endobj 3399 0 obj << /D [3386 0 R /XYZ 90 400.699 null] >> endobj 2985 0 obj << /D [3386 0 R /XYZ 252.409 349.983 null] >> endobj 3402 0 obj << /D [3386 0 R /XYZ 90 333.256 null] >> endobj 2986 0 obj << /D [3386 0 R /XYZ 255.179 270.584 null] >> endobj 3404 0 obj << /D [3386 0 R /XYZ 90 253.857 null] >> endobj 2987 0 obj << /D [3386 0 R /XYZ 255.179 191.186 null] >> endobj 3406 0 obj << /D [3386 0 R /XYZ 90 174.459 null] >> endobj 2988 0 obj << /D [3386 0 R /XYZ 252.409 123.742 null] >> endobj 3385 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3411 0 obj << /Length 1920 /Filter /FlateDecode >> stream xÚÝZKo7¾ëWè(–!9|¦''­Ó ’Ú  E^'2dI])óï;\rµÜ§ÖŽ#…ÜÇ3$g>η#6¦øccKÇZjbAŽç·#:þŒO_ŒXx›àë$zÿìbôä°± Æ×ywňäl|qõa¢ˆš&ŒR:Ùd7äË4á’NNËÔ_¥×i6ef’®æø¨FIÓ¯F¿]ìµ›$(§óïчt|…¶½QÖŒ¿á5%ÌÚñíHp×ËÑùèýþ9àó¶iI‡çÅP%‹yA„“[¬v~BÛKJáŽoýÝ%•ôÝÙ«÷üü¯“)›œ½8Ç'Ì͵&LÅE>ܾ¾zrÊy©ur‰–çbn¼|„˜ž\¥›l}“Îw[ÿ|–íÒíb¶ò£˜ÈxA”QÑ ^‚Eób´w¿à´”š|o Ä$%ÊXÓ`M(öÎ×ëìj±š¡YÞÄÅÊ·»/©¿Ø,g«p¹¾öíÌ/>c–0j¨ç³Õv½JN—³Ûí.M¯|·rZ‚–= à•,:ž¾nÛí9ôN ·Z«–|±.f²Î·3͈²w•+½“àÄS.'ÿL™œßn¾¤Ùb>[úÛx…‹Í€ƒ·í’‚ ;wI9oÝÆÜ‹ìs8‹¢­N"ñ<âb[êCúÕ¿Á(Ù‡AÝ0Dà +FÔ½éW-(±ÔVT_¯3¿e3ß\¥Ûy¶ØxOpœÿº6÷mwqòcþ%iº\"ýð p*Ši”-¿«Ê9ß (²×m( pÊ'%œp 轨¡æÀø8v`ìÓëÀRŠ€{Èå}X÷:0î—eAC37±…E_àÇÁÅØ² .:.ºÖû®rÀE÷,÷+l[q‘ãf²*.<2–p®+x!fáLMÄÄ5‘\ü bâd÷p]"f@ˆ˜Ÿ=ˆ"-Ž:Q"ñND)d¢`˜B”Š]ˆÒ«: J¬ú§!J%E±uDÙ̲mº+]`»Ë¾Î‹w8~v³ÉnC ˆØÅ)ᢠU ÁwL|ö Í÷Û~Óæ°¸åªæ:¸„ÊPq‰`f¿‘ª _*Ó]È»¾nŠ…­ï§âˆ±èWGˆCN¤“H¼¹³µ!ÃÜÃV”cH**«ÊëÎdúUZޏª**ã]Œ«±Bb—}hβ٧õr1ïE8+VüÝÉÙãÇ4eCs É-¡ÌF„R¼‚Lé®üVŒh ‚—éW°ÁÀVT?Zá@ø±› npÚø ÁIwz:5ƒÓmx“­[e+xïOeTÓJXpÁ Nîp˜ülÖ]g3à, [ÏfghÎY°õœ/HÚ‚w9mÁ¶íxæ ·–7ƒÍÉw›&xÖ 6~€¯h m|ÅÍbíÛ7ñ9ƒ@¶äü6ÊîÁWŒ‹%8f¶×FW(¾u®?,»˜î(>˜¯DâXRÈ ç+#º²‹^Õ!»ˆU%»pÁÝÌ.ZØJœ”g}+Wi‡ÁlÄUÜ]i ^aÚN¤—¨(ÔÇdÚ†PÉ#¢âLì&*ˆy¢[VCg¢C׿NãV9÷Ì9”k[0ê ¥ -ÿ‘ìsO+õÐä4¦Á8ö@ÀˆÄ;£NG*FtF¯ê±ê£|༷ëåÃè‹íG¦#¸*¥—f6! EÔð Ïj਑$¹A:‰Ä[øHuÈ>b)Ñ!åuo 2ý*-äYK¬òA|äÍz¹ü–.®Ò>D@ߢûCáÍÛ×J‘"ØN>Â9Q†æ@9Ñz0‰Ä»!!È ç##ºøH¯êÀGbÕ?‡ThÁƒûðQDg;±ÄÓR=Zõú«'r@^û(‡¯"ÖÊöê „ê ÕQVO TO ý+¡ÁU`Ísò1¦ü`Œáþ‚m-›€§! :hˆ JÚÿ 9˜Up®È2AJéN "Ã9HlAWFѧ7$‘Þãä¢-Ÿ¸)O÷VÒŽœ›¸X›ÄIÄ>‹·ý•™²H@a2.” …½… ìhßcœmíµ´2¯•ð@Aòµ¼Ì]Š·Œaù‹J‰µDËj¥ä`MÔ„tÒ¤|Æê¡9sŸnÌ`Z‰wBH!3œ–TŒè‘^ÕEbÕÇùŽ!ë02[ìºiI† :h òUÐ?©H"‰P¦âÁÊ&nakäƒY‰4D1îv¸ò„“Rº¹¯ÕûJ$’àÙ+nHr‰^mÆ^Qv/2R@Äï³ÛÛ4›‚ž$'‹Ýúúº4#¦À´“—ÍIj†’=¶µ€äLBGyøß¤ò?x)ƒéŸÿ…y)>þPA»3óEºJ3„æPQ.BòbjùäkÇ·ÅÊ ß0û”ò§@ý§,8æµ;?‹ÍùóùùkÅÏBW‚[ê/?}÷í¯ë»ïŸÓU}uܹšËó/›‰$ì endstream endobj 3410 0 obj << /Type /Page /Contents 3411 0 R /Resources 3409 0 R /MediaBox [0 0 595.276 841.89] /Parent 3360 0 R /Annots [ 3414 0 R 3416 0 R 3418 0 R 3419 0 R 3421 0 R 3423 0 R 3425 0 R 3426 0 R 3428 0 R 3430 0 R 3432 0 R ] >> endobj 3414 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 3416 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 3418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 543.491 190.602 554.504] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3419 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 3421 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 3423 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 3425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.597 317.25 191.707 328.264] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3426 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 3428 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 3430 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 3432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [157.616 91.01 186.726 102.023] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3412 0 obj << /D [3410 0 R /XYZ 90 757.935 null] >> endobj 3413 0 obj << /D [3410 0 R /XYZ 90 733.028 null] >> endobj 2989 0 obj << /D [3410 0 R /XYZ 255.179 675.861 null] >> endobj 3415 0 obj << /D [3410 0 R /XYZ 90 659.134 null] >> endobj 2990 0 obj << /D [3410 0 R /XYZ 255.179 596.463 null] >> endobj 3417 0 obj << /D [3410 0 R /XYZ 90 579.736 null] >> endobj 2991 0 obj << /D [3410 0 R /XYZ 252.409 529.019 null] >> endobj 3420 0 obj << /D [3410 0 R /XYZ 90 512.292 null] >> endobj 2992 0 obj << /D [3410 0 R /XYZ 255.179 449.621 null] >> endobj 3422 0 obj << /D [3410 0 R /XYZ 90 432.894 null] >> endobj 2993 0 obj << /D [3410 0 R /XYZ 255.179 370.222 null] >> endobj 3424 0 obj << /D [3410 0 R /XYZ 90 353.495 null] >> endobj 2994 0 obj << /D [3410 0 R /XYZ 252.409 302.779 null] >> endobj 3427 0 obj << /D [3410 0 R /XYZ 90 286.052 null] >> endobj 2995 0 obj << /D [3410 0 R /XYZ 255.179 223.38 null] >> endobj 3429 0 obj << /D [3410 0 R /XYZ 90 206.653 null] >> endobj 3028 0 obj << /D [3410 0 R /XYZ 255.179 143.982 null] >> endobj 3431 0 obj << /D [3410 0 R /XYZ 90 127.255 null] >> endobj 3409 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3435 0 obj << /Length 1848 /Filter /FlateDecode >> stream xÚÝZßoÛ6~÷_áGûÁ¿Ù=¥YÛµÐ. °m1xŽÒ:Hl×vÖô¿ßQ¤lR¢d%mü0)éÈ»#ï>Þ' †ÿ`héPKM,—ÃÙí€?ãÝWO'øx=~1øå%ÇQÄ*>¼¸*‡+ ’ÁðâòÃH5ž¥t´Z_“/ã “tôr~SøÞYqU¬Ç`FÅb†·8Õ(iÄøÓÅ›Á‹‹Ö`“äÊéü:øð‰/Ѷ7J¸5Ãoا¬Þã¡38ü¹›Ãßçx?ç–Þô‹±Ô/Æ U²ôë¼(êFUÄh½+Õ¸ëÏAâ,RXIO"ñ†Òú”N3®ã¦Ø~¤’â?4Œà’(aR#j¾V2ݪ¹!Àm¢új¹öÛ6õÍe±™­ç«í|¹ð7–W¾Ý~ û{òî5q&¦12~î g¸Q¢ "ˆ¬¢e¾ØUóí=Ûø¾súÝÙ›÷ìüï“1ŒÎ^WK€ŽM@ż¡aP©8vŠ b©Ba'´[ X޾¬ÖËëb¶ÝøëÓéz[læÓ…ŸÅÄ‘@0äösxˆüã¸i2HÜ£¡¿â”J¾7¦I8övsAÓdI4†¬—˜-—ëËùbІy#ç ß–ëí:«›é"tÝ^¸vÚ\ ÊVþ>½½Å$äz49™o—WaÜÞ5A÷C5¶³øäõEfr—Cì€OL@«^†PéÊÒ·èå|Ìäèß1ÈQ™k.B*n5+ýVoV_Šõ|6½ñ!/Q}µK&Þ{ç>R®ÊSØe,»y ;uÓ‰ A¼@ñ©‹ý2\Å!0Q‚¥t_0‰Ä[Á¤’ `‚‰Ò&†0© 0ñ2ݪæ µ‰êÇ€ æRO¤ŸÞ㉌ñDgðdÃî<9gï[ñDTxâõÅ!ôh&îªÍå½(rÝeWäb fᘡkgt&¶c¢„{о*îƒq-ˆ(z[– ¢3Ñ!¢kË )÷Á#¢ëº€rm±ò ,)´d€±Šš,0šÃ¸xë 5 \ Àa%É1×RáŽ(Ó7"ñVܨdª"„ÝÂĈ6ÜèTp#Výd¸‘Ô!¦Ž³å Ë®}l¶ë»Y¸^áüëëÕú6D½ˆã™âa·ÏKÊCèD1¯‰Ðl·í×¹ó·\ÕB—PYÂOB"˜ÙD*…µU¨œñ(Ê«»Uµ°õýTŒƒ‚aUžDâÍ­M|k˜(7–(*Såõ` 2Ý*-#ÔªDe¼‹Q`5v@øŠ¹Å|v¾XoV.MÇ@¸ÓQÑ ˆ];>}ûî磖շº[Ö›ªDâ­(QÉô§*‰mT¥Su *±ê§¡*Iia3‘£*'í¥EÔLXC´aŒåÔ$TÅ]ûcÕdÙ ;ðãœÌŠXÁr'³³ÒÌ®-ÜujúÃÙ]¹ýpm–®/H³¯œ!—}îAKöY"ùÁäc\äFf¨KéÙ2Ь´áI-Q/KäíO]8Vl¢÷6ö*̓¹ wî÷-AŠ ¦zƒË^¼\‚Lê’ÑV‚tª%H¬ú(%ˆ¢¹$C]Úðe_d©K_˜àuqWÈÅ{qä 1š¡ ]Á+b¨<&{qtÉDìÅÝÁ^°F‹ë«'~¥—À¤³ÒÁ¤k}èˆÝ+·ÎeX‰–W:1V$Yæ¬@bcT F¬Z$'zWü<8]ÕbÛª¹ez¿ᘷ”õæ6‘x+°T2ý¹MbD°tªÀ«>Ê;M`)Åm°Öf·Ñnc0'M­T*òÜFb=/On‹r@@Dô0¹ñÒ“H;˜{‡¨’6GmPmLm$üÏ™ÍÁ,0½™M$ÞŠ,•Lf“ÑV€tªH¬ú8Ï `6ûr ËlòàÂ$ÄÌ55#¹Hk$ÕÇ¥5|÷fIkÐâ@kp­ò̆kqDf³·/e6’zfƒ‡Ð³Ù…ä™ žú‰ß–,¸:`à)K͉EᾸîÅQï{#ñv\ 2ý‰MbD+®t©®p%RýC¸RûHZ"e¶¢r[ þ{–Ç}#T~Ý„ÌCƒ?nRÄbù€‚vçÔ«bQ¬1¾/ƒ Á•‹±e£»àÆÛª¾ûŒ²gœú+F!•+DÕ"ýuzþ‡óþyJ°¨÷ݾûö·åý÷ÏÅ¢¾:î+¦æòü_å endstream endobj 3434 0 obj << /Type /Page /Contents 3435 0 R /Resources 3433 0 R /MediaBox [0 0 595.276 841.89] /Parent 3360 0 R /Annots [ 3437 0 R 3439 0 R 3441 0 R 3443 0 R 3444 0 R 3446 0 R 3448 0 R 3450 0 R 3451 0 R 3453 0 R 3455 0 R ] >> endobj 3437 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 3439 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 3441 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 3443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 511.296 190.602 522.31] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3444 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 3446 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 3448 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 3450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.375 285.056 189.486 296.069] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3451 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 3453 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 3455 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 3436 0 obj << /D [3434 0 R /XYZ 90 757.935 null] >> endobj 3029 0 obj << /D [3434 0 R /XYZ 252.409 723.065 null] >> endobj 3438 0 obj << /D [3434 0 R /XYZ 90 706.338 null] >> endobj 3030 0 obj << /D [3434 0 R /XYZ 255.179 643.667 null] >> endobj 3440 0 obj << /D [3434 0 R /XYZ 90 626.94 null] >> endobj 3031 0 obj << /D [3434 0 R /XYZ 255.179 564.268 null] >> endobj 3442 0 obj << /D [3434 0 R /XYZ 90 547.541 null] >> endobj 3032 0 obj << /D [3434 0 R /XYZ 252.409 496.825 null] >> endobj 3445 0 obj << /D [3434 0 R /XYZ 90 480.098 null] >> endobj 3033 0 obj << /D [3434 0 R /XYZ 255.179 417.426 null] >> endobj 3447 0 obj << /D [3434 0 R /XYZ 90 400.699 null] >> endobj 3034 0 obj << /D [3434 0 R /XYZ 255.179 338.028 null] >> endobj 3449 0 obj << /D [3434 0 R /XYZ 90 321.301 null] >> endobj 3035 0 obj << /D [3434 0 R /XYZ 252.409 270.584 null] >> endobj 3452 0 obj << /D [3434 0 R /XYZ 90 253.857 null] >> endobj 3036 0 obj << /D [3434 0 R /XYZ 255.179 191.186 null] >> endobj 3454 0 obj << /D [3434 0 R /XYZ 90 174.459 null] >> endobj 3037 0 obj << /D [3434 0 R /XYZ 255.179 111.787 null] >> endobj 3433 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3458 0 obj << /Length 1868 /Filter /FlateDecode >> stream xÚÝZKsÛ6¾ëWð(„àýHOqÒdšéÔ©í™f&Ét\™Ž•±EE²[çßwA€"@$£Ô:ttàk‰]ìãÃ~„HáG ƒ %2L‹» .>ÃÝ7âŸÎáñ]¼ü|±ÓêmLZ_'>áâ l{;Áˆ]üçcŠ» §ÌŸßNÎ'¿ïÆp÷ÜOMK6¦RÂK˜µ¢à€åŒŠéß3"¦>Ó¶ë›r³\\Þ6iÓzjÏé„! ÉP[ &ëJ8¥4D¢{'çQ…0‰˜ *X#JÆ‚J+ž/ãA &*N22bTܳ~Õ#U*áI\nø®ÈTÏA#\9§ï‡qž4W(gÓUìÕ^æÂ½0s9Ÿ.À„¾ä°SŒ†ŸQÉ«ª”š&½¡*k£óðh›²°¡zrxl‹àÑZiáÑ]êØh<–ÎÏuZÁ­$6BÆac]³c¤%ó`äld›"d¼yÊ6E)D¤OW1„'‚„‰‹'xO™¦I¡Cx‘Ó^ÕOBÕO†'<ĵ'ÕAzKh±þ£ÆÂRœÞ̇Á˜Nb ¨)¸í )Œ“ï„&®Ÿ¾`®Bµ òb%ú” Þ°·Ê~”¸T›û›ê^„.f}ÓÜMÃØ'ßÁÂéAm”…“e/C¿:š½pûBɱÀˆg¡‘Ï^"#rì¥Wµg/¡ê#°@…{y€Ð×eT9öB)߯QF#öBéc/`4S£{ßGß;dÖf>°6Í“k3˜\¯Í`ªó6ÜhÖf8­#Ï2k3Þe{Suö°êÀ¿7̓láËñéËq »!}±Z[úB‘à4jþüe°ß`òNþ(ˆga¥‘Ï_"#rýF¯jßo„ªÓo˜T¿‘à/9diWÿ I" WQ þ¢bþ"û3È £ä¸ä…íØ’#/ªŸ¼0LŽ…Ž­e梀L2¬ñóÉéoO°Û‚ð±Ñ@@06š¯âY hdÆó•Ȉ_éUíùJ¨úéùŠ" øžÝÑÔdš¯¤Nt¾Âø gòX+2ÝmìtVdÏWxÃWxËW¸ç+pÌ}KÄÝúâ4__ZˆÁúú Ò¼„Sß‘D'G]'7£x:÷Ü…hdlÕMÃ8Š"¢†³Ï ‡k; »4"8v4C ij@ÒÈŒg(‘¹Ž¢Wµï(BÕÇé(hª£øîÿÒh,Á4d(¸Þa qjãx“Þé')acŽ™¼° ’01‰Ü@Ðã@bhY ‰ØC"]Þàv{{HÄH¤ˆ A¢ÃêTü­$“Á‹ÃQ2Û…tþF%ÜGÚDQZ“ˆ‡ÿÁªþk˜ýNìpÀ<$à.÷ÿ òÚ­™oÊU¹ÿ_ùºõõ{13túàk÷´iú¸;óÓç »+Љo‹¯m‰4ÈðÇËó_mÉŸøW‘FÔWñ7w|U=~û\®ºÞ±ÛwÏ¿¤§5á endstream endobj 3457 0 obj << /Type /Page /Contents 3458 0 R /Resources 3456 0 R /MediaBox [0 0 595.276 841.89] /Parent 3360 0 R /Annots [ 3461 0 R 3462 0 R 3464 0 R 3466 0 R 3468 0 R 3469 0 R 3471 0 R 3473 0 R 3475 0 R 3476 0 R 3478 0 R ] >> endobj 3461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 702.288 190.602 713.301] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3462 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 3464 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 3466 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 3468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.933 476.047 190.044 487.061] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3469 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 3471 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 3473 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 3475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.607 249.807 191.717 260.82] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3476 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 3478 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 3459 0 obj << /D [3457 0 R /XYZ 90 757.935 null] >> endobj 3460 0 obj << /D [3457 0 R /XYZ 90 733.028 null] >> endobj 3038 0 obj << /D [3457 0 R /XYZ 252.409 687.817 null] >> endobj 3463 0 obj << /D [3457 0 R /XYZ 90 671.089 null] >> endobj 3039 0 obj << /D [3457 0 R /XYZ 255.179 608.418 null] >> endobj 3465 0 obj << /D [3457 0 R /XYZ 90 591.691 null] >> endobj 3040 0 obj << /D [3457 0 R /XYZ 255.179 529.019 null] >> endobj 3467 0 obj << /D [3457 0 R /XYZ 90 512.292 null] >> endobj 3041 0 obj << /D [3457 0 R /XYZ 252.409 461.576 null] >> endobj 3470 0 obj << /D [3457 0 R /XYZ 90 444.849 null] >> endobj 3042 0 obj << /D [3457 0 R /XYZ 255.179 382.177 null] >> endobj 3472 0 obj << /D [3457 0 R /XYZ 90 365.45 null] >> endobj 3043 0 obj << /D [3457 0 R /XYZ 255.179 302.779 null] >> endobj 3474 0 obj << /D [3457 0 R /XYZ 90 286.052 null] >> endobj 3075 0 obj << /D [3457 0 R /XYZ 252.409 235.336 null] >> endobj 3477 0 obj << /D [3457 0 R /XYZ 90 218.608 null] >> endobj 3076 0 obj << /D [3457 0 R /XYZ 255.179 155.937 null] >> endobj 3479 0 obj << /D [3457 0 R /XYZ 90 139.21 null] >> endobj 3456 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F8 1129 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3482 0 obj << /Length 1853 /Filter /FlateDecode >> stream xÚÅZÛnÛF}×WèQzÐvï—ô)q“ A$–€H‚B¡éD#©”ÜÚßYî’ÜåÝräÂ0H‘£Ù™³ç"S djðT … ÓäÇO¿ÂÕ×âï.àö"¸ÿb5ùåƒo!#Ùtu]$(™®®>Î$’óÁÏöÙwôm¾ Ï^mnRwv™^§ÙœèYºMàà ,µœ^½™¼\•^}L‚IëóïÉÇÏxz±½™`ÄŒžþ çc¦?&œ2~3YNÞ—c¸ë ®·MKÖœ¥ñ¼(CXŠ|^Ë4­I°DZ©Ò,wcod_½Åeà°°^æ §õ!­gXǽû„†Ò‚iÄ‰Žƒ¨Íµ°éwÍ12ØD®¯w™KÛÚ®ÒC’möÇÍnë.ì®ÝñøÍç÷ù»9™ýŽl”q™,„~Á(䊵‚8RÌÌf{tƒì“Ý!õçvÞ‡cv›÷`üìû>ûá\Ì\P.`ÎvðO3gÃue£WÔ[ÀÂ6ã$I*Ë1Ü‚ÃJƒ‡’! îûĸ0ó!•¤‰`—¶Ùm7IU >©8ø†D”+þîâmKVmŸ³ZVãÒ¸ôší¾§‰-säÒOa…‰O?B)`0øHDÌ;¡°)!=v#‚[À(ˆ"8›~ׄ™Èõ)ˆÐ Üíà@„pÀ[ààŽªxwùæ]þ@ðüòõ²ìQeǩٜ)MÝɸ¹ø¼Üç‹uvLàf³Þº 1°&Lãx< æÈ qÝÁ0¿ÂĤšÝ7Æ"1Ù_ 1A¼E²ÛeW›íÚ—ºÙºc¾æöÄ‚äÍzë?Ù”ØcK¯J&´ÙlÖ¾£Ù¢˜6íŽDʰF³ùYìÜ&¸™S1ûgNÄ,u}ŒŒ­[€i#\ÙößÒl“¬o\…„«S_hm{‰NÚ'Ìdž4 §”¶æ¨Þ‰ÚḷðXB0ܵ¥l%=X" P™‘X˜wbIaã±údˆ]DAt±‹^מ]„®Ÿ†]ˆ6vAï"8YÒpRíõð¥±pB¹šU`b?Õª®É¨rÁ¤¯r‰PkÃxÃRºz G+†³=iCt؆‡–{Õ~*<´Á‰6<´QZ<´GW7°Ð{†öZ^SplC‘!,Ã…ëXŽ T8‰Pg”P@Á’Œž…” ªZŽå$ÜÀ‘ŽV)y'Ž6ãUJDŽôºö8º>ŽD´DÖqäxHNR)ÀVMÐz?W¥HØÎã’ða6‘ ˜9£'Ëa8âÀ0T)ÎxX7اQ`Q:vÝÐ(Φߣì–:rù R Ýq½ýšn›‚Ô Éí¨†´+¹¤ŠšX-/Π`44“cY§ w5•y7Zx›ñ & ¢KÁôºö &t}QÕQ0¢hÜv#¼¥qI¤`ìçb»G- †"EFŠá ›mØåXñ† qæ6Ë%/6l¸æÒAÚ7lˆ`­mHâ6$І0ƒ/~Ðî6$X=¾ KQàÒái3Pù†]шªìrŠÇQlA»~V—vpENà?™+ËQ“9’# ßHzŠ=Zææ€SØŒ—9Q]ô¤×µ§'¡ë§¡'ºž<@æTd¡Uæt`Ž1¡Ì1V´ƒƒZÃå°€ác¿ÒÑ0Gñ”"ÊEÐPéÓ§tH ŒF§îDÔ¬"‹QÓ¸Ç>Ôh_765{æc­¨©$ª 5K•ÈÅyO¼¦—Ô(?'¥±¯Œ&c) U ÍÇ"L`Þ‰0…ÍxÑ…0½®=„®ŸæAŠ©#Lrª‚ú£ì' Õ"€"°\aI$]ˆCëÓßÓŸ–rJ)1(«½õ"0oyOÙ§ðY;oh gÓïR›ªB—'½§¹xûâåi(‰*_œEù€(6bôsŠ5&*ón˜ð6ã•OD—òéuí•Oèúüïn4nÁˆ‡¿»Iº”OÇ‹US>ºg÷Õc8Â甼(5Ùã7pQlà¢ÚÀ…ßÀ…é’=²Тó*’e_þ¸+Eó™îæ³;ý£›ÏÈæ»'y4EÓXòúÝp`Þ‰/…Íx¡ÑECz]{º~ ©ýúGÈl+M²åKÜvvÚï‚ò_4I1áš`“€ÌºþxïvR¯ÓmšAË^ù)ø©¬æ†Îný4ÞÛ%wbžaúŒa÷‰bâiŵ-÷b‘þ¼XþagÿÂ]v§_îÝñ·ÝÝ=ðúêØ_.5—ç?ŽáÛ9 endstream endobj 3481 0 obj << /Type /Page /Contents 3482 0 R /Resources 3480 0 R /MediaBox [0 0 595.276 841.89] /Parent 3504 0 R /Annots [ 3484 0 R 3486 0 R 3487 0 R 3489 0 R 3491 0 R 3493 0 R 3494 0 R 3496 0 R 3498 0 R 3500 0 R 3501 0 R 3503 0 R ] >> endobj 3484 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 3486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.491 670.093 190.602 681.107] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3487 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 3489 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 3491 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 3493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.163 443.853 187.274 454.866] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3494 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 3496 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 3498 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 3500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.269 217.612 188.38 228.626] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3501 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 3503 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 3483 0 obj << /D [3481 0 R /XYZ 90 757.935 null] >> endobj 3077 0 obj << /D [3481 0 R /XYZ 255.179 723.065 null] >> endobj 3485 0 obj << /D [3481 0 R /XYZ 90 706.338 null] >> endobj 3078 0 obj << /D [3481 0 R /XYZ 252.409 655.622 null] >> endobj 3488 0 obj << /D [3481 0 R /XYZ 90 638.895 null] >> endobj 3079 0 obj << /D [3481 0 R /XYZ 255.179 576.223 null] >> endobj 3490 0 obj << /D [3481 0 R /XYZ 90 559.496 null] >> endobj 3080 0 obj << /D [3481 0 R /XYZ 255.179 496.825 null] >> endobj 3492 0 obj << /D [3481 0 R /XYZ 90 480.098 null] >> endobj 3081 0 obj << /D [3481 0 R /XYZ 252.409 429.381 null] >> endobj 3495 0 obj << /D [3481 0 R /XYZ 90 412.654 null] >> endobj 3082 0 obj << /D [3481 0 R /XYZ 255.179 349.983 null] >> endobj 3497 0 obj << /D [3481 0 R /XYZ 90 333.256 null] >> endobj 3083 0 obj << /D [3481 0 R /XYZ 255.179 270.584 null] >> endobj 3499 0 obj << /D [3481 0 R /XYZ 90 253.857 null] >> endobj 3084 0 obj << /D [3481 0 R /XYZ 252.409 203.141 null] >> endobj 3502 0 obj << /D [3481 0 R /XYZ 90 186.414 null] >> endobj 3085 0 obj << /D [3481 0 R /XYZ 255.179 123.742 null] >> endobj 3480 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R /F40 783 0 R /F8 1129 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3507 0 obj << /Length 1906 /Filter /FlateDecode >> stream xÚÍZmoÛ6þî_á60³|—˜}j³´kQ,ilÚ¢P%QË®dwÉ~ýŽ"i“z³’5Á¤¤ÓÝñx÷ðÅdŒáŒG"BЉñ|1Âã+¸ûfDìÓ<žyÏ_^¼fðR’Ï/«×%A‚’ñùŧ‰Dr:#ãɪ¸A×Óxò:»MÍì4½L‹)‰'i>‡[ G GÓ/çïFGç[«Ö'Á¤¶ù}ôé _€oïF1ÿ†9FD©ñbÄ)³óÛÑÙèÃV‡¹Ïà~Û²aû×EÂR¸u!Žbb—åk³ y9/陯Ÿœ¾;£¿NÉäåé›3¸CôÚÀæŒDHR^)³/Áƒ¯)ÝÙ¤ ²ZF+«^ŸQA0—7é|]š«ž¥i½F –° ÑXF LSeúAqe%N½zsÒ3O¼ª9ß«ºJãÝ ÔʶêN°qȽÀ‰Z©;™~Ó#‹öM_. ³‰.Òr^d+)s£JMrÀäå äâ[ÔÜ’™0êgŒTqRhR¾:¤ë] ”ëb3·×+Ð_ܬЅ- î¯@!²MäÏ3›;^5DˆGt»í7my [.k©!”1¢, RºÙ1¸àMïA¾4³ÍÊE¶¾¡p–°˜ŒÁ „9Ý—UVzæ‰7·¶¦Ò.Þ10C¦À¯g“•é7 %ä驪ÜÛE/±;À’Ü•æ÷MrQd·GEr›ý“^Ø8ZÄ€d„ÃQ¶ÝúO t}°MU…x7lXéº6L”'°adúM¶è¢óM?6Z1ƒÝ3‚6„µ`Æ-ƒ6ä#=Ûӆؗš "QKÂ(¬ö´ºfnuã üftø9n{ŒGâ$¦­‡8#æWMÀa¢qX…½ªöÆŽs\)ÕSŽ Þ?ÀA­ExÐU‹Úe¶·iï‚gœ($aÍ~+±+J›aK36Ævéë¡íàÏÛ3úê,ÆX¡-ÄìíLU5b<ñNˆq2b |öu&]I¯iÛ™ø¦Ÿ§3ámÉÈήOh%;í(éÏvôU=yõ=¯ä8«Ì/º“² ÓçL^ ÝÄ#<Úén¤`]±çAJß³)µ‹)õXåMµ†îè ëœÒ·Z`ˆ<êÊ0êo^`»’ŸÜ¼Ð½Í‹êj^4¼Åú“À°æ…C¯-é`Îã‰w"‹“Îy'º¥×´Eßô“!Kпˆ:²\¯îÅy´ö’< ç‰0ô³*H ëæàŽi(çaHb6fJAŽîçŠôü~ôòýIvׇY«Y!4 + ÒO³98~N¦U¼í*¦.ö2t:OÈT|ÏB¦BÌ7=¦Bè–©À½Š©ÀØÎT(b"„–ÿCÇ‘ªØpPÊüñt'݉Vd8ûð=èBŠ>»(<»ÏðQÃñŽ?§ŠN’"K¾¹Lÿ¶œoi¾Öå ”;l ú R;Èýx¾ÌK÷?àë¤hr“ꀋ5ñݬQ“¯iQ,Ê«O¦d¾´|óS¤:‰ü$9* ·EZ–ÉUZ†ßþÉz~íŽ+èË“õÆÊýÐp•Ünl Št½)rGÖ/‹åÂÌÒÄi¹Üä»Ä „›G´°-Fÿñö°¹Î°³{{û’AiZÔ¨èÌæ–%º‚‚íËË_ùjTePh"KaŠí© '<ÛI72¹¦pÇ´æWú¸Z÷ ?‰”µ:r"½ÖC5Ûþ£ök ¡¼ÍŠÆ8"ÅãgQýBDÆ(ò¾_BNHonHa­kçÞ¤yZ@Xl~¹Ò>×éRðØQFn¢0=`Ø\QL,µ¾Ô™ëRá¯Ã³÷ ^ÙWQ¬3OO¿Ý»¿»¿Józtô/AšáùT,O endstream endobj 3506 0 obj << /Type /Page /Contents 3507 0 R /Resources 3505 0 R /MediaBox [0 0 595.276 841.89] /Parent 3504 0 R /Annots [ 3510 0 R 3512 0 R 3513 0 R 3515 0 R 3517 0 R 3519 0 R 3520 0 R 3522 0 R 3524 0 R 3527 0 R ] >> endobj 3510 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 3512 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 3513 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 3515 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 3517 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 3519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.607 396.649 191.717 407.662] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 3520 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 3522 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 3524 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 3527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.661 96.24 299.462 107.144] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3508 0 obj << /D [3506 0 R /XYZ 90 757.935 null] >> endobj 3509 0 obj << /D [3506 0 R /XYZ 90 733.028 null] >> endobj 3086 0 obj << /D [3506 0 R /XYZ 255.179 675.861 null] >> endobj 3511 0 obj << /D [3506 0 R /XYZ 90 659.134 null] >> endobj 3087 0 obj << /D [3506 0 R /XYZ 252.409 608.418 null] >> endobj 3514 0 obj << /D [3506 0 R /XYZ 90 591.691 null] >> endobj 3088 0 obj << /D [3506 0 R /XYZ 255.179 529.019 null] >> endobj 3516 0 obj << /D [3506 0 R /XYZ 90 512.292 null] >> endobj 3089 0 obj << /D [3506 0 R /XYZ 255.179 449.621 null] >> endobj 3518 0 obj << /D [3506 0 R /XYZ 90 432.894 null] >> endobj 3090 0 obj << /D [3506 0 R /XYZ 252.409 382.177 null] >> endobj 3521 0 obj << /D [3506 0 R /XYZ 90 365.45 null] >> endobj 3091 0 obj << /D [3506 0 R /XYZ 255.179 302.779 null] >> endobj 3523 0 obj << /D [3506 0 R /XYZ 90 286.052 null] >> endobj 326 0 obj << /D [3506 0 R /XYZ 90 206.653 null] >> endobj 870 0 obj << /D [3506 0 R /XYZ 90 184.341 null] >> endobj 3525 0 obj << /D [3506 0 R /XYZ 90 184.341 null] >> endobj 3115 0 obj << /D [3506 0 R /XYZ 371.451 149.212 null] >> endobj 3526 0 obj << /D [3506 0 R /XYZ 90 132.485 null] >> endobj 3116 0 obj << /D [3506 0 R /XYZ 304.045 99.393 null] >> endobj 3505 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3530 0 obj << /Length 1498 /Filter /FlateDecode >> stream xÚ­XÑr›8}÷W0Ýw¢õ;K¸ûvDÌS{ç¯g£Wo|x Iá;³ëòuA§Ä™-.]‚±G0Æn¾‰ÐÍØ£»o╪®>ªk•Ièª$‚[>Œ¹a8¾š½Ïî£MÜ:æÑåv íý#_†Î/¸ÆˆHé¬GŒúæz5º}¸ç¨îûp×°8ñ‡ÇE}„7ãˆ#ߌ-J“¼¨F'æbr6ýóx:÷äl:¦Ø=<ÕÃzõ†ÒVH&  ¬$=Y¨¤ˆ¿`L!)%Éuj. ˜a÷ç˜pWƒÒd¾ªžl²ô;Q‘¾™¿¬næJÙ9¤#)'À1Fª,èÙÒ >6òQ£½¼ÌIS½M©Ç°É¾o²õÁA4/”»L³;[ŠObÑ–bRczØDZª²ÜôΣ¾!ó i8Èúü|z2=úxÙô™ÇÍÓ‰¸[ÅÉ"‹£'ûÆ)|øÒ\ Âøoí5à]ß,ÊGûF$òYЖbûf0½l¢½¾QCÖñ÷øv~v:–Ôý ¨«oòŒ²Û¤«;Gž)pÓòŒnÐ+°@á eì= »Žµ oä7-¿*H_t‹f¿[†ªt‹6Ü}n]::›@RM¹Mž5Qnrµ]¤­ŠêfÑ W\ˆQa¹^r8²Ï ½¼ëŸEùhàÁ÷–ÛAƒé`íõ²Ž‡A‡Æ»ŸÆ¹£É§×ðãgXøc;_DÛoê©5"ʹñþ ‹®B{ øŽªkS>¾ì84 ¬-¥Sw¦W€M´¿ò Ygž {\ûçxz2{w©}Îâö[%qq3_½šÿŽ×ÀµÕÿ<©Ú|$BèÏx±é`µUh¯ßQmmÊGûÆ1b²­Ä¶­‚ô†·höš&*ªŽg²Ç³wLJ§ç'?£ºŠÕ Šok«ÀºÚ­þ&2 ¡Ã°DBh"5ÚkÀw6‘Mʧ4‘œm);šHé`õ5‘%Ygj$¸ëXt3¯W¤ìûW=¥Îp«üR^]úôjÈÃé|­òŠ"½¶¼{¨,­L”Љ‚Æ¿ùjU=Õï*Sîþ‚O¶#^4Ï [™ãÛHm ë[ya¾‘e>,}çYªßû/ÔÂz/Nàr=З&«»±à®Q–èT˜`Û¼~ýÛÝÀ(³t[ĉÊw¸ƒwÙBz I»’DéB Ù0«Õ$Ûõ·ºšjC2¥Ë$þ]¡¸É”n꽕* •í1 ¢c¿`Ž£m–Aµ®Ìèi7ÉþôÃ1L*}ÄøÐ>®F{ x·,JS‚_+¡V|¦»<؈·â[uWcz£ÚDûêÎ÷ Y×`:XwÚ`âæ—4¸ºdƒ%w×4µÁ÷5´Ëiå÷ÿä´BK3x†“c ‘ZÜÅÉ´«Ÿè ß ^v ’!1g‡Ã•–"z0‚$¡* ár;ë«`O?àéÈúƒ-ž,¹þˆ“hµÇ`3“O¾¹E7/vÌ<îW”«,3оiáh^Ì+YE¶Šm¥,ßqÜD+ö}G`ç›À6‰ùá=‡ýZ4; GBƒÕ«Æô„g­€y9ÂNH_ÂΟµCî©5éù ŸRï endstream endobj 3529 0 obj << /Type /Page /Contents 3530 0 R /Resources 3528 0 R /MediaBox [0 0 595.276 841.89] /Parent 3504 0 R /Annots [ 3533 0 R 3535 0 R 3537 0 R 3539 0 R 3541 0 R 3543 0 R 3545 0 R 3548 0 R 3551 0 R ] >> endobj 3533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.001 702.288 328.802 713.192] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.542 652.992 320.343 663.896] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [248.374 603.696 317.176 614.6] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [279.766 554.401 348.567 565.305] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.259 505.105 316.06 516.009] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.685 455.809 351.486 466.713] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [259.722 406.514 328.523 417.417] /Subtype /Link /A << /S /GoTo /D (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) >> >> endobj 3548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.406 290.298 427.132 301.202] /Subtype /Link /A << /S /GoTo /D (prj_8h_4089618a84e11369bf9e5fd7c11c7368) >> >> endobj 3551 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 111.61 169.86 121.388] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3531 0 obj << /D [3529 0 R /XYZ 90 757.935 null] >> endobj 3532 0 obj << /D [3529 0 R /XYZ 90 733.028 null] >> endobj 3117 0 obj << /D [3529 0 R /XYZ 333.385 705.441 null] >> endobj 3534 0 obj << /D [3529 0 R /XYZ 90 689.237 null] >> endobj 3118 0 obj << /D [3529 0 R /XYZ 324.926 656.145 null] >> endobj 3536 0 obj << /D [3529 0 R /XYZ 90 639.941 null] >> endobj 3119 0 obj << /D [3529 0 R /XYZ 321.758 606.85 null] >> endobj 3538 0 obj << /D [3529 0 R /XYZ 90 590.646 null] >> endobj 3120 0 obj << /D [3529 0 R /XYZ 353.15 557.554 null] >> endobj 3540 0 obj << /D [3529 0 R /XYZ 90 541.35 null] >> endobj 3121 0 obj << /D [3529 0 R /XYZ 320.643 508.258 null] >> endobj 3542 0 obj << /D [3529 0 R /XYZ 90 492.054 null] >> endobj 3122 0 obj << /D [3529 0 R /XYZ 356.069 458.962 null] >> endobj 3544 0 obj << /D [3529 0 R /XYZ 90 442.759 null] >> endobj 3123 0 obj << /D [3529 0 R /XYZ 333.106 409.667 null] >> endobj 3546 0 obj << /D [3529 0 R /XYZ 90 393.463 null] >> endobj 3124 0 obj << /D [3529 0 R /XYZ 357.664 342.747 null] >> endobj 3547 0 obj << /D [3529 0 R /XYZ 90 326.543 null] >> endobj 3125 0 obj << /D [3529 0 R /XYZ 431.715 293.451 null] >> endobj 3549 0 obj << /D [3529 0 R /XYZ 90 277.247 null] >> endobj 1038 0 obj << /D [3529 0 R /XYZ 435.312 244.155 null] >> endobj 330 0 obj << /D [3529 0 R /XYZ 90 227.951 null] >> endobj 3550 0 obj << /D [3529 0 R /XYZ 90 130.002 null] >> endobj 3528 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3554 0 obj << /Length 2516 /Filter /FlateDecode >> stream xÚµ[]oÜ6}÷¯ / Ãò[d>$ŽS´HS¯íbHõåt€xìÎÖÙÅþ÷½”È’^ÉžEaE:ºç^òðˆ5lBá?6±tR«šX¡&×wGtòÎþtÄüÕ\žE×ß\}ÿNÀ]Äj1¹¸mo׌(Î&7+MêéŒQJ«ÕÃ5ùk:ãŠVïæ_šî謹m–Sfªfq §ÕRVÆN?]ürtr±eõ9)¡çßG?ÑÉ äöË%šɿá˜fíäîHrá¿ýc£;/àü¾²ÃuqA¨Vm]o›?(å‹fµ/UJ‰,7^¸ÚRp¾£`T)Œ¿ß±üÁ¹Ê …¸BX£b’XZGTßÝøŠz|ú×1Ÿ;½ü쯟ÅÌ‹1'áóùéñû“=Z#ˆa+Ó#02£‰ I‹REWóÿ4÷·íÑz¹¹^çÔ\2"4UqÀ"I¤á\0–w=ÚšmRq@`dI_1û~Wò|±vgÜÿ}eÕ„i>ÑF©ô¾˜†RÃáÞá’P_³(@› ä ê¶K¸%Ð#Ò ’ëìàþ¶û»þ«/Cm3Yre!z4žJ²Ü5ÌJ¢jƒµÌ,`pJ«IÎØi°­{¾pÌmnoŒ#á÷:D”‘šyÀf1_¯H±gkI$øåS{VøŽeœXŋ֦ñKš[À Ù[«lp(¡·¸˜pÐäÖa›Cù³^]óÅü²Y.ïVŸ{㟠Âj´r½º¨lIT­Z'€²ìJ©)@YwŠm‰ö€X)ph8M9êÒ=‰–SQWÍõÕº¹)K_@ÁR&}V–>çà»—¾Ç J ‘>F¤K?f!}Œ? ¹5Ö5"}˜]a•”¾&ÜÍä°ì(Ë®(}N˜dx§€ômm¿ôA¬µ4¨ô=ä ÒWðЩ})é+7•~À I?ŠU–>Jè¥J?a–>ÊŸ…ôâZ5CÒG*šô±ì(Ë•>Þ'­òÍáÊW03Vbʧ(¿¼ýóåª7W¾Ç * Q>F”+?f¡|Œ? éµõÈWEåC £"•;å³Ò7m4½ÊÒ+JP ïÙñô5*}¸_ J¨°¨ô=ä)ÒgíOÍJø¤†<úrÕï1ƒÊßÅB”åG„ÃÊYG(ãÏBÏçCÊ/WþTå#ém•Ÿ¦7 |¬S¾•ò¡DX€+LùòåKC çú€´vö½”ÒÀ`ì^ož,6wÍòj=¿_ì{(¹"Bëâ0Š®‡QÀ #Œk;ŒPB?ŒbÂêë K”)ayy4N…L%z¹/ ¥`Ε0(7gŠdUÿ·WrhhGÉKöèY/·¶Çø7¡'gg—翟œŸ÷]ƒVë4‰¼bA©9åÄpPÿ8q­+úªÇÊájléóg!£Ò?üþþýåéo?¸89Ë3F/XVÀ ü©Íò}õ³^ýBÁh‡ùù¸úçÏBFõ¿™ U½~{y~zr|y:µ¼z}6eÕë_{jVM-Úƒf#m ½a÷µUn’5;"xq ÌžÖøWsÀ#UšFo{ Ãàä–ÐLBþc÷.V”‹7 Üj|ñ;x¹x)Haï"$™ô¬ Ã üíÜ@‰„ß×/»?ÿëÞ7ÇÏ@(­»k&`h»‡ó»Íâºô\]—g“Ñõâc0`†ƒ×ö1ˆ†.‰ýk÷„ÃÒ’™”¯,Æ™³»7Æ=rå^ù¼XÁ)a¶ÇÁ!’Ö-nŒ1ýíÔ2®fÆÈB"ÛcŒiZsÀô(™Œø‚ØZf5S±ÝzÙY#Ì›ÃÆ $…í™ · k€g¿‰”æÂÒÍ…o¯6_ü¶Ñ5 »¶Ãî—݉Ûp°g#ƒÊj×åqÆÈ½C£ùå!‘N½1ª°æš N©4²N)Û6(® Ìjm^ê5(751¬FM,`†L,ŠU61”ЛXLˆ˜XÂ7lb(sÒkávÙô—âÊ @‹Wë18§²0ëM[11Scköhœ? ‰™–ÌXÉÓ£LMÌ´o6Óš41^àÏ7±(@ÉĤ3±ñ¶åvÎ)¬l’ËÝæÑxFYH¤Û8‡é!Ú@³€A)9´T ý˜Pâ¶Å5ƒ%_̶¤i•‚Ú–Ç ÚÖ.b[a°­ˆ³­˜o„maÌYÈÝ–eßµ8Å^¬Çà”ðœ«UZ¬³­öiÞƒÂ÷InÖãÊh4—<$2„"J ´ü€éQ&&`,EV~ÉÁøHsªgöÛ(:˜‡¸tN—Nžm_-§RU÷›õ|ÑŒ˜„QA$ei¾Hvh4»<$æf–ÔÖ`5 œÖn["¡p³öÊ—ÚãŒÂÔߊ˜A3ÛÅBÌ # fbfó03Œ9 ¹Û„.šVìÖÌ0Ê`fqë¢ ÉÚiu\Í'…Äæ`¼}Õ0=Êt&‰‚Òšœƒ1«àï;éQ€’ƒHû¶©Yožå`’›¦‹X FsËbO F¸ÑXKÍgú/mŽûbƽ/Q/5cµ{3Ž0CþÅ*ûJèý+&,ø——ð¡þåÐ8sr÷)Aß¿Ün¥Å‹õœRÕ„[‘¶.â_ >ºfÆÈBbþ%‰T ­9`z”©¹‘UVóÿz5uß½WÝÔG˜jñØž¡áŒ­VÙS­VM¸1ÌpáôÍýæÏöÇ püøq:cº®>ù{w× ÜÝ^ÖþrD¿Z_­Ã­¨µºwFìgÝÞ_4Öášébª8*SÕÕbFzçôÞÏ졞uwùKx‰wßînßÌWë¦ü 7“ŠÅ^Ì‚`N7`@-bÐ~BÄ|ÊTÁz¶T{Çš%aBl§ÃbœI¸Ý7ûÞZ X· zF¦©û´.jJÄk,–+Óc1æ$æ2†Ôœ#eDF–8 çD9{Žêç/’Én€ ê…÷ŽääjïÉGÆ[Œ;l¤½l¤s‡„ËSVy÷&¤·—½ðܦo¿‡@á·#‡Â‚˜b=»EïñÄ|žo:î·-’?Ûs„ëà½3m "`Z=ÿg}Ý×÷ Äh ¬Û-žîƒe‰ò·Ÿš…û\§¹ñ¿7Zt/ÜNûÆÏz ¿Æñ; Ìþ@ù‚vÿâ”1?;žr˜.ûò?Ï߃Œ~~ão%†ðîðϯÝß·÷_?7‹¼…Ý}‚QóüHV/@ endstream endobj 3553 0 obj << /Type /Page /Contents 3554 0 R /Resources 3552 0 R /MediaBox [0 0 595.276 841.89] /Parent 3504 0 R /Annots [ 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 3571 0 R 3572 0 R 3573 0 R 3574 0 R 3575 0 R 3576 0 R 3578 0 R 3579 0 R 3580 0 R 3581 0 R 3582 0 R 3583 0 R 3584 0 R 3585 0 R 3586 0 R 3587 0 R 3588 0 R 3589 0 R 3590 0 R 3591 0 R 3592 0 R 3593 0 R ] >> endobj 3557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 697.247 184.814 708.151] /Subtype /Link /A << /S /GoTo /D (spc_8h_4e195ae6c61da3608692a3c7f2395599) >> >> endobj 3558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.365 697.247 271.687 708.151] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 682.627 195.575 692.532] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 658.393 204.171 669.297] /Subtype /Link /A << /S /GoTo /D (spc_8h_4d66edc63bfc8a39adc6bac9e88c8e81) >> >> endobj 3561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.669 658.393 252.589 669.297] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 619.539 204.719 630.443] /Subtype /Link /A << /S /GoTo /D (spc_8h_c39694faccdd56850677999d714cd14a) >> >> endobj 3563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.217 619.539 253.137 630.443] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 580.684 204.719 591.588] /Subtype /Link /A << /S /GoTo /D (spc_8h_49807752ce4e223d4095cf6ad13bac0a) >> >> endobj 3565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.217 580.684 253.137 591.588] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 541.83 207.489 552.734] /Subtype /Link /A << /S /GoTo /D (spc_8h_ab517aed3ee9f8d5a5ca1f990d310b61) >> >> endobj 3567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.987 541.83 255.907 552.734] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 502.976 207.489 513.88] /Subtype /Link /A << /S /GoTo /D (spc_8h_f0e4274b242fd41625b6ad4f4376b8da) >> >> endobj 3569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.987 502.976 255.907 513.88] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 422.213 213.576 433.117] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b) >> >> endobj 3572 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 406.99 201.172 417.177] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741) >> >> endobj 3573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.26 406.99 337.938 417.177] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7c5e0d09fac9f441e39f3cf28801961f) >> >> endobj 3574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.026 406.99 495.606 417.177] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8) >> >> endobj 3575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 395.035 190.841 405.222] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b3ba9183c7c3dace15eef0606980fd615) >> >> endobj 3576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 378.751 207.459 389.282] /Subtype /Link /A << /S /GoTo /D (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7e218c5bd52bd6a45d8ad66573653007) >> >> endobj 3578 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 323.518 152.714 334.422] /Subtype /Link /A << /S /GoTo /D (spc_8h_30c95d776068ef3cc959a50af9995fa9) >> >> endobj 3579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.157 323.518 212.479 334.422] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 308.897 255.102 318.803] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 284.664 157.676 295.568] /Subtype /Link /A << /S /GoTo /D (spc_8h_2e04fc3ccd8aceebb4bfef56c5399a7d) >> >> endobj 3582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.119 284.664 217.441 295.568] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 270.043 223.469 279.948] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3584 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 245.809 153.262 256.713] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 3585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.227 245.809 236.549 256.713] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 231.189 230.794 241.094] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 206.955 153.262 217.859] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 3588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.705 206.955 213.027 217.859] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 192.334 232.283 202.24] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.805 168.101 155.915 179.005] /Subtype /Link /A << /S /GoTo /D (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) >> >> endobj 3591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.125 168.101 215.447 179.005] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.228 129.247 157.339 140.15] /Subtype /Link /A << /S /GoTo /D (spc_8h_e6e89217a5eca87a2101ae195da74347) >> >> endobj 3593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.396 129.247 219.718 140.15] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3555 0 obj << /D [3553 0 R /XYZ 90 757.935 null] >> endobj 3556 0 obj << /D [3553 0 R /XYZ 90 716.221 null] >> endobj 3570 0 obj << /D [3553 0 R /XYZ 90 441.187 null] >> endobj 3577 0 obj << /D [3553 0 R /XYZ 90 342.492 null] >> endobj 3552 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3608 0 obj << /Length 3796 /Filter /FlateDecode >> stream xÚí\Ysä¶~ׯ˜ÇQyÆMrßÖǺ֕ª8–*qÊq¥¸3”ÄÊ\&gVR~}ºqŒv×ÎCâòƒ0D³? ‰þºÑÀš-(üÇ]d*#…P‹õîŠ.îáéwWÌõ® {ôu{õå[o‘B‹Åíy]3¢8[Ün~^j’]¯¥tÙ×äázÅ]¾­·•mýXÝUÍ5Ë—Õ~ ÕR. zýËí÷WßÞv¨nLJhÄüõêç_èbcûþŠQä‹GhSŠb±»’\¸ööêæê/û\Àó©iaïJH’g󳿂PÝÏšó~ÖŒj"E¾ð28õp®†a^ájèay™4 “¤ YXïO#<žJó;š{'ñcˆì¤ÓÈ•ˆ ßöô|¬Fè*'RÊôlLV ÌfÌK]öí WR±\?”káP~†U§³å/¯à™fAoÛõj×ËÃÞõa“èÝ—»Qï5[ZM—ç=üªOí:ØæË·Lö“œ¡5˜ÁN‡ +N>rΜÄGþ e`¥f‚H0ÄŠ1R(kiV-^òdAŒsºõë“à[¼¸¨;‰¦jOMõ«Óíóz´H¹dD(¶È`2Œ]X£^xÕK–Ë@!ŽãqÝVM3BÖ@d4F¬O/2Ä mÂ3$â¡e¦­cÖ:0$XÆlÌaš/tôYÈ©q1 œAsÒ§¸$ˆn(0ƒ–|‘¼¶~\pc/‚ù9VëбZ–[;p`öîK­ðßõëÛ¿ÿð­•‘4Cä~µÕ¥QÁ©Wò¯kF—Õµ ËçÇCs-²åÆ®“r_nŸÛº%³–Éɧ#TÒ2†ëq9KõÜKÍ,.Oõ^æÕºæ©> è¨>œ¡z oDxIªGé4ò@¥£úöø„kdL÷šª.ÌØÉ¤qµ ¼`±‰{º\9R†ohéþ&`\!Års8¿ÇÈ6®9.é›WöAß) ?Ý5¿š×ä¨çhyÍéòõVK'5M´¼( Aá/fFGçf¸ÓWBq’Cz²üÂÙ$…;”B„Ö0ԗξû(?]Ö+åË»ùis“ 6BQ"0&©J_p/½ ÄGËu¨r>Þˆ ÈIÀ‡ådFQîDªò· 92#üs"N÷þlÀ±£xc¾ÙgD¡ ÏÙï ó,T–ŽNæbDèu%"B ÐG„p&"(!c¼dD@é4ò@¥‹OÇv:dfëdÒ˜ X.bóÑ€ùÝ´ žõÌŽ2!÷àƒ°ÓÐbbχ¨",€à|XÈ)ûø°ƒž D©â:,Ü\Ы ÈZÕËÃÂÍæ§tX9Éø0ð&¨‚“^âã°0P™ Š:…+3‚ŒÃBf‰!“° ŠŒ@Îýéq!P0¼ÈGF†öyz¨R¡Aå°ÅáúóBƒ˜ *“DR‘ ^æRht͇†$  !àÜf6j^z³ÒiäJ_jöu¡ ²—,=['“Æ„ø‘±3Ú(dÝF!sítògû°©ÞMµ=Mö„›ˆqÏ(Z˜ Ž„ ,õ®ûŽYÓv¨<,5%¸°Dsöb.ìgÉ/‘·$Y–½\±1¿À³‚dðªÒòúì"ÏZéU >Á³±ÊÏR"Ø|ijVfó,l̨Œ Ó<Ë_ȳ3˜`ŸÁ³½‚Yžu"ɳNlßnËS}ØÏ³­€¿ÿ½q3Íežf['s‘m{] ¶Mz¶ 'Ù6#Ëc¼ÛZé4ò@¥cÛ²>¶SlËe–ž­“IcbÒ54oX…§C {3`0´i|0¤mSݽš|1, ã³®ÈŽÄk¶}îjìIwbÔÔd>Ýz³îäDз×J-?q§\oÞýp³+]K˜yµG÷é§ò÷cËùäFbÙ)¿—»ÉF‘t7/sÉÝ]óî–tîÎ$7¼Èc¼drƒÒiäÊþÐkìmâGz®V$ É`[Ù6ðµ<÷.ƒ­¡ËY×ëN¼À"ðõþÐküzzM½{Þûã.÷NwiÂiñqÜ5ÅIàMÒ…bþ€¹ïžw5+rÑÓæzGK y?ëÑfܬÐy–ô2NÂÆ ƒÓ†‘i`^œ¦IâA<Ó<šf¸yPÝ)ƒÒá)ƒ]è"êFjxÊ tÔl¯Íœ2ä|΋(džL}¬%4šS›¨?N>ê”aÎÇlƒ 6ïä}ÿ¼—;™‹nžÀêý<è=œñô|—ôôün¬°¯"=]YJHÍÔɤÁ×ôE¦ œÝÂÙ¾¨‚ ¡HEd”‰ŠÈá‘£ŒN£×Äœ¿ëlÖßa±â;×YÊßµ–”?®|<çïàBxø7ëï}ÿ¼¿;™‹þžÀêý=èý=œÙ¯JL>C¼ä~¥ÓÈ•}upìòŒä"=W+’T‚乊m$ÐTû,–ê‰Ò gý=#•G½]ipØÓ3ÁTϘ PÊû-¸*$DY|þÿq¥Á W±üÿyQiP¿\±- zНŒ® SãŽH€»Û*î_¯ ¾,›ºôvÂíÌáJ1ëu}÷¬Ó9‘K>—ê\.…æ<.@–KÆL ”¯†e×øhU™»°áØæÝÓ 'G+tÎùϪivíýèÒ¬F ñ#a/’Âä seˆÙEÜ™Z‡àËŸPëèÊ9‚¹rŽ1ÕÑSy:·öS™ZLu:7®t³«Ú¶D÷½7›ùàx‰é3®T ¦n[ó‚¢s·­ s÷­¿©Ne½­\õö›ª]7õÑ”žFžJñZ%VÇíCÕš«ØÙ²9œOõüÏüªwÇmµ«°„'h¾<=8©cÙœlëpgÿº®|ùöÝí}ô·¯]£=•ûMÙl¼déÔmªrë€ëÓƒ6õ1¬á¯õáÐlê}yBk¯ šàX±xölØ’F<¹©ÀsøÉ6WðµN‡Mkœöï{Ó©—çÖX žÜÛXvGœû½ýÙÖ>4Û—í†å´4‡mAl­š]µ©m)0ýîx¯J”Ë-|[s‘Kɾ…¡îJWI„ghzü[ïÊûÊ65d®ö¦ÞÖ> ЉM¹F,á{ØîõÚ½j˳M[¢Y`gÓ[6Nì}‰×!*÷º ~ý/H>N債i~麗^â#úªtœulv#ð<'T À‡×ÿL² $‡fÙrjûÃOøøP¯ñ_=h¼¹oí¯r»µz~Jx°¯ª±)´í‚„†q)«W&ˆƒå!,#PóL·OR=f{Ø9±]µ{ß×ë.Ý»s{šX‡ÆQd±l+·Þ?ÛvTÐj°ºýÊßÖ\Ç<2HFÞ AË®!äѯÌËx® ´·N¿g"¶ˆ“‡¹@®òhUÂÃmíŠçÀþùú‹/lc½-[Gåï1á:»X²ÁÖþ01õj¿.í98ó2Y·~´#§ÐöP’Ášaâò?¼pçœøD «t+¾Þ×È“Ç Jš b¢ÍÌA@ ZAÎÄX]£59_›rÇÚ.ZxbøþÂÈNu¹­ÿ]¹çcbàG²,{¡™¼tr¬C•óÄäGÍ’æñ2iÈB‘Œ1¤wD˜¸[cÐÚTw&å?o]—˷ϸ´‡§Õ·©ÚÆK':Téls×TÕÜ’B(OÉË$±¥Èˆ2Ân*pËzçV²† 2ðjå6AÒ¾ºå¡yv§ÒûïJ÷èÁm¨ÌuëðUå²6`Ýú<ù¨… þºÂÁSRé„!ý=4A¶w_uô¶ßkP„¢‡d9aùÅk VxÕKOÜjˆv«ø4÷¡ð‚XQ¨hwÈP$‰ ]2W!î±~vÜYûÈmÞ»À³ óš¥F{½÷ ~I†Qã|´MG㯦Ê|ÚÜæ¹|%ÛÊ®á º Õùs„jÖt,×DÁ69À'Lx ¡qÍàí!·MŠÈ1àá=Ò07„‡=tBæïo ð8ùR‹9áäÈ çISàοHšÊ‰¤ñ4ì} v”É| -Ø^”¾Û­–s†©OÞ@¥k=VMådfBÖhÏÇã¶6žŸq›fd>µ‚&‰Qj‰9U–¹œ žwãÊ0mCþ¶u›gIkcÎÖZiC(¨¾²]6iBõÇwô55Ñp,l…5e?§•^âß3VyÙ „ÏÍT<ˆÑ—µ2ih¼A•tŸrêSo4ûd8ÅF[QûN³õx‚·®OÛgûlåYÇB…·èóOŠ#n·_Ý©*÷e ¶NC>€xž30Q^LÞœô*3Ã@eï`¯_c‰§—Y `’ b˜8™$ôPB“‰’c¡üÒê+L~ÜIŽÐEþX‡·³Ä‹)­1ô¨be’¨ /pAODi;7šå/œª—N#TzGãO³“fÊKOÚɤ¡³‚Ê"è HÃeî7h®þ‚O‚Rüê+NK @kÝ–Ôl0ìÞí­›¾®O¯ú  ËÙ Ónê@ÍC}ÿ`[[³Is×½¬ÓævÔQ±¦©{1ç¼}ñ ÝùL¬óåíÁlÿ¼øsº+¸`å/WE³5W…”ìÆ”Í@õ{Ÿ/ÖûqqƒމÍÕúbqÃJ¯ñ‰âF¬Ò.ª'ò0ÂÎpì{˜;™4â@QGxáßïw½oÜ–ùŒeÛ6¨`«îó¡1Ø&âÚqì\ÖîÉwðûo½Lñ ;€î¢×ѬÁmÁÑôëT>ÕNÒÕpѺZܦ}=Á†ª€¼d²jKÁjÌþ >íÿDaÿAYn¶ŒAQò•L: uèhêïª}ÕÀ’õå·Noñ€äìòŸ×n$íV¼¦üµ ö‡}„ó"tïI@ ‚•ýî+÷*É  0X4><=ßW£¯ð õÈ<ÿŸ;¹ endstream endobj 3607 0 obj << /Type /Page /Contents 3608 0 R /Resources 3606 0 R /MediaBox [0 0 595.276 841.89] /Parent 3504 0 R /Annots [ 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 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R ] >> endobj 3610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.012 719.912 159.44 730.816] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.355 707.957 268.897 718.861] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.667 670.358 161.051 681.262] /Subtype /Link /A << /S /GoTo /D (spc_8h_300fdb21c6e53aca6749db3455e531b2) >> >> endobj 3613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.415 658.403 377.958 669.307] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.538 620.804 161.072 631.708] /Subtype /Link /A << /S /GoTo /D (spc_8h_99689938e16d737f26bf6504f2e1599a) >> >> endobj 3615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.761 608.849 376.304 619.752] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.689 571.249 158.454 582.153] /Subtype /Link /A << /S /GoTo /D (spc_8h_cc0b7b9e5bc5495f24129492e4ff5218) >> >> endobj 3617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.767 559.294 371.309 570.198] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 3618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 521.695 158.243 532.599] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 3619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.302 484.096 155.307 495] /Subtype /Link /A << /S /GoTo /D (spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) >> >> endobj 3620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.972 459.817 157.082 470.721] /Subtype /Link /A << /S /GoTo /D (spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) >> >> endobj 3621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.854 435.538 156.964 446.442] /Subtype /Link /A << /S /GoTo /D (spc_8h_49f16254df0e3498ae2c1eb641f5232c) >> >> endobj 3622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.486 411.259 152.827 422.163] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 3624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 345.637 212.46 356.541] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.708 240.472 489.03 251.376] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.767 186.982 155.195 197.886] /Subtype /Link /A << /S /GoTo /D (spc_8h_30c95d776068ef3cc959a50af9995fa9) >> >> endobj 3627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [263.181 186.982 294.503 197.886] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3628 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [398.739 186.982 436.128 197.886] /Subtype /Link /A << /S /GoTo /D (spc_8h_2e04fc3ccd8aceebb4bfef56c5399a7d) >> >> endobj 3629 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.015 175.027 376.991 185.931] /Subtype /Link /A << /S /GoTo /D (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) >> >> endobj 3630 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.604 157.403 187.58 168.307] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 3631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.464 157.403 365.786 168.307] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.695 145.447 368.671 156.351] /Subtype /Link /A << /S /GoTo /D (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) >> >> endobj 3633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.816 133.492 246.621 144.396] /Subtype /Link /A << /S /GoTo /D (structspcprm_feeb5f4056f271fd37291a712a7b6791) >> >> endobj 3634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 115.868 124.749 126.772] /Subtype /Link /A << /S /GoTo /D (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) >> >> endobj 3635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.082 115.868 177.827 126.772] /Subtype /Link /A << /S /GoTo /D (spc_8h_e6e89217a5eca87a2101ae195da74347) >> >> endobj 3636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.299 103.913 472.601 114.817] /Subtype /Link /A << /S /GoTo /D (spx_8h) >> >> endobj 3609 0 obj << /D [3607 0 R /XYZ 90 757.935 null] >> endobj 3623 0 obj << /D [3607 0 R /XYZ 90 363.983 null] >> endobj 334 0 obj << /D [3607 0 R /XYZ 90 309.509 null] >> endobj 3606 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3647 0 obj << /Length 3642 /Filter /FlateDecode >> stream xÚ½[[oã¶~ϯúˆyH‘¥íSºM)Û4 6§§íƒb+±PGr%¹Iþý™áE¢nN|¶8X,L‘gȹ}3TØ1…ì8¦ÇJ*sy¼|:¢ÇÐûéˆÙÑ /¼ñnþuÁá-‡üøöA¿2"v|»úm5_0Jé¬Ú.Éz¾$]d›Ô´®Ó‡´œ³h–æKèâ4b³ù·?ß6T-O’‡Hó¯£ßþ Ç+àí§#Jx?C›ÇÇOG"à¶½9º9ú¥YÃôsèÛŽ.¸ ‘šÞuÀ Û]A»kFC"xtìæàÖÙߣðJ ½µú´‰£Zz;ÊG;rí1ÄÌ£ê ®ì$Ÿ+CýºM§’ÂÿÁI3ÉH¬Ô>nÎ~ÚR‡êÓ^®ÓåŸHžËY‚?!°“.ë2Ù ]E c"%¾ùñö׫s3GÐvçDAËÌÉ3¡Ã0A™ðçœÑY:gröúŒÍ¢\^ŠÒpó÷<Î6Ù*«_-›¹S¦õ®Ì+3/Ëá•§¤ÎŠÜŒ®Ò2ÃwÿÆÕS·lY<Ùù5SiÊI@Ãi…kǧÎÎySáöÐrsötºä¼qÂ[A0<Þ9›é†±$O6¯UV™§²ØÕYžöy @¯‚>¯“àfï庿¤µ€jû¢5eA“”oß©¹9ûéÇŒˆ0èÐ_OÛ]Ú³¨×è ætoçЇv‚ÖkÆ|ñ+B£Ð*ö¿‡Š Ú /ÐàÍb•'1G²Ì’û£Š¦‹Áö *DOCbiìwœAÂPXR7CNBF¢Ç xþ>mèªvÛí&KWc¶*¾›MÚŠ7>i+nÎ[¶²Vc+{ Z[ñ z¶KßVÀJ)»*h÷˜—œ„’wLkZñ9ÄA5$¼ñiÅ·sÞTü=´ZÅßGÐ)¾Gð“1ZJû¥˜Uimžµ«ƒ_Ï;I9®+Ó)ކf Q™äÕÆEb9m.ÀTQw“æâfïÝmI¯Ê|Ò\8 š8ÚÒnÎ~Ú½…¬¹àÉlËbµ[§*m|Ó^e™VÛ"_eù£=o'€ÖëKI(î»çõñd¿Sh€c;ÆÁ[*Âoo†3aÔ6 B²1míø´mØ9oÚÆ4­û^®œy\J%Ù¶šFì²¶÷0Üœý´Á-¡gói;óÒÚ…³³Ë«›ÅlMPgÒÖô¢Ð7_x3ßÓ¡¦0€Qá{`¾s¹ùPQ"9=B¼>¤¡H¢63¾ž¾>¿."(ÔM:5{Èòº.MGß¨Ü 6Âx×ÔÆ¹AvΖn®Î?Þüz3$(€`wFèIHÙ"ß–ºDTcÐÎ@Ì…{E6¢l¦Ç7h.Æ ª$!åݘÜIð &óæ¼ï£U¹ˆ~5|tÔðÐëÊJò ­;å '‘“Š„L@~Á8pÞ™¡÷b`{6m„Ò&¢YýÙn ÿq! Pij<7]%å«é/õìÇ9Bç¤i'(vaó@ ™%pqy{£e 3Œõ:7&ëèá´1ÉKf\'•á´^—©¥—TU±ÌÀ%¬Þâ¯ú0”íœäRã>|ú0_ˆÈæIœû 7»;®ssóû¼Î–kóʲ(ð@Ã1-l€yëß{»¸•Ê áØB†Ñ옕°¬ð®õ!À‹Ø¾}vq=F "AƒåO,÷Iþ¸Û$¥¥Ö#ã#¤bJh;οœ_¿g/°Ôv]ÔèRš›Jèã4àL:vïæ, à‹˜³¯_F÷Ó GP»©d¸èmU s}[U3`2ß=ݧV)FXá! „cåëõÙ£ (å3 U2YeEP€ƒ 8“úÕðÂþXØQ©»9W³žõ˜ß¤ùc½îº>ã–»b’sF‰¤;ÅóÑMp)z›ØÇȘ"Æ$ ]ù:J?_ÝŽjHD=RŶΖ^nOlŠ(IÜHæ?S”Ø€R™®ªuöP;ïC W]Yœ ‡$›Ö>qãáè9íŠaÜx¨:@ >z?¬µ†·Ñðë\ §Zï:Y¡D #w(\ NTgUíÜë»H‚c äúÃùí<ÆS’käÁ»ÈÞ§ub¹>¿eír?Ûœ×ùíhÅOAF¤ }à+0É|ÒpÂ%¥Ð‡ÙdYÕn‚ŽB0q½|ê„­¯üÓ…È`¦,þ. âá]AS˜=5œŒ‚t©¼Hòñz.Q Š³Ï£œÈfò[œLæCÇ<ÿ<ƒÙí(%Aå{)•6é"ïB2Â[QÁ@7d@Ø[…¸¾nÀRíH$ëLðøUaúëuR»–-—ê§mYàÓßÙ*5/$¦ßêÓðž^Èå&¿dím28È®9ÌâqðzÈyª;dð~Q€±Î¹–xjn?Ñ(·äœcØýKQ;ÀoÎdÂGA$g`ž&w²˜G;†æ ¥K°ÈLV+h‘»ÈäeS+)ï¯R”NîÀ¨sÑwmr…ô’­———d(…BÕìæcWÃMzÙa“D àuÁ¸ƒ¹Øôò &úùŒcÝåbQ]†ç;4µS3ûÌöaÁŸ¿êîzÎ0é–MDØDí:QqxX*ëöY&¹€?Es[¨R;iÁÀûÞ`ÅÝ Ä½1,w=ÆÆtñG +§¼ÈeV=¹äQ¿Z¶ 1,¡£÷ »¹ý>éuÕO§NN‹\fÒ(^š=®5 €¬µI—šlg¤4D‰øöÈaps§ºÒÑZ„SJtÕö=w¨··zKÃFo©_mãTõo2LgGuá•FuaìÌöiÕ…_§º0ôàúœæBÓr :dC[*À–ùU6Åú p¦uÃN2Ad¹Ù¡ü´šûØ(«A+6ßü¿¨â{$rˆ.VÙK â°˜ô=Ú® Šÿñ²9è¡:ê÷IËLpó€þA5§†Oálí'‹z<Ç/6#¨ƒÙò÷ÆMTÎ'jv0S±÷»‡Ê0vœîj÷õôÊi(³Êú LäEmFtéßÉ]ºÏ:vÆTÇéÚ×]¢=Da·ª«—¥úÊÊnæ è;«¯ØÞ‚~<¥  ߊŠ'зˆˆhÊÏï»úïû‹Aݬ1`°Q\i醶içÎÌOã|Óv›ôpß½´‰˜þŽ‹÷0fλ(Ü4¸C°V°åÁoky‰êΓçÓ0ô@Gb; äƒ×óäÓJao/“Üôlc ÎÀ ÎÇ>- “²Òñà(tnGʺñYmiE¥=ø5ß aËh­´'kšV`NŠF1ô 'T¼Ý<%ˆÏ¾‰d)8RÄôìÊ2¢Ë¼Ü\ªºU3·¨>h]Ƨ,z-Úæ?â¶N]07º8U„â^BþéúrdQ°Æ&/6ë`|T‹LðÓnyš\Àb-¹±<²Ÿ&\ŒÐ+hÙ‚E‰UÐñÊ—8S¸Ï‚ áÉm‚H–Ÿ¶©°žƒqO{5Lšíû}½…¾b¹Ü™t:À2ÀsªïãaÑqXS"¥8ì#dXפÅćK2 F Þý`©N6ñ½ i!#!ƯªÛ7•½å¡G…$ÝpT<£Á‹Ç$&ÀãùR“nm°aª]¯MD­Ã˜v FBI"*:ðèn­e¬&r]gò i¨h|ßx}ÊSˆp°íÐß6t™Û1˱î©Àÿé Yéõµ·NÈ‘¹±RÖ7C ò¦oßB~h5K Ò}d<_¹ï{ìˉo(Rˆ«þ­Kÿ^g‚Xe}{K4f˜£FÓØ$ùŸ…Øâo™XËÉÓ62—îfp»ÅÛ¥ÜmÅöÀoO=•êbÐ3 Í’ÜüšüÝØÓ¶ÁWúÃ]Êrf¢½FhñY¡C¤[ÎY 3ƒ}ö«˜¦sP1ÑøOÚkA\ÞÜÄbIdca llµ2 µ´@#wºèx#í¶zò=9™¸*Û»‰²ËDc/ü*·]»9ºx/»ûÎé¥Aoãò[X¶° ,dÁ v45LKïa,˜JG߬_À©Ó/s)¾Û¬ Õû‘Êí‚G’:5iÏïD_[@®º¸îNF¾eP„Å>T°Ê’jmvÙ26Vi°S_²ì^…úÊë ³‡%Í'Ì|à_¨.^ÌJˆœb 8Ðû‰¦?s ãƒüµÇ³ûÜ óÐ…TÜÇÇÆøŠaÊVŒBcÖA³Íô(Ç"Ì[qaO~}rᡨN]²El÷¯~ÚŸU$õ®ìÝp78Ë+´¦4ý$_ÆóŒ|C…FÀÌß:üob¾H‹ˆb±ÿ‡3!@@aÿpÆR×ð¯ƒÛ›{‡a´UììV~^Ú:°0?,þ@ƒœš§€2æ.z‚¶Fr÷ñæ3ˆÿòû*‰HÐ=Ç‹—×Gƒ“üÓ‘ŒÏ$OÊ1 endstream endobj 3646 0 obj << /Type /Page /Contents 3647 0 R /Resources 3645 0 R /MediaBox [0 0 595.276 841.89] /Parent 3504 0 R /Annots [ 3649 0 R 3650 0 R 3651 0 R 3652 0 R 3653 0 R ] >> endobj 3649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 152.973 730.926] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3650 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.229 700.053 290.248 711.01] /Subtype /Link /A << /S /GoTo /D (spc_8h_300fdb21c6e53aca6749db3455e531b2) >> >> endobj 3651 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.172 668.238 300.341 679.195] /Subtype /Link /A << /S /GoTo /D (spc_8h_99689938e16d737f26bf6504f2e1599a) >> >> endobj 3652 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.582 636.423 370.981 647.327] /Subtype /Link /A << /S /GoTo /D (spc_8h_cc0b7b9e5bc5495f24129492e4ff5218) >> >> endobj 3653 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 604.608 151.867 615.622] /Subtype /Link /A << /S /GoTo /D (spc_8h_615d3ef3a505a8be7da1578d9338d218) >> >> endobj 3648 0 obj << /D [3646 0 R /XYZ 90 757.935 null] >> endobj 3645 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3656 0 obj << /Length 1602 /Filter /FlateDecode >> stream xÚµ˜[oÛ6€ßý+ìEj†]»§µiºE·5öЃ"ѶPYR)©‰÷ëw(’6#ÛŠ³&K也¤$â`ø#N‚(ˆPÂ'Ṵ̂³‚Ñ·3¢gç0=·æ_-fW ´P2g±ÔC‚JœEþÙ QäÍ ÆØm› ­½9 °{U”\]}âK.<»¼Ê`ˆáÐ÷Ý„z_ïgo;¯:¦€…Òç÷Ùç¯ØÉ!¶÷3ŒX;·pIg3ó)Ó×åìzö×Άg0~,­€°‡ó¢ á0òú ¢ÆîªßðªS©dkž}+ªÕKüÅ¥{](‰PHýAu±–™ú‘[TMßÉˊóN¤¥šøáÑÀMËž·j6Z£®Ê­¼Éx®¦–µØ)‡{åÈíÖi§®n¥|Ý—¹2!xÛ— E}Á˜Õii¨ñ¦.*"÷HàÞe¼éŠºj‘7¡©ï*™í AI jÓ¤¢+²¾L…çc÷¨‰[ ú+ë ™ßy/ób¼àß{@ ‚f±›V¹šbN=е|É«U·nÕ¤ª‹/ËZÚ¼å¹v—ŽE´zyÄ-º£•àiÇ…†RUæJ«Ac¸¥^ɵ,VëŠÁ Ì¡±…6Ýè«¢U¿èõÈЧah ‘…]ûåÔ @TZy®~ _5S.™ÒV “Ç †”6ÐJÍs–õ"ͶÒû±†dC_û"­:‰dȆ\åÌÊjo¥†œ £ê #©ò§3#P^#Òj!Q÷€"×v¿à‹a¿Pr:ɬndL[![¢dª@ä H~õæ>…ÎW¯r…7Ì÷­,òaW7ýPjêC+»¢]nÕê$>7-/UŽ­š„±B¨Ë4‡þì’kª‰dKÞ5½hê–K0q×0ïëhVe°Ñ”uÛ m†/¥Ðð±ª^j¯²Dò÷¶èÖű•š×ýÙŠÁ³¢…µ­i«{](yÇ…¨Wa3¦éÌùö ·ãÁÍd·V7RË“ Ó–ÖE¦ ¢Þ4)x©†Õ©ÖˆY@m½ì4rü8̌¦˜CQ}ì\Bû15¾/ëlزS¹‰™‚P1?Ùk"¢uÉï)_ÿùúÛêZÂØÿÊ%\/‡XâYg–sÖˆÄîd´4\ŽÈÿÓkLÅ JÊ’\ª||& â~Œ(fêL“Ãb¥ç?Y§›’[ÂÃùfGpßœŒBeqà6ô‘Ïîû¥ZdÚ]¢„ŽZ%T¸^\ù–óQÆàC Ësé Œ„DKôUѵ/”9Xèc8Íf}%—L-`Mþ-ínÚ4°5!mNxäP¼ù5ô85PÆ¢*þ´»íj7: Áý¨Àq€0I?Âð¼sôa…ÿÀ!ɰŒ§'cß™û F>D{ìÉFË™Ð%oÔSY6¬êòàQŒÇ2zÀô*Ѝ–åLQÄ(·Oõ¡žÍŒÌpVå¹éæî4½I³ozÈõ–1l']qS”Ñ¿õÂÀÝã0NІ g÷ë~²®Fz2ö±I½¨Nôh<ó§?72“nì$ì$¶Û¼€Ý½+5û•:_ÌJk;žæÇP§TY‚£‘ ²Xg'YoD÷hÖYLQBèS±\Åa4ɺyë{£?ź•êIÖ̳³~¯î³>ûØäy¬O4~Ïú”[úíö)X-Öý“¬·üñ¬Ó$@4žˆuY$:¹­k‰óIß›ü)ЭthröŸtuHØéFä|Ô-£?Çú>ÕÓ¬k™çgÝ®û¬OÄ>6y&ë§o±>ávǺåö©YOoêôîѬŠÑñ—! õðLÔ é8œB݈œºetõpõ}¦'I×"Ϻ]ô‡9Ÿ|dð<ÊO·|ù„OøåóLÄGßŃÁÑãƒ7ÿÿ‹ùð­?Œ¡©‰ #¼¸G¾þ$®½ËðßòŠ[Ìw¤…—P×|üüüÞûê‡$/1}ɰº£˜ ‹ÌÝó÷ëëÀÅ»WZÅòUÛ~—¿¬ï¶+^«#¿é–ç?_<ë= endstream endobj 3655 0 obj << /Type /Page /Contents 3656 0 R /Resources 3654 0 R /MediaBox [0 0 595.276 841.89] /Parent 3675 0 R /Annots [ 3659 0 R 3661 0 R 3662 0 R 3664 0 R 3665 0 R 3667 0 R 3668 0 R 3670 0 R 3671 0 R 3673 0 R 3674 0 R ] >> endobj 3659 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 545.05 165.426 555.954] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3661 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 487.475 138.508 498.355] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000019) >> >> endobj 3662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 467.386 316.03 498.355] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 399.848 138.508 410.727] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000020) >> >> endobj 3665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 379.759 316.03 410.727] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 312.221 138.508 323.1] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000021) >> >> endobj 3668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 292.132 316.03 323.1] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 224.594 138.508 235.473] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000022) >> >> endobj 3671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 204.504 316.03 235.473] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 136.967 138.508 147.846] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000023) >> >> endobj 3674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 116.877 316.03 147.846] /Subtype /Link /A << /S /GoTo /D (spc_8h_96978fec523018fd6898301a3452c166) >> >> endobj 3657 0 obj << /D [3655 0 R /XYZ 90 757.935 null] >> endobj 338 0 obj << /D [3655 0 R /XYZ 90 605.644 null] >> endobj 3594 0 obj << /D [3655 0 R /XYZ 90 583.333 null] >> endobj 3658 0 obj << /D [3655 0 R /XYZ 90 583.333 null] >> endobj 946 0 obj << /D [3655 0 R /XYZ 360.971 548.203 null] >> endobj 3660 0 obj << /D [3655 0 R /XYZ 90 531.476 null] >> endobj 948 0 obj << /D [3655 0 R /XYZ 90 458.419 null] >> endobj 3663 0 obj << /D [3655 0 R /XYZ 90 443.849 null] >> endobj 949 0 obj << /D [3655 0 R /XYZ 90 370.792 null] >> endobj 3666 0 obj << /D [3655 0 R /XYZ 90 356.222 null] >> endobj 950 0 obj << /D [3655 0 R /XYZ 90 283.165 null] >> endobj 3669 0 obj << /D [3655 0 R /XYZ 90 268.595 null] >> endobj 951 0 obj << /D [3655 0 R /XYZ 90 195.538 null] >> endobj 3672 0 obj << /D [3655 0 R /XYZ 90 180.968 null] >> endobj 3654 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3678 0 obj << /Length 1791 /Filter /FlateDecode >> stream xÚµYMsÛ6½ëWðÐu‚O’ð-qìL2iâZδ3IÆÃÈ£‰TI*©ûë»$ü‚œ¸D‘ûvÀîD HÄ"F’‰`µ›áàótÎó7³g— ÞB2bÁͺy="HPÜÜ} #Ïc–ûú:_PÃËÍVé«kµVÅœ$¡ÊVp‹áˆóP²ùç›7³‹›#«ñI°¨æü{öñ3îÀ·73Œ˜L‚ïp‘2ØÍ8eæz;[Îþ8ÚÐ÷Ü Kv:.ÊŽ„ 1ÙEvØ©"­6y¦£º™Ç<|Ø›_æs®’UÁé‚rĸl­!bì)°§_…œÝª¢Ø•÷·*+p¿—™D Ld Í@f]"Æ<ˆb†(¦O6ª¼8ë“LQÌèë€ÝbôðÐ`_Ì©Ÿ¿¼]^]œß^ÍøqýfÒÂ|C"Їhè Q äQc˜Óô„Ã3âð_ƒObs8vǧ:1î¿BÄ’ÄëŸÅL$tBûÚ¿Å ø{ÅF EŒË7Åáò­ÚJó2?ÔÉÚµe“UÇÒ²É6úú¸¬ŠÃÊ>[ûÕ¾hªÍ³Kð¶Í [qµíO3q³|15 Ñ7<3¬5!Hãõ‚Dª/|ǰ²…}»v²1@ik“$j-àÆÊ‚FqXªªÔWév«/vj÷Eæn¾6OƒGŠ"à®fìêûŽ\»£hÀ‹Ý bÇÉ®AÉj‡™c$e—¹?k ÄËÇŠD—Ï*\åúûN­ç‡éak|«gtº=¨AŽHøÚ<(¿æ‡-L…;ýó‹Ò߇RÝuMÂU›t»ù× TmñÛœˆPýhynÆK³Áú¢îš›NrÝà= nú¿‡¦^‘X@aNbÑD7æøD‰·;˜©n̘@1k¯š1+Òª`*Oväæé Øw¡³Î¡ÊÆ‹©}øm¸Ô E\ðîZïøÅâ<öfÄbþ¸ù' Z% ןå^­ª"Ýê¢WY¹Î‹#Äö1˜À:i“£E€…úë™+Ò1ÖðZU‡¢žý™g ¦IÛñé²vÒa‡GCšl@8”:î¢öÀä฼G|1F0ß':¾Á,ÐÐ R'j 5U™R1 „º È˧!'è@ûÁ¸tø j,‘åaµRåp¬mÐqf'bu@“±Z̉X½|&V?ŽÕ¥#&Öwèp}ÚCÍà]ÞÉújÑ~z&§k,‘¸Y Þ  ÆO)¡®HÑ¡Üç ]`³hv ] ¥E³zêWœ‚üŽ DG$ÐZo>ÕOè ‰þ5:(ñõuÐÑÓbç#bXJ™’fuEzÐ?@å…¹®¾¦&Ü]jn}…¸Ó9Ŧ‡ë›_”2„U¾J«FÔr“-Ø*ª#Yó {×¼°”e™Þ›ç›Ìr«<àu¡§ƒ½…ñ;! záÀ‡¡grzó*€è‘÷&°Åø)“zPX—Ò«h‘‘· 9˜©>Ä`úG8ùÍ0Â<Ý“ú.Œi‹Ñó‘㟗 ¾¤eCߥ1Ùàºô?ɆZ’'Bø¬ÅL  ’8~´pðѶ£Ôã“ó4í@›­÷÷S4ÙO-æD?õò™~ê§ÓýÔ¥{¬v †*>k šŽÕ`NÅêã³±zéL¬Ýc´C‡÷´vðºÐ3yZ;xƒ¶ÚÁKi´ƒKùdíÀF´Ã¾¨ZٰʳÒ>ªŠú¨vå"ÇDL ˜ø—(I EI#!œ¬W#G)1"$ª‡ûÂ-õuÝ©› ´RÇÛÍi =M‘ˆA¸µN"’/Õdk…”Ã:ôŸŸ8˜©ÖJ(C‚ÿÐùÉót—í»0¦…,æéZÈ—”£ê»4¦…\—žª…êc1؉Ñz›Dâçÿ²kþlŒHdç_«H×õµÃ^ÇòJeõÿUv[Òþ'ix0÷¶*sýEä¦g ë_»qª…ݺüy¾| )xýÂ¼Š’z/Ùì‰ì1ü?÷*=s¤ç?X‹Ã endstream endobj 3677 0 obj << /Type /Page /Contents 3678 0 R /Resources 3676 0 R /MediaBox [0 0 595.276 841.89] /Parent 3675 0 R /Annots [ 3682 0 R 3683 0 R 3684 0 R 3686 0 R 3687 0 R 3689 0 R 3690 0 R ] >> endobj 3682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.666 514.067 241.988 525.081] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.674 514.067 513.996 525.081] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 384.886 191 395.79] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.426 325.104 478.748 336.118] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 205.821 191 216.725] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.318 146.039 249.64 156.943] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.755 146.039 345.011 156.943] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 3679 0 obj << /D [3677 0 R /XYZ 90 757.935 null] >> endobj 342 0 obj << /D [3677 0 R /XYZ 90 733.028 null] >> endobj 3595 0 obj << /D [3677 0 R /XYZ 90 714.318 null] >> endobj 3680 0 obj << /D [3677 0 R /XYZ 90 714.318 null] >> endobj 3596 0 obj << /D [3677 0 R /XYZ 107.713 655.149 null] >> endobj 3597 0 obj << /D [3677 0 R /XYZ 107.713 639.209 null] >> endobj 3598 0 obj << /D [3677 0 R /XYZ 107.713 623.269 null] >> endobj 3599 0 obj << /D [3677 0 R /XYZ 107.713 607.329 null] >> endobj 3600 0 obj << /D [3677 0 R /XYZ 107.713 591.388 null] >> endobj 346 0 obj << /D [3677 0 R /XYZ 90 575.603 null] >> endobj 3601 0 obj << /D [3677 0 R /XYZ 90 552.349 null] >> endobj 3681 0 obj << /D [3677 0 R /XYZ 90 552.349 null] >> endobj 3602 0 obj << /D [3677 0 R /XYZ 90 375.92 null] >> endobj 3685 0 obj << /D [3677 0 R /XYZ 90 361.349 null] >> endobj 3603 0 obj << /D [3677 0 R /XYZ 90 196.855 null] >> endobj 3688 0 obj << /D [3677 0 R /XYZ 90 182.284 null] >> endobj 3676 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3693 0 obj << /Length 2397 /Filter /FlateDecode >> stream xÚÕZMo丽ûWt€=´1—¤ø!9@›d³Xì&ccs˜šnÙÒV;’:¶ÿ}ŠRQ"%‘jǧÀËݯëUÉâ«r³ …¶ÉèFKM²Dnvts¯þxÁðÝ+xûÊyÿ‡Û‹ï?&ð)’©ds{×}\1"9ÛÜî¿lÑ—WŒRºmžväáòŠKºýXŠþésqWÔ—,ÝÕ^J¨b›‰Ë¯·?]üõv`EŸd¢ ç¿/¾|¥›=øöÓ%I–nžá™–e›Ç Á|>\Ü\ü}°Ñ¿žÀëKa !¥æ!#) —0©$”e>M c|1ü4#”ŠæŠ0%º|.ÚÄ(·Us= ŒQNtÂ7ŽÉ­ÅÌx9yÕD³d0dˆoÚ¼=5}¢kãDÕ?ÿç’Ëm~8 îôVTƉ„l,»Óc®ÐÜÎ þÑqçwÎåŒ ¢dœ¯‡¬ÐeDÁ2¸tôö£Û›ÓnW4 ƪ52[‰u…cEÌZ¬1>k”cuèÆúËép˜Ñ*J”>¯y£¾GÄg×DÇ]˜˜4.Àñ~ªgäíÎC4hÄÄ)aeE&=ʧcYµP>ºMý”7M±ïVÙ?‘Ýù1½J2¢ÅP–ˆ K˜é@MÏ¿SI›¶>í†÷.ÙÖÆøýG&ç„€m¢ œní)MzŒHG ðiŽ ™ûÉÂÓÁ„daÖC¡RxÐDqi?n¼ì,¸9â•b4A;3½óE‹…àôÔÿÎçû„‘ÎŽâ°Y²ºOzô•_Ø'¾Éø>ÑlB¾°O &N™A)÷)UÌw»c½/«ûþÏöØÿ.«»cý˜Ã ·åËdszz:”žÿë¹lJ|§l ®íÙúÕéËý/ÇÖ\nLlÛ‡¼µOeÓ?ÕÇS[V¨ŠÎºy:vH¹ý.ýã.?ìûû².víáõð'Wà@ÿòs ç½{ú†&ÁEÑUxº=þëJ‚µðíušóD)8ÅP·ÌùPk…Á¢¯ø,ûS“¸à/¼¶ãÄ A)\ùNLïfÄD©¼'•ÇœWûƒû9=3dÇi}ƒöxò—`À’“4Iâ#&Î,T·qº^ݺtç*y¡‘2Y‰u…cEÌZ¬1>k”cuèÎQòﺒº01¹®ä£A[%¥D%ïR†”üâ*ƒ¨ÉJoê€Â«Œ˜µUŽñÙUŽÒá*;tWù“Ukæ—{Ûh¸õïÉÞPð”@ÆLO &ð£©JÇÚ­ ö)̽¹I’Ø6åOó‚QÂmÕg¼Ës_´yy°·fQ×–ìNd~oԧȆ‹yh¢@ŽNU'U’½B’Œ²5Õ‰è+>W“® Og€ºb’ûLÖbâ¼ À”à/(°>CUþ ÒõÁ棘+QÑ®Î˃EGý™š4þŠˆV‹£˜AÐ6¶DBq,öeÞb}6MÁ±>`±Ý»‰¼ÝøC ÿ¢p`!Iœ$°><.‰LH›â˜iý–f9¬Ž§.,50óÎ&–‘¡™ú³ÔÀ¸þ¼·’Æ2’Ò$ÞJ8 p²ÓoFAWòÕ1?] ¡åz„˜™G~º$QÐä»ývÉÛBʬ¤8Õ}ûN …k7]ù_‰ §1g¦¥™§¤åIÜ#ÄÌ<òÓ"àdIÏ£YZàæ+÷E0-N'TñxZP0-snZlÍöœ .vw 13§¼Ì€fÕ\{N½93n­$[ÉÌ g1gffa¿HÂu13‡üýB l,Ï¡Oþ=bFÖ¡{Ä´Þý¾ù„ÿ¨Ê6\‘¸ÌHG<“#(œIÄÇÿ°Z¾öWªAÇýé!3wüÝÅAS1ϛЭÉØÐ›-&M€òÈÔJÒFP8iˆ9+i(pü¤¾V+!fæ¿ýà0 á9´:¢²Ga sîìù-ò݃ECëœìâP<U{½TyMSÍMuÕ2Xy æÊ-†¢³d0ˆ®ˆòõ8H WÌ£[oÙX»v_¯Ä:‚±"f-ÖŸ5FgcuèXlð1Ù*Gl¥_Br–iè2ETÍŽ˜5ÿ0Ì2~ö|7B:æ ëÒt!ïîšé +_]p@ÁQ˜Å¬ŒÂ¢|8 ‹Óõ»Ô¥;w¸Ë„„§WbAáX³kŒÏÆ¥ÃXºs†»ïúp7êÂÄäúp7´îF)q¸ëR¾e¸Û ¥VVy…W1k«㳫¥ÃUvèÞ5Ü]L P*äJRFP8)ˆYKJŒÏ&%J‡IqèLʯ•­îv~|¬'õ¾}À^| f¾œaG Ï…ýTégÙN­‡áʾÜxÃì{Pt2iª<¤Ü. ÚÙÿé¤=˺œŸ9hÑÁ9;Bγ»ô¡){Œ‡ìé›gìge`±Gœ™|ó€=’‹a¾£÷Í ÓõÉWe¡™‘r‘…‚-¦äÿþ%Úîë¿*…’ã}ÅA‘Ìü¯öÎa7ÎýXTE=ž>;ýº½ÌøÖª¼_í7³Dÿ‹e×”_'´ÿ‹S†cÓ;sÂíQøÇŸo~†rðéü(¥éŸð¿_^ï‹jé›(óôüT ü endstream endobj 3692 0 obj << /Type /Page /Contents 3693 0 R /Resources 3691 0 R /MediaBox [0 0 595.276 841.89] /Parent 3675 0 R /Annots [ 3695 0 R 3697 0 R 3698 0 R 3699 0 R 3700 0 R 3701 0 R 3702 0 R 3703 0 R 3705 0 R 3706 0 R 3707 0 R ] >> endobj 3695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 674.306 191 685.21] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.385 616.94 191.707 627.844] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.677 599.316 401.423 610.22] /Subtype /Link /A << /S /GoTo /D (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) >> >> endobj 3699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.084 599.316 453.829 610.22] /Subtype /Link /A << /S /GoTo /D (spc_8h_e6e89217a5eca87a2101ae195da74347) >> >> endobj 3700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.191 599.316 513.996 610.22] /Subtype /Link /A << /S /GoTo /D (structspcprm_feeb5f4056f271fd37291a712a7b6791) >> >> endobj 3701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 473.4 191 484.304] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 442.747 353.148 453.651] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 3703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.401 442.747 479.563 453.651] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 142.134 191 153.038] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 96.361 353.148 107.265] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 3707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.401 96.361 479.563 107.265] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3694 0 obj << /D [3692 0 R /XYZ 90 757.935 null] >> endobj 1538 0 obj << /D [3692 0 R /XYZ 90 667.387 null] >> endobj 3696 0 obj << /D [3692 0 R /XYZ 90 653.185 null] >> endobj 3604 0 obj << /D [3692 0 R /XYZ 90 435.828 null] >> endobj 3704 0 obj << /D [3692 0 R /XYZ 90 421.626 null] >> endobj 3605 0 obj << /D [3692 0 R /XYZ 90 89.441 null] >> endobj 3691 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3710 0 obj << /Length 3268 /Filter /FlateDecode >> stream xÚ¥[koë6ýž_ሠÄ,I‘”˜èë·¸Øv› ÝE[,[q„Ú’+Ù{sûëw†IÔËNù`‰q‡‡3áÂþØBÓE,c¢#¹Ønèb­ßÜ0÷t ×ç_<Þ|ö.‚·ˆVÑâñÙ¼®‘œ-·?/‰WkF)]ÖÇ yY­¹¤Ëwù>³W?dÏYµbÉ2+6ÐQ%ÄRËÕ¯ßÞ|ýØhu˜d¤Pçï7?ÿJ[Àöí %‘Nᚦõâp#xä®÷77ÿlú°í´ K²èò¸xD¨’~\D寖'oYóW{ý •´>UçMûìXphŸ½c¢í™‰´8Óñ/”FVF$­ àŠtcŸwѱˆðÄ Ü­ÖŠKƒiÐŒ ‚ZÁ¢>f#} ü­Õb}mgÂwö:ì)!‰ŒÃŽ6eQ;ãnËójЭ’DqÕ˜n "‹IL½ù†UñòW§aªÛuÇÀ1±X3F´´œ-ˆNذké83´‚&IÒ˜ô”žFà ±ìõ \c(ºX M¸Bèž1HJÓçe «†w’š^̺¢w ß‹öë›ÁÀ½8ð×áÌ3N„á@E"ž3†éƒéÎ9‹"ÀUtÀ<sÛÌ|zÊ˶ÁV0×Ö\dÒ\‘$±ˆÆ¡5vj…¦ åd,-½`¬Æ Ø‚êyPNf*0xçH³Ô+ÆØ¬VVÖ@û¬Ø^¦-Ã!ðyÁ2­Ð´eœÌ•–©Ç-Ã` j”“€ -AǨe æÛlÚ2<$PvÞ2­Ð´eœÌµ–y ×Ky4ÈÉ …+L€Ã‘¢·šE‚Ó’BÏ›¥#4i/s­YÆøÅ$‰ç!Y‘¢-8 …ž§ î|ð°¿ïíï¹ÈOà‡¦]Œa dÞn­Ð´Ýœ ¢üË£PI‚oMæÑ8™šJÈr y}@ESÍXrÆŒ2!±ÌØ M›ÑÉ\cFŸí„ÜDª €œÌPhId=€Â³KWªìt®œþ»‚Ä/ÝŸ3¿T˜ÐËg¿~³tó⥙ì®ìlŸ²ât?æ_ä%‚N$Õ¤A™uGht(1$2^Æ,mÎåX„@?«ÏŠÌ«ƒø‡ eW½‡¤H÷pÞl²z„G~¬øë cm…¦Çêd.uNŸëœ:?ÖŽ:æÆú¾X‰†ùv”*ås›-O%³"‰ÍFg.›íÈL¥³’J%v:~@ò" ‹é\vNm³¤ûzÛ¸%íe®ZA#p\/1#JMeDVfÝÂ%SmG“Ìà°K—óú¬Èu–­]uW«TÀªøÂX[¡é±:™KcÓçÇ:«Îµ£Î¯‚œ÷ûZEaµˆP/>¨vNâ‡.'=¡×¥Û¹òI \S³fídæUjFZ*¥Ù¾úMP]gÛéY”$J_˜åVhz–Ì¥YžÓçgyV›åŽ:>çëÂÀÑoŸ'ò1gÈrDÌ/¥š6Š“¹d”9}Þ(³êœQ:ê„3Êw…÷òއ²êùýÓKÖÚªÍÆ°LÒ­|Ìü‹yhh—¬¥µºÍ7𚛀§O}-˜1õ“)—ÄV‚ÀtšAÄc\–àw(çñ[]»‚d·h¥ÀÃûºÐ߇u#F ÷Yó˜íÏ6;¥ùÞ#Ϊª1xÈt—Ù4*÷U¥ìÔØ¡7¡…eÈaF©& .8/½îˆ&·ßeëTîïéätóAS^f^¯â èÍc²"}sÝy{d}”û’+íà¥gñô»D<75˜à?NS ìc‰È´Õ¬E¼Ì<‚^Gˆ€ +ë(i:#¹w ïqPxNäéÓ1³78_Žøró’V#›È-ó<¶o•¯))àÆ4šè  ÕVpÇ{™8zs¯ÍNiSnÇzåD%òÏc-À¡ôªHSv;T³Ï7€À°aWÈYXYo5uw™09‰L.œ› ·ÇÉ)N(°6?¡O“‹Ç4­º×uI¨®9 èN&újuUVŸªì÷…°§iܵSè¥L42K¨_)X¬£ƒÙÃ{«4à#cÙ3¸ƒ .a#ñ?<©h­øPN¨Ö#Gæ*ÛüVÛë/DÇÊÞ¤#gH”Dñ¿|ü÷÷_»ÑŽªˆÄÊ(OGŸ "ñáñ7,¾dV?›Aႜ°‘Q„Ù”²)y…Á¿`ý˜i.œ´ ðVi}è¶‹¶\o,‹ÙsÌU°‚¶Y•#›)¸øü\•€O>'ØCGÅ.<Ä9½¼Ì''u¹ÉMV2H S#¬9m{šN‡òT\ß ;ªj?=ß_‡„1iß¶pŠX[k¶þ5ì¶Ð͹åÚ›»ŸáÚ «rŒˆ._1'º™Kb̤¿÷iÑ9)IŸJl¶VFŽú\ <Ø’ÝNÉ#æqQƒÑÁ¼v÷Œ·©9ß±ŒTc“‚&'º;CÞ {œA|P”'ûà)³ ‡r›ÃBåV FæŒðBÕüÿ]b· ymÕ9< Y÷Öckka|ˆ–ÿÛ vebùGV•kgªÒ¬çuØë6bn©Ë„Ÿ:׌ÚÛ¤0Iia–¦§±Ï—SŸ€¼ÝÞèWjçÞésŸã«¬“—ãêëï|†û|\AîúéSÈ 9x%I/훽ôº#>H¬ú]¶>u*§ãx@a&ÑËé¼Ì¼ê^G.Ú˜Ó±Ô9èÎÞe2ê@R¦FƒN¸OëŽÛ­¨ßûŒ”Ýx”@Çl¶ìÖ‘™*»q¬¸sÓ+O‘G4OWàúÆŠê^æÊ3&¢öY’ÌšÅË @õ™Ò(tlc_YèäŸ#.„^!gBï]먳|÷â7¦sé¦u Í1’+àXÒ²ä̪Cn½yãºGg2mÄ9[KíMϤ“¹îxdt)l-çY‘žÐ¬ø• ðØè$¸·sµât¹Þg'S ÃF³W0Wèóð÷ä'=H Hðfÿ4‘Da$ÆÎ:qضlÊcn"ṗ {ë– n“Üi올֊EË÷nêR%<¹ì}ÆS”Åã‘+tuk€Þ­ï:¹Tq×sm¿—•Q‡síƒÎfSBxnÎíÒ–ë€>²à)±ÏÅ|l±ŸØè&')Ê´$‚]8íMRÔË\EQ¿/ )jÏ}g9™¢¤0UQˆÈ¶°`ü*ˆbK “аÒý®¬òÓËÁÞ¬îÊ’ ¯Kó¶È„í–LFÚ‘ زüPîV†™Æò#¤±4L`Ð!Ý"пID?|÷ÍÈ'Z°w>ɺµ›žHs»3ˆ4°>}ÂÅyÞ§•}2¥I‘f¡=®4]~þň{Õ°åTCm`+ÜÔN·IFñbûDùP¹+ò?°>¾Ž#i—ŠØŸvI¡t³¤ðQîzí/)ÁcïSÐ’Ñc]˘Ԟz¥Õ[×{Ûƒk1½À `ôÂÇN¡éæd®Z`¾D.0ÚâyDNf€(Lè JD_eõ¦Ê§Îä€e4$ú`MðƘNÇã1@k"¨|SÀ¾:›1­‚@pË@ ÅP0u€J„ä74´ŽnŒã†~ú,‹¨vŽ[+Ç(K8ž˜¢E—p×± )†›ù7° ù$Í8~¯peÌ4ɬÈ5k*vƒH¡Uk.‰àw”MŠÆ¢·±)Øxâ]ŸML[6Ù}+7ûê&€»–Jp“;˜ƒ@+G¥D5Î wä–6Ø´q›ÜU!½fÕc“á× ¡’i>QF"}á{»ŽÐ4£œÌ5”:Ní@ðÃYDþ3Ä>¢±Ï»ˆ¾ô ?Ø#Ž]¬çqâ p1îª8ôp]ùÉQ zª+óiŸe4„é*¶Øâ›êߊ-¾Á•I)A‰X–…{ÇÌ+`¿}w{g[nj®>7ßÚÛ“%cÂUȪÛoÉÈSHˆôãßSávŒÙ¯ þÜÿY˜ÿQ°À™îî¤ѱpÿHá´#¾o²"«Zrû:¤(|é?«ùΗª…ýaúžòûˆ:ïI™ûhý ïúòáLÌû/|$‡¤,> endobj 3713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 453.114 191 464.018] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 3714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 406.65 353.148 417.553] /Subtype /Link /A << /S /GoTo /D (structspcprm_6d4124d4db8f7addcbfee99a8634522e) >> >> endobj 3715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.401 406.65 479.563 417.553] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 277.354 266.686 288.258] /Subtype /Link /A << /S /GoTo /D (spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) >> >> endobj 3711 0 obj << /D [3709 0 R /XYZ 90 757.935 null] >> endobj 3712 0 obj << /D [3709 0 R /XYZ 90 733.028 null] >> endobj 3637 0 obj << /D [3709 0 R /XYZ 90 399.039 null] >> endobj 3716 0 obj << /D [3709 0 R /XYZ 90 384.713 null] >> endobj 3708 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3720 0 obj << /Length 3660 /Filter /FlateDecode >> stream xÚÝ[ÝsÛ6÷_¡>ܘš±Pâ‹ss½IÒ8—ŽÛ´¶/É5Í#Q6§²èˆT÷¯¿]|à§œ&Ó¹¹ñ!p¹»~Xì.ÖtÂ%á,–1I¸œ-oŽÂÙô>?¢öí^/¼÷O.¾=åðI">»\ëÏ#J$£³ËÕÛ "ñ|AÃ0 ÊÛ%¹ž/˜ ƒÓ|“™Öy¶Îvsª‚l»„.FBI4wùÃѳËZªÕIòe~8zû.œ­@·ŽBÂ5»ƒvHh’ÌnŽã¶½9º8ú¥æaú9ô KаHÍ\’Б˜3>ã$ŒšáSÑ Ÿ†1‰)Ÿ9œƒop8ßž å‘1"¤¾øþSu›u‡L%±ˆfž°¾F–¦§cž(kÀâ–FO¯Ó]º¬`ê,J‚e±ÂõˆÃ`]Ø®ê:3ZSmp°J¿1¯}I ¹{½ÐcÒ¬ÊÛlYíÒ‘ðqÎdšyú~cÅ®²]ŽýçTÙÊ|·Þ7V?dv‚¤2(¶–m±6ÏãÓãÃåøµnaßã9¥4p?aP ,ÌU † ’H3Ç¯Ž P%aðxS'ˆAàtwlúÒíÊ4ŽS׳ËL£¼ß[Ô÷þ¦Ø—¦¯*,õëÞ÷V#óËL34®vyyc?ηæifh¹/:,ÒÜ~´Ë`Ja—•7i›ûy$¢¶Fx‘Uf³iíày|6O˜V~hM°óÒv¬]Ϧ¸šãRåÕõM¾„>‘¿…2<6+ïozŠ»Fq»ög/Ÿ÷ÁÁ¡"¶ÇÀ‡)fx¨]ú~ÎÂ`¿I­üY#2q[çrŽ ÷¤/Ž&Dª!qŸôl•¤·ßìîŽ'qM[hÔ8š‡XXÑj—}èÛkZ%CÒÓ¨5’³–F?î7=ˆ¶Í^ïºÃ¬‡<½2íê:­L+ß®òeZe¥ùywØ™¨¼i­a {°äzW˜®ÂÝÍ)L>.°…k¶½ª®-óÒ1ú°Ïwˆl­‹0€…ËâævÝUfö1X²XÐÈ=##k#£-LÙuu òú†¥b·O/ÿóó3»faCÄAnäPž§¨3 ‚G½åd ‰@h$#"^OK³ðˆú Ê'¼f„Ò~cLöñà SÓò É´8À‹hK\ø,%,éO…5.vñVdtÔ6O,Œº!µ¥94ê)ynÔSâܨ=qÔŽúܶ-ëÖ,ádê»2/¶¦ÿ=‚»ºË²mÿp¥›‰ÏE\‰j»hŒgXÚH9þÜçæIù§tÙ˜ÛŒ\‘þÞ±^kK}ùó%ž‹Söú¸ÏÜ4š8éhwÇO0–ÑÂÒÄ”<ˆ)qž8ö—âÀB>#n›ü@s!gï_ Û{«Ek~íIñCd-@GÙŽ¾~=ȇ=ã/ŒÍ ›Ç‰ ®uÇÖêBÃz¦Ðêz¦Ð¥m4gs5±“Á ¶òu߆ãâÎ$ !÷Íê€-פ VÛWð´aÿÆ.žC9/FúŸ/"Ñ¿ù‡y†ý1,Œòa0ÊçÑpORqét´×ÐŒ{–ä!±^¶Ûõ”áŒph¦”±$]eÚ` G-ó•9EHk¸rpKöÛee\Ž;ºûýYÇåÀñJ:ƒõÝ@Øjœ£B1éÂ…‰³4kX·ý7"K‚»|³1½pVin¥§æ±Ê k£÷ÐÂL9Õo²²L¯ôÎxðÇôÞt¿ÏÌó§ŸÙNGåk·ÌÓ±•5[ jë÷l]H³ÊÊæh(¨Q0!4™ °Oj$]hIM/Yª¡¡ Í™1cç¬ ®Ú¶|4Ú)±5j»rÛ f`ëh´QSµ/]0g!=` ¨c¹ ¿ÄÆÔ14 ¨¯£„F £Q×ÍXŽIyÖ¸L‹3Τ/Îųûå@AFÇÊb¢`oOµ!«¥94Ö)yn¬“âìX=q.hyaQ½¾¹]Ú‰”Ût—Þd•ñS›° Þ"i磾c'DÖ¶ã«äUj7 ã_°Hfv!BÉÜõ^{‘oÑ ï"ÊÛO™ùcTÚwËët7`Â)w&\ç£/ú*À!-ÝáùdFqð¬a NÔªØc¶»ÇW†DÔi§åîcºæRÖøXQ2øÄË+®w8Æž‡z@EÁ­wäh<¦}®<$ªŽR,×f:ýsN³¸>1娻T êÙò[wUÒ%2NÁ{X0lÎ'å`bÖ½™9,±Õ—„J=Xœ—î„h“‰¶@¹ZS«N­/ScîÍa„|E‘«7«!ûV`í9€¹[–Öuj "P”y‡Ð>oû`S…8ž‘±Q%ÄÞ1€©Q„ŽFƒPð4ò±Àk·›»¨€óQ,Èä3«À9Fh; £ƒèYék†$P h5àö,Ä^ è°€ lyÀojHà|¨¡Jp%]%8K¸­WÂÖ)ÃKS ®¤­‡W½Jpx©]}xg*Á‘ºþÆØƒC‡™nhÔÅàð’”lƒûZ˜bphèbð% ­b𿔀§nÀ7Òk­/wÊ,s±Ç¦ÀîšØæ/D]œ²,¶M²ÊÅ6€™2ßZ!%pÀØZ ÑøÖ²4_^]=©’­®îj4T]íkôÿS]ý¯VWŸ¸lnËñ×—T’b®MÀx¦ó¡ŽxÑP÷VºÃÐfCÑ$¥C±ä)‰Û*t æH&·Ù º0I8“ ‘r°|g™š0çÏýó”þ·/p#bšøùÌÔö¿¾¬tTîy¶ÍvMFÛeãµ¶·Æå¥»×æA“G!{ÄCó‹…ÔZœ5‚Í¡ëõÓ‹3@ê‹'öSa³µU6çò}ñéþÊDþìH¬ÑéMÏúÇ endstream endobj 3719 0 obj << /Type /Page /Contents 3720 0 R /Resources 3718 0 R /MediaBox [0 0 595.276 841.89] /Parent 3675 0 R /Annots [ 3723 0 R 3724 0 R ] >> endobj 3723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 325.034 267.792 335.938] /Subtype /Link /A << /S /GoTo /D (spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) >> >> endobj 3724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.904 86.288 345.968 97.302] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3721 0 obj << /D [3719 0 R /XYZ 90 757.935 null] >> endobj 3638 0 obj << /D [3719 0 R /XYZ 90 417.131 null] >> endobj 3722 0 obj << /D [3719 0 R /XYZ 90 402.814 null] >> endobj 3718 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3727 0 obj << /Length 3577 /Filter /FlateDecode >> stream xÚå[KsÛF¾ëWpO¤ªÄÉ<ñðÖfËq¬¬SŽXZÇ»Ž0 I¨€–”_¿ÝóOÒëd/[:p0hL÷L÷tÝ3b3 lÓY¨B 5[mÏèìz¿;cöí^/½÷ß\Ÿ}u)à+bv}£?QœÍ®×ï Ï—ŒRº(÷+rw¾äŠ..³MjZoÒ›´8gÑ"Ý­ KÐ@ÊEž¸þþìùuÍÕʤD€<;{ÿÎÖ Û÷g”ˆ8šÝC›dzí™ä¶7gWg?Õc˜~ýCÓ’ŒD³¥$ Iå$¦Ï¡A3}&›é3’‰™£Á5ø Nç«KydœH%a\|¿*>%›wÝ93©™Ç­/’¥é‰Ä¹ÇKq˜ZÐéí9cl‘lVùù­îR#,óTª(†‘õyí ¶`^/«Ç½²Ü§«ªH6æéÓ9W‹¤È’NõIÕ°\r/ ´cؿϳ]uaÚW/Ìïa—U%é­”ULH#¢@¦iå5Dãʳ4§(oýn}ÕW'žÈÒôj©õ«–@×z½¢`±N‹ WÕ,meÛL-Ò‹¾˜>od>—‹¿­ac.®úú°$³¤¨€8X¤ £s¶Ø’*]£¡Q#HcÔ…ÙÒvGcO­ÉXMBŸÕ$ì»xñÃaSeûÍc3–É÷*œ‡DDV¦gß>yóŵU õdDRgŒYÒŸÜR„ŒH\wÆH¬ÌnøõœQ˜",Ý£™c½/>>:#ÍJÛÊÍïmÚ²_4ØìA¯þƘs¹OVÙîÖ¼Ëvû‹E4ÃéÛa«Öº.tB© éë¾J \PÛ÷ [Hg%0tY‡÷ÙfczWù®J2Ë=1?ëº6z7-,–}›–er Ê„¨(?$¦ûcj~_ýóåK VŠƒæ¢–AgÖ'ÖìܰªÖš¥5ê]ny–¬Q‘®{FÁ‚°x€{ RêÌ’,=š>ˆÀ˜©œ2"4µ´oRÐ jmW>5Ý ¶évø¶fM×Ò ã«*©v ŠÔ†ò c@; ˜ÀÇB¡YzD}q8#,hBq~á\õrI fOò3$GØÅÃY‹}¦Žïê°ZQѹR€Mç¦çÚÏÕÒ›ë?7×Ivv®;nçúbw.kýfë!?ºOŠd›V:†™EiðR˜á!’˜)‡r‰$±Eº퀛äyö%âZÉ¿PEÁ”öÝê.)<§ëŒ\ [¡¯¿ˆ† Kó˜á⸠È:? Âê Ž+ÞœqCÂXÔDþ ’£JÀø–²HËê¦ømd¼°/D7>^¬BoÄ{ Êɧþ¨°£X¶GmVÓWB”pÈõJEŸ-È8-Ï}îuŒíO¦Æ cEǃá ö:u<œÎM«Ï k›9ηH‡ÔÎe›¡¯®ÖÒF$¬CüqžÚâ†-™2þ,ÕÉ,×Wë!  ƒ6Ã:XÃî¿_•°´™˜2÷˜  ‘h#Ÿ¶@ÁÂfá3A\€ðc„¥! ¸1Cç>úƒ ›1(Ž£1ˆZÜüÀ,.…†çÞà)y0 ´Lˆk‚D»ugÃã¾È1`ÊÖî“ßœâALd%žq{²w’H´j1…u„mÌx y‰¥€tÃ¥#B`µ>@ð3/ôd±áM19n½¿|q}eZ|ødÖ[^F¡ý@ó¡ý&À);kyöæ\)LÌA‰O_¦6ªÞC© S„ G 5¨eÚ”yGüñı¯8X%XHÆZ ºÆÙCùnÐ4U=¥û»l…%*[_¡¡ñ+U‹C©-ztF¿«|»?TéЖ¬NŠ? û³s0Äf¤ijø'M›•Ð]ƨñÝÎH­Uú°ß$;\7¶Èm¿®Ÿà\ó;© yuÎc ãH¹é-’wSm3ïì"ü¯¿^r&´úû›P¡>kê-%^+¶,`¼¸c Œâ{²§.»ØéÊÖà–wÛ­?¹”27X_¼]t"ESÉg2Ä8kóG|QÜZŠ7ftÔK¼»C6þ×ùמÂXµ…èÀUG3ͺ3+»À"l’Õ¯e§Ì0¡bÙƒª ޽Õ@]ðMw5¤næÑ]Çeíï³²ÊV`J›3¡Ï ¡ÓA¾ÊªÇñ`ÀV}Nn‰Lð5H%´‘ó‚8/QÇË7ÏêïMÉBèÐÜæò`š°[Ó^ö]› ¢Ò_9 Ë•Ñæÿ~ýã5fËKþó¼/ÀT+ïìƒ.ò¡êœ”4µ™LŸ3ÂcîRçoŸ¿| \ßq Á«‘Äÿp†ã Rî8>r”î»4KsÊIa]vm‡PË2˜–ÈÒô$jŸ¥dîKôÌÃH_-Ä’®š%GªY1}±ÏÁ…8”—3Ë^- zš² îɵ¤È·V8’\˜íþtãÆüÎ/çöÕüçºõT#÷hLw“" [Qpþv>j <Æ›7jÚ<¢Q[p4§ØÂÔ-LJäl¡+Ñ-øy¶ hì’Y×Fã[$àñç+Ú*‹°¢qß°Ó~Pv›XHm¡ÞcÀc ºUƒ5‚p}Û·êy fŒZ|ñtSæ&àÎïçæ­‰éH–Ì •‰rX­}„„LmŽçªøR‡H¡Í²õ=¯%2Ý7Ž»ÎçÊ¿bÀ‡Ì Åeï,7ǵN7Õ;ÓÞÊj H®ò]Scry¨±¿#ÁUL?âù<¢qk·4§X»w$Ó¶÷ˆ€cŸÉô$j'@BÞ’Hß¹iŠÀzu5VèÒQrkÚÕ®¯SLX×îJóx—ƒÛa«ƒ±+·Dc°O^ºtH·*ÃÂT†1ÓpÙ2䤒Zl"tSbˆ¡ˆü#sa ’²|ý 0•˜²‡Ñ‘:¦£^zä=]w‡´uLtc…L!%‰ÃŽ3s4Ó¼;M" އXÁ±¨Òï3KsòMËÁ² ãi‘,MO¤na-‰Ú-¹-tóñ‹–ñ©çîoÙ>ïÝ´äö¦%w•"Þ¾iÉ]†ŽM¿´4$û}‘ïaÌj0KøR–®þ¸,Ó€pz¤6䛜¥9é~¨=†º:)»Úhè~¨/¹ª¢Ï¾J#UË<~¾G‰ò¯tð€ú—C뛡Àߘ]ä¬(l›]Ô\ œ£úZ¨rñxüæf¨ÈEöZf=täݽ´è†êrY;BœzR¤H|é…çæ:f÷ÞhSÖ®ØKXâúªÎ±ÓÎɪ½$²¾ë0´ƒFw x:*6½S<¢Ñâh¾ð¢è¤<î¢hWž¡‹¢¾<ÿßEƒ?û¢(Ã’NOz4c'‡xxŽ`ïÔ‹¢SlÓíðº(êh¾ì¢(C¢éË“ÑèåIGsäòä$?{yrš¹Ýè³;õ¢($ÓqLOµ¡©%92Ñ)fvž“¼Ì4=^_tE´óÏJh)5xYý73ðñ¿û7&ýXA«ÙÚ6 oiÿÿÊrÇI}—îÒ¢¹p‘[»ÕB÷?¯ÝÝ7i~Xü„ò'‚š'N™=Ñ»Á%qÞáçgW/aö/¾±Ÿ’ˆðö¿L|›?<ÞšÒµ¿: ¬ ¿<ÿbâàu endstream endobj 3726 0 obj << /Type /Page /Contents 3727 0 R /Resources 3725 0 R /MediaBox [0 0 595.276 841.89] /Parent 3675 0 R /Annots [ 3730 0 R 3731 0 R ] >> endobj 3730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 476.183 267.792 487.087] /Subtype /Link /A << /S /GoTo /D (spc_8h_49f16254df0e3498ae2c1eb641f5232c) >> >> endobj 3731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.904 244.014 345.968 255.028] /Subtype /Link /A << /S /GoTo /D (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) >> >> endobj 3728 0 obj << /D [3726 0 R /XYZ 90 757.935 null] >> endobj 3639 0 obj << /D [3726 0 R /XYZ 90 591.797 null] >> endobj 3729 0 obj << /D [3726 0 R /XYZ 90 577.873 null] >> endobj 3640 0 obj << /D [3726 0 R /XYZ 90 89.441 null] >> endobj 3725 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3734 0 obj << /Length 3677 /Filter /FlateDecode >> stream xÚ½ÙrÜÆñ_Á¨R%°J;ž‡¬’Ò–‹±e’‘ãÈ~± ‰x ¬húëÓ=0¸–K»*Ň Ý=Ý=}ÍSøcÇ =ŽTD¡Ž³í=¾…Ù¯˜}»‚×+ïýWWG_œ øŠ$¡8¾ºÑŸ‡Œ(ÎŽ¯ÖŸ‚D'+F) šûŒÜ¬¸¢ÁY±ÉÍè"¿Éëy™Á” ¡”AŸürõíÑéUGÕò¤Dˆ4;úô =^oßQ"’øøÆ”°$9ÞI.ìxstyôC‡ÃÌ ˜Ÿ[–bâéuqAh¨Üºˆ$ŒÚÅe UМ°à>kaM*(s3÷3U4«ÊÆ‚dwi üâLÆ=~&)‰€C=kïóKf |.HVr õ ˆ‡QðË«“H&XW»kë³Á…æúsº™ÅLI’8(1ZÄ(ÂÃØa\ç›v#OHÇc7íMýÛ Æˆ0†q%âˆ09^1F¥:Ì'ŒéçY ĉô°ƒ^çu+<èŠ?CW€¹KqŒ39PUö«Ÿ)Sò`yè“ OKuޤˆI¤äá4µÆùÇmßÖ»¬5»ý!kòºžÒCÐ+óèÏóÀ8‘Ê-©Cä3,ꢴU‚)Hت‚ƒ)D$äR¿m¼]ªñp>PHx‡j\+p*A[§e³IÛ¼1Ï©ùiòÖ ªó{öþêÒ¾ºMç@-ÝØO~/ìÇ¿¢-æÈÅ£6˪^Û7àP*Kð.7ƒ¬ªÁ~ï«r]”·#ª7U=‚nîó¬9r@¬û9͆‘ŠY¤¿? g¨*4j˜:Cþ?ÎkfO·÷›ü•™IÍÏËmÐðÈéõìâô‡©¤aK‡QhA^ZŒÛôÑ ®m¼è¤¿6Ï,%5¥Íxgç+^þçûW' VgüÇ—S.TBÂØmº´´È?™%ûW×MJ¬è(ì‘Xƒ2²{k@×ù}g=‡ ™­¡eè5ܹåÝìJà?k‹ª|5y\@°÷†‚$44A _Ô·â _zåë6õe· ÊÎÄÇL„’P™EN³Ÿô‘u(„MšýêŒî.ÂQ$„©dÖQøÔ´£pnà>­ÓmÞBš¡T@Æ+Œ¡,99#\F³ ´ +f’Ä ¡T‡Ç Ã@ºtœ±´›×cÂŒr0!>Gyƒ°àˬDÅ8#"Iü¨œ¦ö#÷ ÆÁLØèB…°·’[—έx¤Üv‡²‚V³  ÚýÄJÅŒk¤F9×òîê§§vÔóâ‚D]âS¤3v"I˜8çãùâÏ'ØÚì3¸=òâö®5lbRf¨UóüP´wfTî6vQðv[”)nmÜXÖo°3Èxàs{÷ÊEPVåê¶.tœƒh´ãin;Îw˜¯²j›ÑCÔIùRòQì¤öa*° ¾W¨ ƒ«éÕ´pê"½ÞØ÷EÙÓÔƒts[Õ »Šž=¤Ö¬‘FRȬ4ŒSè\€–·­üåG:1@KõWíÁhÅK棻ÚaU6ø½yib¥^ Ëv m 0*+póí„ò¼íLcÎ3¨Özvë9à-zs¨GèK„±G`á~® È„©±?`’ ˜úxéŸÞp¸y„‰”‘œ7b !„ËÍ.§JDw#FF Œ0ŒÞ§­ù5 5–¦¦,Åùû R2܇QÒ9'6ïœ8ˆ3Œ‹ï.0ðÀ… ÞžÏZ¥âê /%{½”Ír‘Œ œËå{cm»²h›eKSd*Ÿ°´hÙÒ,Ì¡–Ö—ŽCK£PÉýlY˜ [C[ƒÐ-Â[ïˬηyÙŽ“²S cøL<ÏÔÐ=ô¦¦sÇ©a~ë¼ÇÎôÖµÁø@BóûuØ-ëШC[¬¿•ÖcJB¨Ä÷²ha&,ô ©X¨^äØVŠ7uþÛ$¨÷†™úôÍ¿˜‘ÎéqPwð†Ùî²ûM^ÞbÀÁwÑð×è.ÛUßëw…AUn4 £Ü¼DKÒxïŠÌ¢)s¨ôÞ§§sHokb IÜHÄðeÀJ “óè—Œj3lîªÝW‘ÄÝ·:á¾ø#¯+pM0ö]^ô§unPHE¯Ítqc?¿³¯]}i‹…hÌïuÞ>äy©WC{,ÇU­‹¦-2øœ‡:³Ã,FÈPç:8çPÂCätPeEû¸Œ–¦$ NÉ-±ÈjÜBÝ’ÑAͤ /""õœ‚ÔxÖÍ㮦îBÁ\úôå\ÎJ¸H­H#ÂÕ·Rtê€BÞµ.§hçpË·åæ”2V0Ü¥}/?žžT?ÎQI"º ðÿ¸ÂE·&ãˆHøl¯[ó€ÝšƒAj?¨&âK5Ñ^ž\M4æi®&òyºèÕ(#B°Eh&l‘#g`„É&š¿­L`fP™À³­L`ŸØÊ¿W&+A“àJ§=ˆ-£º±ønª]íc^™ýÀ±E9¬bMi\ <Ä'*Ãïµ};p{öËr=B¾µªÍÔ¶Z›¶ÖZs;ΑÞ6-JÝÃGÍ;8 Ü<ÒºTÜ+Nà‹ ‚d§þ-«°ÙÕæèðy,ƒun$¨Ï×'¡ÒTa—³Û–al#¡²f2xFÝØ¯\ ®ç;†cô*‰¥S "ô• Ϧ,ê¸W¾)£¬5=ªHW™)ÌSÓ¦í®1c›S‚Ué\\E]ÙÊ%9·»Ú,_…:„à,rk"/>  (ëV¡¶Ú&ÏÎM…$œ)“ߘ™êµ§«ÓÄûÂ8Ö¢*M¥Š³µ¦C-+Ýk3â‚)Ã"÷;¥kƒ$µ/Þ¼yóU$„-ÐãŽâ~}Ú]Åêè¹=ÑQAF¤K*Ærn}]5¬{¿®î[°~·vm3l‡º¢³+Vw×EÛ]בD¤÷÷›"oú˜¡®ó {°¦ó`ŸìïCî°»4% ª¿Ü[ÍJìÍ?éÈ{ eGnaP>;¨”å ¥ì^–l);æh®”õ9”²±9À_»™ëÒ¦±5bP«<¯Öˆ¿Ö€§Q­3ºÖðéû…Ïê_ouø4´:œIÛžÕÉ­î‹,4<ºf/ƒ¥/°ì[ÞŠq<fãïþqz޹æÕ¬íIúDEʧºÀ‡Û浡zÂæz e›³0‡Øœ=,ð# Öç´— 3ág Áù€Ÿ¾g-ô)Vf F|ªñ¼óØ ±™iGSÕu9£Ø ]9Át –îôLx'ËGm–"0–mZXê©ù”--6.æ‚°ëÛ¼iÒ[ÝÌ£"ø§îó :á÷»ŸÛV5çØŸä KÛ°¶hU‡ÖQ6£‚m7§kÌ`çO£؉R{£z¥³(Á) ©°ÅhDv/Dí!ÚÛíêPYÖl ˆö']bImÒèwÄÀ&fx1Hx’˜% ̘•4å†cøîéfçjBKì(í¥g@ž —tà“£¯Í‘Àå.ËÀÈâZ!òñD=±Öhy­橵î£çÖº—œ]«GŽÛµ¾/1S·ú-ÖsíÐþ8–=‚$ w—ÒfÖ¦3¯6a½Ù˜GÓ¹å7®Na6ñeƒ:…ÙíʺËEGÝOú},=ikîßðQ¯Û}º|ÕHL½ûjˆÛöZGY¾s®í`ÜJÝ6mnV}¥/<؈ä>¼óÚoÖÇU–ºíH ?Ì! ÐÈårÿž:âD'“>·÷*G‘š«˜Äx5@R’ðØ¿8Çç4{YZÜ7}‰ânÌ¡``Ñó—æDB¢îÄNËïíìµ±0 ç/b!ý¹û]qìb«íLB3—‹C¯Œ n÷Íy]º›óH…¹}BíMŽ-.ŠwZ•šõAè=lµÿçþ•BÿHÃL|÷FIû¿–:®èë¼ÌëþBle«@}6è¼Ï÷®·-ÍK^SþZPóÄ)³W±tVëÒÞß]žƒÞe?% pë–ì…­T¿?ÞšSk_:øÏSñüݤKÉ endstream endobj 3733 0 obj << /Type /Page /Contents 3734 0 R /Resources 3732 0 R /MediaBox [0 0 595.276 841.89] /Parent 3739 0 R /Annots [ 3737 0 R ] >> endobj 3737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 660.753 265.022 671.657] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 3735 0 obj << /D [3733 0 R /XYZ 90 757.935 null] >> endobj 3736 0 obj << /D [3733 0 R /XYZ 90 733.028 null] >> endobj 2156 0 obj << /D [3733 0 R /XYZ 90 232.531 null] >> endobj 3738 0 obj << /D [3733 0 R /XYZ 90 218.148 null] >> endobj 3732 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3742 0 obj << /Length 2402 /Filter /FlateDecode >> stream xÚíZK“Û¸¾Ï¯P|±Tk!xƒtUëÍØÙÍT¼±&§lWЦ0cV$RKRöL~}@‚Ç䉓\R:$[ýþºÈÇ,b¼PB¡˜‰Eº¿À‹[xúꂸ·kx½Þ¿¸¾øíKßB±d‹ë›æë’ AÉâzûn)‘Z­ ÆxYRôiµ¦/_f;mWoô.W$Zê<…G KΗq¼úpýÓÅåu+Õé$˜42½x÷/¶ ÛO±8Z|5F$Žû N™[ï.6nyØç ž™Å"†˜ŒaÁQ¤FI‘S׊2„eg>¥ù„ÅHÅláiŒÞS*ZD8C4Z¬†ò,ɼ8!*IO}Ž$xù")ïS×e–>³Þ.Êì6Ë“ÝîÞÞouµ"Ë´Ì>ê­}’Töúä—WOìr¯“<ËoíÍ'½Ë Ç lrR8F„D'œØM;ÑÑœrâœ<ïÄ9qÞ‰8fœˆ£åõ*¿¬Íà,ëK®ú¾äÂø²u$Ü6Ž„ë“×/6Æ‘\.÷ðõÖ—p«½'-éÇÅËcmo¾d[íYgy­ËC©ë€9x \‚b!k¯¥‹ ¼ŒÀÕp(æ É÷?þ¼ùî;I½"byWë¼ÊŠÜE½.ÌûxŽÌŠ‚,Ãà—Ë«7—/-QèANQÀ²DIéÀìªÂ®J·yöO½}>•4R Oš€h2i<͉¤™•ç’fVœKšPwȻڼq»Ï“ý R¤ ˆ1~ÂèŽhÚhGsÊè9yÞè9qÞè@œpF¿Ò' ƒd ±SÕ5 š6×Ñœ2wNž7wNœ77'¹›âX¦Ú§wUÛÕM™ìõ´ýP¥9‹OØßMÛïhNÙ?'ÏÛ?'ÎÛˆS>ÜÉ.IëS祩2E ΉÙ2ÉÍ•6eÈ>y:¬7&®ºzózXm(hÉgIž:ÞwYõÌ”lXÚ'e²5õº°wi‘¯8^~6ú€ÊPóìsû`W¤Y}oµË*ûf«óÂV\xøñÞ‰Ùnmý†5Ò¾+›TÄ£øTÝĈãÈ=³>d† $rµÝ¶ô¢þ¤Ë/Y¥mçh ×âPgi²³7,'%æšo œáˆ\¾ÇƒuŽÛá°ƒ÷wŽ{]ØëHp¨Q¸-ô/Ç££¡Q#â®Q®¹™(ÅË¿ä P×¼ ºÛî¨mƒ[S©¤ª×犛¡^,Õ£ªlðãPv›¥Þ¢!ÿµ`HB4ׄAf«óåÔÉ?Ví,4ñToí¬Û dÆ-6påPjŒ¾õþpý·Ÿ/- Ç cHÁÊÒdÉPÂçÒä~ð{1íÆ:H/»ø}É Ë®˜™™ÅMÝ"‹ýìfXá8‚ñSŠ(–aÁ)t é: m X» eÁnصöƒú¶¿³—§¦<¬aR}êÇ¡qÉÃè„ädèœFÓÈÖžQ7HM:Ã=Ï\4+]·sSs½Ú€»ÞüqXÿ1EŠÑ…À -Çë±£YD_ó\!EXËȨû—Q@F¾@¦õýAA$Šæ5r4úé%}S¨ÑõŠ (¿yµKLÅä5‡”$äßÏkÙXÝ·%Äd­R¶ù(Út¸¤ÅÁÐÄ+bj‰}j|ô½]gîY^XšÚYb[¼øb4ó=ÜtyS”û¦€qSX»ÝÚõCØQ0%zµÜ o·Ó[[ '2…«Å™Ï”€h2S<Í9™RtZÝWÔ!Îçur4z!ƒžˆd¡N=Œ•æ4 «Ž!äXM«ýN:ò° €G#yV#ð ªp¢õ®ÒÓŒ 0e‘±Þ•ùP,ÌDÊÏ5ƒ¸Gà/8ƒÍ„ØÉ: ¾Àf cˆÔOÆìžä®¥AF^=ŸÌ¶±]¶=Û‹¬Ï6Gcoê¤>V>° „ë=-@GÔq\ ³©±ÕѬ¢¡:*—ìMŽÉ¶ÍÊsÝj^œÝCqkâæä?¹ÞÐ/#O~=f¥Og;‘™Íí•.Ë¢œ(Î[˜MžjuÞꈦ½åhNykNž÷Ö¬8ç­@ö›ªcšêª›À˜Ûz‰Pþlq6Ýc–ƒïÌI#Ôs»6~…Ù¿r¯ÒOI9R¹àÑÆù`ö%P¼|×z2¥Z~€&#c1Á†e&üèUMp…Z±ÇsM‹íW ãªx<×ÜÞ!W‰„z4ÓcžÕո⡚öÉ¡=QÂ{ã')lwœHøB‡eCe W”¦“!í>,Uòé4>[ÞÝùòL™'¢óÅ™ó(/#açLyËG7¦HYð3p¹»ë‹ ®êpg×!¸8ŸdR$×f<·ä0·SËmq4{Óc9X{2™–Ÿ“Ý8_LhçbãI†ÐåE›ŠÆ‡7å˜UsHÜrœSŠ–*àhgÇÏC® 6ý­lÇu<õ F’³Ù\àDvXæÎo’óì¿›òÑ7Ny'0 WϵR‚Ÿ-³É¹·§3äŠÜ¾ÝnFË=iÏÌ:XS3gKâ`-BXó¬YÓ3ï•YÇ=X³hÖ‚D„5%s°†çWºX*5kŽùWÚRÃ&²)¦g#›÷ƒKÍé×(¸y;düÜÿkpŸÑPNŠçƒ{³};n9n#·ÁMcÒ Ävhîqpózj(Vˆõ‡â Io%‹1FdVóž£É(pâ8³¡h¨V×­ÞÕc!É£(zdz«ÆÇ5ƒ-¼zܯ*}ø†¼{ó¨ˆÆÊç0Ô¤±4æ añ•À¡ñdÿ°6§'"€ÇÄ|œ_V1]&eæ~i΂Óã^ç5làÁKEîOœÍù1;ˆ8_bªâF,è ‰¡ö¡‰€á¿ë²ÜW·MàäòÃÈqvL#æçó³‰ã/Í‚ÿ'GU%·ºêZï“:ýþ Àcجvg7íyMx”ã-nÊbï*Ïåæ˜§æ˜ü‹GÀF[ŒþþlNÒˆý—ËãþßÓü3IF ‚³1‰b(5öINºqË+ë²;Mô‡2×&ðÞÔש ·?Çô9ÃöŽbBœÁÆCÞÉýasòã ÷U-ª=Xt©tw«ó‡Þæ\àž÷܃ endstream endobj 3741 0 obj << /Type /Page /Contents 3742 0 R /Resources 3740 0 R /MediaBox [0 0 595.276 841.89] /Parent 3739 0 R >> endobj 3743 0 obj << /D [3741 0 R /XYZ 90 757.935 null] >> endobj 3641 0 obj << /D [3741 0 R /XYZ 90 393.337 null] >> endobj 3744 0 obj << /D [3741 0 R /XYZ 90 378.766 null] >> endobj 3642 0 obj << /D [3741 0 R /XYZ 90 347.254 null] >> endobj 3745 0 obj << /D [3741 0 R /XYZ 90 332.684 null] >> endobj 3643 0 obj << /D [3741 0 R /XYZ 90 303.104 null] >> endobj 3746 0 obj << /D [3741 0 R /XYZ 90 288.534 null] >> endobj 3644 0 obj << /D [3741 0 R /XYZ 90 258.954 null] >> endobj 3747 0 obj << /D [3741 0 R /XYZ 90 244.384 null] >> endobj 350 0 obj << /D [3741 0 R /XYZ 90 200.234 null] >> endobj 947 0 obj << /D [3741 0 R /XYZ 90 177.798 null] >> endobj 3748 0 obj << /D [3741 0 R /XYZ 90 177.798 null] >> endobj 1039 0 obj << /D [3741 0 R /XYZ 374.54 142.669 null] >> endobj 3740 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3751 0 obj << /Length 2691 /Filter /FlateDecode >> stream xÚµZKsÛF¾ëWpo`U8™7ß6vœÚTj¶*98:À$Dq—¸˜Hÿ~{^À Ù®-Ý3Ýýõ  d“ãM*R”3±Ù_îðæ«?Ý{w·wÞýîï¾Ïà)”K¶¹ÔK‚%›ûçD¢l»#㤽>¡§íŽ œ¼?Ksõ¡|,›-É’²ÚÃØÑÈ·÷?ßýxß‹µ›L*¡ÿ½ûô€7ØÜÏw±<Ûü ב<ß\î8eöú|÷ñî_=³Î`}î\‚°Ùƒ‚r!ÜÉ(CXŠ/?'Th‘rÄx®y½¿UûîTWí̹e*dÑÞ}½gJ)KÄYÖóP²~§TŒÅ P•åhâ G9N§ª›È£ çt$OÝhŽ–âƒ/ÙRÇ%X*É`˜g:Ñ)I ˆÖÒÄEŠ ÑP·Xà=˜±S> “C}ûlüA$åíüI<|§~¤Z%š¢º>&kÝSÙãÕöÚM–ž_¶R$vyA.ø~*Óäa‘´Ùq†hpÇÑqOo‰‘„=ö89WÇ€ýènÑé»2yÕ©Û¥ˆHP!ÏtÎD S¸œµ@žwm%N7XIÇÈÎzê\ê®Pp3›<ÙÿpZsq==—ç]Wïþ¬›óÁžêÔlYš”¦hñ ,ƒÀþø ÌžƒPÐ}êT Êiê–fê¯ÔcÔ=³PÏ̲P^ê†:.yÄÒB½¥ÏS¨KÄ$ÖÒÄEŠIOk#°3šö~¯®{°3nñªV+Ët­èôštkYҞϓ¥kgð§žšÄGã<­;G)ɰ;¬zH~˜Ç‘$„ú+VÀ.ò òûz°{ –ÀîH^vqvú/»ÈRÄ2þm`§‹`)@ÇÁîhÖÀîñZ{T »/p!¯§9 åE󺢎K±´`?\‹9°c²rXK y¥y¨]»I¼àÕïÓò|P0à à@Ï-[vé—¥ã}t±| ÌÆ¬ÌfN­c—ØyJ¬ûÀ½¾µ\Ußß‚ÚÁ"j-‰ÚáÛúr½uv‹Eu¼‹Æ³í Ý-˜[6A_ëö4À¼€#%ÕÎHD²Œ`&ùÿ•®t ’²8‚-Í*‚^Ç:{œA£È‹"XQÇ%XZ_‹Ã,‚ÅÊa-M\$ ˜‹<Ôn`NB³p«GðhÙ!˜õÀ„Õ‚ÐsÈ\¤„ØEíÓ-L1,Ä2†_Ygó\¢”ò¯±Ç` ÄŽdb«q‡V0Ek®ëGÕ&?¶eg~?6[.’úÒ#Yý;žþ(«áYïn×<(•âÎ90˜ppæHÝ;xôÿöˆïÊvßœ®:&éößwаý¿WÅg"ùííGuÁ>Êæ´/Îf}_×ÍáT)·é,i×UûX7— ôbÑ”æùÓåz./eթݨ;œ ˹¼Má¸<ºÁÃwc]| Ÿ]‚Y)]kÑõÎ#Ÿ rÌrhÑ6ç—çÑŒ…›ÍÑÄECA( D«Ô1·p’"*åÊyUx÷('òQù˜åPS,Y›BÌÎ!›YÛÑÄECJ Djm¥0 /²].«ÌúZ6l@±3«ž‹ ÏKòÁè*ê÷7AåÆlÒlÁ/F¼`ȨŸ_FØ»‰­±·ªÌ•Ùm¼ÎvΨóö$gO¤8gT› :qž÷Ž'mÅ>˜3ŠHÞßµi× ÏmÚ­÷7­õNE"“{GéV?Ügm3cÁ™›ëk¶ƒsot5Oæ!Ÿ«XÈ¿â[ÞÎÓ}CBi(ÌPHÚÉ΄3Ã%C«FÃ3ì2¨¥-EŒ•.|…c¥‡3SfJiJ_ËMZB5‹šî‹x¯gõü2ÊA>9õ¦ÈMÀ˜ØÇæU§ÜΣò¬Dð=@õcr¼(S–ã’Š1â½Á¼’_`Í\t–3t˜»ÍB;ðÚÓ8¾‹LK@Ç0Ã#AG<],U¹œÓ ñoXFA2CiîXõ!9¬;lبRû8aÖL½«rž ~&¨ùÁåÚÔÿ.=ÜëL¥-! u§âìsÒl&y Š|Lò å`F<Ÿ,ÉΣ™4¤"ÌL<„‰0ÿÜØhS\Ê®lÚ7Ó>Å…É3ͽ¡lÜÕ3\ŠRÂz†FëÏD, ñ(`[ƒ ›åq¥8šÉ–‚¢ˆAן;úñv.›™¼±\š‚è„9Õ ÔñŒ@i®ûÏù’ÙÐì<¢™mæà©¬g´8‡á:*Eå’¸8©G’@~‘ üåmè¹çº:žºÛ¡ Ý¿WRe”3†ÎµvCO=ý:> Eí©Ý;®½hY{–fM{1yN{1qN{ž82¯½} nQ}PmT º³ý’óÉùèã=A¾It°b@°{}¹ÏdÇ ]㜣Ϧl¯Êuÿ;ã¨Ñ{‘#!f_¥aBÌË£¯ûPÕ|ë´WC–(O¹}¹`¥«MÿTVj¬è^;9·¿ßæ4¹YLüco'Üü#ùLß0l~QLlo®ç†.žýööã/àûÁ>jFnþ<ñ]ýür,«±vÔ§´SõüÃd<Æ endstream endobj 3750 0 obj << /Type /Page /Contents 3751 0 R /Resources 3749 0 R /MediaBox [0 0 595.276 841.89] /Parent 3739 0 R /Annots [ 3754 0 R 3755 0 R 3756 0 R 3757 0 R 3758 0 R 3759 0 R 3760 0 R 3761 0 R ] >> endobj 3754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.979 672.898 156.648 683.802] /Subtype /Link /A << /S /GoTo /D (sph_8h_bcdbd119e57482315882d849f2b04e91) >> >> endobj 3755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.692 622.089 157.36 632.993] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.795 571.279 157.011 582.183] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.835 520.47 157.051 531.374] /Subtype /Link /A << /S /GoTo /D (sph_8h_8ee2e117701f434f0bffbbe52f05d118) >> >> endobj 3758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.976 426.068 495.279 436.972] /Subtype /Link /A << /S /GoTo /D (sph_8h_bcdbd119e57482315882d849f2b04e91) >> >> endobj 3759 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 414.113 125.307 425.017] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3760 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.616 396.488 200.468 407.392] /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 [218.058 384.533 254.91 395.437] /Subtype /Link /A << /S /GoTo /D (sph_8h_8ee2e117701f434f0bffbbe52f05d118) >> >> endobj 3752 0 obj << /D [3750 0 R /XYZ 90 757.935 null] >> endobj 354 0 obj << /D [3750 0 R /XYZ 90 733.028 null] >> endobj 3753 0 obj << /D [3750 0 R /XYZ 90 691.872 null] >> endobj 358 0 obj << /D [3750 0 R /XYZ 90 471.195 null] >> endobj 362 0 obj << /D [3750 0 R /XYZ 90 359.004 null] >> endobj 3762 0 obj << /D [3750 0 R /XYZ 90 336.692 null] >> endobj 3763 0 obj << /D [3750 0 R /XYZ 90 336.692 null] >> endobj 3749 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F48 2408 0 R /F14 1084 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3769 0 obj << /Length 2345 /Filter /FlateDecode >> stream xÚ­ZKs㸾ûW(s’ª,ð-»ÙÝÊÖVcWrðøÀ‘h™)‰TDjw_ŸÆ‹IÔ̤|Íîæ×@wM“†?²’x•òÉ„¯v§;¼:À՟»…Û[ïþwOwü1§ÉêéU?.┬žöÏk²Í–`Œ×Íù ½m¶”ãõå±0G‹×â²!Ùº¨vp)Á8¡k‚Éæåé绞:³Ö)žeô?wÏ/xµç~¾Ã(‘Ùê78ƈH¹:Ý1šØããÝãÝ?:æz×CïÅ(¼S¦$Ê@2$“q„‰„÷Ç"„ß?“c¶J©@D0ÁÇ¢½ÂKòuÕ<Œ_Œ`ŠÒ„®<•³Nfb—ÒÞ.Á)JIÒ)R†Û¼½6é‹r¢2Ç¿n(_çÇkpÇh’"’’wŒÌÖšºC ¼¯H¹ó‰R>1H"ÕJ1bY2R »lˆ€í”ÂN%)ĈÛê}£Uù–f(•µ¡´ÚK^5¯õåd3×®8M[æG{Z*õe_Vy[X‘¶¶¿o¶®À½R%¹_UÚ-܃£§êW󛛟ó¥þw±k˺Bã,e?O…Þ¬±ÚàÉÌÕ.J3ƒÏß7¡òK~*Úâ2_–çËÄØ¦eÂÉøä.ŠgÃÔ5p-¡(“qPœÌÄ¥AîNR”e~¸¡-0Á©G0X£8wkÖD®B7EÐV.0¬¸7­ÌÖ ¸)õ='3[Ñì½,nψÄÍ1¨C‚ ̹ŠöýpGëêP¶×}1\Öýf0àŒ÷ùv]Ø3< ×/h=u‘ñôz¡yô¬Ìz1{½˜9‡žgŽ„ÑÛÕšgგRÍ`woå/±”Ó=Ím~H h‹QÑÛ+]ˆJ/4+³•˜=•˜9ϵQùk¾¥…­ÑœÂ.¢½’\ZÒÌpïùcŠ8CïuÌÊL€!(´«éÀ±nDµk]<Õ¡}kÐ,<)ºO/4•¹ %÷–PŒ×œYÜ-+3qk¼ê3ß­ 8M{)÷EÉÈ8½Ð<8VæFpÔÒ ­¨žLdq·¬ÌÄ­8œ ŒÅw+ÞÄäÕÞ^WuR|w'’ØŠÀº)[B±šGÑÊ(wÿ°!аûŽ6 ·”Ä2"Ÿ†› $tàÓ/=f §3uÐ7ꬬ̯.›ê`Ü©¨k=92çÍ{Ó's¬êî@Aϔ̹’­ éú ¡ø–2`;dÀ˜Où»›J½ºFÂá EnÛÔ—ü`Û±Ü56¨0Ëy6¦÷Ã%ˆ(uÜU!5U­b*Æt}T;‰tÅóR4gBäñ}#øzŽ<ªÉÏx”sQ]#»§TƒÓ˜ÓÓµ±|.̯*3¥¶´7"j)—š÷U{|7Kk0¯TAxw‚Ñr—ëáË_œ~Å×EVWü@2Ãß² ”æÒ raa‹8_Þ»¢?ÊÛö°^F¡'JR;?S7.+ñÑKáNzë‰OrøX¥}s¾ïü;Í|ÙÀ‰Qõp2qÓ#EÊô\ƒ@!ƒˆ™o`®Aðdæ ½Pjƒuãt9`y¾W»jœÌ­ÔÕ+hcrÆq2¿ÆäŒa2ð멺혜Cv¨¤öõ,Ý R ®è†'4‹š“¹´á{WcŒ#ê—ec·BŒÃwë±K(ñO*í›®O}o¾ïwhÞJåH¦¦ßKØöBóØZ™ÿ!ŽºåñØ­!öݺÛÂ}‡ž,Ò›q Ó®½Ð<®VæЬ:ûó” «¦…ˆ¸OVfâÓT)ÓO꺪º]5U×ј+¦í Øï2ˆì>:©;>¹åpòFS1Mc•Œ¥±êšjÔ%Ó÷PGcÕ­ŽÆjË›0¿ÛÒXèi°æ~)Ÿ§³é"ýJ6K°„‡Y´Xy2sÅŠPè陸™ÍÆÌöëvd7ÄfÌ·±Y©øÖ™íef¹¬Y ²1c–ÉFmJêÙ ñØÑ?]q‰xØ&ÕDð¯ÿw,ýŸd"¤¿B’)³ÿHf­+_Ò´ -l¶«mˆž6’®¯¶²ümgë 3?D>`ú`sF1±ý諊«ÉþëûÇ_ )üå;û¨béæð³íQÿ\ÿþ¬dŒW_Ñ'ðüå‹ endstream endobj 3768 0 obj << /Type /Page /Contents 3769 0 R /Resources 3767 0 R /MediaBox [0 0 595.276 841.89] /Parent 3739 0 R /Annots [ 3773 0 R ] >> endobj 3773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.987 253.22 249.839 264.233] /Subtype /Link /A << /S /GoTo /D (sph_8h_8ee2e117701f434f0bffbbe52f05d118) >> >> endobj 3770 0 obj << /D [3768 0 R /XYZ 90 757.935 null] >> endobj 3764 0 obj << /D [3768 0 R /XYZ 90 682.109 null] >> endobj 3771 0 obj << /D [3768 0 R /XYZ 90 667.539 null] >> endobj 3765 0 obj << /D [3768 0 R /XYZ 90 359.582 null] >> endobj 3772 0 obj << /D [3768 0 R /XYZ 90 345.012 null] >> endobj 3767 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F48 2408 0 R /F14 1084 0 R /F11 1069 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3776 0 obj << /Length 3236 /Filter /FlateDecode >> stream xÚåË’Û¸ñ>_¡ø¤©µ°>`WÙd½ñV*{ªrp|àH‰µ©%©Œg¿>Ýh€ÒŒ7©ÊaË5&6º~CbÅáŸXi¾Jã”é(^m7|µ‡Ùn„ûºÏ›àûww7ß¾‹`ÓI´º{°ËÁb)Vw»Oë„e·Á9_·§;ÜndÌ×ïŠÒÐèƒy0Í­ÈÖ¦ÚÂTÄy$ׂËÛÏw?Þ|דuLÅQ‚D¾ùô™¯vÀÜ7œE:[=˜3¡õêx£däÆåÍÇ›ô8h>‚ù¥}Å"z~c2b<‰íÆþZw¦}ƒ|ÂúHY"•ýûÜrüðí;)‡õ‘`hp ô/sø°åX¬Ï­i§;±`V)™R‚xÆÍÞA|¸÷ЛÜî ä`ŠÒqÛÊ/=;S&²„ ¡ÆLLça®“Î4KDHº«i÷MÝå¡ñ¶®›]QÁ{K­’ëîw4Ólƒºãô^OuQ9¢¥E³%UÝt^ºÉúÁ“ðPæVÆëG{¶MŒo„`:¦£oŸÚÎVðõca O¦<ÑIK$„ªËÍ„Ø,Ã0÷‹ijš)ëj_tç¡EEÓÍÀk¯ÙíFi±¾óŸ¾?—`[„·Ú—V¢Åöó¹hÌŽ¾Ü?-˜Z’GÏéz‚rvæ¢hšT ¸“žjšƒ¹JUHp9\ŽH?Ô ¹›î€ª#«tE]Ñ[Þ˜)CY æªWI¬˜LÀÎŒ-¹@-S üÓ©åId,ÑÒ#C–̹üÄ?ßnðŒ¿§GYíù[ïP4SÎÑ ¤CjÎ86niÞ—ª~©– OXúvîœ6’8Ü€ˆ5ßߊµÃ½­§sGë„34\H_ƒ=ã¬Û³èH ³ @BÚ bDHAŽX–""ˆt•€¥)HX”BLi’È¢WÈÛ+!3GæíQDˆ÷©ÀN"bÏLâÀÔ€àcð!_`H@º"Ű­t!®Ɉ VB–Ä©CBÐÌ0­4ÓÏ 9~¡ÕóBV¡Cé„Rð BVžÕ¥S @”n29„,<ƒTGtõÍœYüWò5ó5E•¢òQÇe»eq,:qÚ9 ÿÆ”J1ÍSÙׯ3̤ð‰i£´E(Î2Ô½ 3}´³l]€ù¶4$¿U쌵Ë,uy~"®ajÈÉèƒOXð›Ý"Ìy¿“¥~ ¯A³ÖôQpÒ ÃürjLÛZ’‘/´<6)W…ÿòž¿zÂÝÎt¦9›gXù¯ëJñIët  ’'×ð½5§¼½CŽEkÒõ½é©F ·L¶”^ÿ¹¦@!ÂÐÜ*Ž:ñÌg°Žž[êÎalÎf‘¹dM‰¨sÜó]Z/ÎF…HÄï(žÄæH…±9ŠûØ C‰à`7³34)0#lKOŠH,¶Ñ ‘Tp"­Ùz ªÿÒõAìïh¸-šmémë ³€¢Ú/ì“ëqÞ¯}&ƒ!ºkÙë~p9º¾ŠÐ"$å¾,c÷aPö„zX Ç )°þÞá=äŽhá©C9pÌË… MNô¥„:â`MzoÂ(*9ñƒ~ÃøÒ˜äÎÀ$ÖÜf[X0U8"Pä]ÝÀ˜}Õ]„;æM±?tc»5UK–áX˜ohg¶eAF‡>rI'ߣnl 5´s0!Ú& Âm¢‡DÝÑxØ)Àõ;…±EeÚSÌýÆi§¢8,üÁUuµ\g¬— ¬ïÊŸè…qo¶ù¹5¥ùþÛó‘ðZ{¿¯¿ÂŽ(‹LSla³ö,p‹cÙòˆêƒi2¾‘Çܳkg1JFƒÔ‚ƒÈ–²Hî!Œ-Ì0È(gaÀxˆ ~W£°rG®X‡bÏHì.O„7òëz}®b?<гóXœÀÒ­ñ˜ì Y Ñ8Ð-LâÊ>¢éµMI-–®8Õ»¼D×-S—Éc,9Ús{³¨Õø2r€)ÖËö¹=˜íOä=àÍæ½8Èñ‘­wFú: &àÐg‰ƒ(B>Ê ‚Ó‚ÃÊÄbŠ6¬t˜b.å|‚AéùBÍø*bhè^mûoj8à^,øÇ…Ðkи¥& eUÚ'¾_Û8EY:¶~q‡@a+&ÛËæ¾èš¼yš9 o¥ãÔ­=£6¹¶%†ªó‘޵]Øè ðšBNë:ŸL2废E P´'Àx8å.ã~ð›E¦Fy:‰ðÙ`åUFTF ŒrHž[Gj1œSBôj`,@â¥O2ŠÞg6åqyŠORFE!:J×$[rŠãË‘¯Ñ3ËMë)O¥9Ÿ½û†bpÒµ•`N:ƒ@& “è™¶‡Þೆòåª.õ²¥ÊXÞeÄĤiìa®“ž BÒìB£Z&š‰8]$æ;ÔÌìz+ÓŒsµ‚’šI®-©¿Û¸ÉXbÓ]רe~$äåyëÞÁÎXûA‚cW-ê’.(¾!°öÂ06ŽøS«>#3ãkt¥Ç ¸ñuçSûê|¼7Í8µòÔ˜÷ý‚KÒ‹ðå»ÖAjÐe©9˜J Ãÿk´Ç †Æ«|ÈŒ­‘Ð’•#¶>^ò!í´nr…ÇU¡÷¤0ü´³ÕÐþóeÙFšE ¯Ëvº,[óBÙ¢ß~MYÅX!!pCMu•-3ckz‘‹Â­?ôÍ,M8bß1èó]ŒÕ¼0}<¥‚]>#Îæ²4 ¹þÝóZúÚ¥8cI‚&ÙU†È”¡©•Ò!C¡ŠBD«hB­,ü@ჭ'ñP“Â8'T" =FëÖPÁ «ÜaMzÄ-ø]7êê&ß»ß8Vaô¥ñ<_ÝDIÕÞ<ë™aP¹¤é$7_±‚´|°n fa¥t¹Ìrœ©`Q¦¯Æ©æRœÂø|ÀÚIW—ƒÔ5²½îNéŽ6í”×ÃXeéòîì/”]ŠcjY—g³ÀŽÃÇ€8»ÀÁl …knÁD2 ²žIÊxé^=‰¯Ó#gÈi–DbDŽ¿¡Ÿ|‘j‘Ä¿þ÷°î|`£Lk8¢ž:²üƒ½Dî|×Èw·Z®ÏNHÛ:)zý†Ë7§7É…kéØ~žÿMÞ?ÿøñ/à£Þç–bÛœ†÷®Íó§úËÓÞTSéà/vçâù¾ò@ endstream endobj 3775 0 obj << /Type /Page /Contents 3776 0 R /Resources 3774 0 R /MediaBox [0 0 595.276 841.89] /Parent 3739 0 R /Annots [ 3778 0 R 3779 0 R 3781 0 R 3782 0 R 3783 0 R ] >> endobj 3778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.807 702.288 187.11 713.301] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 678.378 125.307 689.281] /Subtype /Link /A << /S /GoTo /D (sph_8h_5c0783d56189d48d9f52af05b64a4df6) >> >> endobj 3781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.987 307.11 249.839 318.123] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.55 110.199 291.402 121.212] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.865 110.199 390.168 121.212] /Subtype /Link /A << /S /GoTo /D (sph_8h_bcdbd119e57482315882d849f2b04e91) >> >> endobj 3777 0 obj << /D [3775 0 R /XYZ 90 757.935 null] >> endobj 3766 0 obj << /D [3775 0 R /XYZ 278.471 413.105 null] >> endobj 3780 0 obj << /D [3775 0 R /XYZ 90 396.845 null] >> endobj 3774 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F8 1129 0 R /F11 1069 0 R /F7 1132 0 R /F13 1157 0 R /F14 1084 0 R /F48 2408 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3786 0 obj << /Length 2241 /Filter /FlateDecode >> stream xÚµZmoÛFþ®_!´_$ Úî+¹,ÐŽã)rIÎvÛz…AK”,@¦R²ã;Ü¿Yr—âÛ»A˜"γ3ûÌììJlLáGtªDBç÷#:^ÁÝw#fŸÎàñ¬öüõõè§·Þ"Q Æ×Ëâõ€ÅÙøzñç$ ÑtÆ(¥“|÷•ÜMg\ÑÉÛõ&)¯.“e’M™ž$én Jµž0*¦]ÿ:º¸®hí ” é—ÑŸÑñ÷ëˆéñ#\S¢h|?’\ØëÍèjôÏÊFy_Àý>¿]Ç8o:Æ¡*;Ûí6OëteFÚŒ€€+*Áªå»»]¼(Auk‚ Œ%èßTQøÏ &<œ<®÷&N\OöwIyk±Î÷1D(/?Æé¢¼Ømóõ~½MKxœ®6S6)Qz2ßÞïûÄBoŸÚ1¡"JñÊ«"*æA¶²ˆËZ|zVƒwbÔ6i#°ØÅ•‹­AHF‰d¬9ˆÖÔ8 J-'A4©ï¶‡õ?Kö‡,uq5a*¯·ÙzµNãxÉK+3ÆH¤”ʓ v·]§ûœT³îpKêLHÂtðíº/ŒIztlqIDÉÿã:o x3s?<Îó$ËÈÝ]å™!pP¾,Þ{ïã’íjŸæà~A˜÷ä–ŠB²À›ðµçÀ3)te£çªMÃ(¼ÂÊå08!“`aƒ0/<ìPB**!›”^…;4NÞ2Y*üë.»ï‘P1N¸Š€<’¢Â@HPôh¸@$ªßLiNÂPT#–|¬aÄA1b Óc!fÀW»d¾5¨ è¾PÈCœ­ãÛMQ:àcY`à*Ð:+/I¶~ˆ÷뇤”snCÂ>V!#šÉ8r4з²(ˆ>ÐêNL^¦ýr6d ‘óñ¹_Î3(g„ë(gŒÐɹFøãÂz×a• yØdõ+Ú¢qþ–ÉB Ÿÿõáâc‡\CMQ¡.[ N©¢UÐŒ1,ùú?ÉvY\õæ3—Pmit¢÷¥mҟϤF!ê½Ãà”-CÖ{öÓÑ}Xc̾³J5Ê¡ƒàÞT ÑT3Q9ðÖ )$ƒ+ ÁvYÕ†nÍÓ°¶ç—§EãCi™D n$‰ 5™™Ãà”ȳÅXê±ð{Ví\õ ´sZ»žfÏ.éu£0éÌézï/¢2‚ÞP‰ožYa'¡Èß»ËâIZûf¨öÕlùkJhk_p°ö5X‡kÊß2ikßÍÙ廫®¼èmQŸuD„Öv9—ÏOMÂT„¥¦ƒ˜¿2ª ‘-åyÈ“J§vážo`y‡­Jñ1ï,þsØ@HèLG ÏËýÜ_Ò94±“}ug—M%0í·û§ÒH}Í Üw¯÷µ’SBiY5/ÒÃ}’Åf|}m€€ÎKHîM…Úso*8ÌP*`\U* „6ê„ øçëi„Ã=-JÝ2iKì l3îóU·  ,F¸ÇƒÓjMk°þ·C梢‘Ã9oѳÜh‹±9qyysõÛùùÅU'ó9¥P%dsí•ßbPjN!iÃ&õ/Y2˜ÐWVÎ`á;Ñs ÆÙ›k~üíǛϟÞ¼¾¸ìœˆ6ßuÞaPz*ÓPÃzœgç… è½Cãü-“5ÿ_O…šœ½¹¹ú|q~óyñÉÙåÙ?::‘‚ÒƒëÀaСH¼T½:௼)`ö“2<9Žp XŒ/¿O™ùÔчv'€.ª1¤vBX :nNLÌœÔòK¹Ô ” –ÀSq„ûa1=xÿ±Åù”M>}º|Ó ¨J„¬9¨v(, W&=xc(6²üó¿îÏÌ2˜·êç>oaÙö-‰<Ò$‘wI¬=÷.‰3´$b\Õ’ˆÚÙ©ÚÞºÁÇC1Ýäóë¢qæ–ÉrELæ_;ÜŠ’€rÜW‹ÁaÚi$šÁ… ôf¹ÝwÌï⬔“µZ“ªê ¹<:o•Áv¦D˜Æí•í ·‡[wiœë¹% û|¿Ì¾ô>Ì÷¦cŒ§ºÇi &Õ¿{—\ö*é[Ä·–ûÇøÁ[¤‡ûÛ$;IóÅ/£ˆR½Él~®ÅÊ£=ï÷ˆ…àsäÕ¿ì‚8…ÒýÞ¥d7ξ3©—?ç3_ÂÛ¿6§ÕëÚ'÷µ=1dÑÏ”ÿ,hù‰SÆlœ¦üø}áçW¦lòþµ}•@i)/om ßl¿>­’ŽàÌ/&»áù?ÐÀ'$ endstream endobj 3785 0 obj << /Type /Page /Contents 3786 0 R /Resources 3784 0 R /MediaBox [0 0 595.276 841.89] /Parent 3739 0 R /Annots [ 3788 0 R 3790 0 R 3792 0 R 3793 0 R 3794 0 R 3795 0 R 3797 0 R 3798 0 R 3799 0 R 3800 0 R 3801 0 R 3802 0 R 3804 0 R 3805 0 R 3806 0 R 3807 0 R 3808 0 R 3809 0 R 3810 0 R ] >> endobj 3788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [374.556 719.912 411.408 730.926] /Subtype /Link /A << /S /GoTo /D (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) >> >> endobj 3790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 594.563 170.418 604.341] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 513.802 185.362 524.706] /Subtype /Link /A << /S /GoTo /D (spx_8h_45f0db5bb967998f070cad30e5e68180) >> >> endobj 3793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.913 513.802 272.793 524.706] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 499.182 195.575 509.088] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 475.926 197.546 485.853] /Subtype /Link /A << /S /GoTo /D (spx_8h_777e5c4790da397aefcada61445a1bb3) >> >> endobj 3797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 394.189 187.016 405.093] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf) >> >> endobj 3798 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 378.967 201.72 389.153] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf45313ec670a74e7effc1bcee16cb0b56) >> >> endobj 3799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.184 378.967 338.41 389.153] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf7342349cd1dc5b4581ae9c39f31d055e) >> >> endobj 3800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.873 378.967 496 389.153] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf23753b512249d3752a74ce7497d9c852) >> >> endobj 3801 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 367.012 232.674 377.198] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf6b6639fb6d3683c9d356dbd7cf705de1) >> >> endobj 3802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 350.728 258.368 361.259] /Subtype /Link /A << /S /GoTo /D (spx_8h_d99a404f496d5b8ce3ef6e53c630ecafe795e388e346496b34e57864af841ae2) >> >> endobj 3804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 295.496 151.599 306.4] /Subtype /Link /A << /S /GoTo /D (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) >> >> endobj 3805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.83 295.496 459.71 306.4] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 256.643 160.993 267.547] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 217.79 160.993 228.694] /Subtype /Link /A << /S /GoTo /D (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) >> >> endobj 3808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 178.938 162.099 189.841] /Subtype /Link /A << /S /GoTo /D (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) >> >> endobj 3809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 140.085 162.099 150.989] /Subtype /Link /A << /S /GoTo /D (spx_8h_89a689b848429cfa5780757a5eee9347) >> >> endobj 3810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 101.232 166.234 112.136] /Subtype /Link /A << /S /GoTo /D (spx_8h_9eb861d7c7437c5f974ad425da8b5664) >> >> endobj 3787 0 obj << /D [3785 0 R /XYZ 90 757.935 null] >> endobj 1040 0 obj << /D [3785 0 R /XYZ 143.23 711.11 null] >> endobj 366 0 obj << /D [3785 0 R /XYZ 90 694.384 null] >> endobj 3789 0 obj << /D [3785 0 R /XYZ 90 613.536 null] >> endobj 3791 0 obj << /D [3785 0 R /XYZ 90 532.776 null] >> endobj 3796 0 obj << /D [3785 0 R /XYZ 90 413.162 null] >> endobj 3803 0 obj << /D [3785 0 R /XYZ 90 314.47 null] >> endobj 3784 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3826 0 obj << /Length 1885 /Filter /FlateDecode >> stream xÚµ›MoÛF†ïú:Jo÷{¹¹5i4(ÐÖ6ÐiP(2í°¥D–íäßw(îŠCŠœ¥Ä9˜‘†óîßg?HJL9üSϧÎ8æ•™.&|zŸ¾›ˆðí|}¾}=ùé­‚³˜·jz}»?Ý f¤˜^ß|˜Yæç‚s>{üò}ž_HÃgoW÷yyt™ßæÛ¹Èfùz )γl&¸ž¼~?ùõú e”-D¿N>|äÓhÜû gÊgÓ8æLx?}˜h©Âñýäjò×!Gù¹‚ÏÛú¥¹a™Ê¦J³Ìµ…è‹rpØv:œÅ!ó…ÌC×;+' eZ*'eU9Á-ÓЂS”ï_)M³‚Ã)ÒLQ®#­C Í8ûãݦü{»+7Ë¿>KßËŠn=çËÝf[tŠuö*ÓL:1–é­ mž!)ËW™ºO©Ã#5ÂïX,mwJ¶ž°- Ž ?f–^ÀGö¹Œ µÁì® .p_¯›âÚØf¯tº=„´Ú½ÅÐÑëÏ‹åÓÓCEÅ}¾¾Û}F¦‡IgÖÃøÚ0í²aÆ—ÝÆW’ci燘¤õ«\„÷)Áh~$H¹ëõ°?¥ÜHÙí÷æoñK¨žG(ùˆ®t_„cVð« „V(£§þž €a‹ãsV’ Ę(W7¤``  ÔôÒ Ê”qXîÇ0´3@ö<0@Êj•îÉ€qË´?Ÿ” ‹rê<°Xm‰I m~uÉühÞ7`7›ÑÞ1IïW¹ïS‚ÑûHò>Öëá}J¹‘²PnúžÿÉžGïSòÑû¸Ò}½¯9ãÆ ð~• Óû!¤Õû¾ê7…¼·c­ú $Ž^öǘ¤ù«\„ù)Áh~$H™ëõ0?¥ÜHÙ¶øIOp¥ Y†C7v€A½î}Qà‚I+ P%èD!„œ½:Â¥X8'hÏ™âr,.´sLe‚ä"Ƥ¸@¹º¹ Xࢦ—æ‚Tn¤l›Ò;äÒód"dcµº÷äB[É´uçstqCΛ"ÚÀ9‡ øÎðl4.TÆLæh.BL’‹*Á%¹@‚X¯”r#e¡\ºÿ~ó)ß-Ž(o¶“]1´0,¥¸õ÷e@*fÝ€m2JÐÉ@ie \Ý/v«çÕãnµ Ƈš-W»Æž¡=v_Û“p?;¡ÇÂAyÏœW$1&…ÊÕ)pÀ‚5½4¤r#e¡¼¿T‡Iá~Ó†„‚$d·C -nË„ª×¹'*+ž# Ø5£]HĨlNãPG§'Ê)ðÒhDXμ÷4!&ID•‹ ‚ŒD AŠ¬×ƒJ¹‘2ÞIê¦ïO%»bha AÃ"©Vã¾4h †°F :i!§ÞCú‘(ÄmK “œÞRǘ$U.‚J0€)°^(åFJ¼Dj¿ º| €Žà÷%þJ?`ûŒtB/‘ο©$½eJ6È ®€ 7Ï1&EÊÕM)À‚5½4¤r#åaØ.nÚVCÖ º»!†… ‚0¢^ßžî—6cÚØ$£]î!§ÿ0t,nV›¿Ü¿œ4ÚÞXjͬ ÷Æ1&iû*a{J0Ú R¶Çz=lO)7Rî~°|û lOu÷`{J4Ú×·¯íÁ™ŽØ£¶!ƒ>áí0Ú‹Œ9=ÚXïäIzc’¶¯r¶§£í‘ e{¬×Ãö”r#eÛ#„¹4Ä~Ø0©3º!†nHñæ\³æ=QX|À~%èB!†ÔQ(*õ¸Ú¬;à—<_·ß2]¬oŽI³Ý÷/ùãIdU3b¬'Ëå3Mz/cRd \Ýd‚ ,HQÓK“A*7Râ@ADúBéz²‘ ²!ŒZÍû’a$bÀ{v(A'!dðΠû!œè†0¡ºÑГ‰×McL*%Ñ@‚X¯”r#eÛó5jÂ(VÒd÷C ÝÀÁgõî÷ÆB¨ýÚó±¨tbBÎ{®öo .™²j,&2Ï´¦wÍ!$ED•©J-ð€Ô°XšJ¶žOéw/JŸS(P-$à2'@€ güþ±t‹(‡Ô {þ¯aÊ”aù.<þ˜Íéð;ž ^´õ]¾Î·‹]VG›°|ºž{9{ ¿IøcÀÑåá_qùJñò’ ¶Å̼ lýýæê÷¹˜ýö:œÊ` ë´@Ð/›oßï`½Ö¨Žª¥<ÿ¥rU endstream endobj 3825 0 obj << /Type /Page /Contents 3826 0 R /Resources 3824 0 R /MediaBox [0 0 595.276 841.89] /Parent 3845 0 R /Annots [ 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 3837 0 R 3838 0 R 3839 0 R 3840 0 R 3841 0 R 3842 0 R 3843 0 R 3844 0 R ] >> endobj 3828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 706.991 166.234 717.895] /Subtype /Link /A << /S /GoTo /D (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) >> >> endobj 3829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 668.197 165.526 679.101] /Subtype /Link /A << /S /GoTo /D (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) >> >> endobj 3830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 629.403 165.526 640.307] /Subtype /Link /A << /S /GoTo /D (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) >> >> endobj 3831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 590.609 165.526 601.513] /Subtype /Link /A << /S /GoTo /D (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) >> >> endobj 3832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 551.815 165.526 562.719] /Subtype /Link /A << /S /GoTo /D (spx_8h_16bc2fef69c592c5bcdc695633f17df0) >> >> endobj 3833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 513.395 170.06 523.925] /Subtype /Link /A << /S /GoTo /D (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) >> >> endobj 3834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 474.601 170.06 485.131] /Subtype /Link /A << /S /GoTo /D (spx_8h_413fa882d2b67a792a35938738214057) >> >> endobj 3835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 435.807 162.518 446.338] /Subtype /Link /A << /S /GoTo /D (spx_8h_8aba8fe47efe098740991771e97fe756) >> >> endobj 3836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 397.013 162.318 407.544] /Subtype /Link /A << /S /GoTo /D (spx_8h_09b951b08ac818b9da44389a3ddf614a) >> >> endobj 3837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 357.846 161.96 368.75] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 319.052 161.96 329.956] /Subtype /Link /A << /S /GoTo /D (spx_8h_974f799a8ee19dd23114ca01b225a02f) >> >> endobj 3839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 280.258 162.657 291.162] /Subtype /Link /A << /S /GoTo /D (spx_8h_f4784a764fd0f36c82548ef755c470bd) >> >> endobj 3840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 241.464 162.657 252.368] /Subtype /Link /A << /S /GoTo /D (spx_8h_772a14e27c613ea7b63697efdb765205) >> >> endobj 3841 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 203.044 166.244 213.574] /Subtype /Link /A << /S /GoTo /D (spx_8h_0459c65496512f270d3c569c346ce413) >> >> endobj 3842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 164.25 166.244 174.78] /Subtype /Link /A << /S /GoTo /D (spx_8h_cc02a893f538f5f0c0d1d9baae2b0e10) >> >> endobj 3843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 125.456 166.493 135.986] /Subtype /Link /A << /S /GoTo /D (spx_8h_f7a2d05c2db901488d68576343aad873) >> >> endobj 3844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 86.662 166.493 97.192] /Subtype /Link /A << /S /GoTo /D (spx_8h_56a7d77413c654541fb29f58561c16f9) >> >> endobj 3827 0 obj << /D [3825 0 R /XYZ 90 757.935 null] >> endobj 3824 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3865 0 obj << /Length 2248 /Filter /FlateDecode >> stream xÚ½ZQoÜ6~÷¯ØG-pË’IQy8 m.A‹â®—w¤A¡Ê²-`­uµZ;鯿ᒴ(­8ÒÚIàkÅçãÌ÷qHQlEá­rºÊdFòT®Ê» ºº»o/˜kÝ@ó&hÿáòâ»7)6‚¯4ÄF™Ø0žªWÞÄÄçÇ]³4y¨ÚÎF¤]§YRm‹®~¨÷]]Ú»ÕvWÖÝgû«ÛÙÿEÝÚ‹Ç ªæ¦sþJúP•Ý®…+FÆÑd4#LñUÆ8aT=ØÔÏ%‹ÒDå9a²ç=MÀ-nocbñçò*<Âå*èë4öÎwÈÉi6pX7݉?ÔfzèÏ4´7ÎâÝ ëÖ÷<êÒx~\3HßšCf×L&ÕšK¸‚Ÿ»ûSHJ’L*<΢4áB cLyÿëÿ~ÿþÝÛ÷†+1ª(-gìùº:ˆé›Lêâ¡(‡»iº{=@ðê²Ø’¹'y’ÍBU¨,%\ò¯¦ “e¸*œÍ¬*ú¾U`½*‡˜*B Tyui<{œ¨ãDŠP:3|gƒƒEˆ\ã½TB’T¾ RDáL&qÊö“ [¬ µ©°/R«3"„ÂÕàlfÕÐ÷…¨sèÕ8ÄÔú[ Ìó¨Ë©ñW¤6(3¥cCw68PK‡C_¬È“¤üJè;ˆ*Á™<»6ØuÕÕþ¶¾î¦Ê©QÈ\)Ä×ԜȜ£"ð6s"úŠ‹uèD:DD0ð7/Ôó¨Kãù¯EåÀº À‰`ë…"*úù":ˆ‰À› ‡àóUà<HE”Î_0¾ƒ©m£;SŒÍèþ³ÎyR´uñǶÚOl%e°[‹ ê©9®'k2+§¸£^Mˆ7/¦Þ[¹kö.AåmÑÇß½a¢F¤°:7Á´ô£éßÍN8ÄWž3FQ;4~a·þ{Õ¶wû›±w“…§‘ÈxÌ'‡ÈHÆCŸ€~*K>Ú„ì8rÈXoRر:Žçs/^W]Qo«+××Õ¾lkXFN¹#`QÅõ\Ù64 ,OðÙxUå'#¦É9‚å$åCÇc2YÔ%ãÚÄÀo½‡!çLðO'{X­½Õî]ÝT¶¡»-º¿™,yrSÛݦ™Jkºóff]{\TÂícèThÛÍ+rCÖ!yrÝVª¦4]}6wÊÝÝý¡«öö™bëºën+ç®Úý¨GˆÙ1½f„(˜Ó[e;{'®™¿e—¾J&îvÕ•ÄÎg©Éýö`œeÒ!ÈDb€×í‘/pûªj]LÌx» >{k¾»¶†UQÞګǺsWme‚¶fIç|쾤-±X.ý]xì°í\ÿE{,j@…pämÕÚÆ“ºnܬ~{Z%=Ö+‹·4›}iá¬7ù)×F]º9á¾½;q®)š4ð=&·5ÁBÍͳ¡¿®=”cF~lÞ0¨€\›](SˆÓ]Q7usã~ZÞ¡=Þ¶4„ ›YSòìïÒUÒãív“ÆÞ6\·»;—ÿÆuèãØÓ@pÇ&¼6Ǭ¯¥LLâ³Ü£É÷¿þdm-©R“ÐýTú¯MÙ94f»×lÝî6ŽÍ›Ó3o+ %°¿í™b—•¯8ź~ý;ÄIÙ¶¦ò,üÃu¹?ÜßoëꊜNÖt¥îšÍÒQ´¯&æâTÀ²^Çß4íÑJîmæJ9â Š´æ~ùŽ+æ8*g¢2Q‡7Z+$¬A¥@#ãmp ŠÂbQž¥ã A¡¼X¦ÙÈßmû0ð„§¾Ýj X`NÓh"õVƒ2§¾o§ÞÙ̦>îëÜÔc¨|êTãp˜ ̦‰LŸz ˆO}dažbœÐ’Ð §„pÍC’M$’—¥"žø¾=žxg3›ø¸¯s¡ò‰P™(&A gD¦O<Ä'~ä k¾?wZ*vX®MãbÚ£9÷6s9G|™s•3 Qó½DìXdžrŽq9©Ûg©\ X~ë/#s®²GÚã)w6³)û:7å*Ÿò•‰‚ß„ÄS ›W­Ñˆx€Ì`Ö'¾Œ¼}bÛãéóqž@‡;­‰lÃ*#—:ží¾=žmg3›í¸¯s³¡òÙPù àÂvÙF"Ògà³X›hç„*¶p†Ÿ7l)"î¾=žng3›î¸¯sÓ¡òéPgÏÅõ\q¢t†FÉÛà ”$,†êÛ-äžQæÍ«bŠÌ}{œÎf–q_çÒCåi Ó`ñÖÎÓ‰RO ”§Eê”ügïõ˜ :~´Gyámæxø:“(*g¢šþ¨gnm ‰Î8!oƒRŒ¤Š}‰©biÅxÖª©Œðéo(,/úö8/œÍ,/â¾Îå†Êó"@åƒ`‚sÎk #/õ¼Ày^€¾ò*âåÓ…ÈHš"ÓEß§…³™¥EÜ×¹´ÀPyZ¨Æed~ªÈ ã Ž·ÁÁ%cC0/)ùW#`í#(2Gôíq28›Y2Ä}K •'C€Êaù+#G$:=00ž ˜o4?,X_ŽUJrs `¥¶`‰.Àð¥œ|›F¡Of?Ò~Þ·äöÛ5M26øœ6j™ðŸ3XïâÛª©Ú¢óg(;w^si>r8¸••îˆFØ,Eù«”Ú_œ2æNpLZü™Í|ÿËš%?ýà%špwNãRôz÷éóMur .Y:žÿÇ÷Ÿ! endstream endobj 3864 0 obj << /Type /Page /Contents 3865 0 R /Resources 3863 0 R /MediaBox [0 0 595.276 841.89] /Parent 3845 0 R /Annots [ 3867 0 R 3868 0 R 3869 0 R 3870 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 3885 0 R 3886 0 R ] >> endobj 3867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.002 166.752 706.906] /Subtype /Link /A << /S /GoTo /D (spx_8h_61a1980ff0683231529b784af1c48eaa) >> >> endobj 3868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.148 167.001 668.052] /Subtype /Link /A << /S /GoTo /D (spx_8h_b23cb997ad699b59f91f4dfe4e8b28b0) >> >> endobj 3869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.293 166.642 629.197] /Subtype /Link /A << /S /GoTo /D (spx_8h_544be13048057701c37a8e9c4f761be2) >> >> endobj 3870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 579.439 166.642 590.343] /Subtype /Link /A << /S /GoTo /D (spx_8h_da5d4cf3e8791d64da68575da692e3f3) >> >> endobj 3872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 498.677 213.018 509.58] /Subtype /Link /A << /S /GoTo /D (spx_8h_286f473d94247fbd7c2485e515fee67f) >> >> endobj 3873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 442.133 120.316 453.037] /Subtype /Link /A << /S /GoTo /D (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) >> >> endobj 3874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.596 418.222 181.476 429.126] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 343.431 159.15 354.335] /Subtype /Link /A << /S /GoTo /D (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) >> >> endobj 3876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 323.506 159.15 334.41] /Subtype /Link /A << /S /GoTo /D (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) >> >> endobj 3877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 303.581 159.15 314.485] /Subtype /Link /A << /S /GoTo /D (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) >> >> endobj 3878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 283.656 159.15 294.56] /Subtype /Link /A << /S /GoTo /D (spx_8h_16bc2fef69c592c5bcdc695633f17df0) >> >> endobj 3879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 263.73 155.584 274.634] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 243.805 155.584 254.709] /Subtype /Link /A << /S /GoTo /D (spx_8h_974f799a8ee19dd23114ca01b225a02f) >> >> endobj 3881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 223.88 163.684 234.784] /Subtype /Link /A << /S /GoTo /D (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) >> >> endobj 3882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 203.955 163.684 214.858] /Subtype /Link /A << /S /GoTo /D (spx_8h_413fa882d2b67a792a35938738214057) >> >> endobj 3883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 184.029 159.868 194.933] /Subtype /Link /A << /S /GoTo /D (spx_8h_0459c65496512f270d3c569c346ce413) >> >> endobj 3884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 164.104 159.868 175.008] /Subtype /Link /A << /S /GoTo /D (spx_8h_cc02a893f538f5f0c0d1d9baae2b0e10) >> >> endobj 3885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 144.179 160.117 155.083] /Subtype /Link /A << /S /GoTo /D (spx_8h_f7a2d05c2db901488d68576343aad873) >> >> endobj 3886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 124.253 160.117 135.157] /Subtype /Link /A << /S /GoTo /D (spx_8h_56a7d77413c654541fb29f58561c16f9) >> >> endobj 3866 0 obj << /D [3864 0 R /XYZ 90 757.935 null] >> endobj 3871 0 obj << /D [3864 0 R /XYZ 90 517.65 null] >> endobj 370 0 obj << /D [3864 0 R /XYZ 90 485.102 null] >> endobj 3863 0 obj << /Font << /F31 604 0 R /F42 818 0 R /F22 597 0 R /F14 1084 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3894 0 obj << /Length 2432 /Filter /FlateDecode >> stream xÚÍZmÛ6þ¾¿Âè}±˜á‹^sèiÓäZ½^vqw@68heÚjKŽ^’l~ý͈¤L[&µ.öÃ!–âŒ8癎d±…l–ÒYÆ$á,ßßÐÙfßÝ0-]‚xiɸ»yùVÀ]$ÄìnÝß1r6»[}˜G$],¥tÞ¾’íbÉC:[줽—kY/X2—eS‚Ò$™3->ÞýróÓÝ`Vƒ E„F?Ý|øHg+÷Ë %"Mf_`L KÓÙþ&àBw7·7ÿÖPóæ/í ¥K$vo› B£ã¶9?n0“@$3£ƒ{¿ç<<ߣp gÖZç¶’&F½'ê–¼·1z4ž@¥•lTëZ~ÊÖõ§{RøÏFCA"`σpitüÆÃˆ0ÆGÆ;àzÁÂù£ %xù–Y1„$HR0…·üMÉOM¸0ò¬Üt»¬V‹®!ˆ¨ ,p3<ˆÝ+•I~†®¥×ɰ{„„Ä¢&ÉuûáȭDz¡Ö²ì¦ÁEs“$Œý4ZT†k •ͳ?‡5ׯ¹ö0\_1fÆE}˜A“çJl8ÿCO?eÉÝdkI²Ý¶®%Û‡Êm¡B/|®³•›äðÄ‹pitüÆ¡TÇq42þ̧.l¥¨ÔR*pvU^´—ø áø“Äɯ%wòkt¦øõغ’_/*­d£BnýI¬¸óycà×k\ókw‘áb:¢pâ³çišCh  -pÓ{”»éÕ:“ôºm]K¯•¡×B5*“<„\V‡ÖM9”ÉÄë ­â‡U;9EóÍgy×íÅçèv²Ü´['ýIHhÌž˜è°Á"ÏvOKuh"báIõ£Ü Zg2ܶ®* *Ãû¹×}qA×ìóŽÑñƒ‰8<1§'`Üô8“?†Fï©]ù#íB(@‘0OY8ÊÝ¡ u&CÁmëÚPð¡2¡`¡:wÇ·‰rÀc¯c´Š”ƒ8b'0ž£<í4¨åªÙëöãÐp$ž7Ÿ–Ü͸֙dÜmëZÆ}¨ ãªoW&>½Ž÷Á0Œ[0œÏÞ&žFêŸNòzž:\”[r'åFgŠr­+)÷¢ÒJ6*SUd›ùÚ;xQ.Ž´w‘ˆNÔr—µEßr ”û+Š} žzÔãÕJ¸Íñbœ“€FZùž²@©$–9 Ê<~?^¬…,¢n)¢ù÷ùP<ˆ fÆÎÆÈ‹B…»ØXrwäiÉÈsÛº6ò|¨LäY¨zBŽiXùÞò¥AäõŠÑñƒ€è Äÿ'Q§vX¸‚>%ŒGO}ŽÎ-XÜ=àGÃc—òÌÝV6øÂ$ˆæY­í¶ĪˆVõÛª6JuÕµE)›J£­Ôôƒw\©Ñºª•ʺ¯ÄM«×®³²ÙWeCð·ÎdþcU.¹nP¢Ô÷Ù£ZÅXU¥}W”jpØe¹ü®ß"Å@%i¨^Ô?èš½å®(7êBmz'ú¸(Lo™y…‡®µÝ™·•~¥ÔH-h«³…‹n"Š3ûa…‘+p¯kô˦ÛËR/”oeþà|5¦ÛÜÎÀmà”Þ£ysl56Ñ(P§á®“’öÔ¢ *wjª·†0õ„難ãÍÀñ6kÕHÅC·[©%jÙt»Ö@Qs÷”Š ¸Ewãü¡*J Q¢¿æò`˜(ÿ\^ îÕÆýÏhj"LçeÿfÓÁ®_ö OøEZ$ó¬\)ÉåF QBåTßí*\ó‹\isÙ¹ÊOE;ÚÔ2kñ=#*ƒ«J3Ò·1RC©Ö'{ú½îŠÍ¶Å4˜w&„šlo‚©ÑÑUwzfm"ÐŽÔ#ýxþƒUcꋊxÙ´Îß%{‡¹;'O<« |ç]å“Ñû[…å1Ðvj¨xö‹Hô{EÉÆ¢·TS*8AGùf2eOïgÀ½F¥ÑJ¦Z©+¬ýuÿ¡…ÒÓ@†%óꀘk¤Dé”"6Ç쯋eÀù²•åJ…7ȡޓǼïzWó¨l‹fý¨.w°9°¹oäNí±QB˜+j5ÌVÀϰ¹ó;ÕŒBÒ—[¸:tõ¡jd_OÙüï:˜~4™Äš]Õtµ^F®Qi ácy}§­öµ þby,Ê Ñ»ªº‡þpÍ¡–yµ[]‚ïµ£ðJÖµÚÓÄ÷›æó•ÜCC=€èmÕf¸*Ü Ùª€U‹ébÓí$׫m‹|«†Õþ•…ò((n =jªµ~ä©ååPœ°40ßꮿÖyäSnމ7UÞìþð2îàAz¼“0}ï_V'7ßþþŸ_úíØ†4Å7LàjÝ_@‚ç­I毇zA÷t´Ð3¦uºœa*øná&}€­gÓy¿% “ŸqØ6¥ÉTó×ë.-åq×u²¢P»™°ßLN Ÿ·yZÇo0Šû^êĤåD®/ßÖ=øYSdº8<—Æ}tH©yÖèÊ¢íXN7602]ÅpÞ¿Å”©jìlt…£}žP.ÄÚ’ñ„øÆô<䆠Î_¿w;äß‘ê-RÞŸÕ¯Î/DXÚwÃ4=yU3ò·V]Zº½»:‹Ië¯ÙŒÔN{<ÁûÃæ…÷g=JLÑóɲ\Îg!³­é{&úæ{ư'¥$ÐßLåX%”–m¿èm}øøb,Â¥mÙ`³ þðqLÿÒXµ:äßky¨«\69x÷Y^Wça¡ûÝ*ZËÐožžÌù¨ÑÕwweÞW`¯­ÚǃTñsþ’*%axñ×5Š ê+´?÷i þDˆÄ,µ?j„èŒÚ:zæ~?¡«6þcÒt+ÿ0ù¨?,}Eù+AÕ§L?õ§qð¿¼ýRèçô­$ÁÔ°“ïMõõq#Ësï„L\pÏÿÇM¥L endstream endobj 3893 0 obj << /Type /Page /Contents 3894 0 R /Resources 3892 0 R /MediaBox [0 0 595.276 841.89] /Parent 3845 0 R /Annots [ 3896 0 R 3897 0 R 3898 0 R 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 3911 0 R ] >> endobj 3896 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 154.617 730.816] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3897 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 699.987 154.617 710.891] /Subtype /Link /A << /S /GoTo /D (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) >> >> endobj 3898 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 680.062 155.723 690.966] /Subtype /Link /A << /S /GoTo /D (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) >> >> endobj 3899 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 660.136 155.723 671.04] /Subtype /Link /A << /S /GoTo /D (spx_8h_89a689b848429cfa5780757a5eee9347) >> >> endobj 3900 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 640.211 159.858 651.115] /Subtype /Link /A << /S /GoTo /D (spx_8h_9eb861d7c7437c5f974ad425da8b5664) >> >> endobj 3901 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 620.286 159.858 631.19] /Subtype /Link /A << /S /GoTo /D (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) >> >> endobj 3902 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 600.361 156.281 611.265] /Subtype /Link /A << /S /GoTo /D (spx_8h_f4784a764fd0f36c82548ef755c470bd) >> >> endobj 3903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 580.435 156.281 591.339] /Subtype /Link /A << /S /GoTo /D (spx_8h_772a14e27c613ea7b63697efdb765205) >> >> endobj 3904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 560.51 160.376 571.414] /Subtype /Link /A << /S /GoTo /D (spx_8h_61a1980ff0683231529b784af1c48eaa) >> >> endobj 3905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 540.585 160.625 551.489] /Subtype /Link /A << /S /GoTo /D (spx_8h_b23cb997ad699b59f91f4dfe4e8b28b0) >> >> endobj 3906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 520.659 160.266 531.563] /Subtype /Link /A << /S /GoTo /D (spx_8h_544be13048057701c37a8e9c4f761be2) >> >> endobj 3907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 500.734 160.266 511.638] /Subtype /Link /A << /S /GoTo /D (spx_8h_da5d4cf3e8791d64da68575da692e3f3) >> >> endobj 3908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 480.475 156.142 492.43] /Subtype /Link /A << /S /GoTo /D (spx_8h_8aba8fe47efe098740991771e97fe756) >> >> endobj 3909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 460.55 155.942 472.505] /Subtype /Link /A << /S /GoTo /D (spx_8h_09b951b08ac818b9da44389a3ddf614a) >> >> endobj 3911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 228.855 165.984 239.759] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3895 0 obj << /D [3893 0 R /XYZ 90 757.935 null] >> endobj 374 0 obj << /D [3893 0 R /XYZ 90 289.449 null] >> endobj 3811 0 obj << /D [3893 0 R /XYZ 90 267.137 null] >> endobj 3910 0 obj << /D [3893 0 R /XYZ 90 267.137 null] >> endobj 3812 0 obj << /D [3893 0 R /XYZ 361.529 232.008 null] >> endobj 3912 0 obj << /D [3893 0 R /XYZ 90 215.281 null] >> endobj 3892 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F8 1129 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3915 0 obj << /Length 3052 /Filter /FlateDecode >> stream xÚ¥[[oœÈ~÷¯˜‡ó0#ezûÊ%GÊÅÉÉ*'ñÚÞìêìFžÁ6Ú18Àlâýõ§šî†š†8Š”i ¨úêBUõÅd…áYÅxŠÅL¬v÷'xu wßžýt ·Öó——'?½aðŠ¶º¼i^”¬.÷¬o¶c¼®¾¡»Í– ¼~“R5:OoÒrC¢ušïàÃ8ŠÖ‡›Ï—?Ÿœ^¶b5(Á)ôËÉŸñjà~>ÁˆÅÑê+Œ1"q¼º?á”éñáäâä—–‡ºÏà¾K/Aؼb”!£bZµÓüxŸ–I¹RëròõãƒVòu±!ëäµ¢å@è–rÄxÜqCDóKŸzŒv•–å}u;´H$&ñ*îVI“l-š‘VQŒ0æ« dˆbÚ`1Úåó¡P‚) uII7´#ñ<êÄ‚A.oJùg¿ŸžŸ_]üúêÕéÅÅB£€F^ÅãEqй“¢Çb0NÓXà>üúþýÕÙÇw.Oχ)#ˆˆ•Åy,žFˆ“hB:Ì Ô4—*Ö/^_]œ¾º:ÛDpqþâð¿#‹Bœ!„+KÐ QÆ"À8DŒÎÖ4S€?)ÀcÓb„£îu·má™ *ñc1A,мX ë» ÚWÁ°Ï_- ß5c+KÊŠ¡Aä!bÈi¼Í\çŠ7Ç|×%ž×E›gÒdªámªÉòÞ dšt÷MùúO,ð®È+ýdw—”’ÏOo·¬!Œ1dÔ†éŸ0T4¶CRMPËlØØz‘‰8Ô$Ï6[Ðõ¾8^Ò13&¿{¢i%Z;ØBúveZÕ7å—1Gˆ%ßéÓ8~ݼNþs…(ŽÀ•=®U]w­/¾=”÷c›‡XZ n“o!­¨¬OŠEÐZ«r(e:Œ[v‚(J-všf ¦ ¨Š¾·™Œþ¿7D@¡‚šÊ@KÕ@JªËä ®þ–„I™%׈F—ÿ›o”[Ný6Æ Ó§LÜ@mìŠû‡cVê*9h¹õ†SÀ¨¬@6™cº~8«I)‘}9feºW7öi©”àkKYýjq£~Ódw§F_³ú®ùÒ¶‚€D¶¾0¡ ­¢>кпwº9PÑDyç‚ ûË»E3UÞyî TGvÖDe™Ü§5ž,ñÉÓit¡—( W‡Ð\åEŽÇ±K(â‚F Pp¯U Í“R„ò ‡é²ñ‹•dȘ¸ñ´¼ÓEµ¼kEµ~ã¶ÿEÈ[׊X¾úÌ•©8 C¡u}s~ú‹#îÁgaÐf‰Ž¢ÐäÎoÎ]"D)_ÆáôƒêdžŽá· ¡x =ëOœhbL—ñútþⵓCÒ' 9uòb‚MóÚ²²tõé§ pûxvé4¥‘Z™Ìý¿)dŽƒÑÔb¸¯¢Ûw8XéÓéûîøaVjòUéˆf~1¬^ž^nb Ëé>j'ò]Ré,X¥y•Ù¹Væx4™› *É”âmí,¢éœ¤iæ$ÓuôstÆ¡’"!êg$Š"Azˆ.M°òå¸ÓË?ÚO™î/ ¾½SÃcžÕÕ´Q±ôâœQ;¢i£jš…Fս׳AÇÔƒŸb3/DM3‚س2ÔL˜¿ÛÏSÙç2ÌÖ7%ôi¾“f|T·þøÏ?ŸÕ¾ù-[r…uC±6ü!Íoë;õL_þ*W펅fwÿ¼ÃH ÓA‹P­檭|ï²f“§MS£ëTõ0Yèš;Õ^ôœ$9Õ‘CCÕ]Èa´®îŠ£lÃöêòZSTi­Mg¿ÿ¤e¡Ù¼»Ñ´…TL>LÊ´£’‘ƨ֥yªY¯[®M •Ü "+–áÊŽåJÝÚ%í¬ÅÒòº±R`:¾}cÇX·qp¿Lï“,ß§¥ºlp2,”zòN]¨_­Ãõ@É ¦;è79ŽQ<¬çò5í&!7ÒQ`eÿ§Usû±jnsxZ5wÖ¼-ëÐ¥¶ßúweÈZáTÁ‰Ið=Ŧ\ÄG÷Þ¡™4cv0І¼¡#M]É¿8Öê⯼òõîo «õ«yG2QÀÇV«‹~j@Czº€AáXô"ý}ö—Ì,i#!«RWå– Lâ[¥®›˜éjÂe\žÞÕ|’ä{çt6Ñ|ß*3"'«!ƒzŒ õWC‹h²)í_ ú‹j„HÏU¼ˆ4ÍQ¿Å€™xÓFô:©Ýc4ëÇR·»"¯!¡fù­¶8óá0׎T{Ì,7+ÕÐ3­v,ÞvEÏzi _!Þ‰±E351†ZŒX`:P_"ʧgÅ>±mX åöœ ÃÂÐ4‹ŠuRµéJ "·-{8¦8šKDä|7E²íhÆ`à“!A˦iØ(#i”Ë®É'LQøeÁT<`ÉÂÏe‡w»´ru¦ZË @œÍhÙÒLk©Hæ´ô3Zúdi-;YDkùáßÏPfMkÈ{BåýòVœÛâ5±W~Ÿ¡J*f1±¿"ý©W]Mâ•3(ï=Û>Y^§ú«Hª*ÝO{V`4±‡Óy¶¥™ö¬"™ó¬G˜ñ¬O–öl'‹jϾË7í²Ð!Û»’äƒYpƒ4ê tÆ‘3æhi¦Í¡HæÌáfÌá“¥ÍÑÉbËÍa× Ý ö¸Ûkúh™‹‹Ò΋z›Ø $pfZÁ˽ÜÄ1õ•˜öÁ”$(q‡T#LËÒ»‡l”4×Ye–(ê¶N , è“À¤$B™ùŒ ñ¶£YwÀ°ûŒŸ?˜#ñ éI8TSxE ¨-0»ÑvÉ¥—öÏŒF«²œðf²°H{Cìƒ2`(Á|ÝU ø•ÂÒî „14›ÜgCâßgãlcø/&S:£¯<.aQŽ„YŒ¤ 9QHnÊ/S*Ê]·ÚÌžpÇæ²¤ñÊ2jÛóþÚ‡¬-TÕPûåXJ¹Ra©ø¤Ò!ƒùõ+­iüÂŒÜJ‡̃¥Jkê¹}–ÆÓiž–SJ7Ñ^¥ Wø‘Si ŸCϼLiCí—;`)åJ…}ž¦—ÙÚ«³"ñ‹î³qk(ò…kê±}–ÆÍÖJa>¥9#¬©>Õ Ä‘SyF zs²PyC=#·Ï²ÉÚ–â>·Ã ‰™X74~FnåÁMŒ.Õ]ÏHí1t¸Ýli¸Ë¡ÍùŸö†Æ‹cÈÈ©½<@㥮7Ô3rû,®o”÷¹ŸËó‚Ìû†ÆdÀÈm€ D4XêC=#·Ï²­äRuËSФ { `h¼@†Œœ-´88—ô.¥³wÑ›2>ÐÖ[Ò™<ÔõŒ¶ÍÃÑD#o-SÛPÏÈí³tÅüR÷“Â3¿14Ô€‘Û0ega¸ÔšÚ/wÀÒ K³!m·C¯1 Ô‘» à!L—F†¡ž‘Ûg)åêÂâfœ“ŠƒóæôV$~ñ}6zÑœ…í¢y¿Ç»‚…êj¯ü!KµyWÛ¥Åd ̸„׆Æ&³¸!»8¤òh$ƒÊ®–G³KukWè… ù¤¬²"¯Ô€ÿ5Ms½N4¬í›ahof ÐÆjë~ö»¬~XÇæ„:€T©¡´T†R‰6Û€E#Í)OM\ß%µí õ›ú†ÞIfÇz'FÃo óH5ÇÖ¬ÚøV6š ¹û¬X5‹-fÛàÎâ38W%÷ÍÁæâÅÙ;4ÞÝ™Œ" ë+íb…WoÔßÈ)´|Qw¥/Î~¿zqBÞ^˜ÈkÔèŽ5ŽÞï! ë@MwQo—Xn©+§gXûü_’߉^oº‘AèÚ!”m#!œ§¯1 $xúG4Å>k½ƒ„`ç›ÈJzsTNä’Ú,uöÓõQ»ñ£9òÈÕ‰ŸcúœauE1!FyÚ-óýöêâ½<°òR¿Š"éd9¼~4'œ¿=Þ¦ù¸…bóüòbk‘ endstream endobj 3914 0 obj << /Type /Page /Contents 3915 0 R /Resources 3913 0 R /MediaBox [0 0 595.276 841.89] /Parent 3845 0 R /Annots [ 3919 0 R 3920 0 R 3921 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 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R 3935 0 R ] >> endobj 3919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 263.277 191.558 274.181] /Subtype /Link /A << /S /GoTo /D (structspxprm) >> >> endobj 3920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 215.456 353.706 226.36] /Subtype /Link /A << /S /GoTo /D (structspxprm_b232cb470b7f96330512dea46791644e) >> >> endobj 3921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.959 215.456 480.121 226.36] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 3922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 187.869 129.711 198.773] /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 [133.442 187.869 174.149 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) >> >> endobj 3924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.879 187.869 219.692 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) >> >> endobj 3925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.423 187.869 265.236 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_89a689b848429cfa5780757a5eee9347) >> >> endobj 3926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.967 187.869 314.914 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_9eb861d7c7437c5f974ad425da8b5664) >> >> endobj 3927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [318.645 187.869 364.593 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) >> >> endobj 3928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.323 187.869 413.564 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) >> >> endobj 3929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.294 187.869 462.535 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) >> >> endobj 3930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.265 187.869 511.506 198.773] /Subtype /Link /A << /S /GoTo /D (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) >> >> endobj 3931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 175.914 134.244 186.818] /Subtype /Link /A << /S /GoTo /D (spx_8h_16bc2fef69c592c5bcdc695633f17df0) >> >> endobj 3932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.426 175.914 188.199 186.818] /Subtype /Link /A << /S /GoTo /D (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) >> >> endobj 3933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [192.38 175.914 242.154 186.818] /Subtype /Link /A << /S /GoTo /D (spx_8h_413fa882d2b67a792a35938738214057) >> >> endobj 3934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.335 175.914 288.567 186.818] /Subtype /Link /A << /S /GoTo /D (spx_8h_8aba8fe47efe098740991771e97fe756) >> >> endobj 3935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.579 175.914 352.611 186.818] /Subtype /Link /A << /S /GoTo /D (spx_8h_09b951b08ac818b9da44389a3ddf614a) >> >> endobj 3916 0 obj << /D [3914 0 R /XYZ 90 757.935 null] >> endobj 378 0 obj << /D [3914 0 R /XYZ 90 733.028 null] >> endobj 3813 0 obj << /D [3914 0 R /XYZ 90 714.318 null] >> endobj 3917 0 obj << /D [3914 0 R /XYZ 90 714.318 null] >> endobj 3814 0 obj << /D [3914 0 R /XYZ 107.713 655.149 null] >> endobj 3815 0 obj << /D [3914 0 R /XYZ 107.713 639.209 null] >> endobj 3816 0 obj << /D [3914 0 R /XYZ 107.713 623.269 null] >> endobj 3817 0 obj << /D [3914 0 R /XYZ 107.713 607.329 null] >> endobj 3818 0 obj << /D [3914 0 R /XYZ 107.713 591.388 null] >> endobj 382 0 obj << /D [3914 0 R /XYZ 90 575.603 null] >> endobj 1667 0 obj << /D [3914 0 R /XYZ 90 552.349 null] >> endobj 3918 0 obj << /D [3914 0 R /XYZ 90 552.349 null] >> endobj 3819 0 obj << /D [3914 0 R /XYZ 238.681 155.157 null] >> endobj 3936 0 obj << /D [3914 0 R /XYZ 90 138.43 null] >> endobj 3913 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3939 0 obj << /Length 1593 /Filter /FlateDecode >> stream xÚ½YÑŽÚ8}ç+Ø7Šk;vœÌ[»»­¦Z©³Ãhw¥¶ZQð0H˜:íßï5¾›Ä t¶Õ<À$'>çޝm`} ¬ŸÓ¾’Šä‰ìOW=ÚŸÃÕ·=†wGp{äÝ}×{ù&§Hž&ý»ûýã)#’³þÝìà %ùpÄ(¥ƒíæ+yޏ¤ƒ7‹¥¶ïnõ½.‡,èb —J³lÀh6üt÷®÷ûÝEÉ$5¤½ŸhâÞõ(Iò¬ÿï)ayÞ_õOðý²7îýyÃ^OàzS]‚CM™y““ M˜LÊr¨Ÿf„1ÞX–JE_ñ”°Tì=¸2:˜”“•®t¹½:­QNTÂûÞ¨Ž¹¦Àak˜8J`TŒÀFÃG*¨!~ùFd’! m #±&N¤@¨šÄE!¦&ŠsJ2•¢®çźÔ3s$Í9aŠ5“:'±. ¸ˆ1’é0Ñ$¬ÉE,¾M’…Ô…‚Ñ‚ŠÞïªê"ψè2ñ€‰{h!çX¸­&UMM"ˆLÛÕ äTMà_’)„¯f l»­u¢ÔÕ®,|ó–;\ðïÝìÕ“©Ù ˆLúóZ/õJU}ä9I¡¤¦JÕ¬!£#¦Q»Ê7Ì~Rs.›Ú=ÏZÉ,¢• Z=O™ÏE¯`›ûñn:ÕÛ†¼` 2Ï`•´—é¢u:LG¡­|Xi+–êÓ1¬õºŠC³Æ`¬ïÝÄ2“¯f n½¤°;c­»3ÛIÅI¦¬È[VÁ"¾5k£=ÌÞSÞÀœ¾sÖŒiƒ£$ɲ˜‹y ºnzäq h6¸ ©lç³:Ì´G×9\­œ“\tÕzÅkELW­m|®ÖV:¬Õ£ãmó \k6îœëJ‹)TuBU»Tuãp&D)ФXüûÂÍtìó+Øû‡s¿zÐ~°ï§k°b]ÎŤÒ8]žty@–âê<Ùº»³ÅC«?;áÙ/‘8é‹”b—V¿sŒì¹víR¹Ã- pŽ5¹ßií‹~´W?RIÇ7ÿüûêêy;†™aSaOLRnÏŠµg÷B|IRšâoÝ„V¡¦–²B&Å|·œ é÷¥~ÜÁaÛ@œk¼º‚»)µ[N+TÚî¥u=)tUmØä¦ÇÜ(爸 ²jÑ#ÞÐ7Ã! ³)lz<Ô^[Ð$`Y(£¶¢YL;9,i4ã!¹KïľÀdZ.6Õb]D²üêæŒmJ”´ÃHo%NåÒ  ]ž—&‰VyÏÕ“'±$¹ I-áÙ<¬+g°™(êy"Ëçǽ%EIj&;7E<š"‡¹$EŒXŠZÉ1EùJ‘ôR$OSdRð==)xîù):‰ŠËIØ‹öIQ ½è¢ñ\E³sSäÁ£)r˜KRȈ¥¨•SÿŒ¥±^ô41‹î—â’$Õž­§ Þ©ÿ§%=í¿vr÷Œ½Zì@àê³>®óû¥HÏ\Ý8WpÐ9{uóàñD!æ¢Dù2¢‰j#w‰òÉÆê¦NåÒpYo²TíÙg'*›}fjM ´5n˜¼Duö(&óãé²;Q<š(‡¹$QŒX¢ZÉ1QùÏèQYG2Ÿ¨~FŸ²Ïד•uø¶í™ÍÊž`¦»Ý*L!Ã1¼ßÀK|fÃÊ9I”:7]Gt4\¹$[¾†X´Ú˜1Y>ós‚uòÓ"äUÊÆVJAKå÷ÿè¸ÿ½4…Ï‹åþR[%ðçRd7E½5û¡ãyÕ•r7ÌùÀ}Qö~Š!ö…åW”_%ÔþÇ)cî8‰r&ýýëøóMõk|”d„‡gâßÖ_¿ÍuqêŽ4ß6Ôìù¯’Т endstream endobj 3938 0 obj << /Type /Page /Contents 3939 0 R /Resources 3937 0 R /MediaBox [0 0 595.276 841.89] /Parent 3845 0 R /Annots [ 3942 0 R 3944 0 R 3946 0 R 3948 0 R 3950 0 R 3952 0 R ] >> endobj 3942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 426.441 146.587 437.345] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 358.998 146.587 369.902] /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 291.554 146.587 302.458] /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 224.111 146.587 235.015] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3950 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 156.668 146.587 167.572] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 89.224 146.587 100.128] /Subtype /Link /A << /S /GoTo /D (spx_8h_6ee182e1185978bc6e7f69e4604fe341) >> >> endobj 3940 0 obj << /D [3938 0 R /XYZ 90 757.935 null] >> endobj 3820 0 obj << /D [3938 0 R /XYZ 90 494.881 null] >> endobj 3941 0 obj << /D [3938 0 R /XYZ 90 480.311 null] >> endobj 3821 0 obj << /D [3938 0 R /XYZ 262.352 429.594 null] >> endobj 3943 0 obj << /D [3938 0 R /XYZ 90 412.867 null] >> endobj 3822 0 obj << /D [3938 0 R /XYZ 262.352 362.151 null] >> endobj 3945 0 obj << /D [3938 0 R /XYZ 90 345.424 null] >> endobj 3823 0 obj << /D [3938 0 R /XYZ 262.352 294.708 null] >> endobj 3947 0 obj << /D [3938 0 R /XYZ 90 277.98 null] >> endobj 3846 0 obj << /D [3938 0 R /XYZ 262.352 227.264 null] >> endobj 3949 0 obj << /D [3938 0 R /XYZ 90 210.537 null] >> endobj 3847 0 obj << /D [3938 0 R /XYZ 262.352 159.821 null] >> endobj 3951 0 obj << /D [3938 0 R /XYZ 90 143.094 null] >> endobj 3848 0 obj << /D [3938 0 R /XYZ 262.352 92.377 null] >> endobj 3937 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3955 0 obj << /Length 1440 /Filter /FlateDecode >> stream xÚ½™]oÛ6†ïý+´;¨Y~JTîÚmíZ hÛ€®T…N8v"Ëýúõ;)‹2EYn× v¤Cž—/R‰0ü‘(ÃQ*R”1w3ÝÂÕ—3bï.àö¹ÿüzöôƒV(KXt½jš' J¢ë›·q‚²ù‚`ŒãÝýgôa¾ Ç/ʵ2ß®ÔJUs"cµ)àÃXʘàlþîúõì×ëCZ+J°D'}˜½}‡£÷z†Ëdô ¾cD²,º›qÊì÷õl9ûãЇ¹Îàúиa§F‰h†øapå¦6ú”Ï©ˆ?Î ŽÕÊŒìÁÜù ¼¼üûßgWs¿\¿D²/HŠÊ›nÛCØÓ”vZ˜D©àÐT7Ñ7½5iŠífαîAĪªwæêGÝk^ì÷wV¦N©ÚÀµÚÜÖvvê-|ò,^Uêaó¢¾Ì£FïÂ&wU/•:ž1‚$Ó4JdŠ$IçúFuk#®÷Ûè…ÞÌ€;êã.uf-2_UŽepDFú2ަ¾OÎ%Â’ö“o+cYn>nÔ®¨Êûº„9h.lWÖÒ–÷g—¯`ö‘™Q—®…0Ý/t]Ä>f¬å"oaéó ®‚|ym}¶ )¡g°Õç¤CHûRVüFƒ\Ë”Ij”Š“LQXÇ)›ÌTfÊÆœÅ”+#ÈÔXò–)7ùbŠ»L‘c¦Z5+À”™)¯í÷3Ç+Tv=ÄZåru²V A¡üOŪ‹ReCÎÊÕbj,³EÊÍü(UŠŽí„ßR©Û{dq0˼ž Ñ²f¥L¬a\ Äe26'Ú-ù§&j†\´ƒ“dBÍXÛM³´)CEŸÊÑd&b4|š7¾˜/œ–û¢P;Ÿš G܃91tMñío½šv‰œ2÷tÇ”Û×Z6»ÖúRmT•×êÆ=í”^Ï3·ú¦°+‡›’]`zÁ°ùbbOz+ÍA;Åý¼ü]/Ÿç¶)›ì³„=ü²ýüåVmŽÝÑïå|{þfã”à endstream endobj 3954 0 obj << /Type /Page /Contents 3955 0 R /Resources 3953 0 R /MediaBox [0 0 595.276 841.89] /Parent 3845 0 R /Annots [ 3958 0 R 3960 0 R 3962 0 R 3964 0 R 3966 0 R 3968 0 R 3970 0 R ] >> endobj 3958 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 3960 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 3962 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 3964 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 3966 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 3968 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 3970 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 3956 0 obj << /D [3954 0 R /XYZ 90 757.935 null] >> endobj 3957 0 obj << /D [3954 0 R /XYZ 90 733.028 null] >> endobj 3849 0 obj << /D [3954 0 R /XYZ 262.352 687.817 null] >> endobj 3959 0 obj << /D [3954 0 R /XYZ 90 671.089 null] >> endobj 3850 0 obj << /D [3954 0 R /XYZ 262.352 620.373 null] >> endobj 3961 0 obj << /D [3954 0 R /XYZ 90 603.646 null] >> endobj 3851 0 obj << /D [3954 0 R /XYZ 262.352 552.93 null] >> endobj 3963 0 obj << /D [3954 0 R /XYZ 90 536.203 null] >> endobj 3852 0 obj << /D [3954 0 R /XYZ 262.352 485.486 null] >> endobj 3965 0 obj << /D [3954 0 R /XYZ 90 468.759 null] >> endobj 3853 0 obj << /D [3954 0 R /XYZ 262.352 418.043 null] >> endobj 3967 0 obj << /D [3954 0 R /XYZ 90 401.316 null] >> endobj 3854 0 obj << /D [3954 0 R /XYZ 262.352 350.6 null] >> endobj 3969 0 obj << /D [3954 0 R /XYZ 90 333.872 null] >> endobj 3855 0 obj << /D [3954 0 R /XYZ 262.352 283.156 null] >> endobj 3971 0 obj << /D [3954 0 R /XYZ 90 266.429 null] >> endobj 3953 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3974 0 obj << /Length 1610 /Filter /FlateDecode >> stream xÚÕYÛŽ›H}÷W°oXŠ{û ô¼%»›h¢•’vWJ¢•ƒ™ ’'çò÷)èÂ4—nœÛÃj`àÐuêô¡šj³€Â 4 b-Tî4¸‡«Ï ï®àöʺÿävñëSO‰àö®yd§ŒÃlyi!CF=£+Œ›ÑMv¬fæÓ|ö<€Óûjÿ†8E¤uíïü:Œ[<¹P<ó™;ѨKª½Œ2d4lÔ…f6£¿—Œ1üÊm1š95áZDù5é0NMr¡&ðí_e§ª>ލÅJy©!dH­'Nˆ‘Mm$α*s¨£nuâ˜h:c äÖ1— 4éš:íg…˜«áKÇ¢©ëâáTMu±æý*óÍÛ]v|Ô÷ÖP÷¯Íé©È+ŽƒØs:v ·Žˆ©)ÿ2#bm¯)1y%1êkBKÖcôâTýTan)ŸS±¹UDÌ%*6ýóPÝ$F3„3"4ÜØTRöÍî¥ácûg›—x«Á7wvÙ>+ªñ¢Š[\PBíß—µ@Î}Ù3³/ë‡û²Þp¸/k‡›Ý{kseÆ®þ\;;WÄÌåê‹×æê ׿j…ûñ{Ð,«û· ;ˆësŽiJ¤æï@{‚žßâAÔ©ýg„|ßös]ŤÖþÝG äÜ}l13»Þx¸ûèg¬j‡»tû™I }×\®È+bærõÅksõ†Ã\­p?|û¹!ÂæDé@nQ3'Š/^+Š7Šb…ûßn?~„Æ\©ÉÂ@Af~­û¶ß)›ŸX£¦SÛ¥ úþXâ/¬½ôYVde—T»Áp»Ô> endobj 3977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 550.984 147.554 561.888] /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 [105.88 483.541 147.554 494.445] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 416.097 147.554 427.001] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3975 0 obj << /D [3973 0 R /XYZ 90 757.935 null] >> endobj 3856 0 obj << /D [3973 0 R /XYZ 90 619.424 null] >> endobj 3976 0 obj << /D [3973 0 R /XYZ 90 604.854 null] >> endobj 3857 0 obj << /D [3973 0 R /XYZ 263.318 554.137 null] >> endobj 3978 0 obj << /D [3973 0 R /XYZ 90 537.41 null] >> endobj 3858 0 obj << /D [3973 0 R /XYZ 263.318 486.694 null] >> endobj 3980 0 obj << /D [3973 0 R /XYZ 90 469.967 null] >> endobj 3859 0 obj << /D [3973 0 R /XYZ 263.318 419.25 null] >> endobj 3982 0 obj << /D [3973 0 R /XYZ 90 402.523 null] >> endobj 3860 0 obj << /D [3973 0 R /XYZ 90 112.499 null] >> endobj 3972 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 3986 0 obj << /Length 1254 /Filter /FlateDecode >> stream xÚ͘[oÛ6Çßý)„îE~0˻ľµë´°66¶YP(²l ð%•ä¥É§ß¡HY7K‘Rò™<äùŸÃ%Ãqv<á!Å„î&ØYCëõ„ØÞtÏ*ý“·W F!%™³XåÃ%A‚g±¼u%"x:#c7 î§»h3QÝ«x™§›h%Sâ»Ñ>ÔMJúÜ%„LïŸ'¿-N¾­2Á¤öü}r{‡%(ü<Áˆ)ßy„gŒˆRÎnÂ)³ÏÛÉ|òõ4‡igÐ~.8AØËÑQ†°6:…8¢ÄFï3Ñ¿S‚Ýh{Ðÿƒ)¶ÅôþƒžùûÛû)qo®çð3$̈‡$åùÜs€éÛ+JKQÌGÄ÷`¸¦'ÏgÌ]…‡½Î9Œn”d©iM¢mÅù”qšÅáI4mAÔ!Œ³'Ó˜ŠN°Âãqg~?j- ê4,Ú¯³ Êã˜YAÕhæQÔ\N‚%ò=Ï‘¾‡|â™ÑÉÚZÜT–¦°žUÌóå©f¢9¥ö¼J¢ïVãᔜ¦.‘ ) 6 ›~\!Ìýº€Cbr˜Ë( “ø!‹amò†ÃÊæzcyÿå2Ë\eo&ÌÜ3FÆ5iÀÀs‚hxfÎÖØsÀ)ÎGÄI6uÔ ¸}€:¥pKÚ´š¡´QŒ„1”¶Ò¼›6k3š¶ª”NÚú´U\ž6ÖUî rÆÐÖûó´õ–7¨§n»¼½è«H‚!†ÕPÒ*æ¤6cI«Ié"­W€%­&àò¤ñ&iµƒØ§ÃCÖ î¹ó`휣MžB>&#ÈtJ‚¶FÅçqlû«œÑRÝ:=ìq_",ÄPö*æì6cÙ«Iéb¯W€e¯&àò쉳U–ê§^èšãÏ1§ÄäºÙ)ãjäû[®a(jÄÏÉŠZiÞšµZUJ'j} Ôª.šì+sÏíòÖ‹Ùÿ¯¼%Ñ2ÝÄ«ì\%{ñe>&!mñª˜wâU،ū&¥ ¯^¯š€Ëãå5ñz~U3s>©`\ÑQïk†Ž/N3°hi·±¢>$Fñ¡XUÌ;±*lÆbU“Ò…U¯‹UMÀ…±*NÇ?§ŠºA÷ÅmÎÇCxÜEûL¿‚ÜY†(GŒ«rTÜš©]ûp$Fᥟ &ÊÌÚ2=Ľ¹ôáÇ·(Ivéú/Ç¥Žzœ¿Äûp{\ÂP s¾y SÐ…6oÚúq-ÁƒÌ.Û­=C`û÷ù*lúŽöjÓ<–KØÍ,j.»·©µîwÞ˜R;‡e~Hv-çÒCžð{ã•ðÅ­¤Þ È;oB€r¦oåΦ (ÁJé¼aTêåÔOL)s½vˆÈ ´ØE¾Õîuù;n»½³DW™`ŸÂ†ßåö~LÇ.Ê4¯ØMQ{Y=D$x„ÂÉÉè˜dúþÙ+3½/ˆ¯¿¬Í –>òˆªÞÆ‚*ÛÛX(OB˜ü\Gû( ²hi œÍDž¶£Ý¾„¶Òpó¨w˜¾cØü¢˜Øƒj¥Ÿ¢„þõëüw(eŸ>Ø¡ÈGÔ<Þ?5ïÇÓ:Ú73¬¯“­ÀJzþfk5 endstream endobj 3985 0 obj << /Type /Page /Contents 3986 0 R /Resources 3984 0 R /MediaBox [0 0 595.276 841.89] /Parent 3983 0 R /Annots [ 3989 0 R 3991 0 R 3993 0 R 3995 0 R 3997 0 R 3999 0 R 4001 0 R 4004 0 R ] >> endobj 3989 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 3991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 617.41 147.554 628.314] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 550.156 147.554 561.06] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 482.902 147.554 493.806] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3997 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 415.648 147.554 426.552] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 3999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 348.395 147.554 359.298] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 4001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [105.88 281.141 147.554 292.045] /Subtype /Link /A << /S /GoTo /D (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) >> >> endobj 4004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 111.981 168.754 122.884] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 3987 0 obj << /D [3985 0 R /XYZ 90 757.935 null] >> endobj 3988 0 obj << /D [3985 0 R /XYZ 90 733.028 null] >> endobj 3861 0 obj << /D [3985 0 R /XYZ 263.318 687.817 null] >> endobj 3990 0 obj << /D [3985 0 R /XYZ 90 671.279 null] >> endobj 3862 0 obj << /D [3985 0 R /XYZ 263.318 620.563 null] >> endobj 3992 0 obj << /D [3985 0 R /XYZ 90 604.025 null] >> endobj 3887 0 obj << /D [3985 0 R /XYZ 263.318 553.309 null] >> endobj 3994 0 obj << /D [3985 0 R /XYZ 90 536.772 null] >> endobj 3888 0 obj << /D [3985 0 R /XYZ 263.318 486.055 null] >> endobj 3996 0 obj << /D [3985 0 R /XYZ 90 469.518 null] >> endobj 3889 0 obj << /D [3985 0 R /XYZ 263.318 418.801 null] >> endobj 3998 0 obj << /D [3985 0 R /XYZ 90 402.264 null] >> endobj 3890 0 obj << /D [3985 0 R /XYZ 263.318 351.548 null] >> endobj 4000 0 obj << /D [3985 0 R /XYZ 90 335.01 null] >> endobj 386 0 obj << /D [3985 0 R /XYZ 90 267.756 null] >> endobj 3891 0 obj << /D [3985 0 R /XYZ 90 245.445 null] >> endobj 4002 0 obj << /D [3985 0 R /XYZ 90 245.445 null] >> endobj 1087 0 obj << /D [3985 0 R /XYZ 90 225.917 null] >> endobj 390 0 obj << /D [3985 0 R /XYZ 90 211.537 null] >> endobj 4003 0 obj << /D [3985 0 R /XYZ 90 130.744 null] >> endobj 3984 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4007 0 obj << /Length 2540 /Filter /FlateDecode >> stream xÚµ[mo7þî_!ྫྷ€ˆåûKûà$NÑž“ôl½C޼NØr*Ëhr‡þ÷µ¤ÄåŠÃu£(¬¬žgføpv¸¤Ø„ÂlâèÄ(CœP“ùÍ|„«?°ðí ¾ž%ß??;øî•€»ˆÓbrvµ¹]3¢8›œ]¾k4at:c”Òf}ña*iC~ŸÎ¸¢Í«ÅuÛ}:i¯ÚÕ”Ù¦]Îý%§­lãÓ÷g?m¹ƒgJhÏüÇÁ»÷tr þt@‰pvò'|¦„97¹9\„Ï×§ÿÞÚè® ¸¾/8ÅD=:.ÕjÝËö7Jù²½Ûç*¥D–S¿ÝPp¾£`T)l¸ß³üÆ¹Ê …¸BX"£b’8jª\†ˆ|RÃMÊç/¯>†ïORæ€Å˜{æ<óÙÔ‰æðùñÑ›µU„:…¡áX™f•*z·ø_{{µù´^ÝÏ×95—œhÛ˜¨#q¢oÎ;sâÓêf@k(± 80ªÔD—}·‹w±\û+þÿ¡´ ašO4dU*½Ï¦a†ø¸w4¸„Ñp“Yb`ãŸä þéÍxpG¨ÝrxOÁ¹® Ü^u׿u¨-a6s®¬Ä€Æ]ÉL–Ç…9ˆÌ*,3³ˆÁ)&äŸRn_,=õfD·÷F,˜nÀ0|¢g•Ãà~¹Xß‘âÐI$Ṫ­#Ë8qŠ‹›ö©Ñò1µ—Ø*—8”0¹”°Zæz¬õB‡òg&ƒ¼ËÅy»ZÝÜ}Ì~Êáã°È9Œ^¢rA¢’(åpï"(ó®äštDX† 9μH ïR>¢|@â4åhùîYüi5¦içëö²,}¡ˆ–âqÒgeés(ñŽãÒ˜ªôw¶éc„Qú a]ú)ëécü™É ®ù§)£Í—¢ü±Þ˟п…"«q#(s±ä›„IƒŒTÄùÀ£õŠ5Ò¢úè_Á£ÇX÷TúWVÀèYTÿSÓb«¬”0è?%¬ê¿ÇZ×?ÊŸ™ âºZµmQü†PE>Vûn³CÝ‹ Ì½¢ö% AtT$ˆÌV¥¯QéÃý Z2ë$&ýyˆôËËZÔ-¼ªt=JBÔVàÒ˜ªôw¶éc„Qú a]ú)ëécü™ÉmS½FºÍ ùXé+¨ÅÝ‹ Ì=¤íqÜá£mÑæñe_ %À¡Ú‡hŸmî|ªªòßpéLUú;[ˆô1Â(ý„°.ý”u„ô1þÌdÐÖ][•~9ò‘ ¿uÅ»ʼ«)”o¥|˜ÝðôP˜ò#äÊ—–ÎõSI_jC¸Q¨ô#¦&ýÄVYú(a~JX•~µ.}”?3Äõ™ß!;°‹|lÕ7ÄšŠ{”¹Wlx|“ïðQf_‰o¡} ‚¡Ú‡h_2" ª÷<’["ñµn€T•¿µ„a‹ºß±ÕeŸPŽP=BÞ7Ë=ÿ\Ó|1æ‡J¾ìÛVñ=ßj‚Gã›é " ún8B¢wx’*x’~½[;ûö~„¡Dð®]_yR4Μ™Üm¥ÈÌp9lÀà”~LJŠ~v»óÝð_\_ßΟÅmûpñu¸0‡á^§ßI×üëÝtÆ´iÞÌþ“'Q®Æf/¢ÑPr“åsBP"-ž½ˆP2™P‚þɳGÅötÃî‰@œgÀ)ì\ ÷«Sæ¾¾ÉO ”ÖÒ­=®.î¯×Ɉú»]u®â‡=‡U8èÕP×÷é:4ê_n9D¤D7ÊéšE N©±Jö(»×a|sFî©^;pF7/ïÑj0Õj¸³…TCŒ0VÄ«†)߈jˆ1g&ƒnÚá²MS9ƒ08¥†åqlùôsP"`GÆи™IDþ zl£Ñ˜#f@™Ö0¿ZzÅüÈÆœ‚¿x’(Õ°ñîÎÿ¸_toPBµºø0å´¹¿¾å ds»ú2Uª)Îjf%,-ÔS½Ig†Áó ?1µiØ*Ok”0Lë”™Ö=¾ú´F™3“ýC3ÃFGa,pÀà´J«]?Ã¥F'ékJgÑÐøŽËKD£æ&±ã³b8(ƒ´bÿPô¦¾ÕÑ<'#¦þÝjŽww0%ü!œqé‰h4=¹I¤»ÓðpfMOÄ éZÁÓ@><=—wk´8‚{DmÜÞ_,»óâöÓ—n¨VS©šÛûõbÙŽhíüzЫ1ñySß1Ï2ƒˆº!ã,’¥Y„ |КÓ]¥§ó¯þ…bOVýÁŸJíß ª•?ÚAê~™*Vý-VówL#*~™³g.9"6,õ0ÝŒÄ" ŒMYèÌešÌrÿf5¡¾ü 4`1êž9¬sƒ6C$ΈÈÈz¥›ùM9Ñ‹³T™øÈž™Çý"1P,LÒ­;ǯ4ý (t²=‘V»Cãe&±ŠÄ`•ï°Í"¥ä)ö(kUÉgžj©éQ?Ü µº´³T.L[¨L RšR²zmÂhûw§ø†Åɯ’Ð(;Êæ_GÀ3"M)T§z·éÏ413.ìÆÉ "Ò‚ɰ¸#$çëU+áϼó~à_¹ÄÙ*GÔþÆŽ‚)¦Õ×ÿ~²û‘ƒ%&yYýL5xît›äÝ»øC»ô[äíeø]ײû{æ7oîC—õ6þèIv˜ûžòïíþÅ)c¡üM9´g¡þúâôxÊšŸ‡[‰%¼ûø!ts/o?ùØ.óìø_xÓó7gŸ endstream endobj 4006 0 obj << /Type /Page /Contents 4007 0 R /Resources 4005 0 R /MediaBox [0 0 595.276 841.89] /Parent 3983 0 R /Annots [ 4010 0 R 4011 0 R 4012 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 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4034 0 R 4035 0 R 4037 0 R 4038 0 R 4039 0 R 4040 0 R 4041 0 R 4042 0 R 4043 0 R 4044 0 R 4045 0 R 4046 0 R 4047 0 R 4048 0 R 4049 0 R 4050 0 R ] >> endobj 4010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 697.247 186.089 708.151] /Subtype /Link /A << /S /GoTo /D (tab_8h_9c80120944556169d230d4cd051d88cb) >> >> endobj 4011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.64 697.247 271.857 708.151] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 682.627 195.082 692.532] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 658.393 203.065 669.297] /Subtype /Link /A << /S /GoTo /D (tab_8h_8b57d9bacbabd2b516d77220cdb6167d) >> >> endobj 4014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.563 658.393 250.377 669.297] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 619.539 206.831 630.443] /Subtype /Link /A << /S /GoTo /D (tab_8h_27460f165fb03a075a1c6c6a48f33c62) >> >> endobj 4016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.329 619.539 254.143 630.443] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 580.684 208.026 591.588] /Subtype /Link /A << /S /GoTo /D (tab_8h_bf96fe5488df6796ec2606b974f330fe) >> >> endobj 4018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.525 580.684 255.339 591.588] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 541.83 203.613 552.734] /Subtype /Link /A << /S /GoTo /D (tab_8h_e2ee098afabb7a7d225f930276ffb441) >> >> endobj 4020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.111 541.83 250.925 552.734] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 502.976 203.613 513.88] /Subtype /Link /A << /S /GoTo /D (tab_8h_4abf39ca4cfc2ea073bffdbb98caa46d) >> >> endobj 4022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.111 502.976 250.925 513.88] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 464.122 206.383 475.025] /Subtype /Link /A << /S /GoTo /D (tab_8h_141c3365f0364c01237aeeb93ddb717e) >> >> endobj 4024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.881 464.122 253.695 475.025] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 425.267 206.383 436.171] /Subtype /Link /A << /S /GoTo /D (tab_8h_49872082d67e357c5c68a633824133ae) >> >> endobj 4026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.881 425.267 253.695 436.171] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 344.505 212.47 355.409] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed) >> >> endobj 4029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 329.282 202.448 339.468] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed42a664a8df3b0a485f49eb0e7c8108cd) >> >> endobj 4030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.579 329.282 339.532 339.468] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2eda0705873598b9fa5bf3b9afbc598a6bc) >> >> endobj 4031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.664 329.282 447.198 339.468] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed1e503c059ddfe8f4aca37d335f7271f8) >> >> endobj 4032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.329 329.282 513.996 339.468] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b) >> >> endobj 4033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 317.327 181.616 327.513] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b) >> >> endobj 4034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 301.043 192.117 311.573] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2edc6f6b4c9eca2bd36b0bf2f89309f9297) >> >> endobj 4035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.687 301.043 318.124 311.573] /Subtype /Link /A << /S /GoTo /D (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed9d77712eeed3ab7d2bf25e5251c9451b) >> >> endobj 4037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 245.809 151.608 256.713] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.262 245.809 331.478 256.713] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 231.189 254.609 241.094] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 206.955 161.013 217.859] /Subtype /Link /A << /S /GoTo /D (tab_8h_e403ff0b740916989c7386728df001c8) >> >> endobj 4041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.456 206.955 219.672 217.859] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 168.101 155.374 179.005] /Subtype /Link /A << /S /GoTo /D (tab_8h_87b3a2a84bab396a528af8382ce9ad04) >> >> endobj 4043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.698 168.101 274.915 179.005] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.793 168.101 364.009 179.005] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.898 153.48 230.794 163.385] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 129.247 156.57 140.15] /Subtype /Link /A << /S /GoTo /D (tab_8h_0f3501cc592c78e0f2cb9922466589f2) >> >> endobj 4047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.013 129.247 215.229 140.15] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 114.626 222.976 124.531] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 90.392 152.156 101.296] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 4050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.121 90.392 234.337 101.296] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4008 0 obj << /D [4006 0 R /XYZ 90 757.935 null] >> endobj 4009 0 obj << /D [4006 0 R /XYZ 90 716.221 null] >> endobj 4027 0 obj << /D [4006 0 R /XYZ 90 363.479 null] >> endobj 4036 0 obj << /D [4006 0 R /XYZ 90 264.783 null] >> endobj 4005 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4065 0 obj << /Length 3190 /Filter /FlateDecode >> stream xÚ½ZÛŽä¶}Ÿ¯h /jØM‹¤¨ËæÉëõ:6 'ñâ‡Í"Ш93ÂvKmI½3“¯O/uc·wá`€i‰*Õa‘U‡Å¢è&„?ºÉÂM"’q±)Ž7áæZ¸¡æéïœç¯oo¾yËá-’Å|s{¯^)Œnn÷Ðp»£a]~·Â€}9 ÖèËŠ`wÞÉî|ú,ú–ÍÆÝõ°—ööm¢Ð3}<$IÆ}#µ³2~Dœ+¡ y»â„.ð'qW’8‹üÜed.r× ËÃ]>@Ë] »\¼+¸Ë‡|=ö´¥aP7‡½’‰{™¢íòξïåÓ²B°àóùtP°Ê§FD¥ƒå³<ìºz÷„½7ô ²òªB=æ]YWëL‘1ög ÃÔ‹ù ÆÈ\$˜A—‡`|€–`@Á¸xWŒy¢Ò&Gìy`|¶Z‚ñ‚q‡ö2Á\gpO0>ü‰Ê+Æcñ@0È%‚™ü&˜1‰,Íó ü²4û‚¬ŒÁ1úm›1e’Ì Ùæ“ŒÈb¿ ÅÞ_ª ˆ8"Lètê_ØÙ¼)sïv¡$ "Jš­–ó|•°¬Ì%Âòaõ„å4„å‚óYÏ+óF»·'T$Æ¿mŒº Uuo=Ü´¿£•&´þ#›æØ>ÌC>$\¤Þñ±2^Xä…4Oˆ UWdàqŸQ |qP°=VDmw ªÏ­Ýïð$€íOSéû£lÛ)ãÿÉv=~€Û²è JLŽ‚¥ŠRŽ,[‚#ÔáÞÈ./Òdod[4å "诚+„àñHOÄí£lòx&‚öxð lóZÝPO@§™o»GxjdOycZë{üÔ^P5¼ýñönúí»wº 8³ÚçÍÞJææÝ½Ìë ‘A#åw[çDŽjPd_V0 A'[ äˆƒ8‘j*Ð"JI&„ =-Û¡,Œ ^åÔ{ !Ç*5dpû©Ì€þ9ÔõGµûÅ·‘£ˆª`â`!™¾Œ•軣ìë½…¬õïyxn-”Þ;ÃEQO¸§~èa“±¡_¤.šÓྩx¥Ö)Ù径‡úÙ H ÌÞÅŒ#×—˜{…ãºá®ú9Î5þ–ÇüAj1XipHÔjOí¸8ââsX}–¬øTbe˜fYðI©hÚ\3×ãã8ãS5kxq—«aÄKìÍÒÅ ¤a°*Lbq©†d¥wŽøœÁ&*=y’ ËÄ|JšFÆ)aI<‚4y¡€§Ç²xÔck ÄÕšÑ:ôEY9³‡r•”{;~Ê ñB…-^€?BtKª74ÉẢ»áÎÛ­Št&úþàu/÷ýPë£;ÊãL®¾1ÁÏ¢àxnÍ»wVŸ´ /F”Z0¡À¥x)—Rí5Z@ƒ©~¡ÝFáC§°cr¯{íŠú\¿ÔÃÜèZWk2?eˆ?i–CùQ­ú.×?ßA'¾úÊ,ù‡¼5‹‰Žjóâ“b8•¨ÖúWVE~j!ê3à|žB¢Ìè/Ɯȑœy“£ÈønY•ø‹,Í0!OW,-âÅœ¨Aܯç›8X‰Rq¥•VÚ;Qiì'\µ7†\ ò¯ÁFÆ=Q´lrœš\m²‘¾€;ViL.Nè¥/kf³BhS¯ÙVÆ ?U¤Í÷N,ñé™ÉÒuö[i&*ý÷”«Æã™£ð;¹•ñcLJ…c7×i†ˆƒSSãÊö©ÜëäÌ$ð{Ì+½„b›Î«&=ä %4»ÖO¬´·¯S•ëËÏ2ÑÔ;§…‰Ê!º^½Âú[>/€E˜Î¹˜æFÆ =U„Ћ¹> b&×äúƒäb®o'¤«¬ ;Û8JÆÐ³ò”–ñ¢R&åéz!û£줩¸ÒT+íGž¨NmVN"c¾è3ÚÈø¡“„PÁFÐNÑläùª¦ZF•\ÄqëlË&¶hï_ôò>.îR =Zñ‹âÜäÅ˫ŢŸÔGº¿@Xò82ÚX‡{â˜e«Ÿ<”¸êºL¥›TÉet¥ZrgJbØ¢ŠZ¤5Bv7­ïpJ ?(9Ó‘^eQëMKS>¶X†Y8=Gïà¥~­[ûtŠBþG§`Þv•ìΞ“ÓHÝz2‰U Ä0^( Œ0ÆVŒ ÝA,ÍaDä¦*Iã̃™Sþ©°g5ç v>¦,gJꮫZª}‹T7H¢Æ;tÇÓ ˆb‰J)Ãs•ȸ^ì:[v]@SgxÆüз®œ¥Á–$+@ÕÚ©'Y C—©°öÏ}šÁbƒs›Å4¦‹§EFÆŠ EoäI]¨(Ÿ9_9 Ý8J—>&IÜœ:½œ˜2’àÞÛ1uá„c+£Ö®ýÞÎgÿyá]^|4\±ï7¼@-]yWÔyÑË6Áà³ .Î`“ñ¸¯×šŒ´·ïS•þ3TÞ›±Ô7ñ;+ã…å4†½D6‚Ý—Àö:!×e\ol¨µÌ÷KI¦Èˆ‹_ˆ…Gõ÷ÜŸ÷¾þ–(ãw°$ƒà2htìþ²’΂c׬[ü4àlâìï–;"ýC³W!{ÅC}ÇBJË íÖm Óú¼ãÇ׿U’b»Lñ¦~~yÕ¼ÂÆçcü@b endstream endobj 4064 0 obj << /Type /Page /Contents 4065 0 R /Resources 4063 0 R /MediaBox [0 0 595.276 841.89] /Parent 3983 0 R /Annots [ 4067 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R 4074 0 R 4076 0 R 4077 0 R 4078 0 R 4079 0 R 4080 0 R 4081 0 R 4082 0 R 4083 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4091 0 R 4093 0 R 4094 0 R ] >> endobj 4067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 720.235 230.301 730.141] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.133 152.156 707.037] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.599 696.133 210.816 707.037] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 681.643 231.79 691.548] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.541 154.926 668.445] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 4072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 657.541 213.585 668.445] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 618.948 154.926 629.852] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 4074 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.369 618.948 213.585 629.852] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 538.566 211.354 549.47] /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 [221.075 420.503 251.292 431.407] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 378.968 120.326 389.872] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4079 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.389 378.968 164.116 389.872] /Subtype /Link /A << /S /GoTo /D (tab_8h_e403ff0b740916989c7386728df001c8) >> >> endobj 4080 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.179 378.968 202.267 389.872] /Subtype /Link /A << /S /GoTo /D (tab_8h_87b3a2a84bab396a528af8382ce9ad04) >> >> endobj 4081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.266 378.968 258.55 389.872] /Subtype /Link /A << /S /GoTo /D (tab_8h_0f3501cc592c78e0f2cb9922466589f2) >> >> endobj 4082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.198 378.968 400.415 389.872] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [479.635 378.968 511.506 389.872] /Subtype /Link /A << /S /GoTo /D (tab_8h_6b3768349e9a5e925aab24effddc584f) >> >> endobj 4084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.001 349.388 186.871 360.292] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [334.577 349.388 364.794 360.292] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.417 337.433 368.287 348.337] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.816 325.478 245.515 336.382] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 307.854 123.643 318.758] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 4089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.018 307.854 175.658 318.758] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 4091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 174.644 164.32 185.548] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 117.842 138.508 128.721] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000024) >> >> endobj 4094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 97.753 314.924 128.721] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4066 0 obj << /D [4064 0 R /XYZ 90 757.935 null] >> endobj 4075 0 obj << /D [4064 0 R /XYZ 90 557.409 null] >> endobj 394 0 obj << /D [4064 0 R /XYZ 90 501.495 null] >> endobj 398 0 obj << /D [4064 0 R /XYZ 90 235.238 null] >> endobj 4051 0 obj << /D [4064 0 R /XYZ 90 212.927 null] >> endobj 4090 0 obj << /D [4064 0 R /XYZ 90 212.927 null] >> endobj 952 0 obj << /D [4064 0 R /XYZ 359.865 177.797 null] >> endobj 4092 0 obj << /D [4064 0 R /XYZ 90 161.188 null] >> endobj 954 0 obj << /D [4064 0 R /XYZ 90 89.441 null] >> endobj 4063 0 obj << /Font << /F31 604 0 R /F42 818 0 R /F22 597 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4097 0 obj << /Length 1216 /Filter /FlateDecode >> stream xÚµ˜moÚHÇßó),Ý[:ïíì“wó.´j•4= êzUDÀÉ¡K D ß¾c¼Žc/&!âf=Ìügæ·ck! øÀÐ ‘ 1\£û nqõcìÝoÇÎý“AçÿEŒâÁàfýwD2ã¡"@£(¥árx ’£˜I~˜Ü¥ùU/½Içè0޲%£´Dôsð¹Ó¼Ä¶Ê$WYäÿ;?~Ò`Œ ?w(áFOxM Üwãöú®Óïüùâ#_ç¸^—œ¾;;Æ Uò%;·þ6Nÿ¡”Mm^˜ðèau•Îç÷„‹Û—Õõþ®ä§%¡`•¢$«ȉÑ2”#mw²Õù­½ÝsRцP*‚XôF“Úl¬Ma’et–>ä­ —鸪8– pœnÕ ’$&ˆ]• Œ$œ¡¸2Õµ8ÆJq@’`? ›LÝñxŒ¢Öe¼™Íó‹ëáè¿§h8œùÒhvÿ0\N®'wX÷Ér)þžßz\¤Õ¤˜2ØÆd³îu-¬½Ú«.3íÍ}ç€}eÚ×ø¸°ñ†å ˆpÊÂŽ'ót´¼[åéOg“áSþc2],Óá˜dz6ÁˆË=ÅÜ`§À…]4Â~“““îM¼4ŠÈzœâU[â³*`>â­ÉÄ—NýÄ+?ñNªÄ6ïNüFÝwïÓ^uÙŽxOãKâ}a âݰ'^6ÿ0_î;æÅëIzÅx—½öÁ^˜´‡Ýqú¦ñî¤Ú »µyØÝº·€Ý£½ê²%ìÍw`÷„}Ý {pØU#ì‹tØGŸ`»øJ—ì…I{اo‚ÝIµöÂæÝaߨûnØ}Ú«.ÛÁîi| »/l»öà°'°?³ÅÞ°s‘ZOÒ+`ç ½1ヽ0i»ãôM°;©6Â^ؼ;ìuß »O{Õe;Ø=/a÷…-`wÃvÝ<ÙÙóÞ°3…yê-†iN´–>Ö “ö¬;NßÄz™i#êÖäÝIw‹¾tðŠÃv˜7·¼¤Ü³€Ü‰ùVÆhæœÄç0Ýéã}:ÇòΦ¹³A”ˆpõ`‰?›aÍGh2]æ6Óˆ™ \Çë0E‡Õ}q•¢—l½~€R„‰z´¬IìØ4aZfò—÷"­Ùüh‹y kMÔf°«á…vÈÎFFßÚdñ‘”áñI·×»ê;=íöû[œR|—ÒÊ›¼Iˆ¸çA€Ä¿õ@¦ý ­MEá—oççW_/?}t{[2œ„êÀq¿­ibeuê:¹ÂŽúeæ&•Ý‹Ë^6Êþ®+¥Ä–®ë*©³ËV %Ú0¿DkSÑx’íÊ㳫¯‘ÆïÞñÅvÛÆ’À ²­4F¶ì;•8ŸwimÔþµµE´&œBàø®Û˜R™v5”(™x%Z“…ß#áeïül«œ€[DCPF¨¡37ÉF ÐÚ™LQ(ùú£òõQ¿Òø€Ûx U¸-„= —†H™¿®|L§Ùl*ž}åä5,|´ƒ÷r´Ì/Dþ戲#Nó_ŒØgV¡âáùý´Ž“öÓ‰ý+Ñ„ÙÇꪘçÏ«ÛtZ-£\¥­:åùþŽˆ­ endstream endobj 4096 0 obj << /Type /Page /Contents 4097 0 R /Resources 4095 0 R /MediaBox [0 0 595.276 841.89] /Parent 3983 0 R /Annots [ 4100 0 R 4101 0 R 4103 0 R 4104 0 R 4106 0 R 4107 0 R 4109 0 R 4110 0 R 4112 0 R 4113 0 R 4115 0 R 4116 0 R ] >> endobj 4100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 696.588 138.508 707.467] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000025) >> >> endobj 4101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 676.499 314.924 707.467] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 613.444 138.508 624.323] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000026) >> >> endobj 4104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 593.354 314.924 624.323] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 530.299 138.508 541.179] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000027) >> >> endobj 4107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 510.21 314.924 541.179] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4109 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 447.155 138.508 458.034] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000028) >> >> endobj 4110 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 427.065 314.924 458.034] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4112 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 364.011 138.508 374.89] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000029) >> >> endobj 4113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 343.921 314.924 374.89] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 280.866 138.508 291.745] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000030) >> >> endobj 4116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 260.777 314.924 291.745] /Subtype /Link /A << /S /GoTo /D (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) >> >> endobj 4098 0 obj << /D [4096 0 R /XYZ 90 757.935 null] >> endobj 4099 0 obj << /D [4096 0 R /XYZ 90 733.028 null] >> endobj 955 0 obj << /D [4096 0 R /XYZ 90 669.589 null] >> endobj 4102 0 obj << /D [4096 0 R /XYZ 90 655.388 null] >> endobj 956 0 obj << /D [4096 0 R /XYZ 90 586.444 null] >> endobj 4105 0 obj << /D [4096 0 R /XYZ 90 572.244 null] >> endobj 957 0 obj << /D [4096 0 R /XYZ 90 503.3 null] >> endobj 4108 0 obj << /D [4096 0 R /XYZ 90 489.1 null] >> endobj 958 0 obj << /D [4096 0 R /XYZ 90 420.155 null] >> endobj 4111 0 obj << /D [4096 0 R /XYZ 90 405.955 null] >> endobj 959 0 obj << /D [4096 0 R /XYZ 90 337.011 null] >> endobj 4114 0 obj << /D [4096 0 R /XYZ 90 322.811 null] >> endobj 402 0 obj << /D [4096 0 R /XYZ 90 247.573 null] >> endobj 4052 0 obj << /D [4096 0 R /XYZ 90 223.358 null] >> endobj 4117 0 obj << /D [4096 0 R /XYZ 90 223.358 null] >> endobj 4053 0 obj << /D [4096 0 R /XYZ 107.713 166.245 null] >> endobj 4054 0 obj << /D [4096 0 R /XYZ 107.713 151.128 null] >> endobj 4055 0 obj << /D [4096 0 R /XYZ 107.713 136.01 null] >> endobj 4056 0 obj << /D [4096 0 R /XYZ 107.713 120.892 null] >> endobj 4057 0 obj << /D [4096 0 R /XYZ 107.713 105.775 null] >> endobj 4058 0 obj << /D [4096 0 R /XYZ 107.713 90.657 null] >> endobj 4095 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4120 0 obj << /Length 3436 /Filter /FlateDecode >> stream xÚÝ[KÛF¾Ï¯Ða`uúÅ×,°ÀfcŽã8kvޱàHœ!9KJq&¿>U]Õd“©‰ƒ½,æ f³XU]¯«šµð§™\$Q"2-6‡+¹¸‡Ùo¯ß]Ãíupÿ뛫¯^xJd±YÜܹÇc%"­7ÛËX(¹Z+)åò˜ß®¬\ЇÕZGrùj·/hô¾¸+ê•J—E¹Á©,NíR©hõéæ»«—7­lÖ,21JþïÕÇOr± ¿»’Âdéâ3Œ¥PY¶8\Ymx¼¿úpõϖ͘?·¸H™Ë«ÓFÈ8jW',¯ïÕ©ÜwUI‹ú¦ÚœEyÌ+µÄYX Yk+ŒÍ‚§…âçwå‘CíÊ’‘ÄðôW¯lÚi¢¤–!«|¿¯6Dª«`¤#¦y±ZG,fÄMƒÇRÏìí˜Q*Ò(éóÙTeà Ÿeic¡UÌϼ³ŒEl½jÁq²üĬ›c}Ú€Ù:{<Öâ lÇ!IDb-³øIJ3V"6ÑLñ7¶‰Ñ-H9?­Ôðd¶X«DÄÚúçÑ-Ž…Öí¬ÈÚ…¢¿p´&·äÇ¢¡ËCq¨ê'›å]U3M]çOL°+ynú:²Î\qª„Ì4/Þ¨ï™â}Æžz»Pî©=`ÉKdK÷„§Z¤qÚ>ÈO3/2„NMO¤óõ‘—]niÐdžÌlmw[Ôl§êŽ~‘…\Žýn‹»•’Ëü´ç¿¬t OE#ưV)ºüÇï_þýÃË„C²üá¢×ÍËëq$±Æp(å—•Š–øz`J•I‘BFƱÌ5ïGO½ÈGF²œñ#Àìé ú‘ifEj­…Rº'Ò{MÕà ,›f!3ýlf×××ÌOÉŽ¡V€ê=õÞŽlŠzüŽÂgkßÈÒ_ÔÅ”LK5~ë¦ï¾«Ûø¸½©Ö¼Ýh)2Hž¶0(ŒŠhwàa¹¥ñþ¹CcíÊ-á¾1œ!„s‘¹N%’1…JÀèÍÇO^ ‹£bGiø»Åòë°+™€×!Ø)ÄuÇ©M®wÕ©eO¬¨¼‘à–ôRUá©×ù8,§« E§Î’¾ðaê2ͼÈL‰šœPd»«CÁ]]‚ö© Ø‹ö’ Õ©äÎŽú³dyÀŸë8¤­˜´«ôàŠª8buØ}ƾ;ží(øáš˜X°§=/mªÇo`k«&+A\­1ÙÂf$:»xä@Ôë€ü¬C–óG<Ô~æÈifE⑃XEö*Á `_÷ Aôâ‚~1/ÜézCq»¨2.Ó`ð†~Ü™«(œ${Èóí¶¦>hœÛ•¯è—…ÜÅ©¬å ZR=†Wy3`Ð@çD£âãà®Ø°Zž´Á›ªž<¸H¿†QªKŠq‚KŸØ\/_ã^î!o×Ð}.a®ä'ÚÂw/*µ¥FÉ^áT8*Ù!p‹y4ß ¬êÞªbŽò^Ó^¹ÈUgF4´×Iœ,l”Aeqé”ÍS¯ò3ñ×g9ò46°«õ„CžiæEF±P°û‡"}ȯ#å£a»«û‚kn µ!½?ã¢ÐÆë`›qÓt¸‚wn™Ð%N4Å#tóÇbÿD †UQ½Xt·±,„àÐì£v"T(j™$5—à‡©×ù~,Ù y{’2‚¡ÐC÷•ÁÑÌŠ2BÑ“E¯5ôLç‹Þ€h²èõ4(í/*^~ËÑÓÇ`á–ÍëÃ4#}ú5ofO›U ¹tЮCû–— DÆ!§÷a8÷Ø Aô¦±^þPaR;rh¾_àÙ,hàd}á™Uôê¹kGnìðÆðibƒ¯þ”Ðúb2õ: bÀ²Cƒëk>È*‘¤°e¦}%†>`šyÑ)l„YÚÝž·' åq’r'T‰à/’âÏx<áî€ßÜ”ÃüdxFŸp½‚„#IwVN v–†‰×îpg_ä?3ÓCΘgfü€ý”ÞÎ`ÃýæîèÛü­?,«‹|Ûž‚e{ø›Š×³~ê°ÓÄ©«Úç;š©ÃN“Bé%Nñ÷ÅñT#––Ó'sbÛôÊí¹šÓßÓ àÇüxjü)5(ÁÖhKÇ3ê0—È@ÌNDÓ¬¢3AíZÜ1rݘÖÑ8ß,”×óòˆä‚8ʱPœ¼¦ZáÃi³q'OSk5™+˜ç×ÚM¯•i.­uNž_ë¬8^k NñZà¿~&E =tOîLFÔó* XÎõaÐ6Í.šiæEb‘f=‘|NLJvyýí´—Á²V_ŠèŽhÚËLsÉËsò¼—gű—qš½ü6xÀ¥tû) dïös¦™HÕ¥€ïˆ¦MÁ4—L1'Ï›bV›"gدý»R´Ývâ2¬'èl¶…=r$tBÆ}…í_œZ6gެbØuý»¸¿Ï–”ÚWWÊ¿À¡Ÿmqt~¡«¢®½° V$km¹üëÚº†¯kd »y´Ð™‘.½®aêu@>~]3`Ö( éHØ?¥û ßç2ͼ\ÀëÈ$=¹~o/ʺïí oQçf±}Ïô3íà©gõ²D}>o0ÁH©¦Á&‰¸`&™—ßgÓv ƒÏOLJ¬L*4'¦Ï|vÀ·1þû°îã—lò[)M$ÿ“¥ð•7DÛðc)Ôq”LÆŠ4Êξø>æ?#Ðù×<›ª<ÖÕ¾ÿ2âЃI|Ùã\qøÔ‚ùwåõ¾?MÁ]ÐèiðG"/5 žzcÀræý):‰û‡¡Ç4³"-‚!ÔÜ¡ÈàÔìL­¬2èAæ¿ èH¦*e­Rùû®g~0–;]38×13ÉŸl˜gŒÑöËeδË.£n™^vö»åvwsÇ}~ƒ;ç+üP5IæÕÑLyKáçk|¤úœ¾fNlç£Üs}§ùs}² r²ÍâÒ' š,}<Í…ÒgV—>óâ¨ô Å=·¯Q:êÂJ=Éô:Å¥UNKòkœÄ+l=§— $^îdf„÷Ø]îbfê{˜aÜÁtÂþHÿ¢ 2±Ù¥È툦=Ê4—|:'Ï{uVû5÷ýËÿI©¨®µ~n¥ÞQOêLòÌ:=?U¦Ï å*=ú‡‹ôgY ­Ñg”0ü£úŒ)|>'¼Çäì~&P>GÑÙR@+|MóÅÿ’âþ¥&NÝ·uÁ6Ý~%ÑIGå¾-Ê¢îJ^Ÿc7«L/ýGSï6½–~Tv-õµ‘t¥¥R>1u—tÿþLJï¡âxý5?*Rì<²ú›ê×§ûb”‘ûshžß)o endstream endobj 4119 0 obj << /Type /Page /Contents 4120 0 R /Resources 4118 0 R /MediaBox [0 0 595.276 841.89] /Parent 3983 0 R /Annots [ 4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R ] >> endobj 4123 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.648 677.939 283.865 688.952] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.829 660.314 220.045 671.328] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.163 648.359 374.379 659.263] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.723 596.041 403.94 625.107] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4127 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.077 505.731 190.293 516.635] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4128 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.343 493.776 220.559 504.68] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.771 456.585 253.988 467.489] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.179 444.63 218.049 455.534] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 418.07 179.334 428.974] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 335.875 189.895 346.779] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 291.392 352.042 302.296] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 291.392 478.457 302.296] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [383.556 235.55 413.773 246.564] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 124.947 189.895 135.851] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 95.069 352.042 105.973] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 95.069 478.457 105.973] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4121 0 obj << /D [4119 0 R /XYZ 90 757.935 null] >> endobj 406 0 obj << /D [4119 0 R /XYZ 90 733.028 null] >> endobj 1783 0 obj << /D [4119 0 R /XYZ 90 716.221 null] >> endobj 4122 0 obj << /D [4119 0 R /XYZ 90 716.221 null] >> endobj 4059 0 obj << /D [4119 0 R /XYZ 90 285.764 null] >> endobj 4135 0 obj << /D [4119 0 R /XYZ 90 271.795 null] >> endobj 4060 0 obj << /D [4119 0 R /XYZ 90 89.441 null] >> endobj 4118 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F8 1129 0 R /F11 1069 0 R /F7 1132 0 R /F10 1536 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4142 0 obj << /Length 2969 /Filter /FlateDecode >> stream xÚ­Zmã¶þ¾¿Â úÁÎ ßô¶ 4é]pA’Kïè‡$(´6½+Ä–I¾Ëæ×wH-êò5Å~XY~<ÏÌ3œ‰­(ü±UFWI”LD«Ý鎮žàî7w ¿ÝÂ×[ïû¯î¾|#àW$‹Åêá`~3q¶zØÿ´Ž £›-£”®Ûüq#éš!ƒ+î0¯6ÛhvUÙ QÓÖ—]Gz®OV“žÎ’Ð$F?S*ƪ$D& ¦©'4á’d4îkr }œ)³Ï¡ß7í$½ˆ:1ÓÕVDœ¤\®¶,!1üGÚûF瞈”$)ïDP#”ÖûJ5ú*^çxC©³½±«ÎF×/ö~u°w« [—j¸C9Iœ®XY)™Ýbú~ý„€÷ÞfCðÖC›ýÖS¹/­C?÷˜#½<²O=ØÝf„ݯ×˧ì–9Z·ú©¬Úg[ˆèWúN²¾4E ^yª&"Fhv£STq R”ÅuM‡¤¥<è„„yS—QŸ¸²n1á›·Ê:ç¤NU;æPÕöfÑ‚wÜ.«ëü¥±[˜gVì–1’E6±z›ÅѺV¿]ŠZíÉ<¯ß•ÇûøÞ^|Q”ÀpÊÛ¢*ñ«ÊþDņÍ­?{µÿoåuk¯Ì~ŽãNÞu­áºhìBíÿaDß‹¯|Krœ "ÓxaÉzëÁG¾Št™Jµs‹.ㄤIÔWb°ê¦N(‰XŸÚyÆ­&£Ô"ý•´R¥Âõlˆ½Ð¼Æ &9ÏøíÑéZˆW.Š6÷‹?Ô50¼ô–Õûɪ®ÈTªw)(Ê(Óü5My Ù4å07¦©®dîç)›^‚Z!f¤U/OEÌ€Ì×êƒ_y£üJ6C]Ȭ§’˜ž.xªÍ{ 1Z§¿.» Kû¾›$t‹QX%ÄŒTê§óŒDСø*97 ž7 îôö.WñØ÷5 ”ñÔm(²KÇ÷÷º'ÊGU3‡®›Õ[&L@g”¤=êæ¹º÷Ö6—Ä6ýu~JÖ[fÿ맸|æžÉyc?@'`gÈ6\WšÕ¥9¢uœ¹Žr,’˜L •I/!êlä¬G•ÿŠÁÊ_\™Ô\ޏãMÚ…ôTàç«:&y ´pٵРd®ÊŠ ËL²`‘ÕAæj¬HBK ½„6ì½j/µN‡å|‘ íB±ÏÚÛö.-Äîú¼½4Îm –µ_òãEMè‚Bh›EÌ(c1[4Ö†3ÂâNY]Øý#BÐzž Ÿ…,ÐÁw°>½‡ûáÃe·3ÞŒ­2‹ˆHæv˜YK²`hˆ í rY3=.†Vþ€%F3†ƒ"‘=ÒÙüåÀAþ¾Àùb’¥)I¡M ™‹ _Æà«ÌçÃ’CÊAÝÏ­lÊM—–¶ͯ-b–7ÄçV7H‡ËëÑq\ßï½´ˆåžíôõoÒ^qDWÀ)ÕôŸa,1rÞèìcú‘”c2hpHç¥.X{Lÿ}<9cÐׯ ¿gºDϨ¤b½W­QÁ2¨ºvd'¾üIÙ¦Ž‡ÿ¶È†ŸAÕ;ì‚ †S ÞŒ#’%‹ƒ"Do=ø¸ ˆô]Ðt<©‚µŠ“¾ÃAb¼zˆÉØçÕglÛjWØ‚]{ãSÑ>Û+{¸â@Rûë`ݤÊüœ‹.o”šÝó eK³–n÷wðÙÅa´öŸvÐÕÿ±êÌ\XÂHšò¾.Ãx@LXƒ ­Ï„·)Ê áYêäåÄHþ`2¨n.ß›_C323Âf †L?k†=1É×G¹ °Ôpq6`_uÅ¢ „Ëx<ÅÖMt­LÛ%¼1E¿Kä®KtýíhŒ >d‘A-Z-”¾ˆÞzð‰r_d`† ËÉ$ë“K^Ä„)SuqŸÒ<¾Œ"Ÿs"(»Ñn‡*1yØ S} „ìw˜0õ@Ð5|úl x’ßj2¢xû"o™ÌÇ7 &#&L UE¥=êZíô(c0Ìñ#Ãô¬ý&H®Cy+ÏïRòr?Ö1I“¤ üÏÜÈMvôUUº–%o[u:Z|á¶õiŸ‹f*%JXÝštbõþñ»×ÿøðÚ øá~bóðú~œ'N}(#D4©ñéâAšîO_<ªë Sš^¬ùUW(&ñÛвñÉCçñCÏ·"¢·|âäÏ:B@ß$úÜÃh!aB}qÖ#ì/vf9lV¯Þ»v¨z$‰ç)ýÀ‚Á‰w›§:¨øPärÐÊ |ËXÐe¦šÌSØx ¨‘3h…C½¹‡™kÎÄG–ÊÏy2Á<ߨU˜š™9ŒÖá/Ë3³‘^‚CöˆÃŒôéÅ7lYè6|u¾® cåõiG[çeã?_4ÍlQçµ¹å‚j•¥x˜Ùå¢)‘”Ýgkmõènªôx—§*A"—ç*A£Ý`%H‰“Ÿrn´2¨,µ?µÝVâw[ÑD·u®Û®Ñ꿲ùcñµ![0û¿ô\|ÜsÁ¹Ã21ì¹´Æã—†àtdéd t®ÁÞfð4,mÕõvu˜)y8ˈ8Ô)”->c@ôÖƒ»žÈ@£%u8&}òa£…˜0e5-Mz”~Ñ£_ ?Ù€Ò:ƒ¥¾ÑtD‡õˆÄ‰…Y Ãlï!aIô‚ÃÙ‡‚lc§wyQvÏ `cì]mw}G`_äOú½©ªi | z¾ÔçªQ³‡+‹¡#šy?Ó®fîpe©k$ŸS M0ÏŸ³C¦j!‡¹ýIë\9rʵª4Qù=lRðÊ£ne.ǼÕDà:]¹‡j"Æ¡WŒÂ%¬‡™]6i_㻵& Ñvk5ઉæÏÕD :êdn\àfë‡Y¨‚|X'„élàÓÝZeú]Ê…ò¯ÃÌZŠCCdhgËšéqÝR ù¤ËÅPˆ¿/p¹ ™ë*¡Bß-˜2ºŠ Y&»^ âõÝÿóÛéæíú85ony &xƾ~ŽìZßoT©jœëz㕇MÆ×îœwî(–öËî)¿Ô~â”1÷(‰ãc"øðï¯?|ÉìíWøS’~H˜ÿÿ¬~yR£G8‘ywfèžÿí"ñ• endstream endobj 4141 0 obj << /Type /Page /Contents 4142 0 R /Resources 4140 0 R /MediaBox [0 0 595.276 841.89] /Parent 4164 0 R /Annots [ 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4161 0 R 4162 0 R 4163 0 R ] >> endobj 4145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.684 702.288 255.9 713.301] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.094 702.288 381.416 713.301] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.002 690.333 468.872 701.237] /Subtype /Link /A << /S /GoTo /D (tab_8h_519e8e4503f7c41c0f99e8597171c97f) >> >> endobj 4148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.723 638.795 403.94 667.86] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.72 573.175 275.419 584.168] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 492.227 189.895 503.131] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.849 462.818 355.663 473.722] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [106.717 451.236 172.878 461.767] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.921 395.941 282.137 406.955] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.305 395.941 352.627 406.955] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.145 395.941 387.468 406.955] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.51 366.361 335.727 377.375] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4158 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [466.186 366.361 497.508 377.375] /Subtype /Link /A << /S /GoTo /D (tab_8h_bb7920acdfb83179d3bac65035144c02) >> >> endobj 4159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 257.786 189.895 268.69] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4161 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.497 202.864 248.713 213.878] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4162 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.918 202.864 344.174 213.878] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 4163 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 94.289 189.895 105.193] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4143 0 obj << /D [4141 0 R /XYZ 90 757.935 null] >> endobj 4144 0 obj << /D [4141 0 R /XYZ 90 733.028 null] >> endobj 4061 0 obj << /D [4141 0 R /XYZ 90 446.389 null] >> endobj 4153 0 obj << /D [4141 0 R /XYZ 90 432.56 null] >> endobj 4062 0 obj << /D [4141 0 R /XYZ 90 252.938 null] >> endobj 4160 0 obj << /D [4141 0 R /XYZ 90 239.109 null] >> endobj 1782 0 obj << /D [4141 0 R /XYZ 90 89.441 null] >> endobj 4140 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4167 0 obj << /Length 2401 /Filter /FlateDecode >> stream xÚíZYoäÆ~ׯ˜~˜vÚ}òPq’5l>Vò°^Ô %;CNHŽ%ý{W³«I6æ(Ú‡ 0öAòc}utWWÕ’­(üc«˜®B’X¨ÕîxEWp÷»+†O·ðxÛ{þííÕ×ï¼Eâ@¬nï›×Fg«ÛýÇu@Ýl¥t]'wI×äq³åŠ®ßg‡Ô\}HïÓrâušïô­8ˆäš±póéö‡«޶ܨ™fþÏÕÇOtµ ¸¢DÄÑê ®)aq¼:^I.ðúpusõk+ÃÜpÊ8ÅIJu\¨Ö:"I€fym,S«¯£ŠVuyÞµÏ6l}w*Ú¼¯ß3ÙIg2&A‚.Zøo” ƒ‘Q‡ ‰ 9"´G@_EÆI(D+C1 YmYÊá"$—ö}­f#‚óNWD*Ù‰ ˜-—l­•?Š]R§•¹sLEù¢¯éú¾(Íͧ £ë¢üln'e™¼ <Ëͽú1Æ—GЍ0\…ø%3ÒÊD|èÅÊ¢·=x/Ç’H´½ß'Lˆ2—|°<,ÆK)¬ŠØ¥l㯑ï'Àõ•¹u>™;Ú'ÍßíŠrŸåè·Âúœ}„h$[`Î ï–1+³>ë¬Èͪ«Î§Ó!K÷æ×SV?fø$«I#€âÒ0oþTÔZ!@©¤¶WYe®Êâ\g9ò´«¯ DÞá£]r8€Šöù>+Ó]}xù«þ³¹ý”ÊytSßpXDŸõR²î^Fqƒu Ë9‰‚¥5ƒàm=ŽŸ+WÌ3¯Ú0Ð@RF¢(tU¬‹ñ2K* §‘C­WËS³àB“-ÚÏ<i“ž5Z ¢àe¯ÑˆñS+x)‡:»ÑàšX\j3¢ýÄ‘]j¸¾Ö©7y*¡OŸ½ÍéᣄÓ#¤áÀ˜Y™˜ä¦Ö/zK>˜;d‚‹Ç7jbþœÊtŸ‚‚6Vn7ô1yÈvævZ'‡sJ†úC.¤,^œJ§M@ȶ‡Q `ƒHJ¨%¿è=š”É1­Ó²º3ªÏ$>Å<ÒÀbG*8% I¨£­ÃW㳎ÂîÃÃÒÑKpÅ~XÌHŸ~`™a;êÜn"pÉNaçCbƒY&y¥óvÒeæ“ö›N’Úus1S8;VÞ˜õ0s1SqD˜ ?¤õ¹Ô /Ÿ˜¶ Ô×q Êb4ñMÔg\ú¥V",Ü uP lYë`ZƒÙö@cu8#,è5õ çjDÈ¡¨S~>Y ƒzÂЧ£×¨#èúæ¼Û¥Õ8à­­P ò˜/ØÚæmEÌ’­>>k«—míÑ1´õ§3ðCÚ€’ ”.ïlF·h¿ ‘óÅ‹"ØÔ‘ßhÄø)cFD;”§ú›¾OIU¥ûù( Ih¸ä3cY ±‡ÌFØÇ…î¸Æ÷{[®éý›íÛÈM~§ö€ X±B¡ÊÀÁ jôÈdÍ÷:!e?9TØ'±þÑM4&¯3î_ )ã6í³wÎé¹OëOÔ1-KKv„͘<4õwÜžÌmé°î¤WCQÅK…'¢·=ø¸òˆìW$ éHÅ•«Á°cAŒŸW×i"tx¡3Ê“;p×;ëQÓ&¡'Ò+ÿ2?X´WŸ¡H­ÏÓ®üÛ¨3[”†Ðû‚?¿+FÓ“qŸ½‘¥ë õç¡36úZºóólz xSHú‡! /@•Š­F’ r‘ÌÎò]-çXHñK¥YÚ<=¤Ç a²)„a»"¯jã¦}q†HEÃQ*¥Õáy,¤FÖi!A¸þ„ÒçDJ(ÞB›/žL:L™/ ¼b$»Éeà<Â!|ýî{Ò5LÆlÌ*(…&‚&‰ˆƒO7É(4F¯[Çõ5ä$ ƃœ~)ZÙ ™ù˜î³¤Æ$ˆ3œæÊfMd9~N"ô0aw®Ú¾¦{f~ëá@Q|>Ÿæê^ )1oÝÛÃÌÕ½’klôš^e‚y¾ª0Õ«XÌ{ŸGÚ^e¨ÏD¯ÒWç õ*ÖŠ¢PJ×ÐͺÌbÌê•tÁk&m½kó£[5ƒT~Ý3ÒÍq_Ýnq=ççã­üŠûÑ~ÀS4ÕS»Ý£ û]çtWÛzäæ5b‹æÝ j+ÎÜÝæÝ˜ Ýý<.3t—‘_!ÄŒr—(%Pn: ýMÏ]— RÖT*Òùeàý›ï1-åYíYÄyÁ¥2ïСµÿË‚/SÇÑGB-úÔ1€6Ž7eD¸b=m&|9ŸÄßµ°q¸ô2B•NÃhÁ‡hÞ‹ˆ¹Äö@u3'tßÁ‚Bˆ)ä.˘(Øò}…‡X8[œ«÷v‹§mèÜ=>°í°'"5“÷³í&µcÑ šmõ‚Šü|â§Ó«.`ÝâìÃÚ ¥ ¢[;м­ˆY²ÕÇgmõÑY[{tÌ×/g®¦0Â51Wqݧ°Ø[õ0sÅ‘!»x(è£m7öwj(h1o ‚ãI$"ÿ ¥š¢XÌÂŎc?YÀ}ºK‡‚2OÀ‚[;м­ˆY²ÕÇgmõÒ¡­=ºK†‚ïòPЫÂ@äòPÐk´ z)q(ا|ÍP x?^s÷@óQFÌR”}|6Ê^:ŒrîM£ÁI§èÿVæá=мS³äŸuŠ—Ò£“蔟sÌúíð±(S·«mKñìVp.´õSjßÊ\/Û‘gÛÚï3ýÁzÿîe@ÑMÃ&D©õÿÓ˜–SJTÌ.Óöà³cZ‹¹pLëh07¦õò☶Ïûê1íe~hÇ´>}†"_;¦õ9ÄŽi½ü®˜×i£‰1mÅŸÿÓ~é1íëgª—Ïk/ÿoŒiõúz˘v®O×C¹Á\ö‚ñHÛäϵÐ"Ì} g;Œ2×`èãYb]páôuÌ;ßj ˜! ä£W3ÚÉë@™‰ÁkO—/4wéJÅD©É Ž‚,Pÿý³Í¿¤·‹ H {Ð|Ô„ìÚ¤ïÒ<-»ZÃp»‰ùÚC~¶ŸÂJó‡Å×”_ j~qÊpíßëzÆüÿúûÍzôô-¾J åvë™Ï/i>õÕÖØ=4æ. endstream endobj 4166 0 obj << /Type /Page /Contents 4167 0 R /Resources 4165 0 R /MediaBox [0 0 595.276 841.89] /Parent 4164 0 R /Annots [ 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4178 0 R 4179 0 R 4180 0 R ] >> endobj 4170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.581 702.288 314.797 713.301] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.243 672.708 402.883 683.612] /Subtype /Link /A << /S /GoTo /D (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) >> >> endobj 4172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.92 672.708 454.559 683.612] /Subtype /Link /A << /S /GoTo /D (tab_8h_aded7db92aa2758198b33f35f5f18d6e) >> >> endobj 4173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.297 672.708 513.996 683.612] /Subtype /Link /A << /S /GoTo /D (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) >> >> endobj 4174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 546.139 189.895 557.043] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 515.336 352.042 526.24] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 515.336 478.457 526.24] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 243.463 189.895 254.367] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 197.438 352.042 208.342] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 197.438 478.457 208.342] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4168 0 obj << /D [4166 0 R /XYZ 90 757.935 null] >> endobj 4169 0 obj << /D [4166 0 R /XYZ 90 733.028 null] >> endobj 1805 0 obj << /D [4166 0 R /XYZ 90 508.165 null] >> endobj 4177 0 obj << /D [4166 0 R /XYZ 90 493.918 null] >> endobj 1806 0 obj << /D [4166 0 R /XYZ 90 190.268 null] >> endobj 4181 0 obj << /D [4166 0 R /XYZ 90 176.021 null] >> endobj 4165 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4184 0 obj << /Length 1970 /Filter /FlateDecode >> stream xÚÍYÛŽÓH}ÏWdÙ—D"MßmÏÃJ 0+‚]fÄ>BÇ3‘8³¶Ãåï·Ú]ßÛY`¥ÅØÇ]U§ëtWµÙœÂ?6ès.Ö†9†±>Ï–ò˜›õÄbÖ£$T„25•0†Ëˆ™šeŸ=7Ë^s8Ë s·ÒÿKuÃ6>’Ç»øñ¤>¬Þ‘š"¥“‚˜)R|ö)^sHJÜBR^gX¸}~·ÏÓvEVÞ¥£»”bXˆ!$uooÚlcîéz“Àk8Ôõ·Ž©ªhêÖ!J-ª9™¯€¿ˆAê3E"»u_Ø. ¹j¶0cmFBg}§-Ì~³ÏÛÛTQø˜9—íÏ:-cèuÑá4Ï„Á*ߦ¶Ú`|EZièLª šÀ\ÏÌeS ‹C¯ðÞw‡¬–³3ð´çb„JÝö “Wã·«ôñAËî³&Íâk ë¡ã#íz!. ÑÓxph¯?Ý!«ö0)€‚Ö÷TQøc=_‚€L‚¿ýö0Æ<±IÖ¬uV"´C NX¤Üá % WÞ.#¾ˆóñØÒ÷tŸLõ ¢`‹Í¾Ê)p RŽ5F îˆ&Ùg¦`rç(…F+cvî¤ðžRÑw¼„¢€ºtú<îŠÛw`AëŇ¾zV¤¡Ù‘X@4vÊÏzBA…”{¼—®å°ê ¬ÓµXi;Þäû]·q¹9dI ÕÌ3X-”2ÒêLˆ…ÁwœhÙ.Öá¶ùÿu“%ÛÃ^Õ0Þƒí&#wÜK\/ËüT590R ëq ËñøYcýx  ×DŠÐ0ºRxøñr¯5&IDƒ¦µ¢Š­ß¦Cw-dËÞx ˆ`¯åö€U5ö9‰óþÙ•ÖDKî‹úVsäbb‘ƒm0Ó$ª6»±º­r³ÐS}tŒ†à®v……YAˆmŽ@Î"X DÌÁK ãkv)páøãíQ9õ¸¬ªC,`ÓºÔŸ~ì¿-!n7ú.ÆçM¯xËðÉÔ,éRÐÅ7ëwbý_—wLç’ÂÖükJ2Ê8DÇÆeÀÀi¿3)„z,|'´Ð4y‚|Æ;CVr(†å ª¾xUH„éÀ~X0¬QI !ß'ˆËAP(ÄÿVÚ•Hü˜ ø¨ L#Ë%ó Âa¦Ñk\^ƒ(ˆ¦A¿ Z&§á5Þ²ª_Ëë¸_Â;AøâýY‚`©ªŸ ¤ªø¾–Õ±]\UaýPU²U=#~aÚï?îÝøÖˆ7ùRBK‡õÝ9j‹ç¯®–pýøüå³Ñd…?èñÂÿjõf2-þdEÌd²Öcy’ÕgÐ%kÃàD²6Mž¬>ã!±Ù:Í  ~üñj½ø É ó(¥ð&+BŒÃOÓ7+`-‡îä˜Ä÷±}P™Ut|Åd\Àš,¿; b0 MÿÅá÷:¯²X‡$`Qó$¼‚µÂ~õ‡ÊR)ËÏïi–æõ9£âÊt¨®%{`£)í‹Î(?Ôþ6†‚6œkÿzrùÒ|=ÇW ¬cí³ §û¯ßnÓÞñ‰2pÖÁ=ÿÎ>JÜ endstream endobj 4183 0 obj << /Type /Page /Contents 4184 0 R /Resources 4182 0 R /MediaBox [0 0 595.276 841.89] /Parent 4164 0 R /Annots [ 4186 0 R 4187 0 R 4188 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R ] >> endobj 4186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 568.679 189.895 579.583] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 520.858 352.042 531.762] /Subtype /Link /A << /S /GoTo /D (structtabprm_3df12930fa5f38dcfc71aece8aed816c) >> >> endobj 4188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.296 520.858 478.457 531.762] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 262.797 167.638 273.701] /Subtype /Link /A << /S /GoTo /D (structpvcard) >> >> endobj 4192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 223.943 166.532 234.846] /Subtype /Link /A << /S /GoTo /D (structpscard) >> >> endobj 4193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 187.146 166.532 195.992] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 4194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 146.234 172.071 156.012] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4185 0 obj << /D [4183 0 R /XYZ 90 757.935 null] >> endobj 410 0 obj << /D [4183 0 R /XYZ 90 507.284 null] >> endobj 953 0 obj << /D [4183 0 R /XYZ 90 484.973 null] >> endobj 4189 0 obj << /D [4183 0 R /XYZ 90 484.973 null] >> endobj 1088 0 obj << /D [4183 0 R /XYZ 374.54 449.843 null] >> endobj 414 0 obj << /D [4183 0 R /XYZ 90 433.116 null] >> endobj 4190 0 obj << /D [4183 0 R /XYZ 90 281.771 null] >> endobj 4182 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4197 0 obj << /Length 2317 /Filter /FlateDecode >> stream xÚµ[ÛŽG}ç+òRèôý’7_Ö–'N¼Xyˆ£hÃÎnPÖ°V¶óõ©™é†ž†®–E–ÅìPÔ©ª>§ú2À†þ±¡£C£ qB gŸtx w_˜woO¢÷ŸOß½ð)â´NoškFgÃéõï#MO¥tôy¶&'\ÑÑ«ù]Õ^½¯nªÕ˜ÙQµ˜Õ·œ4vĘÿ1ýap1Ýâú¨”Ð5꿃ßÿ Ãkˆî‡%ÂÙág¸¦„97ü4\øë»Áåà×­ö¾€û‡SL”3ã‚P­šÌ^V)å‹j}(TJ‰Ì—/¼Û@p¾ƒ`T)¬ÿ|ò‘s•0 à A “ÄQA}sí3ÚÓšnb¼úöêÖ¿ÿ>Fö¶rÇ]üÛ‹ËËÏÿ|ûîç×o¦^^¤QgI8X °\qb¨‹`éà%Û¯®!Ló¡¶ŠH¥Á1 $1py°ö\ ›Dš`$ZF75àŽP»Å¨£ùéjýO«‰›åª½¨ÆœŽ¾l@jt5ÛÌ—‹öþò¦}½[.n盇k¯¥«/óu{õ××½ H®›Uvƒ5šCê²N4¾~øë#Uþï•V½…Xi'Á…NÕÐ$;uœÐ"ŽHáÇ‘qâϪY×ÝNjTÏÁ¦¤èÈW^Ó( Wu XÔuµ¬l?q«ûÙ˜16šV¸¤Ä2‰ Ø p)ˆ ²@£sž¥„¬)?Aç;Y{“ÇêüjÓWææ/«ºIåeî­ÑR—e™sçˆÕXa'ÞîºÁ5.ÑRœ¦q–×8çD;ŽkÜÛ5¾ó…h ËQ{hÃO\FñáùÅ«±‘£gcIG/È\eZƒ`ƒÆÀ!ªe'†Fæ2Ëx5Òž óƒ¬Ì½Éñ2‡ Á#Ýy´ŒXSQûjÊú¬-gX*­·Bû‚DÃò·S…|_ðÖhΩËÓ?SÍDŒ Å$ؠЩ#´5(tµî\­AA¬°hk6¥ÖùÊ·з†°Ø:¨åÖ€â'.ãÖpñöârúæÙÛýž ˆ¥xòÁçÒît¼é &K m‰uòñ=!rë Áä‘Sÿ¬º«Ö›ùÕ]˜û+d‰Ï€©¦›²Äo­ÑR—}–øuñÑÒN‚ :Â5ž?°xŠ%¾’ ++p{›¢Æw¾c€Aã`Yã1jcø‰ËHã—¿\¼˜¾?$qýÚ ¹›7ïu‹ÝHÜf™!(¡Â ñƒ¬Ä½É#%¾¾¯fþÝ»>+|[_×M Yá·Öh©Ë>*g„ÃV ©î$ؠЩ#\å¬)÷¹&r2 (.roSùÎ"r 0ˆ<,‹=aQÏl\žžÞ%q™ æ4¡Fc•™ÒY"˜é@zB6‰ÏáÕßxXÌ7ë|3“ŒÃϵ‰‘܉az“b+ÛzB:‚Ù­ÜÇ"Èm ï:ô,™-ïÇŒŽ¾îw2F¤5hÆÞíº mìêîn9û¶¥F=»®¢?®×²ýßc6ÚξÙOÑä5ò’cDšqF²½Á›4ç˜Ëû¯ml«±T£åÃf¾¨’eÔnÁë£'»áæÛ¹·FƒK]"í\°æø©Õ$ØàµNE±mù†@9QÐ_δºÖ¥ñ—Á¦Ô"_ùž€ú¦»BµÜPüÄ¥'Ä|1ÿ³Z­>­o÷I©ˆ°˼>Ð`aŒ¾Ø  FIx¹ØÌ^Lã£"-±JÖÄÉü¨F{,a„‘°YC“ök3÷«±0£jvµ©®³ÜZ­ÅÑa U‰ûŠÃðÙ0ع¿ó…p ÜËÜQ{pÃO\îv{Yî[b¨Ä2ïÉ}›¸·Ôk!( žVœûÞ¦Èý/„û`à~Xæ~ŒÚƒû~â2YæHQ×§XHúµzð_7]hˆÁ( 1š–À7Œ‚Í7e§÷~Û$ÇÆÿ`rÿ¹U@`uZïÏóŸA(ÅŸæ›ÿ#_yþ£€žÿ1`‘ÿÔ2ÿQüÄ¥'×ͪª²Ü§DH‹¥Þ“û¼yL‹†Œ’ð²Ü§ÄƒŠ‚•?SOÀ}e U胡`r ÷%¼žkÕSoA˜Äq›"ów¾æc€ù`™ù1jæcø‰Ëípƒ¬ø4}$ó¾+þú Pž`”„‡¬ø•–ø¨HG`Kyúª‡3G (ó½É1̇„¹<ÛY>¬ wøY~°)q?ò•ç> è¹¹ßA-sÅO\†Uâ>’ù‘ÜÇ FIxòTÜgf?…ž†“#¸Ïê'ðîlG¿ *$ñ_œx“"ó·žâ#h÷;´2í#ȬGÀ»C¿çëÂ.7Ÿó‘›\$¶`Ó­°ÅÅã©v¸L2H=á &Çð]P¢ÄÙN63DYüd3Ø¿ó…P œË¤Q{°ÃO\†^ÏïK¼Ïg~,ñ‘ð¶Ìï†W¢>6*OÆ}ʉ–èÉf09‚ûŽ5¾K}Ásß­¡PT¦ÕãÙþÔŸ¹ø•‘þP~¥ÚþôºZT«:Sÿ´×?윎=ø§:ï£PÙ¾0÷=åß ÚþÅ)ó¸nÆ\ úKc6zóÜ”ÀºpûÝ—æõåòË×Ûj‘V¸þ§0*ÏÿA_ò endstream endobj 4196 0 obj << /Type /Page /Contents 4197 0 R /Resources 4195 0 R /MediaBox [0 0 595.276 841.89] /Parent 4164 0 R /Annots [ 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R ] >> endobj 4200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 698.224 251.215 708.151] /Subtype /Link /A << /S /GoTo /D (wcs_8h_0653c98b8a1bee5755740ae3f4854094) >> >> endobj 4201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.463 682.627 307.33 692.532] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 659.369 241.81 669.297] /Subtype /Link /A << /S /GoTo /D (wcs_8h_5d377c202850ee0eaf44b3e989d0736e) >> >> endobj 4203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [266.989 643.772 300.857 653.678] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 620.515 244.57 630.443] /Subtype /Link /A << /S /GoTo /D (wcs_8h_22bbac394b025c4cfc7bd73b6d6e3962) >> >> endobj 4205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.627 604.918 316.494 614.823] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 581.661 246.801 591.588] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9885b02031ff7aa7b094f4a1edee2cd) >> >> endobj 4207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.961 566.064 304.829 575.969] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 542.806 243.494 552.734] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4b2dfca2e80fe80ba85dc830cd9c377b) >> >> endobj 4209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.343 527.209 302.211 537.115] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 503.952 231.13 513.88] /Subtype /Link /A << /S /GoTo /D (wcs_8h_6ba6d2640572b12a11e3558fa75a01ed) >> >> endobj 4211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [271.867 488.355 305.735 498.26] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 464.122 188.68 475.025] /Subtype /Link /A << /S /GoTo /D (wcs_8h_6852f6dd2883c82296f1108b897d337e) >> >> endobj 4213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [244.23 464.122 277.764 475.025] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.185 449.501 197.072 459.406] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 425.267 182.483 436.171] /Subtype /Link /A << /S /GoTo /D (wcs_8h_c55946dadc53ac592cb686275902ae7b) >> >> endobj 4216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.898 410.646 232.785 420.552] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 386.413 206.383 397.317] /Subtype /Link /A << /S /GoTo /D (wcs_8h_1bcf49cfe1ed1bb2bc4c930f98d808fa) >> >> endobj 4218 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.881 386.413 257.012 397.317] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 347.559 209.7 358.463] /Subtype /Link /A << /S /GoTo /D (wcs_8h_465ef3c77aaf546324dae0692e6de7fe) >> >> endobj 4220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.198 347.559 260.33 358.463] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 308.704 215.13 319.608] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e1738854472218541bda531653ef2709) >> >> endobj 4222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [215.628 308.704 265.76 319.608] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 269.85 211.344 280.754] /Subtype /Link /A << /S /GoTo /D (wcs_8h_3d64b57cec404114c75bd25a562e8053) >> >> endobj 4224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.842 269.85 261.974 280.754] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 230.996 206.931 241.9] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8f5c31a6983b17abbe2fead61550d55c) >> >> endobj 4226 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.429 230.996 257.56 241.9] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 192.141 206.931 203.045] /Subtype /Link /A << /S /GoTo /D (wcs_8h_84a67c964e212bbf004c264b3ca70fee) >> >> endobj 4228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.429 192.141 257.56 203.045] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 153.287 209.7 164.191] /Subtype /Link /A << /S /GoTo /D (wcs_8h_de3959355dc9d0987e7ccc4070795c38) >> >> endobj 4230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.198 153.287 260.33 164.191] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 114.433 209.7 125.337] /Subtype /Link /A << /S /GoTo /D (wcs_8h_37c4884cf58baf25b2984ec3bccb80a5) >> >> endobj 4232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.198 114.433 260.33 125.337] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4198 0 obj << /D [4196 0 R /XYZ 90 757.935 null] >> endobj 4199 0 obj << /D [4196 0 R /XYZ 90 716.221 null] >> endobj 4195 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4244 0 obj << /Length 3193 /Filter /FlateDecode >> stream xÚµ\mo7þî_!à¾H@ÅãûK~p'p‘Ø9Û¹^ц#o¶ì“ä‹‹Ãý÷î’ÉÝÝÆ5 4ŠöÙyf†œ‡Cî*lBá?6qtb”!N¨Éâö€N¾À·oX¸:‡Ëóäú‹‹ƒ¿¿pqZL.>×·kFg“‹ëߦš06›3JéôÛbC¾Îæ\ÑéëåMÕ|:«>Wë³Ójµð_9iì”q:ûxñóÁÑÅŽ7x¥„ö¬ÿ>øí#\ƒw?P"œ|ƒÏ”0ç&·’‹ðùæàüà;Í÷¾ï Ì_ I¬é› Bõ>nÎ÷q3ª‰v1>øß9We ŒÂ-\M[-®ˆÁ ™$ŽšŒðo×Õï”òUÕb•šnrVaý% ÎRþ€Æù “ž†øvùxY­×·›/¥œAòµÅ"çD:ø€{Ç'VYÜ»*¼ësMSâœÁE baÒÏ뼋. ÓP:PÞÏ%¡Î»M-ašïÜ–|bÁm]'•;BÁëñ^¿ªî×3a¦Õâj[]“ö|25T;CøSÜJ tµÖŠPÙ$òhõp[­¯¶Ë»Õ¦£Pµ„qä½U´¿Ü[D2TCÑ®„0¶PA [‘µØ„Ý‘[é0Ê›̧æe— <5ŽaGFÌ ±å)ñ[ÑÆ¤p]‹ø@¸=OàýyÏûËËó£³³Ëó/_Ÿ·â¥0)ÁÃ̉2à€A©9c„K™Qÿ4óÊ1¥?´X…Ÿ3ndèó&“ÐO>¼}{ùþôøäâè¬ôD(G¤EÔ]hM´]ѳVô©ZžÇEÑ8a2‰þÝѻӳ™VÓ_K?¤U° 84øˆAÙ¥ãÄPÞ=ÿ¡wÚßjxÜMû=¼ÚL:íOÞ|x{i¸˜±é¿ÚÑ!DîL9ýuKJ,—™ ?5—èMr–h­Ç¦ ÷¦ b’¼˜ 5=|uùòâ×÷Gm½³°»Ü•–à5ÔÎa° ¦@USٮȖdjd"ç/Lv$àýÌñéáÙá»VABƒåû], ƒ:!$¬7Fu%Aµe@[b-™„ˆÆù “]³àôôìÕåÅÙá ÔCk9PL Yð×ÇÍC =+cièvNœq;ðÐ‚ß ç ¼cÅÏM&8†U F±ž´CÃ2ç;‹!`P/¸‘õ^©# ¦_ HÝ$ðþQ˜®b8n‹!å ]…#­^ Á ôœ*[ӌޗgSÛÖ+ ³#Ãhœ¿0Ùþ/3F§§go_µªR"G“1¨B@K uW\[ ”&¶ã’Ñ8aKÂåK(_-=€ÖY|JD ê‚Í“°å”6ßà@l¤ŸÚÄ©fédížÑoج 4N .š=Oàí2)L¦=ãéåùéÛǧ'íÅ Š z­Ì‘²L¥çÒÀ4r}P Æúe¶Noöð~™˜Ž)rþáÅñ»Ã™¤Ó70EŽºú']æTGÿä1¨+~ùÖBf®Ä\´{H®´Ûvd."w 0™Í…“Ëó£Ø=¼xÛ•?‰¹Sh""õC8Ø]ZÕ™Ñüù?Ož@‹ÑÜúB˜²õm¯V‹¾“iaPŒè=:H®÷žDÌÐáƵ;=@ ÃàzøWð7Öw8% ÜôžMôl z«ýý}'fáÝzWÝÞ­ÿh¼ºº¹¹[ÔUÍß?ß­wÓtgº)<©¿ûý?€¤ ‡_x,Û`—kÃÕËöÝöé"\¾½ ×Ó(´%ázïñžÔœˆî¥M¡dP·=+e]X°ExYÕˆÁ¢Šv’ê§Šµ£ÂÊiÏ4¢˜ú93s»BÚ´ ÉX±#SŽ˜<—ãKFRº§ÔÐÞ@oÈ_PEçU[a-Ÿ³Š”,#.`¿lŸ­ŒÀ Ug!Ì`)ím!Å„ÆrJ±‚JùF”Æ\˜ eµ\-Ûe% ëx¬ '„]L†,µieÕø‡æó¾Ü®—›ðåf»~Xl» 965zZš ©¹_·Ïü}_fš›ˆiQ2™PÖ½[‘*šÊL‰³±€Á'LüÉ®áâûÕ(1ЧFÒ<û|õpnÍc=^ C;=ª?l¿Ví¼!†ºÜcd#ß QÿJ“È*E4ìv‘tÍ#§„ÅÅ·_)e“ƒ^©†½ûðø¯:alñž!b†¤.±Õ/u(aº”‘ºŒoXêPæÂd˜ ›‡O}lì!PÊÐEdÙíS»ºVP“–(X–Çå$¢QK“H}XJÅ'@Ä´(3³œ(§‹œŒ¹Í:]jtjW*ÁýæâÎ`£^.2W3¦¦Õæ·Ùœi=ýˆ®7’û¹>v~F4:¥Éþ±š‘é èHH ËõØàû¸ÞlÑVx§ž°Þìîï]n„wçüáÓzLF§_üÿ«JÕŒÓéãvíôj±ï†×3©¦wÛ媱Áf[ ÅÓ_mŒy_ÄjM!’Éy„ |ŠÛð”oh!‚"rîÙ¶®þØ›Z|j ƒËÐβ !lqÚ³akPB6b Bhsƒa|^WU×au 3@PBP¥›f–ŸnIcÖÁõÈpeÏ "óSbµÅ¢’/[Y`Ç(T>‡Æè*fÌ¢=a/Ÿ蕳iºçñý2sšP£sûG, q “ؘÁâa°üÌ%ä\’‘‰üÉÙ³ ø=P *1C2•Øê×)”0UJˆ(UÆ7,U(sar7ÚäJB«añ`§ôë”.² r5ÜS¿°ª‘áG4êKi)ÿÞ” ~Ä´(3ùò¯úiS„ÿÄÝ?7ŽH*¿_¿}ú!õiâz×Oÿ¹f‹ °Ár‘!lШw¥IlYý\ IÖù'ûÏ÷ËÇÅúº~tcêG7ÞÀÆn¿D@ýl§~s˜y½õlòæp¼É«Õý×eñ4(½ Z¶½J(Ëëß|ûv·¾¹.lìú¾ÍöjïÇ”œ)F`&¿’'ú”S`Ú1S6îôt9cӺܭًwAÜêoƒ¸ù/ã¦¾Þ ‰Õ…±q*Á˜Rª€:\ B'êצB—ɸ١`‰hvK\"»OÑ7JÉŽ(w·÷j[ ¨_È÷ïàûLzu»÷2÷§ÕÍú£ŸïDê1Ò½ÔR˜K¬y èûþÑŒæ'ûP"Ì¥ÿ4x5ÓüÓ°WáQÿ›jåÿa€*è{|D~á3ô†÷tFR†¸)ÿQÐæoÐí²ÐÞÏøþøâ——çþÇ/­„ªùø)¼¤úêîñ/Õªû·ƒµƒIzþÄ·¹J endstream endobj 4243 0 obj << /Type /Page /Contents 4244 0 R /Resources 4242 0 R /MediaBox [0 0 595.276 841.89] /Parent 4164 0 R /Annots [ 4246 0 R 4247 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R ] >> endobj 4246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 719.912 211.364 730.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h_cfbadc770489b6b5186b95eaa35467f1) >> >> endobj 4247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [211.862 719.912 261.994 730.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 639.267 215.787 650.171] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f) >> >> endobj 4250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 624.085 205.038 634.272] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f8b87c21d4a2cab41d4eea0a95378fca8) >> >> endobj 4251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.933 624.085 360.476 634.272] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25fc51c733d8a719dd698f9e96e9a4fa83f) >> >> endobj 4252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.371 624.085 486.495 634.272] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f5c58d5530bc7577a70185376c15180af) >> >> endobj 4253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 612.13 239.329 622.316] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f2904278d916c820236347783312a7ce0) >> >> endobj 4254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 596.23 219.065 606.417] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f598db0fcc4961aa3c5e0a296bec2b313) >> >> endobj 4255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.418 596.23 347.532 606.417] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25ffe9ed842ea8f525c7b8fed2f60015dd9) >> >> endobj 4256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.885 596.23 513.996 606.417] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f71cb7eaa633d9e0f560555a016f1f007) >> >> endobj 4257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.982 584.275 272.903 594.461] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25fdfa2a8cf8021827378091315b8e0a020) >> >> endobj 4258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 568.375 203.564 578.562] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f08306533cf0c7555dad662e82e8a4a69) >> >> endobj 4259 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.422 568.375 334.448 578.562] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f03824b7b5c22e5f0cc91363eb695a804) >> >> endobj 4260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.306 568.375 505.183 578.562] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f5d662102c172495df1f9bb03cedd701d) >> >> endobj 4261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 556.42 245.964 566.607] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f832122bb304560f92df91e391d55948a) >> >> endobj 4262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 540.177 239.14 550.707] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f88e600163f719a759d3569bf1548109e) >> >> endobj 4263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.691 540.177 393.291 550.707] /Subtype /Link /A << /S /GoTo /D (wcs_8h_158615aa1622d8feedd228795ff9a25f37c8aa0aedc12c63df08f39cb7177ff7) >> >> endobj 4265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 485.02 159.35 495.924] /Subtype /Link /A << /S /GoTo /D (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) >> >> endobj 4266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 446.247 158.244 457.151] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) >> >> endobj 4267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 407.474 154.926 418.378] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [259.751 407.474 293.285 418.378] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.712 392.894 256.599 402.799] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 368.701 158.244 379.604] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.567 368.701 281.101 379.604] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.932 368.701 462.466 379.604] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.44 354.12 287.327 364.026] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 329.927 159.887 340.831] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 4275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [188.33 329.927 221.864 340.831] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.079 315.347 224.966 325.252] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4277 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 291.154 155.474 302.058] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 4278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [207.438 291.154 240.972 302.058] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4279 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.405 276.574 232.291 286.479] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 252.381 160.445 263.285] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8fe5dcd9927240dc0348b850ee662367) >> >> endobj 4281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.41 252.381 245.944 263.285] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.954 237.801 260.84 247.706] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 213.608 155.474 224.511] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.917 213.608 217.451 224.511] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.893 199.027 233.78 208.933] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.161 174.834 159.483 185.738] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.405 174.834 223.939 185.738] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.285 124.106 158.607 135.01] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.777 124.106 221.311 135.01] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4245 0 obj << /D [4243 0 R /XYZ 90 757.935 null] >> endobj 4248 0 obj << /D [4243 0 R /XYZ 90 658.201 null] >> endobj 4264 0 obj << /D [4243 0 R /XYZ 90 503.954 null] >> endobj 4242 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4310 0 obj << /Length 4010 /Filter /FlateDecode >> stream xÚ¥kã¶ñûþ ‹9³|I¢î[sɵ) ¤É-z@Ó ÐÚÚ]%¶äZòÝí¿ï 9”EI¦Ýœµäh^΋”Xqø'V_åiÎ •®6û;¾z†Ñ¿Ü š]Ãôz4ÿÍÃÝŸÞ+x‹™Z=<Ù×3ÁR)VÛŸ“Œ q¿œóäó¦c/÷k™òä}½«ÜÓOÕSu¼&©š :7‰âþ—‡¿Ý}÷0Ð%®R•!ÕÿÞýü _m»¿Ýq¦ ³ú Ïœ‰¢Xíï´Tô¼»ûp÷ã€Ã+_ g×J3“_–[*Ƴ³ÜRžå°"ur HÀ|¾†9¼Ôc6&³ýKÕ—‘·ëýóæ¸]@p/’¨ã ¦%æ7g"“«¬ÈXV,®«ÈÀ-æð¸hçR3¾g=B`×\Ë•¥ÌÜÖ*7 ÔÕ__õÖq¹iÛã½Ê“mÝ”½—Ügš”M÷Ô÷e_· »ÈºIYî<èÿź"Î…dè%/¹Ç,WL uæš{áºì£É=Ž ^p…0!½¨{Dè8å JÚ–ÝVjÁ?ªTÅ¥%˜8MðJ Þ¨ÌÍÍBtœ ʈ”ƒã"ÈŒ`è%3r"ð%ï(Cïˆ>Á™BˆS)¦&Øë¾¶&\›—òHOýë¡ú¹ˆûXOËï÷gý —Õ†|ÄÎqY~©»‰ïØ]q¾âð|F°”1f€´Œìþó¾Iy¬KpßÝB˜€é’Í_tB暊ќP” 9¡1Ak½á̬P+&Ò|b…{YjွËÛ— ãŒNPÒfùOu<î»çyŠ£X–Çõãa¢d!¡û Éú|ÉÓr§ìØâÁ¥ýãAìþéËþDûÅߪ?÷÷¾êºó—gü¯ê.n 4÷(þÏÃûKÛVŽŹàb¾äú#(µ({ø¶ê6Çú;ŸfîÛ`÷=¥Ü/U‡)†)’c{êë¦B%˜NvÕ¾²ùLBöåÆßÿðÁ }¼7.¥s¾ƒ¬eÈXðÃ+ä{7‡Aêã»ÖaÚÉ®/›-è49nÝÀç—zó‷l90²¯ú—vÛ­M7yg>ÚI$§Îé@$$¹‡M»? TÏîÏ! õ³žåŽÞ;¢Òöîz_>fÈÑ…V»Ù{oÜHã>Õzç“}ãØ•ì~ ± 5#¯ô‘ÀËë¶Y?3·ª”|¥1+yÍ3ôz¾à3C”—»+Ì´ ‰O š`â$UÁRˆ²c’”È`ƒ`°ˆ"Eg ËFÞtn ÜíPÝ ù°hªjkõ ÏÎ œŒW“9XpØÅk­Ý²Ø¹3í‚]»¯\¡£×ã%ÚWûGXh\f ´ÊÞ=íO=¡âoWõÎ_=0Í€éR5µVÒ8sÂñ 昭ñXÀ!rYøoG ~Wf+ˆLA»Ù®þͺ5B½`‚ï¾þš"Ù®ìÈG>ÞKžœ(Â}®{jù4­û­šMyv§QÎaÑæ,“)¹žceu¯FLÎRgÅr(5d¢È¯™:A¯Gàs»› $S¯›½ÔbNg ¡EÈÄÔä &Nz‚IÏE.@ó¾Ü(2AÇéNPúZåôxId‰Õ WQ‘=L”ô‘y­¸¶F>%›r–ËâFÙ=tœ J’ý lï¢ðà‘Dë¨ð§ z—i¨wçøÁækRä¯7û»/yplîþ5×LN׿¢’X'8ôš&•“úZÄša9ãf„h½¿è$äîE’žåt&JuŠÈo£­-¨4+ Í’Ú=äžzÈÌ0„eJPwÝÎø×\`‡í 6Iût†˜È¥`«ˆTߨR•pŠò²a)#XVdQ¥z˜8Is© HzÃBÁmV€eã~mZöå°ƒ]××÷6 ³ãM­0°˜Ç±±lúzS DsÕ˜„º½ ˆ)ã#:ŒŒ³*B*l¼¥x€Á¤¹êüz=Ÿ;  JRÿ¦=`Ƚès…]—€‘©ÿs qê!²n I—Ïí@#ÛÖ&ßðTÒ@UÜ“g3Ô¦-kœ¢¬nTž‡Ž²?EsŠx ”Fæaâ$UÎdž$§ˆ–Ô’ªÆ>Ñj´îœ*í0}x*¨¨@,)…+©'~¬ m Æm©¿µ/7X™Q*÷tj6”_Û.|ÙûÞ’ÿ„y`ë2ÈY#GñŒI˜QW ½Ïw÷åõTFiɚᘉYëÛÁÄIO!i¶‘T &ÏoˆH#È¥ˆä§½áUÇãådl‹% = I&JV(N‹€öƒDá+•íÑ:R³ý‘g›Nu®ÄGü³~ràj±ô=Ov}{tEK†dÇÊÙÊIÁŒÑ7*ÔCGÅ›¢ŒÄ#(ÐuÆ4êaâ$S(†‚nGc W™/õÌb¦Õ’6êFxè(7S”ÈÏ®n–œšÖŒ§*ª'9A´Xõh¨«)n• ¯Ð QÚ¶lµ[5ÏYšÆ×ÚÃÄIN-‹j ®âVQ :Nw‚ÒíÚ_DMg)/¢¢z˜(É)¢EQщAΖ§·äç#ÈEoHÓv6K­)QàR@qêH”ÖO[0bÎ+V¡s£˜:N‚ÒvËÇ%³‚A4ŠKL0q’9d \†:¶^ª›…}ªÑÚΓKcWkã¸þŽkñÿœN:È%ªþtpQ¼Ðè)˜€¸®2Í P]mô8èõ|¡Ñ¢ô©Bu¹°+$SB†LLõI0qÒD¾°K±µˆæÃÉöœQ#[«ã¾ÚÖ¶s 'æTØâÔÚ¦Üá —«q„Eè–5³} µx¿{ujM§y®;b½X;\%¢6µ/ý±¦,ÏUÔšÓ’œ2hOs[}\)Í-ìzÃÍü.<||‡G¸9ÎCa|3>ÂÅŽã gØn7’|߸Ù'|¹´…ŒÌÝ!o¤ksÃÃKýüâˆí0ÀÐö‰ÎRíf.ÛA¿âXŸÁpëš||8m ìês∠F ˜©Ê¡3RÀ@û|Ÿâ]“þe_ohꀪëkÜ÷;êì {{ÆÐ œ¥P:gµ³·`†”‚’áà†Ç bÛu½p†­ØG߆©›ùѪ€”ZÃ5v½¯$A¯Gà‹åü%•{ìe¾ {?7 =µC‚‰Sœ Z>ãJ5ƒZéVI :Nw‚ÒJÚ>/HškqI &Nq‚hYR{ÇDÝ*)A_¡¢¤ºvARÈS—”`â'ˆ%•\ÙsüÛ$õÐQºS”TúÍ%•RÛ;}1I=Lœ¢ÌX‘§Å¥sJ­˜Io–• ã”'(©êCG¶ o¦X|]Dœb€dHÐ í»££ú¿Œ2¦ÛZ%Um;Ðð¬)i†AïVwn|×6ÏuÚÒlKàx%àŽY8]ºáðùt¥G/• @²wþ¯g:#È¥LÇOŸ?”¸œé jMHz–é8˜(Õ)¢Q¯ïçãyÖ9ÞRZܵ;7@¥ý“oûYñ©ù­iïe–|¦t˜¤[Je %@^Ü¢¾3ä¢úhzt‘:¦?ž‡¤Ô‡—žbD…âL(P¶Ñ}çn„)îR¹ñé& nÀݯE[ò…¶Äo™ä*"à(Ç„‘ëצ`<Qy˜8E¨¡Ô c’®4ÇûSF&ïÑ–ìÎ ¸zª´Ž]e¯I»#aî+w1¸Ô˜AMjèìûŸ¾ûq~[ <Ïä+§o¯y“ìËW7dËD\.¿|¾TÎMبw‹0ä¼]Qøä_ýë‡<àåõ{ùñ«9W)D`ã¹¢»|¸ûÇÇwÿf„Ö9Šdÿúã©ÜnNþ+û©\ûkeÏݺ·‹w8G¶¿qÿ;A3 p¸çxÿÎßvøðnN¢¹_§7sãëòï. À[Ô7!øq äöÔÂß–¶×HíI%95/3žeVøªQ–í¾Et×Výˆ.†Fõ¾s® }²T¾:ý£ÂÝcÍ—oñ솟W ƒà伪+޼“1º+í×>ÀG{êCVÛÆ/à®ôƒ5'¼k8=Ê}jw»Ö^ësÜŽ]IÅJ`o-ü aæt=‚uw§ù vGî<–—6T§‹‘ŠqÛl3°ÖÎQè{ðÜ'Š~%ý úÏ#¦DéÜ"€IË ^f.´ }Öy¥«D¾q¿Êý’ÅZ˜8*÷m‡J\HùEP°¢[û$“–@(N*w9Ó=âÖòó0Ž&ÊÜñ&Ù†<Ûë¾]7ŠÕ¸z´œÜC`EcƵez!}¡×µ«žú…»›ÃüÀѯ¾¶ëà®48Dž6ÕáŒaï-—ò…ÑÖBý±Å/SëôÁ§(˜Ùk—ÞQ·¹mÕ`¦ä·”—Áºÿ鿇M(Wo¹|«¸ûKr!ü®—iâó©ï>üTùý7ô*3LÒ3ø¶ýòú\5ó3:µ žÿbñ S endstream endobj 4309 0 obj << /Type /Page /Contents 4310 0 R /Resources 4308 0 R /MediaBox [0 0 595.276 841.89] /Parent 4164 0 R /Annots [ 4312 0 R 4313 0 R 4314 0 R 4315 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 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R ] >> endobj 4312 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.507 719.912 159.493 730.816] /Subtype /Link /A << /S /GoTo /D (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) >> >> endobj 4313 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.106 719.912 220.64 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 670.16 159.349 681.064] /Subtype /Link /A << /S /GoTo /D (wcs_8h_57975833fe0588eb7c7b6d79f13a7693) >> >> endobj 4315 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [187.792 670.16 221.326 681.064] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 590.931 214.672 601.835] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4318 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.111 485.579 137.645 496.483] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.776 444.044 187.415 454.948] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4320 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.942 444.044 228.899 454.948] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.733 444.044 289.334 454.948] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 4322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [403.207 444.044 436.741 454.948] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 432.089 124.191 442.993] /Subtype /Link /A << /S /GoTo /D (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) >> >> endobj 4324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.158 432.089 382.692 442.993] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.429 420.134 274.816 431.038] /Subtype /Link /A << /S /GoTo /D (wcs_8h_c55946dadc53ac592cb686275902ae7b) >> >> endobj 4326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.337 420.134 435.871 431.038] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.221 408.179 343.178 419.082] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 390.554 129.163 401.458] /Subtype /Link /A << /S /GoTo /D (wcs_8h_8fe5dcd9927240dc0348b850ee662367) >> >> endobj 4329 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [320.888 390.554 354.422 401.458] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.486 390.554 445.049 401.458] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 4331 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.893 390.554 478.551 401.458] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 4332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.395 390.554 511.506 401.458] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 4333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 378.599 120.326 389.503] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 4334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.191 378.599 170.408 389.503] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.121 360.975 193.308 371.879] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.077 360.975 380.611 371.879] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.29 349.019 402.477 359.923] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [240.604 337.064 294.62 347.968] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 319.44 126.961 330.344] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.722 319.44 182.679 330.344] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.508 295.53 150.492 306.434] /Subtype /Link /A << /S /GoTo /D (lin_8h) >> >> endobj 4342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.481 295.53 175.678 306.434] /Subtype /Link /A << /S /GoTo /D (log_8h) >> >> endobj 4343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.667 295.53 199.747 306.434] /Subtype /Link /A << /S /GoTo /D (cel_8h) >> >> endobj 4344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.736 295.53 225.481 306.434] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 4345 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.856 295.53 264.096 306.434] /Subtype /Link /A << /S /GoTo /D (tab_8h) >> >> endobj 4346 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 265.95 128.625 276.854] /Subtype /Link /A << /S /GoTo /D (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) >> >> endobj 4347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 248.326 128.067 259.339] /Subtype /Link /A << /S /GoTo /D (wcs_8h_57975833fe0588eb7c7b6d79f13a7693) >> >> endobj 4348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.524 248.326 290.057 259.339] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4311 0 obj << /D [4309 0 R /XYZ 90 757.935 null] >> endobj 4316 0 obj << /D [4309 0 R /XYZ 90 609.376 null] >> endobj 418 0 obj << /D [4309 0 R /XYZ 90 554.616 null] >> endobj 4308 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4352 0 obj << /Length 2318 /Filter /FlateDecode >> stream xÚ½ZÝsÛ6÷_¡é½P3!Šo¹'ÛQ2éùš6VæÒL‡"i›‰TIêl÷¯¿Püå¹&7Ah¹»Øý퀆d¡ð"RL,âÝ^ÜÃì» bõág¿óûÕúâÇ· ¾BJ²Åú®ù\$(Y¬“ÏžD„,}‚1öã =,}*°÷6Û¦fô1½KË% ½4õ”âAèJ—_Ö?]¬Ö­\«•`RKýãâó¼H@»Ÿ.0b*\<Â#¢ÔbwÁ)³ãíÅíů-3Ï`~ja‚°ñÊ(í¯Œ2„¥hV¶y½ôEȼõèÍBéýpýájõƒ^\äK޽ÿ,‰€•Õ¼64Yn~|Èâ3U›ï¯Ê–Ä{2ã»%Á^§•¡‰JGSešôyEŽO™¦~’íÒ¼yÑÖLWuyˆëƒcp¨²üÞ2Õ6î;|KR¬ðúÓÕêíRaïr)„w½2ô]“B_iêè)«ŒO³²ÛK*¼G(–{>0¦.In Á¿®ooÞ_Yyeñï4®[î:GjiÐdÖgà[ÅÛŠ¨­ÙoÒß0¦N÷7E|ص–ÐÀ:)"V>~Š\Áÿ[Òû¼ýtõû (òáçwïןެlAxr2v¶)ß$’FÕ×~å8T–óÉFØ3e°k7)M[¶FÌï³úØ×cÉz|H­©ªÃÆÏvÑ=|ÿÊyL·(=É-Üx¥X ú;AÆ-‰âÆÎ–¤i|,1Ä¥D”‹…Pqˆûù@vÔ~‡|MC–.›S,0EÐÏõtvO†dVð€–;FŸÃj„É•§u¹TÂ[±Eÿ/Ø‚¨ø^Т Z߀|ch‰qøBpDžƒ–¥ö;äch Xž‡P#.T_‰¶ͼ裓è–Ù^l^ןÀ׃r„!ÄXh< O1ˆÁ`1MÝâw:'pv„ÝÒv9YÒ4&h¿¤O I Éì(: Im®Âê$q ¦! |' pg Hu’–Úïq1`ù‚lG0°²ž£Í¢¡™=dt’Ô1ãÐauÉç¹DÞ¬n×ï/o:P NC‘w¡(™ñ°dŠ00P„ÁŠÒm`§Û´ª3½ÅÔ¯‘ÙèUæM›µ­³TRvs£¦ÏËç°IÝN·ñD3kÑ)ÙÀÈ¡Óèn;ÎnãT‘”âÛ&O˜4Ã)…&ó P±¤eÀðücu{„ÁßV…ÂB1ëãÛu£ÏH"ÛÃá9ÙKpÈÕ< gH~ë-tH…]7 LÏn9 µß!ŸØrôY¾dËgA_‰ÑžÃÐÌŠ2:½ëh™ œâÍêg3Ö˨ôûÏ´¸k^šcWëç¸Ú—;½Ê«– Ëõy qkŸí-|Ô:« …^Abé£DÈÇ!;WZ¿C<.G=vÜÄÂfR {‚~r4ó¥B„ўȮ³|bÇÍQ(] ’0p¦%8äY]½j£þÔAË[þE©˜¬ûÊh¿‡¤à•Õte @™N8 °d\ìŸ5 ¢í1¨%ÌIÕDhg"©jÛ™OmÐÀ—Ígn¶ý¬I†ƒ§a’ܳMd.تWåÚXõi(¼¤h:>Ev"M÷z$=àµ$Ä{6o há÷"–M…à ä¹6ÊQûòq?3`yºÐO"EU_øèLÖÐÌ‹èé‰l¡ o¸¶S^ÊJ½wDKH8Ò»´t&jÏð` yýUs!æe–Of©³Ý~›ê Þ`X3naŽá£O·1ÞësÇ"N«Ê•¹]—me‰ŽQÖ\[QÈ5_µME韧c¤fˆÕÙótCíwÈ'ÎÓû,_Ðü ð‹¤}%†¾³4ó¢¡CâÐ×öDgõà )ä ‹m#óÄõ“í®GŸ¸ôM¦g'ÜÝ÷´î·¦e1™I¤Ñe"“¨“™$˳ßÓÐ ’ïÛÙf Þf  ƒ´È'Ï Å‚¨8ó® ÂX~ †°R“·Á–Æ‘è½ 6¾q¤<*c„,:LÇwà 1ÙÕrXr0„"T¿³ÔqÉÁ kÍ¡µ»L’öÆÒEÊ&Š¿>6ÛÔ2±Þ‹Ýö´›L§ï¬~^JáKË8Ó@mÃAßî§CÆRÏê>diCæ„ßäzÊåœã}G3+–Í&{b“¬„}ÖÖÖÑÜÜS¸tRÕi” ‰Û|½3“šèöšHñ¿ßó7ÿGA†àÛ(!Ü^ä[éZýwiž–Qí¼î®LÖKE½ƒ³® áæAÔkL_3{“M1±åùN¯ÝÁF's@‡»“^E`w{Ž7ÅÓó}š Ø„yþ eíD endstream endobj 4351 0 obj << /Type /Page /Contents 4352 0 R /Resources 4350 0 R /MediaBox [0 0 595.276 841.89] /Parent 4377 0 R /Annots [ 4354 0 R 4355 0 R 4356 0 R 4358 0 R 4360 0 R 4362 0 R 4364 0 R 4366 0 R 4368 0 R 4370 0 R 4372 0 R 4373 0 R 4375 0 R 4376 0 R ] >> endobj 4354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.657 690.333 276.845 701.237] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4355 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.685 678.378 263.643 689.391] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4356 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.158 678.378 319.115 689.391] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [465.249 592.254 503.206 603.158] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.498 542.435 495.455 553.339] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [473.548 492.616 511.506 503.52] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4364 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.592 418.887 212.549 429.791] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.594 369.068 496.551 379.972] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.476 319.249 501.433 330.153] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.104 269.43 167.638 280.334] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4372 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [234.392 219.611 267.926 230.515] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.001 207.655 257.959 218.559] /Subtype /Link /A << /S /GoTo /D (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) >> >> endobj 4375 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 150.081 138.508 160.96] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000031) >> >> endobj 4376 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 129.991 318.242 160.96] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4353 0 obj << /D [4351 0 R /XYZ 90 757.935 null] >> endobj 422 0 obj << /D [4351 0 R /XYZ 90 652.848 null] >> endobj 4233 0 obj << /D [4351 0 R /XYZ 90 630.537 null] >> endobj 4357 0 obj << /D [4351 0 R /XYZ 90 630.537 null] >> endobj 4235 0 obj << /D [4351 0 R /XYZ 507.789 595.407 null] >> endobj 4359 0 obj << /D [4351 0 R /XYZ 90 578.68 null] >> endobj 4236 0 obj << /D [4351 0 R /XYZ 500.038 545.588 null] >> endobj 4361 0 obj << /D [4351 0 R /XYZ 90 528.861 null] >> endobj 4237 0 obj << /D [4351 0 R /XYZ 90 483.814 null] >> endobj 4363 0 obj << /D [4351 0 R /XYZ 90 469.244 null] >> endobj 4238 0 obj << /D [4351 0 R /XYZ 217.132 422.04 null] >> endobj 4365 0 obj << /D [4351 0 R /XYZ 90 405.313 null] >> endobj 4239 0 obj << /D [4351 0 R /XYZ 501.134 372.221 null] >> endobj 4367 0 obj << /D [4351 0 R /XYZ 90 355.494 null] >> endobj 4240 0 obj << /D [4351 0 R /XYZ 506.016 322.402 null] >> endobj 4369 0 obj << /D [4351 0 R /XYZ 90 305.675 null] >> endobj 4241 0 obj << /D [4351 0 R /XYZ 363.183 272.583 null] >> endobj 4371 0 obj << /D [4351 0 R /XYZ 90 255.856 null] >> endobj 960 0 obj << /D [4351 0 R /XYZ 453.872 210.809 null] >> endobj 4374 0 obj << /D [4351 0 R /XYZ 90 194.081 null] >> endobj 962 0 obj << /D [4351 0 R /XYZ 90 121.025 null] >> endobj 4350 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4380 0 obj << /Length 1023 /Filter /FlateDecode >> stream xÚµ™ÛŽÓ0†ïó‘¸I%b<>ÆÜq •¸„ºIv©Øh»Zöíq»qBí¦4Õ^4q¦3ÿ?óÕm²cý±Â±ä)Êã|áøF¯¾‰À\MõåÔ¹þ|=yMõ»4ž^×o€8xZ|M˜¤€1Nîó-ú9I ÇÉëùmÙ}*¯ËͲ¤\æÕ’b2K€ÐÉ÷é»èÕt_רâTTUG_¿ã¸ÐêÞEQ•Å÷ú#P*^DŒPs|}Ž>îs4ëT¯2ÆwF(‚ï!‚{ŠòÆdiŒi·Û»«•¹d³ØÞìWõR}Þ3˜q„AÅB*D²C)RAËáf2ÕêæÆ\þäXɘũP:™Ç‰±!•£—åºE>Û•E_ PÝ~€ØIúO)CRª8uUöB$)ÑâöNkm„´ÚK$õ8LH¥íYQhIu¯W›æàj–ÿºŸNf›bÛ,å«Åz¶›_ÍouÛ织‰àÉãæÒݶì["BéùÉNÓ½MµÁ!ὄ•pÿÄ)HD˜Œ<µ!¡šT7[RáÖ,æ›2ßÝ>4Æ—« áÉ}s2_nwå¬@•˜.)!M¢”éPÈÁ y¾Z?œL9WQ"ÆÂ¸vAÌMÈ ˜·IÏÂܱêåÜÆ\ôNß“ÒÞO9ŒõÀà[ØCe-ínÙp—Ú‰—ö놜òtâuf*a$â9…N‡oC†ï$=øÖªŸxsyâݾ > ½Ÿr ñþÁ;ÄÊî‰wÊŽ¿ÁS/òëÍ®²¨›>œvF$búC5íŒI휄h·!Ãiw’žE»cÕK»¹8í¾§=¤½ŸríÁ·´‡ÊZÚݲ£ïïÌÿ“½<vÊ(b‚Œ;´Óœ°Ûá°;Iςݱê…ÝÆ\öNßÃÒÞO9 öÀà[ØCe-ìnÙñ·vîßÚÉödÚ Wˆãc[»H;Ñ7-L{ÐnC†Óî$ Ó.´;V½´Û˜‹ÓÞéûqÚCÚû)‡Ñ|K{¨¬¥Ý-;>í¿·“õÉ´ƒäˆs:ÒÞú¦…ã,D» N»“ô¬½Ý±ê¥ÝÆ\œöNßÓÒÞO9ŒöÀà[ÚCe-ínÙÑÈH/ì‹ùŸ“ïQ ®ÆzöZ¡Û›C¬›Xo“žÅzëÔ‹º ¹8énÓƒÞK8 sÿÈ[Ê5-äNÍŒ÷žíW_ œÒu5üÿŸú×ÿ±™ªraHIfë›ê•ü7å²ÜÔÖ’WËæu:Q$¹3¯ù®9`Í ¨§˜<¥¸9#¸zZZÃRy·À|yñù½æâísóV”!bP2½z¹úópS.ûÝáõÂ~{þÈ? endstream endobj 4379 0 obj << /Type /Page /Contents 4380 0 R /Resources 4378 0 R /MediaBox [0 0 595.276 841.89] /Parent 4377 0 R /Annots [ 4383 0 R 4384 0 R 4386 0 R 4387 0 R 4389 0 R 4390 0 R 4392 0 R 4393 0 R 4395 0 R 4396 0 R 4398 0 R 4399 0 R 4401 0 R 4402 0 R 4404 0 R 4405 0 R ] >> endobj 4383 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 696.217 138.508 707.096] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000032) >> >> endobj 4384 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 676.127 318.242 707.096] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4386 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 612.262 138.508 623.141] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000033) >> >> endobj 4387 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 592.173 318.242 623.141] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 528.308 138.508 539.187] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000034) >> >> endobj 4390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 508.218 318.242 539.187] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 444.353 138.508 455.232] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000035) >> >> endobj 4393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 424.263 318.242 455.232] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4395 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 360.398 138.508 371.278] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000036) >> >> endobj 4396 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 340.309 318.242 371.278] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4398 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 276.444 138.508 287.323] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000037) >> >> endobj 4399 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 256.354 318.242 287.323] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4401 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 192.489 138.508 203.368] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000038) >> >> endobj 4402 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 172.4 318.242 203.368] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4404 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 108.535 138.508 119.414] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000039) >> >> endobj 4405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 88.445 318.242 119.414] /Subtype /Link /A << /S /GoTo /D (wcs_8h_d16bd8db875ee05b014429efdc1f3471) >> >> endobj 4381 0 obj << /D [4379 0 R /XYZ 90 757.935 null] >> endobj 4382 0 obj << /D [4379 0 R /XYZ 90 733.028 null] >> endobj 963 0 obj << /D [4379 0 R /XYZ 90 668.845 null] >> endobj 4385 0 obj << /D [4379 0 R /XYZ 90 654.578 null] >> endobj 964 0 obj << /D [4379 0 R /XYZ 90 584.891 null] >> endobj 4388 0 obj << /D [4379 0 R /XYZ 90 570.624 null] >> endobj 965 0 obj << /D [4379 0 R /XYZ 90 500.936 null] >> endobj 4391 0 obj << /D [4379 0 R /XYZ 90 486.669 null] >> endobj 966 0 obj << /D [4379 0 R /XYZ 90 416.982 null] >> endobj 4394 0 obj << /D [4379 0 R /XYZ 90 402.715 null] >> endobj 967 0 obj << /D [4379 0 R /XYZ 90 333.027 null] >> endobj 4397 0 obj << /D [4379 0 R /XYZ 90 318.76 null] >> endobj 968 0 obj << /D [4379 0 R /XYZ 90 249.073 null] >> endobj 4400 0 obj << /D [4379 0 R /XYZ 90 234.806 null] >> endobj 969 0 obj << /D [4379 0 R /XYZ 90 165.118 null] >> endobj 4403 0 obj << /D [4379 0 R /XYZ 90 150.851 null] >> endobj 4378 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4408 0 obj << /Length 1800 /Filter /FlateDecode >> stream xÚÍYKsÚH¾ó+tÍÎ[3Þ½`›¤œ²œGeSƲM-†¬ÀÉúßo4‚A3’\¶|@Ò´º¿é××c‘É4ŽR‘"ÍD4{náèž¾m»šÀr⬟[¿½aðÒ’Eã‡âuI $ߎ%"¤Œqü}¶FOí„ ¿™/²òj˜=dy›¨8[ÎÌ#ÍSÊÛ_ÆïZÝñÖ®E%˜4Vÿi}þ‚£{@÷®…Ó*ú×­£ç§Ì^/Z£ÖŸ[åsÏC„ßeK±ÝbvoÝåËs–O7óÕ²Ü׸òøõ«Ýåe›Ä«ˆ,7¥ ì¬&”#Ƶ£UÎÊ@aù.¸m’åùóúq’ó¼æ%&:’B"–¦ÁÍY‘Ä‘ñö§4˜G2åˆÓTµ­U~V7J0E)£!«žõJÖ3ÏÕÎ#ˆ¨´Ä(Ž@¤ “heˆ7Ý›þÐTÙ§S!#GqÀ:F˜òHŒ°nFheÜ_õÞÞ^wêø£ïD„f‘£:àDŠ”$§aš#ÑìD+â YŸXà‚+D᢭•qÐ^A}WH;5„” ÉYäðQÀš&§f(¤sªX3R+Šÿ•_DPÄ<‘£Ùo–)Ja§!„LbŒ7#´2„ÚDÄýáõ¥Ÿ¡Ð±¡Øý •`Šœ–¡˜ ¥Žà´2M8! ô~ì5&ö;C,•H{®$âÎ B\ɸ4ÔŸŒú×·ã«~σHb*rûÖ¡ÿK°tÂØLÉf„V&àÓÑíùÕM§-qü\Ú µ{%iäX ´{•NÌTmD°æ¡£’Ùógo2êVôü:•¤Á¾cÂÃQÉx8j³%L§HH¶¹ß¼,g»Áò²š#OÓ(É·£ä|¹ÙN’˯ßÊë¿°ÀfÞ®y› ˜ƒJ£jY ¸PaÕ*(!…}¨HÝÅŒ)’´¬$k®P@éNŒ;B \¨I(KãÙÓtù˜­ÍŒ7OYùô›É›éâÅÞ®ÊßÞàýMçc)kÔÜgm‚ãéËbS Hn4£v°ŒÇOà°ùº\y\¬î¦ W{>ŸÞ-¬Ùj¹ÉW ¾°â[$0ßÁq¥‚áù†S)MíÞï­{±ã^†¨ª6?yWÃ$[.Oÿý„ŽR\4A¤EY_ÏSßË Æ¹´šþ6ŽÉL+{ýn.WùýºÌƒÍÓtãöÒÌ„)ìZqÕ‚ÍBþh%†nYéÄ/ò{MM¥Íùr¾M€: ¥ •¹¢^âV¦Ù´6#ß3½~Z½,îKL‹Õlº±'µõ×éÌ^>¬ò¶1òƒ”˜"1:Ýt\w;£nùj¯ßæpìžùqÓ•RÚÆeü4·qxØ+òêérµ©Â”gÓ{HÉd=}ÈÐ ƒœ)k<:2‡N€Œ‚§h™Zƒ¢¤òés¶ÉòõÁS`Àòá†\‡@ø~ûI¡³W2eà8Ш(pÿ^ŸÚ|–bÙè’JÆ´—> c» è}›Ru$ˆNÑ‘LØ‹Žô»áãr•g6Éæ¶YânxNWÅþG „›X•*øPÐ)ä5>ð?*èŽÌ¡ S•""ʹw˜m^rÓ-–‡#ÞdvéºÝýÝ•‘®dŒá‹—<Ï*ºrÛ¾çä`U– 8k§X¹THƒT¸>J…0µÁ¡ýG©"&•í bG…ëÂL¬G…àúÂMI@p±õ‰](œ¿=¨ÓxTÒ!Üút•eCªUÕxàé– ·Ú·ThPT¸¨ÃØò` ÁçA¡ ñª F$E‹iäÁÊóÿu“aÅ¢!öš$saiRü Ây ŠøC³û´Ò‰#î§|Må ,¨`jD½Ú¬L³iÅŠIÙ5ý«,¨K•ÿ3$¦üEc;܉ê†Xaú#èÛ=ÜkBhE~•ÿ¼±¥¿šû9h“ßè‡Èº2œšÉã>HfšÊÆXïDÆšHÄì¿tOa¾£Û׬†xÏŠœN{£ŠöjßEÌÿDp@6 “Hñó_LН=RÞ½ÙABsæöØj­›m¼Í–æcAöݧMãj;ý™Ý&/ˆ>ÃôŒáòŽbóµ¨hÆ «¼¼¹9~_ÛW‘2Œn.ï^«Sñ¿¯™W曎ïžÿ¼0ú` endstream endobj 4407 0 obj << /Type /Page /Contents 4408 0 R /Resources 4406 0 R /MediaBox [0 0 595.276 841.89] /Parent 4377 0 R /Annots [ 4412 0 R 4414 0 R ] >> endobj 4412 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 4414 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 4409 0 obj << /D [4407 0 R /XYZ 90 757.935 null] >> endobj 426 0 obj << /D [4407 0 R /XYZ 90 733.028 null] >> endobj 4290 0 obj << /D [4407 0 R /XYZ 90 714.318 null] >> endobj 4410 0 obj << /D [4407 0 R /XYZ 90 714.318 null] >> endobj 4291 0 obj << /D [4407 0 R /XYZ 107.713 656.377 null] >> endobj 4292 0 obj << /D [4407 0 R /XYZ 107.713 640.928 null] >> endobj 4293 0 obj << /D [4407 0 R /XYZ 107.713 625.478 null] >> endobj 4294 0 obj << /D [4407 0 R /XYZ 107.713 610.029 null] >> endobj 4295 0 obj << /D [4407 0 R /XYZ 107.713 594.58 null] >> endobj 4296 0 obj << /D [4407 0 R /XYZ 107.713 579.131 null] >> endobj 4297 0 obj << /D [4407 0 R /XYZ 107.713 563.681 null] >> endobj 4298 0 obj << /D [4407 0 R /XYZ 107.713 548.232 null] >> endobj 4299 0 obj << /D [4407 0 R /XYZ 107.713 532.783 null] >> endobj 4300 0 obj << /D [4407 0 R /XYZ 107.713 517.334 null] >> endobj 4301 0 obj << /D [4407 0 R /XYZ 107.713 501.884 null] >> endobj 4302 0 obj << /D [4407 0 R /XYZ 107.713 486.435 null] >> endobj 4303 0 obj << /D [4407 0 R /XYZ 107.713 470.986 null] >> endobj 4304 0 obj << /D [4407 0 R /XYZ 107.713 455.537 null] >> endobj 430 0 obj << /D [4407 0 R /XYZ 90 439.972 null] >> endobj 2136 0 obj << /D [4407 0 R /XYZ 90 416.719 null] >> endobj 4411 0 obj << /D [4407 0 R /XYZ 90 416.719 null] >> endobj 2137 0 obj << /D [4407 0 R /XYZ 90 260.265 null] >> endobj 4413 0 obj << /D [4407 0 R /XYZ 90 245.915 null] >> endobj 2061 0 obj << /D [4407 0 R /XYZ 90 89.441 null] >> endobj 4406 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4417 0 obj << /Length 4061 /Filter /FlateDecode >> stream xÚµ;ïã¶±ß÷¯0Š÷Á ĪH‘”tЦIqE“K³‹öiPȶvW-»’|wÛ¿¾3œ¡DJ²¼Wôa?˜¢F3Ãáü&W¬bø«<^¥:òD¯vÇ»xõ ³¸üv¯7Þûß=ÞýúÛ¾Šr“¬ŸìçFDZŠÕãþ§µ‰„¸ßˆ8Ž×Ÿvmôr¿‘:^[JýX>•ͽÈÖe½Ã©\¥ÙZH}ÿóãï¾yìé2W:1HõŸw?ý¯öÀÝïâ(ɳÕ'Ç‘ÈóÕñNɄLJ»‡»?÷8h>ù¹…i‘Ü^™L¢Øè~e‘Š^]Uw´"XfUW4þ[¬c|‹ùõ·*p‰XF¹v,ªâp8íÈ'(`$5Ã|u¿ÑLf‚M‚¼³œëâsÕN‘I eBdm×\vÛçæHß 5|—ŠHÄŽÑ¿Åq2%ŸF*• hf¢¢\©‡²ÚH»”ÈÕF¤‘‘Ê}Ò³(¤ôØ7‘N ±Å²I²d}:wÕ©¾Ò³fÑ•-=Ëã©áWO§j]4MñÊUÍßU. ,Z®ÒXGJ R|Ñ<3Äžú8ènUÈ_Å%¯˜W"Êò$$>ÒX³LRé(" éöÝ.»ÞÓ -»–¥s/Ö‡A|Û²aQžè·{)ùBD»©‰ÐÌ"×d#Ý à´Xï˧{¯‹Ë©j¹þx/5ìÔ¥l£ûjýÛ&€®Z‚Nìfîi†6@.gšp¾ÿá/ßýöÿf´^Ç`°N9ø +oìéfÉŒßWS:ÊS÷úïÓ¯A±3Á¯ÅTm½×Û_På½Ðë×O8<5û–اeIXÆÃì2ò,Jã~3«`Afyéò2äÂ26 ÄJ›;¿™§ë3¸t;øë×°4nÊsS¶eÝh¯°í þøSøÞÝWÜ–ô»{)êgÜy|øXMí4[åfe2pÉMûdè>k,>J¶Ïúü±÷9c&2i“†LŒí”a–Ig‚¦ H£mŽè)™ÉÞ¸h½HyŒ²_t{mÑ*É¢,Ií`–IƒKó€ò¶#/g,9‹TìE™/ˆ¨?Q"&JdE6rަÜGSšqš~øÓ7¿}øÐ¥éúû÷*^?‚vónÊF Z$¯%ººh&%8¸‘$EÅ {ìÜÚN½ñÀ'2£¼c$ä Jå!ñÑ6:˜E’RªHÆ& Ùç ­öåt9 !§†¬æ`ÿºª8Tÿ²ÛיĨcLùò]‡ GB€:ŸÚ¶Úbj€$À•LàÙè5¸ $×jziƒ É‘Më¢Ø®ÊÒÀñAÆ›! |Þ/Ö›!5•Q,ÅÁ©¶$aDXa@XAa:zžC2Þ€òoI`©¹¹¡zãOwj„rPŽwï0¹+ž'òØ×‰±ƒc˜EÒIœEB”—–¥±e)A‚ƒÔvœØ–ãɉͩ =»ô¿9uñ\!Ä|Å›',Iï°žï!ûhö‡²m)ûÅÌÆfÁ/%ìX3ÕÄ,ƒø—ÿgîñV˜Pá¨ØuJVñiËeÐ¥µf#»P„³I˜M~h‚Wjw´G:b‘¯tåH2_Ý0ÈÆƒ™8à8â"ă$—äólÚÖDzƒ,ðÝÄ}h ü å v‚_mˆ8ƒOz„$IÏTP`—Z ¨€9¹_.Åâ`&L²‚8 ™zÏ ^®üŠwln»hwëÝ ¶³ÞWC©‚ó6µX^ø«]s®>3¾²Û¡‹²€åJDJ)¥B¥N ¨Jfd¾¦$ûÐZ޵®:šÇ„‹¶½­¢%H³à×çT•6ÉÇ'«€ö=¥fø—K8~)ÐeQ<#À-,­,kz ¸í+£{a0Pñ†¦¬ ~Þ•gÇÞSOÑf“Ž(S¯/`;¸ô8°äëq`— W»šÚÈ?Žú0q–ˆ³[~ëömOTcçGMœì‹V¹µñ÷5Áœ¬ß°Ã>†mH dÒUõs°ãém¯H4j= ³{b¡#’ÀI 7´Ž‚ü¡v †Þ¶zŸü«lNÑ\R×ÛrGúJÅ9Øðt݆æ6Ü÷-B_äáš·a‚™0ÚpÉ\L=Ú2V¤ aXäâ8£æx1mÁéÝ 6´ª­yãëâ3íj‚HUÛЬ­_†œ:ÎØ2föèFU]ò´càPÖÏÝKȿ̸VôMuºL%$óÈ€×ëtv+IpÐ|*«Êë¤0"è}âãía˜e’ò“$ÉvÝÉ©0¥Wè[‹®©våx-,um ˆÐ¯ÇÓÅ5è\¬÷=tuîûçctÕ`à×(sÃ` ëÃ0¸øÿ¹a-Üg øIt¹ò";2á&´›7_{ÚOΪ¨[ÎÑ&®˜}AéÓ¨âHÁ*³x¾?Y *±ÑÇfÍÚºnœ6BàÛý†ÙžZ1Ô¸„O¹„'9ç ûI”Áän&ÏnözãÏôB”oHŸsAùð0Ξ d™pžûRᾪAmY¬œ?«^‚”?'˜Ø²˜Ys°ýšY› J›v,Cu6›ª¸2‰fÑýË¡ëíס,~iåò\S¶¶h‰±AV‹v{gMYìûTÙ®€™rÌƲk±JHÛÅbFìÁ\ˈPˆsêüXv—=S}=^"Û{„1ÝÀÙ#8$üÐÝ¥uÒ&X}+u†Æ"ÒHÄר!˜4À…›‘èrzH#¤‚:p™Ü GñÇ'¿£Tøá²ÛÙìÚZcdõÖZ ëke˜[k]¢çÖºHŽ×ꑼÖï9ñ #n™T…t¯‡{†^fa„r!Üç2’Â,/ša–Iæ*Jcät•sW(U¸%7·ËØ,•òÆ.{@WwÙÁÜØåEz¼ËËäh—}r’wù;ÏSrúA1½®-è*×ÄŽF”‹Ìì¾E_äœ3ù>ž#S*Ww>ð¿3çq$]j!\=K?³Z¸(mGìvá—¢¿ €¬“žv’ ,„iòHf7ûõ ½ñÀgzJ!J?§4ð¸ë>ãhÌ0Ëtµ‰2ÈÅ|º.Š•u±q}åäQNºçÂD&Îß(½ÈÏ%ËDðwbçj'?‹£4Í%â`–9!Bf:êØq%dP´ ù'é*—–{kAÜ*E\I’Ä Ö<ðo¯m‡írÛ›QN|ç'MâNý`~ëÞ—Ø<ÚøÑ6„†ï±«Q·¥›+ºöæpu¶]ÕÒ\ÑÍ µ;mH4U4´äá—O.´Ï><û|Š ûò\Úö#ŒùÐ׎Fε‹ô84“[þàiôk/ÓS`@-5Öë÷LæŒ/ªú`W™/;„Ë=–E®6,DÍ\µ02RÆuþðõÿç©Ìß™’}ŸÓ¶z?³¶3ÎLÓDS=ƒôäâ+ IÅpTŸxé^WÐ)ÎÖ<éñJ½~Úì«âùÔ£ÃN½//îi‚@Mx¤ ¥êiWõ½ÑA­¼^óàåH—°eÉàŸýƒžOU÷ò4¸O-=½ð\wG¾+É@[íYzKOÄBî4&ps2ÈDe,#-n[½ñÀ§o„ÒFŠb;w‰%‡$JŸ€øØÇ2Ì2É<÷.’1íúé8Åâ#šœ‰ç„’äØº3oŠƒ^äpŒÒ n[L ]‰ Ùô’PÌ"I……¼&“ŠuŒ ]¸"Œ„/ž¯ºŽÒ·ÄbóÇÚ§Õß3$çf°#ÉðvÖÌÈ8’±w1èKÒ{Kî©+›i¼Ža™ Ê&ø5·ro½ñÀg"wˆ’Ù]¾š4¤*Ê„™+4Ã,“NÓÂD@z‹çÈ—ÎuÔ‡“2ìæÃóŒBÉä²aàEþF¯›x’åöäkI"f™b.ìEtŸ$¥ì~7.EzrÈif©t¥™y£ ô"_c”¬$/{JÐ^&,€#P™\ˆƒY&|Zâ¡™½R{WzçÛÊeŸÊv3:LOéžvgëx¶þ©j3ÚŸÚ›EÈÌ~tIÉ/ôlÒ)$æÚX;ðåÁ·øñ÷¥l)3§þŸ4`Þ:J„àã@|gK;õÚ£¡ ºr„Sþ•#|S=  ”fá¬ñ8m¯Ù)ï–ÌÛüfé–Ñ4Ǧ+GãËÃå?wÝw‘6½jà¼ÐäÖÑ5㎅\>oô€®üÑ(†&gh©Íݹb˜ Wa! #iLÀÕƒ×%p‚—‘±0›Óõëâô†¬˜«¢b·ÜÕp½Ù±ërKÜh‚…ƒ böêUÂèÿü?âìóAªŠàF¨Nñ¿¼aÇFSdøCY— ]”³E R=Þçrí.¯}p{ èGäïbù.‰é R6áN¶äplõׯþ¶ðþwüiÉ? ›ÐïOŸ_ŸËÉ‘þÏ3è‰çß!f endstream endobj 4416 0 obj << /Type /Page /Contents 4417 0 R /Resources 4415 0 R /MediaBox [0 0 595.276 841.89] /Parent 4377 0 R /Annots [ 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R ] >> endobj 4420 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 4421 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 4422 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 4423 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 4424 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 4425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 515.433 162.169 526.337] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.849 485.545 396.866 496.449] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 398.008 193.212 408.912] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 366.128 355.36 377.031] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 366.128 481.774 377.031] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4431 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.708 294.391 399.242 305.404] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4432 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.255 282.435 147.894 293.339] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4433 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.087 270.48 248.274 281.384] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [267.289 199.366 297.505 210.27] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.05 199.366 420.044 210.27] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 4436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.517 187.411 275.811 198.424] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.233 187.411 390.45 198.424] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [456.79 187.411 494.479 198.424] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 4418 0 obj << /D [4416 0 R /XYZ 90 757.935 null] >> endobj 4419 0 obj << /D [4416 0 R /XYZ 90 733.028 null] >> endobj 4234 0 obj << /D [4416 0 R /XYZ 90 357.161 null] >> endobj 4430 0 obj << /D [4416 0 R /XYZ 90 342.591 null] >> endobj 4415 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4441 0 obj << /Length 3149 /Filter /FlateDecode >> stream xÚZmã¶þ¾¿ÂúA.Î IQowHËv/¸ôz×d7í‡äȶvW-m$9wôÇw†3”)Ë’“b±M gȇÃy£ÔBŸZdr‘D‰ÈÂh±Ù_ÉÅô~}¥øí ^¯¼÷_Ý]}ñ&„Q"‹ÃÅݽ+iµ¸ÛþÄB©åJI)ƒO›V<.W:’Á›rWPë»â¾h–* Šjƒ]™IÒ@éxùñ›»^.Ï* c”úËÕåb ³ûæJŠ0KŸ -…ʲÅþÊèÛ»«Û«o{ÔBÿ¹…%…ŽÓÅ*4"MÎ’(©Ej@‡BÆG”9 d". ¢ðg\ÎoLê‘ia"|ñ}þy©dP´§«Va*B.¦7k¦h‹Žv¶ðü­hj”…YÁжLǯókõ¬P6 &,i[nòŽeôÓé!†¶…òÑ/‹08…ÛTÄwÙhÇ?ñø§Ì?ðOƒOånG­5iŠîÐTÅ–Ùò(‡güéKzJPÆPç›e×;ã!Ÿž"Ÿ:¸Ž‚ùñ-‚°Ï¸ Ôr=¦ØûÈ §T£3®d,R™þÁCŽ,½%Z¹½Ä²¡fÝ”e•ïøh‰=¡Qn‚”H²†ÞZEòuݱëð$VÛs¢'À0Y°åß9=¶EñD­Mý„ö÷™§vÏϪ8µÇaŠh›l·"kŒÝÍ¿ÿγËD»òˆGVyÈ >ò©ÙĦ‘FŸ¸G3/0Eª"Û®9lº!vyx6G£Ë—j¸;le`ŒN< [Û•uEÝëgznêºÙÂþ[]Ô±3eð¦{~b¤îš tlqlZ`^tõ%vð£¿+öEÕµÄÀî!ôö¶ü#“×ôþ¼©¸¯w»ÝÌ'âH´OŦtJûÔOM½)ÚÖª/uîóS´_ql¾;íË‘'×™ˆÁǤj“3ÍÊ#{ò0ƒSöŒì9Õ: QÁ¬<"™š¢c5÷ïëÛÛï¿úé݇÷_¿½ûþo7/iõ×°­Ý{‡×®®Êî°-ÄQf„Qé<Ñ$Žæ³òŽYq ‡/ÎÁñÚTw#H:Àä 2óˆ¤JH­. r$šF„i.!2'Ï!2'Î!â‰cD®¿ÿêæÍ21Áë¥,(ßòíæ ¬ r.~ú  º—˜Ý qÈ$pSt}3vFQ$Òc]¶Ó¸Æ‰ˆµ¹€ë‘hW¦¹„ëœ<‡ëœ8‡«'Žq½ýçÍõÝw¯ß1ž·`¢:È¡§có8DFh}éĉ¦q`šK8ÌÉs8̉s8xâw˜8~øûÍ­C¢«æDÊᵋ/RX<"IxRò9ð|}ˆбÁm]°gàà ºïk{Bu˜ö÷¡%§ˆ‘·uŠùþ ìÀ¹üCEÑ(”/Æ"´0Ž´B‹Ó/?ì…Föš¼%ôyü qY… 1Ü.™’ü64ÖLɱ2¹ï™4Iû„-»#¸µ6â;ºàªv)V?•>µŠŽXSür(€cnRË›ø“r$Ø3ØŸÇróÈYWÞ2“Šs­}±¯›g¦%Ø µæ,‡˜Cè-2Çx>2ðÂez°Ïé6ë5.‰ ‰cªk\^:€lŸ—Ö[Ll3p0Ž圿Ã0ÎÛí»ý¡efk¦n÷¨¿6×-!Pb¡5Qõ:b'ˆ‹Á^;S%1íMÛbïyÇ6ÅægÎbs»×1ä’EÇdOå²[—Æ7åý3‘ÁÚ1pp? —{!ã‰NÄN’UmÙv°&L(ãÌ)&¼rÏ-Çò'[AåÈhi!Óha’D$:¾â;ê•G~Æ€ Yr˜™ê¨ÕØÓI$h¢†s8µœD2/xÈ厽W´L¬Eš¦óU/h²êåh~OÕ PØR:Ü‚Ä%óSbšÑ”ë‡ãš@ŒæOéÖ%;Y ù_»iÊ5…ú—¥°áìÜ-bM §6©Žzv’§,IàË—hîó‡Q2Fþgñq4³¢C,Êh º}¬»-Á°vp ˜=½ð\)zZÛOÞGj£ÿÍ[ú>Yð„éRa xåŠJ î81ÃRÚݳ+ ”˜G”¿Û£î 5ÒX9Ën]ÆÝMÑvœÍ–œÈ—üû87Êåh>ç…’±?Sl•-Œ Óó9“¬<šQ‰<Í„”fat*d˜r$þ­[u&utgtFìñŒžÈwF™†DÞZ‡!'©ì™é—R (›0OL³òˆÆÓÑJ¨øÈh2ÔFÄѼ<"¹ Ž‚[_œ„À1¥¸=l0«“kM æ’ k=M¯•i.­uNž[ë¬8^«'NñZßÀ½ŸŠ¥=Œ¹Ón©ç§pÂrºº¥2-´ŠçÍ4ó"agDrI•Ï|nw;½Ë1„Ò*»°ËG¢é]fšK»<'Ïíò¬8ÞeOœæ]þ‡g*9‚¥’å+ÐYîæ ˆ$-èi¦ ’K8Ìs0ÌÉb޲”Cám…•¶e%{’öX¶t>ºâºå4(àU!—¹€Ê‘h¦¹„Ëœ<̬8FƧBgêjÕOy“¯Ý]ì,ãú8’î½Aæ’br&-g´ž÷ƒÐ- ]ç¯ãt¯a]„¨^œTì;«¶œ[7¶ãM7ý8[wy@éØ †’±Ü¡ÊDéK•|¦^yäãhê„¥ÈÁLÇ7 F„¨ þ N£8¦™—ÅðÎ äºÀ§¨ps·/£û £bËìwâà¨gçsÊ’q~¢éLe=&•"IÒYDÍü Nõ‰Ï0 ƒ`™ÁQJC¢{UŸ—c¥Ä¼ëp4]×û5 0¶Â ùGȘA=åHg®+7‡]ÞP?V/ZzÅ…Ã…”“ÑPYÆÝ£Ì|ÏÔ5Ýyc'³ÖÕi,æ\o6‡fÌiúÞÐÑ*¬ŸÝ•BÐ_“<Ù‹lw9Ò8H±^œË¼ŠØDx­M(d6ð“a¶GkõÀÈE"°¶vë}™vÊЮé/v%¤z¡ÀlE^Ñ,–2ø’ê×§,á*†¿™È?ógñémõþwøòõÝä;ªæ.W*xýîÕXó ´ËðµÔ&2œ¨ •d ¦¿€ÁK3Ü÷ÐÅ=tŠ%"p…èéï‰â™sŠg(¿ò©œ÷„ ì­x¼½çÑUáŸXP¾y<£‘Tcukm½gT/"°>êb½T¤G襊Œ0j}á;5Ž›ðâLD¨ žiè}`$c¬LQü(V¥ýÄÉÂ%ýö_ß¼»¹½{ûú¡ŠÝ“ØO ð'glZ`‰{o…hìHÇÕd εÿ†ç?g´ÍQø¸Ÿ»àóÎb%É4kˆA"÷aÁÄ‘+ÔKª1®Tª¿suykTN’~þ¾Äۨʞ‰‡%B6œY_âŠyôRËÀ½þ&ÀÙg?Xìê°kJ'B?>›´kí”]S:™ŒÎÚ5sÞ®™±]3¿Û®½r'òĪóÃØâ FyÂôÙQV!^_OÊ ‡£VKœ\Š5±wxI„AÇ«3ßF™ˆ¢³u´WÑuÿ߇ökÉ8…Ì ó+A1l¥á%Y:.ñë¢*ÖWûý =ï–™¬ŒœÒz¨ì¥Ô/CI¿´Tîr s§›Ã;0 o¿â¡"zèÎÿV~~(Fqr¤Â3ðüBL endstream endobj 4440 0 obj << /Type /Page /Contents 4441 0 R /Resources 4439 0 R /MediaBox [0 0 595.276 841.89] /Parent 4377 0 R /Annots [ 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R ] >> endobj 4443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.504 645.298 386.038 656.202] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4444 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.088 474.573 176.276 485.477] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4445 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [282.315 459.735 336.331 470.728] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 376.604 193.212 387.508] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 316.699 355.36 327.603] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4448 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 316.699 481.774 327.603] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4442 0 obj << /D [4440 0 R /XYZ 90 757.935 null] >> endobj 4439 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4451 0 obj << /Length 2772 /Filter /FlateDecode >> stream xÚµZM“Û¸½Ï¯PnT•ã“ }Ënì·¼ÞÄžT^WŠ#Q&)“”íɯOƒhð›¼ÞÔÄ!ûu£‰Æk‚lEá­bºÒJ“X¨ÕötGW8ûÓ븼é]ÿáþîù+w‘8«û}s{Ȉâlu¿û„„±õ†QJƒ/ÛŠ<®7\ÑàUvLíÑ»tŸ–ki¾5§b©£€q½þxÿóÝËû–½R"4¬Ÿî>|¤«x÷ó%"ŽV_à˜Ç«ÓäwïïþÞڰ真 L11Œóad\ª&²ûGðW„qpLªŽ4 н=S?¦^¬Îé6ûRžVöDrÙc(°Å6±Š›˜pÞŒïhQá*$Q­Bn–‹Ð. æBy@Ä»ÞáЛ|²HŒMbx8Ìò("’ÇCòÑšä0~ʘFù€2)Ëä çáiL-%ZÞ·C{›Ä¸³ l×Ó&e‰[zyW¦H%Çì¿F:ãxM«3¬«„)qãH9´×ñ±ÉëSVQI"ïˆY„—vhd¶>EŠP¯”ŒA­ÍwœÙô0“®3Š ¥r¥B%TÛ Ñ¤ LN)èÄêŘVL¢Ÿcžxà°¢‰‚haã0Ƈ?MuãD*9N¿„9ç„L¼LkI ùÀ› (”YÕ×2É+ÐG§Ä¶‹FžÛ[LL; +ž7Uf1Uê½´OÅ;Ó Mœ{òä¡íò3â:Ìb ñû:©/8Km?bÛÆgÆkEÆœ„’/¸c1›hêÕv†šê˹šrIBåç³+t1 ! }:ú¶@ï/ÛmZMÞÆªa™ÏkZŽ1×bõñ¹X½tkŽa¬o/°iC(PZy ®Cû]™\^œ`=~(ô?%(QMÃåºÿÚµŸçdénVOP{+H^ÂuÔo*Ù¦ò\Ö]?¹-r'à—Ýj¸Ø]j`ñöÿè.9…¶˜ñqwi<ž(Ý’ô„¥s ñVöØöåLi¶§›f~':‡3G Ï¡#ÒêZS‰èM>íðF&=M¥2ˆ!÷¸§´?¡â0¼l@Ø úÒá0x *û­;´×±É6pHÏ~±±” žbæ‡ñ³ Y³áqü’dVÇÃ`˜)–ïý ÿÙ÷ p°Ë’C^Tu¶µÏùRž‹*]\WL ÓVùÖÕfi]Э¨0ü 4ü¼ÄŽ]˜“@c'–¤¿[ùÆÄ© ±Cs*¨ïУ‚„ˆEíÍV‡YÌ– ‰ êfä£íR4âSAó}*Hpß« ZÈ¢*°ˆ+šÀÄŠÀGdõ@Gt«òð‰ðJ„h9FÄ\‹ÒÇçâôÒa¤=º[”Ï€÷ºòñº02y]ùxƒvÊÇK‰Ê§OùýÊGÏ)Ÿ´,§Ò Fÿ-À¢î‰ æêÔ=ÏÖÐñР'Á¶I9eV‚Äêö×ùç25ûl_§ì\ˆ²©ê‚,IÍ&ªËŒÖô™„ŠÇ&²K0ÙÊ.sl7¡àŒ4›>L'˜«É!m¶1Ì]f_K@†ö™ä¦z>­Cà•ª.Êf‡ ®6Ûž5Ñ P@76Ú)òšnAô¦Ÿ*‡‘IÏ»)È–bH>+ˆñSš=`´%E³ûèvüÆÉäíÆø-ÖëÊМñä˜å3±K) ÓÞÐâ§š±cBpxÞoŒÑWh‡& ï6=ÎÅi:2˜Þ@ã§š52{&·>Îíç™´Eâß3¡*F‰¢±7T‡ñRŽ Í†S¨H‰u|%JóÑJ9÷i‡»l?|ØÎ­WÐ… 1d/Wâå™Á:ΣvóaÀ)¡Ÿ“./ЈöóLêäa.à0nÖ oĈñSjNÂx8ÄMm2¢SK÷ÞŽšm­š^Z,»²‘^ïíóuLjÁ‰;È ûÛ,U‹ËÝÕúÑ´«–)›¥Æhké/ПMgoD˜b7¦À¡½ã16‰Ë¸ÿ¯ n_Eh¦·}u.÷-J!§\Êå²^¥æáè@óíAÏ{:AZ|"ŸÍʺÔ1øÕ!÷6D=ÌRCÄ)H ¦¾¥}a^îÆ.̵¯óÝí«oL\û:vh®}í;ôík;hšGþF²Z,ÄÜ8X}m9,t QCí÷ 1¿†csJÆ¿^ïÝF\¾yû7oð‰N“-~X\êö››£ÙvÍÓñ¾­Ûøl0Ÿðìª~²ŠÎâlFM íŸ-fi¶0©‰Šâ›_øh»¬xç^8Ì÷½>`ÐÍÐHùÛëh±½v˜+íµ—Ûk?m¯ût·¾JˆcÞúCí0‹‘"äJ >2ŒÓËeÃìqÝò¡Ozý‚hðú_¸î‚ßôø–^ŒÔ§‚Y f—[ æY¨~ÿÇÊf #x0â~A0H”¬Ènüý)ÍÓ?zë}„q¿ŽypÁÊõ«{A!í‹_PþBPû´«øÕÇÞÌ[÷9ë?|ÿêáëðVÞ~¸Ðüþ¥øút­5éÄÌðüElx! endstream endobj 4450 0 obj << /Type /Page /Contents 4451 0 R /Resources 4449 0 R /MediaBox [0 0 595.276 841.89] /Parent 4377 0 R /Annots [ 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4462 0 R 4463 0 R 4464 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 4454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.891 617.043 289.425 628.056] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.751 617.043 364.391 628.056] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.198 617.043 428.385 628.056] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4457 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.518 617.043 467.157 628.056] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4458 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.164 587.463 340.698 598.477] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.157 587.463 505.796 598.477] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 474.524 193.212 485.428] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4462 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.232 417.622 251.766 428.526] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4463 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.012 417.622 346.268 428.526] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 4464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 304.683 193.212 315.587] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [321.205 247.781 354.739 258.685] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.604 247.781 445.166 258.685] /Subtype /Link /A << /S /GoTo /D (structlinprm) >> >> endobj 4468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.952 247.781 478.61 258.685] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 4469 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.395 247.781 511.506 258.685] /Subtype /Link /A << /S /GoTo /D (structprjprm) >> >> endobj 4470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 235.826 120.326 246.73] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 4471 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.737 235.826 170.953 246.73] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 4472 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [477.155 235.826 513.996 246.73] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 4473 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 223.871 108.7 234.775] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 4474 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 95.968 193.212 106.872] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4452 0 obj << /D [4450 0 R /XYZ 90 757.935 null] >> endobj 4305 0 obj << /D [4450 0 R /XYZ 394.237 669.575 null] >> endobj 4453 0 obj << /D [4450 0 R /XYZ 90 653.288 null] >> endobj 4306 0 obj << /D [4450 0 R /XYZ 90 467.998 null] >> endobj 4461 0 obj << /D [4450 0 R /XYZ 90 453.867 null] >> endobj 4307 0 obj << /D [4450 0 R /XYZ 90 298.157 null] >> endobj 4465 0 obj << /D [4450 0 R /XYZ 90 284.026 null] >> endobj 1469 0 obj << /D [4450 0 R /XYZ 90 89.441 null] >> endobj 4449 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4478 0 obj << /Length 3317 /Filter /FlateDecode >> stream xÚ¥[mܶþ~¿bÈàeHŠÔ‹‹HR;qpuŸp…¬Õݩݕ6’¶öõ×wF®D½P‡rZéÑÌðr83”ņÃb“ðM¤#–z“¯øæî~%èéïÏ¿}õÕëÞbIlÞßw¯‡‚i)6ï÷¶!âz'8çÛOYïwRóíë⛫wù}^_‹x›—ÞJTo…Œ¯ïÞÿxõêýE/Y¥ƒµþvõáŽoö`ÝWœI¼ùל‰$Ù¯” èúpu{õËE†¹Àý¹i¬LŒ‡ú22¦XL£+ÊÖŒ†Ùätý+×¼iësfŸ]‹mÖœê#ï«×BõÒ…Ñ\ƒ-(üW΃Qq‰˜Š$!@ MŠ%J]dhÍNDš)p\°P*û>šÙ‰²!#&xÜ‹à˜T| øÆ\Oð7H¶éØM"” äD*axÆûõÞ 'ðn€îHš3H–ƒŽæD1 WõÈÅãט„L‡ÂQyñ!Œ=ͲªÞ僡 ­Ìí¢¼¯êcÚUIlO§C‘ï ìSÑ>ô¤ IÈnÝÍÿîg' %>ææÆ>o²º8õ"«{Bbº>Â$`*WHÇõ;@N†?ä![ n•c² ãÕ&¤b<ŽJC6N;6á»À¼`¦²þ=S9HÂmgÕCYü/oðwduuE“!½þö»Ÿg(XVvAžêêßyfœ…*Òrodgpœößk¡·yÝ6æ1N‚Nse~w^ÇùoçâZjÀÃÿR‡¼lg–z,!Yå·oÞΘǙÖÑšy‡â?ׂosT÷©hr2 Oéx,цç¶NËæ¶ùLäQœÅk¾¿¹±&{­7 ZVscbalCàí뛩@ÈH‚Á$ß¾A&£CS™;h(G¶š[½€úæÍÏ·æVs>êô`î·O'‹Å©2c\ÂÒýåëw¯~ÙÝܾûrj$ì!œÛ‰ób*I³0R9¯n~ÚýðêæZ€„É^Xg`ƒk3†Óù¹+w á¸ëT5Mññðd¶žì1-LÔÒD^åéL›Ó#ŠM÷]8‚Ÿ4+`Ò>}ÂKzÍ8ÈH‚?ô&Ô¨v-Þ[ônŸD„±È>½|™¡“Æ6‡-[¹6Œb‘Åx5Ä éj†UòUUOTB‚DÏ5ýª]Ã1ã,mž&Ì+³¦oÔãU­T:º‹{3Ê<Ë›&­Ÿ®C½e4Ó”Ás‰·U›Û(–¶öª HWWç¶( Pæùž®`¶UþHO³ôp°Ï÷éöðô—ë Š—!„¨ÃÁ}© ð £2“–$||š8.lBÁv»D¸5Ïz7€O]7i}'›ËŽ3ãºG®3®CŒWµ $xW5†õ±> ±9VÏ´Eû5DÚ]XžCô„\Ö;hÂøU'œE‰«ç«ÝCgò")aÆÊçäE=r6/¢ÇÃ剉zú0É”„¨­\Õãüˆ0^­B)¦…vTãºÂÕ‰{gÌ+)ªW@@m|ZÌü9Õù<,Ë.+…›Çô¡ÈÌ¥I7çœkÆaßÓLÉyÇb×C&ÅSœÀž¨6’ëHšqüŒk5­ÓcÞæuórÂ!—,‚LoªwJ%AÇ8õX%AЀ?O+,!!ëQn‰åhÈb|\blŠëTÎx"‡¦|Wu5EÚÒ¶Ü¥ZNA‘lO®]k" ¿zÌ¢“°¥úý]Þžkœg¥ÇCµ½kFzB¬oÓ¥mÚži¦×hD9š§3æÃKæÌnš)Ja/¨+¤ÔÓ*H±PûõÈŠºJ\á¨ã/1+åÛÛs†[0[+WÅñÊX{ÐòX ³6VŸ>;V¯:ë@ ±¾=ÃÎ>é'ð.Yvôz í7a$Ò×R€TT„þAƯ2Q,â¡£òTA d£õ)… v¿èeC%«V¼<-zÙbV¼ìÕG^ö«3^ª“äå¿çǪ¦š²½*³~ßw;BqðQ &ù=h™ ¬QáÓg©ðª#*ê¢â²â´^øÝî܆]Ÿ©T£hØÀ~>À‹š’òYž´f2\ã©-óD˜5ž|ú,O^uÄÓ@"žÞ”YU6EÓæ¶ÇZkçòÒȦ(©ÉF{iúÙ2×ÕøË”ÉbjÚSÖƒ–)#Ìe>}–2¯:¢l N_(£š÷Êbo£ %kß…° ^c¤-3B˜5F|ú,#^uÄÈ@]èc$[J»°Ò/DOæu¡ þ*µFUZ¦Š0kTùôYª¼êˆªºÈRu8ì`Åí d Ÿ£ ²Ñ¹€5âi³ƒ1% :¡YbZ¯1—´Ë×äuÔMÃnbÈ‚À6½þ:ÓäLÚ,]¼pêœ}Þv;ˆù•×µUvÄVÆY‰¥ö¤¦('½2à |Á4_íz7€O{#‘ÃB,X ¡Ä…7 Æ-Âøõj(¬¡¬êµ=ž¼L?]/,“ Z‰…d«L hð:*èÎf¦:Tĸ²ç§ÇbÆa“ɲÜ%¡Ösí#ĸs9Sqà ö®Hþd¢óaŽŒ€ ¾ }~z$]‹Ó™^ÚÎNÜ G2ûck 93‡m|tl‹lzº„ÚfŽ­‡›:Å|˜OÝQÜÁÙØº?·‰bu9¯ç†Ñ¸Ø‚‘0¿øJ f€YjÁH<©¦Ì3ûd3š—»1cæ:eóÇZe>Bl¯llÍ\³lhÍì–] 9ûûVÐ2S„1sOñ²Lä}q ™Žm0Ì@i¿m„™Øæž”Š®*ÚöÞ‚FÛò|Äè…•þÄï ðï`~ãIcló4{Ägácޱ³¶¢wyù€Ç‘$¹TwùOdέy‚>äeeתƇø1PÙUfÝR×~èDe'á„À€‚¡lðÔ70–®;^TâåñŒ;K‡þíŒ'»xÙ%€x -ÿœuPøÛœ†Q_þ¾>³'D,ì¡ú[â7ÿ|3s܇‰ÚÆÕ™³T£ã\ -µGî¶é@›t7Ë¿þÚüµ oAY÷§Ç"£ïª²´ÉíÑÝKâ£Û:(+JwÏóí&Z°“Èhm]ô åuA˜g®‹~£wÏR ኿U„™X嬖cÔ7uR/ªº÷í³!ÿ‡},Xã«-óE4íO+dõI‹KV ¹`ì7‰0“\²–¸YZ$Yø·kaó}Ñ­R-/;&¦F{sÇa消©ÄÞA`²6m ¥¦ÆƒtÒH?Ü}À˜q(îeN:a –ýR%c_IÛ;*ënuˆþóú*&ßOkPÜxâÀ~kòyæË YÖ»F0åJ’°ËÅ6d<Í ’ʦ™»]Ãe.¶§&?ï)/ùbß“‡:Ï›/0 1¬¬ÅàÛÓ³„Òç€!0¥fr`b ß¾s#Çàƒ‘¶Û9.^ïÊFG]?„Q¤º}cÛvE»¼œ ¨€D6ò/§hq9YÌs–äé/.yµcÔÎ*ðe ›ÜS¨…tlº©Ê‡¢=ïmŸ²¤@vpÛ’‡´['·ôúu¾—Õ<5m~tƒÛxÞ_:7hBÝ-{¢†Vk^éAË^!Ìs¼âÔ#nœƒ*òe ›ÜäŠk-›ìž …¡ þËøéF´  ~íáã>šáÏA4“2ìe9­–û‘:7€!¤ `pA“Á,çª#7uê-¸Üúyð€¾üÃû—y†·/SD3üæ&Ïaã×ËôÅÊéÀÅ\AX÷h3_àánÓÀ b"‚;áûw„üÜoyîò¸K/ýs·-Ï]Âq,é¥} d×cfí Ÿ Èbs×lìUf^]¸¨C1ÔµvœžðBÁw3:9ˆÆ¶ÙïþwæÛ¢fSóÃ&)ú´ˆ´wÏæe^§­í`Ûýþ:‘[ëßì?(PT$/¹|póKr!ìªì»íÿøîö–É›oéU4™Ë”ÿ­úüôO:áø/#¦ôüÇ‹±) endstream endobj 4477 0 obj << /Type /Page /Contents 4478 0 R /Resources 4476 0 R /MediaBox [0 0 595.276 841.89] /Parent 4492 0 R /Annots [ 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R ] >> endobj 4481 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.634 702.288 195.168 713.192] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4482 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 690.333 122.538 701.237] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4483 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [271.279 648.798 331.931 659.702] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4484 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.374 648.798 429.882 659.702] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 4485 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.646 631.174 429.603 642.078] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4486 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [449.887 631.174 487.845 642.078] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 619.218 143.02 630.122] /Subtype /Link /A << /S /GoTo /D (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) >> >> endobj 4488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 499.935 193.212 510.839] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 388.354 355.36 399.258] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 388.354 481.774 399.258] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4479 0 obj << /D [4477 0 R /XYZ 90 757.935 null] >> endobj 4480 0 obj << /D [4477 0 R /XYZ 90 733.028 null] >> endobj 2212 0 obj << /D [4477 0 R /XYZ 90 379.387 null] >> endobj 4491 0 obj << /D [4477 0 R /XYZ 90 364.817 null] >> endobj 4476 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4495 0 obj << /Length 2857 /Filter /FlateDecode >> stream xÚµZmÛ¸þ¾¿Â=ôƒÆ<¾K\à $irÈ!½k³[´ÀfQxmíF=[Þ³ì&Û_ß¡8”HK¢6×+XËÒcÎÌÙá E6£ðÇf†Î2•#Ôl½» ³¸ûýçKx¼ ž¿º¾øö­€_£Åìú¾ù¹fDq6»ÞÜÌ5al±d”ÒùçuM>-–\ÑùÛr[¸«Å}qX°|^Tk{ËÈ,Ÿ3n·×?\¼¹nå¢VJh+õ—‹›[:Û€v?\P"L>û ×”0cf» É^o/®.þÚŽáî ¸?d˜ÈÚÀ…$y6½ˆc—„êŽÎ;˜0$3bæ1–…œ«s‹˜„ç³`¨¾<I‹“9ášEâØ.KÁèü¥#ù®<º‹ÝªþÙ]•Õ¦\¯Žeõà¿/$ÿ{ÁÕ|µ`óm¹q÷Ë/ ¦æÅÖ}]ï÷‡MY­Ž8}ŶØÕñ#U´†Œœ[™+B™™éÌi†­DÈ2Àô¼*7„R9Ó\@f‘Šãé`u«êË·”“Lð¤XéÉØ¥ɘh²‚¯Ž«ã©vö¬•»vämOÅ€:8ŠDålD‡Y ¾:œ¦»F}‹K¾”ç ✿‡â(ºÖÕi½.ꚌÚ*3¢! Ò¶v q[3ekJž·5)m Ä1´õÇÓvÛ«)Ñ™ŒåÚ‡D|5@tZ…³!­ 4»žpà g:m4bÒ"$Õ‘ÈÇ}Y!)»ø_Õu±ŸeÁHNÕÄ,w ñYFÌÔ,§äùYNŠÃYÄqœå?»ýáÉ™½Ún÷6=î1¶ïXÁª• ‚)bX6AE§1ST¤äy*’âŠ@œ@*Þ—U±B8VU}¿?ì:à‰¬ nñÀlXÃrrÚ•šóD)¡Sy¡ÅŒ³ä S$%„yŽR²¢N–D†ÞUë}U—õV?güù:U‡b½¨ÊÿÀÑfxÝ\}ñœŸ‹ñ,ªrI˜äi¶Ð(]3ÁWR–ç Å©–²®Äèê‹Õaµ+ÚtÓ®¡ãŒh¨w”œ`¤3‚˜)FRò<#IqÈH N§9w•6þÀ›‚l‰K8âPÑê ª:Ð8Uˆ™¢*%ÏS•‡Tâ2OÕv»„ˆÛ”–bˆ*iSÕsxš@Û1ÁSç 1S<¥äyž’â§@\Ž<ýTq:‚5Íß¹G‡úTŒÖö6c5„bvú\ø_—±¯¾À­Èõqß­³%ðg4:ÍRäbä­Åy#\™][ð·oYÐHM´„´ùÉÝó¸~'\âcæuv›âØ,èØÈ-cP֮Хڥ­8¶<œÍª šÀdϧDi9Q zô2€÷fø|È®¼¼M{( #b ÎÛ[Ĥå*MrHR¡Üݦ¨Vw@× ÏGq®…dšhjžÉƒG'õ9y þéÔ±§í;{ºä”d)F<&­ÁÙ@Vâü,ìO—Âà`’C§ÊÛ½ë Å Ò– ‚ kBÍí5Ÿ7­óñpZwϰàO—as ÏúòGJ…ÃÈ<è’ 50N_M&‰‘~ ˜I­²F«ÞH\,÷ÀªÉ³ýÑx þÜÑ<°²{ƒj4‹³%Ò²ÙŸ`ºûCkê‡þìrÆvHWóà º ÑÙüÅŒ½„ƒíÚ`r Òã§r€W˜Ó\Á¤7ƒCZz.hAܯ SWjS"s1:2Œ;¨¹Yz…ÊÝÃzrú~Ö°‚ ­ e#C{ˆ!yîu³X ù®0úlLû°„d‚x¾dÐÉò6UØ8ë­ ´¼ %L!qµå@Ûø5.T@L°F÷[eõØ®˜¤ŠHÆ“»bflWL‚sKÌMiU_òŒnŒ Hß ;W!JKXyŒÕá÷ýùeœH%ãÔé%$Ë$!éio†B£fx¤Íë±zÚ‰°Ê'‹DÇ‚²—é­Ä4Ê”Ç8ß“t‚,—|_´Y3Ò ò“*­bzºE¼åŒžEº]ÛÚM°l^vw6ÜW[FÚÏÀ¿!²…óbµþdŸé{Í÷mQ=ÀPÇO8rcTsy·àÐ:ÝÏ!ïCmV5›Óö¡}sP5-sêŠÝDºÍÊn'ê 1à¾4LçRh¶4¶ºi/w'»¸4è_N«­»lŠ@{Ëjþe]4õ!|w•¬Îºñ÷Ýó ›‘\øEíGkâ˼»ê'$¬|RýÙ†p#ÿ ³êpª¶Pš:”Ì<=$×éÆË¿ûÎ}ú¢·Ävèó§r/aÖ«CÂ’Ó²‹wsª=–¼§á@Œ iHÆõD\t ñ¸@Ì3ã"Zë{ïU²´^ÒS«÷^E±H­—‡Ã :!ÑÃá3Xì×(é/•1¶ÑW 1D×v무þfï¬ÜšÑ„P,77·76M²9ÙV·ˆ­6gB- 0ÛÕÑ£ìÎ\ἄå°F>Òø±ÐUqzÀ×í¾‰ÌòxÚ ÀI³ Qv·o6k>Ü[<±®O³ëGöƒ3´ÍðsÛˆß:¤u9ûÙjg-÷cYKhTƒu,Ÿy÷Õ;¿W©œÂ,ó|Âe;иË"Æêô» …ºñE[äEZAÏ%EZ)éé¿<`Í’êô&§®i|+LÝŒ†äY¿ôý:p[ÚDçøðÆTýT‹ÝØÞÂaÿ/˜¿v&p›‘YáFBÑšž”3:'yΔt…qœ?rh’ò¤>9×'šõh¤fÅLC—ýl^´ìŠMÙ =¦û vãîÄ)…1–cÌÙ8GHËvÔ îT®ÑL :—MTµÁÊYÂJb¢,ÿÄ¥­¡®lÂ3óqšùi.6ý­&US•:®¿ô=«¸¼lr„öJÅ#ñ¬y¡îOCqé›e@—SѺ·Uþ±.N›½»÷ zã¡(êol"Ó4LdÙ ‚ÍútצQèâAƒ¨lÜ.—f®´e l>ÐÇAsâ xý·WoÞ.Œ}9¯Ôüõ›{€é;|S |lÁøîeTs\nÛò¬Ù>‡'ºÚÖ{wåvΚ*Æ>¯ÜÝh~­~È[ÜcÜzx\cE;r]¦w¯3Zk2J7<8i›éÃâ¢Mqô‡~F®oÖ­ñtÎAx>Q¡ ñÔ‚˜g¥û¶3Žs‹&,3i•ÓS)Î.vÇ9ÒÓK˜¿¢#mÉ‚Ö}ì„LGV' 1Ï!Ë7üqG(‰Ò !¦§Ðùy%e¤Ðä|ëë½Ýu6¶Sì8ì÷Ö¸-Ï%бô ¢4z‚Èc&N%åá ¢¤8> endobj 4497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 644.54 193.212 655.444] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 517.411 355.36 528.315] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 517.411 481.774 528.315] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 118.064 193.212 128.968] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4496 0 obj << /D [4494 0 R /XYZ 90 757.935 null] >> endobj 2213 0 obj << /D [4494 0 R /XYZ 90 508.576 null] >> endobj 4500 0 obj << /D [4494 0 R /XYZ 90 494.029 null] >> endobj 4493 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4504 0 obj << /Length 3301 /Filter /FlateDecode >> stream xÚ½[Ýä¶ ß¿bôÁ‹Þ(úò×>hÒ^pÁµIïÈÃÞ¡ðÎxgÝzì©íÉÞÞ__Ê¢lÉËÓ (‚‹=6MR?RIiÙ†Âl“ÒMÆ$áfw¼¡›<ýá†áÛ-¼ÞZï¿»¿ùö­€¯H‰ÍýSÿyÄHÈÙæ~ÿD„±Û-£”/»–<ßnyHƒ·E™ë»ùSÞܲ$È«z”Ê8 ˜ ·Ÿï¼ùËý µ E¤¤þûæá3ÝìA»o(i²y{JXšnŽ7’ ¼/o>Þü}࡟ x~i`’†„'ñf+$Ë%Fc3pAh4ÀùãŒ0¸54 …Oœ‡Ó1. ¼¶XÍåi’q)‰À¶8yw»Œïª]]µEÛåU§á®}=WM¾«Uñ5¿eÁ^?ÜÕu³/ª¬CÛd_ŠVßu¯§¼%³ 1\YÂV ‰–!Cš5È|ò d^q™%. »•4øõ–‡AVÌ)k²cÞå¾=狈D)#<]q"‹hC³‚ˆW"â§±ÅE>D¦®Ò5YÕ>Õͼ)늺š·ìåÆX)r³¬••my^=É÷ªzH!óR[à6Â|ÏI„I7!$<‘¸\: ÉÖ¢™µF’”P*7¡Êž­ÝÏ*»’ÿ»yòÏI¬@ŸK¾PhÚ™ Îꌕ‚¡Q:ü~F'2”î íè%BX½€ ÉL'ñ•Ê ÜÑæJÒYžLº;ØÌ}9 âwã”õ#äÌÕ4ˇ«Ÿ)»iz§Dò ÔË 2R{‡7ei'È;ÕR™ÍX)UîäÃÕÐx%Oõþ3Yr/©òB¹T[¢[YD‹nehôj éŠg ›£•L ¥a~­f¦•ã^¡ "áŽV¿<;lBŽ+Æ¥ºÓ^1”£)?s{¦êrÖ¹eŒcI’¥>߀ñH´Œ1Ò\1¦±.Æ1ჼZ!ÍL+c‰`ähu5Æýd`íù|Æó0‰½Bæ²ØÔ4[‹h>‘’8£Å Z<ñËÓ$~qRgѶ8†=’ïÝ@ggE ¸ÕPþ»½“Õ{/«Ãg,Œ­djh\˜€¹ðqÖ]ˆw «_´†ûH´Œ;Ò¬áî“gp÷‰3¸[âøîRÝ{0‹°½¹hÁ«@‹-–ÅñJ@‰– Ò\P†Úuj˜4ŠýJ!ÍL©©iRˆÕ¶Rëò¬{¥"ªdÍlñé'}– b æ@®ïíhœ~?€Àz ßm”Ðàþ_YÞèt]ýzšsî´‘4AY‹>åWš™ksËi°Õ9)K‰è»†cJÚ€jÚÔ ªN© xð~t&A(³à ²õ󘩂"„Âß·§|W|¢”+R/^ ¸ÒwêË0xÕt»›¢½³ºp¢Jµ Ëâk߆‰D$á#' ¾dÇ“.2Á€ö`VÓ7€ÿ}VäL<ÄzK=h!£Õ²V?yà’¾‘ UÓAÄqÐÃKÓ©Óï»ç¬›2í¿^вÔø~œBê©>›h1W:ò~’œèP¦ó œÝÃ’åz_ßdí°8Wû. D%ï\µˆ窡¹z®b'È«”DÒ¯“&™©äÎÔDœ9*}TâðNµ³ØßaŸXæìåY£³„Ä™ŒBÈà]Ÿ(¤ÁW5éšZ™(bº%®>¬Úâ±ì+÷Ч²{®ÏätÊ›çìÔêU]mëSWô›R¥f¹ÏŸú’KuPʧhU£ã!Ú×taˆ¦­Ï¼2%a²’?[DËæEškÍkzsnm–ôöð*…43¥\ ȱSG©wOÎö„mR³:2UW›òí\퇜¯šm·hg¡ƒ³Ðx<ꀫnŸ3lÎ ¯ÌbjýƙԺ«Guœ`ßÏh¦`ê ­-t¼7wÔ Bd×Ô%.îÏØ Ðû,C,íGSe޲U;‰IFå1¾Ü›³{f\ñ“¯C}Ùê £Ë.ÈÙz g-» Ò\Õ°{¹³<-ö+¥If:Íò´9:ýr›˜ý@!Ý‚Aý6M8ÕJØ…|J“õ.¤næé4ÈP/&’AB†sŠ¡S©"É>GßJ $ºí'í«ÂI$ÝôÒƒ±dhúyû Ì^Fr;ÞÔ¾L^í‘I_¢·Šñì¾ÒW]%öʤÁŸôäAÝwkç èØéìýØì¾^WóD3òzªE´è©†Fiô»O==o†¾£U)üJi’™NާFŒHÆÞ» ÿµ&%… ‹Øî“@aÕu+ãöâçq©yÑÔÿÌwcd¶ÜmÉ*QDhÌV¬2-[i®±Ê¸ù1íÿ¤ðW%¤™©4íÿ¤®FïŽzÓ\„. "´#‡ !êf… E£m(Ü·}Ìèß6ÈJÛnÐù~~(@Jjv¥.l­@v• ¶*ÙI/Æi+"ÅÊ;¯—riv}¶ãè[×Om~Þc§üt›&ïÛ4ß,{P[¬|Å{F¢eïAškVŸq{Ëõž ÇÔ¯ÒÌTr½G—q4úÙÞE’–õ>“àÒ.Ñ—T?¦Ó¿í“'ðaß“†+ö?5I«ŸÍZ ½N¿‚'ÖΓúiÅc R¹m“gVÔá·úÔ ÆÒ.K$$Hþ]‹fi—ƒƒÙ®ó«J¤Qµ¼Åá;¸ÐT®{ŠF»¡ÑõHÖ[»á29Áw·tÜŠE I¢•3Ñâq+C³rÜÊ+[ùÅé6›-ŽbKëãy·ËÛå£eª‡›Æ+§-¢å±"ÍÚX}òÌX½âp¬–8Ó6ýÛ¹œ7»!>F±tå.níj¿ –ãÖÎLxÊ ‡8â4ÒøE¦à×4rDžê¾av¸ÚËE*ZYÄ„¦+--¢e+#Íš•}òŒ•½âÐÊ–8Ó¤ýk~¬›×±ŒÚYg)u}¯Í-C#átå,¥E´ Ò¬Aá“g ðŠC(,q¡x_TPüNNáZpÀ½ZúeÆ*,Õ^è¹ÌÆóq¢!<\Ái$ZÆ iÖpòÉ38yÅ!N–¸ÿóYxXý¤\Y6FšEÀd/Ÿ0„Ë+K£eÉúßœ‚OéFú…Dí‚f`z3ñ·ýGÿ(°ÊÅ,µó‚¢Ä?@AéjD?ä•:cZ,fVÜߦ<8£mÚ¡GHl³¤w”ß ªqªÎFêÈÂÇÓ¾¿|ÿñ=¸Ë»ïðSi¢{âàÏõ—×C>Û* Õñ‹<ÿå©B endstream endobj 4503 0 obj << /Type /Page /Contents 4504 0 R /Resources 4502 0 R /MediaBox [0 0 595.276 841.89] /Parent 4492 0 R /Annots [ 4506 0 R 4507 0 R 4509 0 R 4510 0 R 4511 0 R ] >> endobj 4506 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 640.464 355.36 651.368] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 640.464 481.774 651.368] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4509 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.036 556.938 483.993 567.842] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4510 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.425 503.48 439.077 532.545] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4511 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 149.824 193.212 160.728] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4505 0 obj << /D [4503 0 R /XYZ 90 757.935 null] >> endobj 2214 0 obj << /D [4503 0 R /XYZ 90 631.639 null] >> endobj 4508 0 obj << /D [4503 0 R /XYZ 90 617.094 null] >> endobj 4502 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4514 0 obj << /Length 3455 /Filter /FlateDecode >> stream xÚµZ{ܶÿÿ>ÅÂ(p{€—I=EæáÀAš‡}@Ð:F¡ÓêöÔh¥>_>}g8C=WZ7@q8¬D9Ãß<8Qnø“›ÈÙ^ "ím’㕳9@ë·W’{wнôywõÅk £DäëÍ݃îKá)¹¹Û¿ßúBÊ›tgû”Ôâñf§¤Õ ·i‘`SäáVjyóáoî:¾,•§}äúûÕûÎfÒ}wå…›'xv„Œ¢ÍñÊUšŸó«wW?wsP»†ös sO¨0Øì´+àç‰tH (-¿@©©¤ðhi…_•ò¦+’ÊÐ=˜jÎH.°‹„ ²óoovZ:Û7Åël?Þ(oçÙžOʲÚgEܰš*.ꇲ:ÞÈmÜdeAͧ¸Ši“Vµ˜IÎ0ðë©èT=Ñ2TLs ª5~ªUv Õ€]`¡Êó]Rû HÏAåF=TÿN~$E©uœD‹8Yš 8­òcœÖÙNCvÒY³©§è)«|†Û2&/\Ï»€IO´Œ Ó\ÂdŸÅd•c2`'%còCIë®Ë¼í-ã¡l $ã¦æ‘®>¥ànIö«ã¨´#+b` n›¬1’!Hè‰@“Á¾¾‘@MCª´i«¢Fâ/^ËAv}¡!T:fÈߨ´G(—»åKš,¦Ÿ}ÚÄžY¨´ª,³cZ×ñ]!«y!iÓ-q‚¼v| Ùø¾êô zì¨Lñv K½Ï´0ŇmåTooAÒ™ž+4ÚÈP‚‰ò-Í:_Ï¡çŽøfŒPß\/-éT WúÂw¢ÏÄÁR¯Ê3’qþMâüêxü϶Q7„A¸Šˆ¥Y—`2J ÈΆÙÀNG<™ò…¿H÷CÙ¤õíÜ(!³ðÁ0‘êM±8ÎógÌ ¬ëD]gà7ÑÈ뢱ÑcªÐ“<¦Éo¨ìÀ¦äÓ”Ç>ðˆæúÆó¶<.¦Æ xlUÖuV^0ÝÈcw®–Û7v n,ÿâ3œLD;Ý|uWÉ#36.lçðrŒ÷(—/!’  ú4ÞƒÞë’ûgjÍ@4ئ,‘í&¡¡-~+Jý©àIÓ<­q"í}È¥‰+;ÒPk?Ýé”Vô˜gG»zdü0ZY µ•È j˜¨ZbDC)©ÒcZ°ÐeÖ =ýt#ÛÀ†ãì‰_²?RT“nÿN- ac(F†}–À™¯± hî¸4¡},i›žÑ_i„ç©í)û„Á;Í©6iWJM î©æQÐþX•íáq4‹f–Ћ\iT¿jRHVcæÔ/'C?sÕïX†]Aãáî¦Î›ì¡cF ”tIAÒ3rÀë±Ü÷Úf“ušƒ´¼¨R„èÐæ<ä6Îëìì3ücVwFƒÛ!&QaÔ`Áð6qS1@0¢(ç¼)BÐoœøÜ’-f2Ú>eÍ£Ùéá™DQÎÄ$¡g#¼MYEyEÞŽl ¼íB—IÖ÷Ì‚Âôò€EYì’A¨B1`@ÏX™Åâcü̃«¬>gÆU‰J 8úDÛS BS‹~›¸8ÀU÷|ã{[4C ¼3 @ÿ©*Èh¼YC€æxÊ;G l芶ñ ø‘Ôpœ†ßcLᛨ`k øeTC§ÇÀ‚t‘.“©!³‡¨Ñ†’ÖgÃQÌYL™$m5ÎÙ€ç?ñ‰SþªüOš ƒš”öOö®I?„¸ËRŒ`VYÉ}jO#÷ÁÁ°†ŠQ3g€îyrk{8 wÕí=rJoS£$ÄÛfì°¼ßÌÉ…ShoØÚw…«N !§8BКíÔø®d¢.×0“¢Pòª#OD¸õŒ©@~òlÓ×biÒØdsàîØ5΢Œy-±Óu’UI{„½ŠYÝ¢ùV¸-Õ)›ßùÙpt=RµsxÌ3;*æöØ) ™ÀnÇåüdÝÃ:ÙMÇ ãß§ÇÌø7‹2·OžÑ 9R‡€Ü Àãö¶§¶˜ûbúÁ˜)³&_ÒNn&Þ~Âý¼‘‰9ä‡Û?R˜áàç™ fþ”%5z¹Öx"4ukVÝ1¡ŒSÑÑ^ˆgû@Å úsä<ðXmÔÖýØjHâ¬f—½GÃn›¹)GØ;ÞçX²š[2Æ‚"ï8v*ž¼˜0åóšTžÝ`d¥_¦IÜBdÝé,³¦¦›§åYó<_€ÄÓŽçþ9_4\˜ ‹þLowÛ&Ý¡õÀ|AŸ úæ“:ã§ØŸ(p“r°Åh” Ðpx¼‘&Ód‚™d– u2cœïÐXºdýmÎÅ’²Í9»g²§*k㻡b;6ÉFH2axí}­~I9vGÉÏæsàvYÞçÙï-7ÐF–CÑ öå3ÙOæÔ´Z Gê®*\!×A)ªx¦ ZŸ¶(ÔDÃ6áÔ™úádˇ{w`¾žò:•;šhܰ§ „¨ÞrΗ+"×Ú@ä±d3n ì+Œ>›Y6g¥DàGcNÉc\ÍçQ‘К “æù”ž™K GYk}°‡\<`†€±ùžExî4Jøn0wûÈ£"_YIÍïtðôŒÁB§9UúÛøSÆ&ŒG˜äNÛàDêã¢ëK½ÏŽÝÓ)ûÈŒ9¼]€aÄ|rÒ·4ë,#-´ïXCmð,åúƒŠTä Ëw}:îúÛë3ÚžU÷ë·ßüf ÷8ÜÖñ¬úz"Ùøýä¬J˜bד̾°„‘pP¬†ô*¤ó“Ém!úv^tÔê ß3µW" 0Š?\Ÿeà/sg–J¸ÃÍk&È/åL1eTÇtáDj(ÊWKß7â>µ\-Ú3Vð«#w¡@mAꉖQbšÏ)›W¯¬Ë_—†ifÒŒë×)%¥ySìÉ]íS¶ ¿ðt0 xº xð„ñÒÙUi>J~1‚bFèxtº† ƒîb^¤–¡ Ù’õº¿ž­RKÇF‡˜g Íý”å,˜ñ~ø¥R4. $^ˆo2ªæÞó« ¶ƒÂ¹ Ή|X§l‚ŸÒj´÷óxXÎ7›Õûô‡TL!ºòP=ý€¼f!÷õ(¤Ð­ÃKûSïäóà=™rm¿gÓјùl¿ šu–m=âh·‹WSä"ŽZwµÑ¢«YšÏqµ.¿IäJ!Ãp]"¦™I4ŽKõAÒ3”èë´Î*ªuèÞ g[‘Ù”Mp¾ºûçOßðBœAö¢!£²~‘Åg‡¬Õá²<¤èÎö¬à 8ß'1FHS]qûÂ<Wéà¼ÂršC%ürYÅÖ!áÁøN1™ù†h”Þ#]9ûöùÂu&ê^þÂÔ«0O§4ÆvJv¼ýû¾9Úþ›ªXú6"ÝÒO|â©»p€iv¢3Ê Ië'2i‚‰þvŸÖI•ÝSÅÃç€`c.<ÀÁ"/-¿Q…f䦧Z,ärŒ`êUq§S2ˆâq"|áxá*@–fãd">`i x Õ*äïkhLAƒJÖØZ¥ÜŽg‰8i¨RïqÅãÒ+ö0Å‹W¯^½xÉŒÄUÁ(ݕÒF­Ôö?-nØb„Á‡4;w­CÖ-CÆ4— [ãg![eÇ Øyk—üº¢Éd']Dòוë€ô4‹x0É8Ö˜1«¼Œ¯ÿó%ÚÈÁ:¢ç­éàYOÒ…ß?wÕÙ\ÓöCÀ8¦j>hÚå[ÚÌ—ú­ùÕ}†µÒ›hË+ü1açqéGF·ŽºÕ½)GJ„U?ñ—¯Þ}ˆ¼ù’‡ŠP(þjÇ1üëòÓó!ÝôÀ6æðü›§. endstream endobj 4513 0 obj << /Type /Page /Contents 4514 0 R /Resources 4512 0 R /MediaBox [0 0 595.276 841.89] /Parent 4492 0 R /Annots [ 4516 0 R 4517 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R ] >> endobj 4516 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 657.563 355.36 668.467] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 657.563 481.774 668.467] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.887 367.388 291.421 378.402] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.601 287.285 296.135 298.189] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4521 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [495.406 271.749 513.996 282.762] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 4522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 259.793 148.331 270.697] /Subtype /Link /A << /S /GoTo /D (spc_8h_96e8686daa13255e36506c3bfc213e46) >> >> endobj 4523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [274.309 259.793 297.054 270.697] /Subtype /Link /A << /S /GoTo /D (spc_8h) >> >> endobj 4524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 163.972 193.212 174.876] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4515 0 obj << /D [4513 0 R /XYZ 90 757.935 null] >> endobj 4349 0 obj << /D [4513 0 R /XYZ 139.852 420.179 null] >> endobj 4518 0 obj << /D [4513 0 R /XYZ 90 403.633 null] >> endobj 4512 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F14 1084 0 R /F48 2408 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4527 0 obj << /Length 2453 /Filter /FlateDecode >> stream xÚ½ZÝoÛ8Ï_aà^l fù-*÷°mÒ뢻·—·m(²’è`K>ÉÞ¶÷×ïP$-ê‹ò%¸CJ±Fó›Îü8¤Hþ‘EŒ‘ˆPÌÄ"Ý]àÅüúá‚Ø§kx¼öžÿtwñöšÁ[(–lq÷ؼ. ”,î6Ÿ—ºZŒñò[ZgUµ‚û%z^­©ÀËë|›™»›ì1ƒgj™+²Lõ¯ŠòhI]}½ûùâêîd‚5P0© ø÷Åç¯x±C¾ÀˆÅjñ î1"q¼Ø]pÊìýöâöâ'æw¿ùȱ@TE‹5ã.c"G(" bA²¥m,%ˆÀ­“ÑùB©è{D(GðØS5Ä3"3p1’0>\t¹Z3‚—·ÛuZ›ü—E¶1AO˲ÚäErÐáæñòP%EýXV»DK™}R%»ìU5˜mcÁ•P1§Vh:NVf.N!<§ œ“G¨ T±âxùÇŠŠe²Ím êãC¾Kžl®Öû,Í¿`LÓrµ Õ,pQ¶2έù+ùž×ð”4!\¬Áݘ(0V ˜7ð×+"–ee¤«ìp¬ŠZ˾½&^mq‰d=n^ù«yÞq #ÊícòÆB›Ë&;$PlÖ¨C¶ËêÚx ×Öúì`nò¢? KC³1Œ™²ƒ TOVâÆ'½öÄãÑW©Í²ØW»ËKÍ} G ÞìXÐK'Æ)Á;¸ù£P‘<@¸Þ¸xd}+8‘HâøÌ88é =}•6‚{cŽN0F[FQ¤‚q2a zŠ´Èä™Ïñk[eŒ¹ Çô@û–ëÿ¹Šé2©rmµ áû2=î²â ftÉèJ€¹ê•ñØÓ€ˆÕtUÛ4LŸ“Ê–oÍP )êÊê‘ -¨•€PÞC,wõÓg@rùuXAëR1Ö¥!IMm^ ŠÅVÉÁÖ:Ðej'´Ã³­¤=Z9K&ÇÌ/oWŠU¹³)—8-Ç"Õ´Ò† ¡-ÄͬD`ZzáôšfÃ0Ùq0ù>9XÒ¸=TÇŒm^¬GæaÁRdºQðžYªž3uÒ1Iú^va9™0 á(ÆQ°n<@²Ú Þ…œ¬m'ï©lk{.%Šý Ü¥ q>&T³n§&I ½ÏZP 9YÌé4KéfI ÃcEl%¬x;O5Õ ·|ÒÿÙL{NŠÍ6/žô„6Ú1IBt/7¼U0ÖòHwʤs¦§êb4¹ 6™¿ÞóÉüu2sùÂ:åoÐæ¯ø—õn€ ½BD£.êt [é0~O¥ÆÿýÝíÕÍÍý/·î?]ýúáîo};¨ÐYöÞÉÑ©^TD²ƒN$T“¦ÓƒÚ>ŸT+3;¨¬vPC€nP=ÀùAõQÏÔ~OeSæ770˜p%šÉ4貕 C*X=JÚ1t6uþŸ¬|lîFY™rXÖq¦÷N:hJ_å4+S ü-ÃîdÂ=EÖ{ò¶u?/ú—±NO§7ðr`ÊmO'·™Ííi 6µh.³[´ùÄö ÏÈëxW¡GU·Wwƒ±…uS*ä° aöԜҺé›Átk/½Ât+‹æé›nß²ýåþþúã§«ûûÓŸŸ>þ NÍ«bN±|ù¼ê)˜jœˆY¶B;o·§Å¢×7û ÅZ~Û—vi•^ Ún¢|ø,™'[Ž,n£W¸Ö*kXDNóʵ‡±–qÕŒòTýyÏ' ÐÉÌU`ëT‚A@[ƒ> °Ëp_%j6$:xÓõg¥ÃÈ=•ƒµìèô"HØg+FÖÓ äm'ȆUý¥ý»º\cŒ!þš¾ÚS0UFN¤™p‹Þnòº]/gS½ö\oÍ(E|| h<³¶ KÍéî‰a½ ·ÄNf6¿[]üºüöCùíã‘ß!äžJ/¿÷ÕЀ#A¢°ÃV& AÂ{†äööJ&š'HMñ3Cः¶ôUš'ÜJyÐ}'3€ôw|¨`#Ñsßmütv²P¬ˆÝøéθ³ÛJ°¸Ž ðŒv·­´¯š¦æ{ˆPhÌ‘PñË ÅS0E(NDÛô[ub»d`“€"…Øtlš.+¶ §2°¹¡0R* dídŠ!B»^›ÌŸ$F ¯Hö:^$“¼H¡|eyÑÉÌñ¢§kšƒ€–}À ^”¸‡äE-Fî©ôxQTáEŠg¶2a؈ÂdϺž^Ib Ë>y¦ßN:h@_e€ ©„  úìd2¤@TÐAt}Ælœ²ÌÍ€©Xª Ê[‹À¯Ž&Iß> endobj 4529 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 688.032 355.36 698.936] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 688.032 481.774 698.936] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4533 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 534.72 167.08 542.441] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4535 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 452.876 260.081 462.804] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_d53f2d5e6a70e53cb3decc6c7b42ad96) >> >> endobj 4536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 439.322 186.468 449.852] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_7b46d9cbaea3241d91e40d03a2725fd7) >> >> endobj 4537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.019 439.322 270.561 449.852] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 426.371 211.384 436.901] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_cfa8a447539633296d50e67c7ab466c2) >> >> endobj 4540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 345.608 186.447 356.138] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 306.38 171.514 317.284] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) >> >> endobj 4542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.478 306.38 252.021 317.284] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.484 293.486 181.883 301.36] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.609 267.899 171.201 278.43] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) >> >> endobj 4545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.019 267.899 227.562 278.43] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 216.716 179.713 227.62] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_d970e4ae584d3052b7bec2f1afb4689d) >> >> endobj 4547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.677 216.716 260.22 227.62] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.924 216.716 335.467 227.62] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4549 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.614 134.27 337.156 145.174] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4528 0 obj << /D [4526 0 R /XYZ 90 757.935 null] >> endobj 434 0 obj << /D [4526 0 R /XYZ 90 674.458 null] >> endobj 961 0 obj << /D [4526 0 R /XYZ 90 652.146 null] >> endobj 4531 0 obj << /D [4526 0 R /XYZ 90 652.146 null] >> endobj 1089 0 obj << /D [4526 0 R /XYZ 374.54 617.017 null] >> endobj 438 0 obj << /D [4526 0 R /XYZ 90 600.29 null] >> endobj 4532 0 obj << /D [4526 0 R /XYZ 90 551.636 null] >> endobj 4534 0 obj << /D [4526 0 R /XYZ 90 470.874 null] >> endobj 4539 0 obj << /D [4526 0 R /XYZ 90 364.208 null] >> endobj 442 0 obj << /D [4526 0 R /XYZ 90 179.396 null] >> endobj 4525 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4557 0 obj << /Length 2330 /Filter /FlateDecode >> stream xÚYmoãFþž_áâ€BÖ“yÓ[îÓn›lSä²{‰‹âÐb˱z¶äJòûïGgd½YÙŠ­G3’Cr’1ãðŸ˜Å|ú!‹•?[îÎøìfߟ »:‡åykýÝâìâZÁ.j¶X›í`¾³Åê/`BžÏçÜû¼¬Ò²<‡±Ç6çsésï:Û¦4ºO×)¬E^šŸ o‰³‘Ô¡'”:ÿmñãÙÕ¢QÁ*è«øãì—ßølŠþxÆ™Š£Ùgs&âx¶;ÓRÙñöìáìŸ šW0?vF-á| ”fQØ&F>ã"“HÅxp4‰%Y¢E„ˆXË™#A³TuyXÖçóŒ±/ß—»füwf\€±TȽCm³ú…&ׇ|YgE^Ñç¡JW4Êr¢Þ%yòœåÏ4‹æéEâ!ÓŸ:bÂ((p¡|¶÷­°pÔ󹉋öú,†W 6õ„÷"ÑÑL‹T! tW¤‹E_Ñ,¸¡éS¶J-kB=XÊ“]JSÄK»%Ä×C¹´dÆóimC¹ÍrÇÎæeCW÷Èö–#mü³µÂ&5+4F•æÞ'¼ÙjÅ:ɆH‘T'¢hÅi¼²DhÔ"wSítˈM £SéIδÖ5Õk¹ßRÏ[äÃDÜcùuÑ©â€éPvé×–fZ| µï‰Ïð2£žR2ÕÓk+Ö~O/Dô c+)³äiÛD0'®moš8òmÅi`“B ³Œ*v:sµ0Û!öõÑyÌ…9¢8™¹T“¹L|LiŽêÔŽ=›>HõP4E\Z0µ[ZCU •þq)ÿÌE ­-ÜîÊB·€ª0@·I@9YÛ|˜:~WYÕø ,RE ªŒ™ò^ ZG -®.Gj[8PäܶØ8iëNĺYª͵(Ódá;¯’uÊú–´í%  ÁZc–th‹fДG1ã\Ï”Xh ÂÆH%\A¨P«Ë¾`Á% •“<ÐÀÑTºu‰ Ù …jRpk>rÝ$Ó¾ܶŽvˆžÐLÙÅÑ ´j;MøPAG«‡Xå!=–¡y‘ÏÿLË/ã›ömlJC˜oM`:²m•v"φB}ÒÛ>üêig7$§|-±×ŠéD÷i} VmÂѧ…ýÛ•Ú1¤s/‘ ÔW»ÀaKÔÀÞJÛC:¢‹e¢b&N¨Bó†d¨‰Lމ 3)ý(ÈÐ,OH"‚IA1 ”h â—EW#(5ŠApïWì¤$ä­à344§í@$¯bB˜³Ä”,kŠ£,ñÕ¶ k„8†ÈŠ8CÍ…JÔÎéòDNß—õñÚ.Í[DU»–­ß>’ÄPÅ’ùþ±uâjQ¡©°¸KICµAA: ðAOPÅé ýˆd_µžW^ Öá_FJõŠ”"2†íj´A› 2(—jXˆpé™§?ô¶²ƒI‡0×¼%â¼)¬Ö4†æŸR'V©hV´Ž}$N'ƒÒBÌÄ4SaôZ n©ç-òaÜc9ñþæCÌéžð~Ými¦EúôîÖIAiúM} œÿP™2˱·H|Ÿnsy­[&êIÅú,;O¼§›e(Uå¤U,É´lHUZÆÙ̓í©$)CNfÉÍ©4‰µ}(ã¿RH>2û*Œ•DŽækK¢a| è—”“Fq4•:@æPRvTZlz5öO¿§&fâ]Át÷Óí훦¾Ý`OÖÇzOéXγ¶å ~ƒé2¤EtÚ¦–æ+mÚÆÒn¡‰êá´^–f Wǰ:b1ô¤m½œÝ°´lÙ.M–öÏcš޻§Þ->ôæÍ#°iÕaô”:ÃÚº,µOÅ®Ëp°1-Óðoj>€¡?Zr8† ¿mým34  Âqû.,†I3´ÒÑ,ïÓ<-“ÚµN |uù—ŵ}hŽ/¹¼Tœ¾@müÆZÓíÏß=Ü‚oÞÙ­,ÂÂXñÅ=(|yyNó¾u|¨¡yþJ/ç6 endstream endobj 4556 0 obj << /Type /Page /Contents 4557 0 R /Resources 4555 0 R /MediaBox [0 0 595.276 841.89] /Parent 4492 0 R /Annots [ 4559 0 R 4563 0 R 4564 0 R 4566 0 R 4568 0 R 4569 0 R ] >> endobj 4559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.419 645.003 334.962 656.016] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.868 464.911 477.095 475.924] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) >> >> endobj 4564 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.241 441 397.468 451.904] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) >> >> endobj 4566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.296 354.877 265.838 365.89] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.601 160.225 357.143 171.129] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.16 160.225 472.416 171.129] /Subtype /Link /A << /S /GoTo /D (wcsprintf_8h_46950abaf5a27347da8160741f98f973) >> >> endobj 4558 0 obj << /D [4556 0 R /XYZ 90 757.935 null] >> endobj 446 0 obj << /D [4556 0 R /XYZ 90 607.518 null] >> endobj 4550 0 obj << /D [4556 0 R /XYZ 90 585.207 null] >> endobj 4560 0 obj << /D [4556 0 R /XYZ 90 585.207 null] >> endobj 4551 0 obj << /D [4556 0 R /XYZ 90 566.422 null] >> endobj 4561 0 obj << /D [4556 0 R /XYZ 90 551.851 null] >> endobj 4552 0 obj << /D [4556 0 R /XYZ 90 533.774 null] >> endobj 4562 0 obj << /D [4556 0 R /XYZ 90 519.203 null] >> endobj 450 0 obj << /D [4556 0 R /XYZ 90 417.528 null] >> endobj 1163 0 obj << /D [4556 0 R /XYZ 90 393.159 null] >> endobj 4565 0 obj << /D [4556 0 R /XYZ 90 393.159 null] >> endobj 4475 0 obj << /D [4556 0 R /XYZ 90 211.04 null] >> endobj 4567 0 obj << /D [4556 0 R /XYZ 90 196.47 null] >> endobj 4555 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F48 2408 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4572 0 obj << /Length 2647 /Filter /FlateDecode >> stream xÚ­Z[oä¶~÷¯˜}Ð;¬H‘¹o¹xƒ \§µ½Š$0dÆ«vFr$Ínœ_ßsx‘¨ÛÌlZÙ¡¨#ž ¿sá¡é*„ÿèJ…«D$DEb•®ÂÕ3Ì~EíÛ ¼Þxï¿y¸úÛ»¾"*ŽV;ýyL‰`tõ°ý9ˆ eë Ã0øœ5y]¯aë að®Øçft—ïrx'ƒ¼\Ó ÃYÉxЈ¯}øáêú¡Á (¢øíêç_ÃÕýá*$‘’«Ï0 Uju¸â,²ãýÕýÕ?»5Ì|ós:rúI("rŽF R¶%¡”ÍÚB*†|•0°B̵=îòözŠ lÞŽ£!#IÄVÞ’¶Žf—±ž/ ’Ш[ß·i{lŒ±k¢4ãOk&‚tÌgÄ1«ÄŠšÐq ÍÆ#šŠÃ(èß/„âü˜˜0dœÄâ4?Cr†"1lƒÏ.|»ÞD4 îY–7 YÔ5‰ ‹ÎéÚ-ëjiÎézŠŸÓõ$;««ÇŽY]¯ëºªÍ&@çô¹(ŸÍcaqPV­äeún·Ï·Ú2Co"ÃÜ‚P‘tnM"Y×.J\(âÖÇ›Ü>ÿаiëc¦Ÿ…‹šåž± 1Ÿ4 Ãÿ7t\úú.nȺ•|i)n:·oÖž-Þd)Ü(),ac¼c²‹ˆ¤t¸ZV•U/û˜Î(#À0*ñt™2OHDÅîXfmQ•Sî'2Q†»<Ë=î)á9;bœ9oÇ 9àðJ‰BÓï‹2,«(DĨ_UxœF€ÃE”8gOž8awb‚ª>¤íÌ~BÞH’ŽÿÉu™qŸÀM‘T‡RBMHÌŒ Þß>\ßÝ®Y|}c´ûpm?ÞÞ¬ þ…ÿh° ùÔ$ Ï‹´¾ÇsA"¡z B-…^VoåÞúv:‰8±$\LÈPe"Î×Ï–àÎ=–xÓSOcÏpÁ^ð g2«!çq¬³$'ù©„HÉ}~]h…?­­*Šr§·}ÊØâ©:Bx³„©Íu|ÂnŽï¸¾¿_i¨¢k޹w^y© xqH³ºz3QXBÍp±"ŒÇçlm©7ùTùÑ’(ÜOßÞ_ßÝ=Þ_?Œ`ãÖH€‘ÉÍI¶ã…¬Û¢ê/u…æøTlóÆÌ´­UšêX; Ùø¢Çi¹ÅÔñÁL•ÇÃS^›ñpßþØVøœ¥ûýë:¶;å+j«0ÁœŸ,Ô<š¥BM€¶B-ÿQ$­ÓCÞæõr­6Ãy¹f‹0È€¶ºp4(Ã_g |˜rE—9=iG3‘g¸²cy¼Š¢zúwžµÖsÀ_”^—(U¿]çcÃ’ãöÃÍÍ¿ µó;0€LŒ®êJÕ¬ÚÚÏVªÖ{—¯ŽÖ­!Z¶]…3ôq¯Êûx‹Ò&NÚIÒQPáÄ“œ3ˆÄúŒÐïÄ’žÞ*KÛ¼qrÀq‚úÕ<îœ|“€Í ~ ¥â^ÌÕ™(â¨7ùÔGK.ÇìˆJ"äˆùGŽæ$Ëê¬0²ôÃ6¦0/”lÒ¶ÃCm\A£*7äu…©,y&—”$¡:}Šòˆ=ÒÑ$ððŒSö¥ä@*- *“RYš‰T¿äJ 9êöxÈë"ã€;ƒQἇÆA[Ù·98-€E…7!”1ôÀr¦0ç1QJ|¡#£ÏÅ~oàÉÂJ±Í÷N·†³Á„DbÉÕÿÄ.73&¼t̬EÐ/—!§$–g Ó-CÆÒ\ÿ0K@îââ´\–f"×°T IÈ’\·ÚÐhPí̯‰Á00òÀ¶éD Ïy™×© ¯>¥WCm¢0 >¥Áᨋz½Tæx”F!L¥æGWþiié *D#‚‚ävÉ¢t<5Žt‰°wŽEY´Eº/þp!¤ÎÓí¦*÷6ÎnÓ6u‰"à ÓU‡¾Â×_õ¥tµ¥¥Ôï:ùdÇ6}ÚçË(‚Ì)“è Šz¢eYš QÔŸäÆTê´T–f"Õ¸ r ”P$cm/üÕöŠd4ˆS⣫‘Æ“÷M<SB•¾1`‘“þ®2¿©a‘aVuxÒ"h<Á$ž^µJ¨DHiI¨iÕEF:N8áÁ /kc|D8áÃN8§Í¿ÝòS8Ù•ŽÙG3€…¿£²§ž^G«=‚(ïÞß\?>vÕM¯ÓKC‚ŶWW á©e¿‘’,δ=¢Eü:š ñë5 †Ašœ–ÊL„ÀWÄp€¢¡nô1$¢Qw Á1œˆrk^˜pÇw@†ñÈþ¶êÔßš …‘ÞP o(¼Ò ¿Ý7ïoq7õ°XÁF›û%;›À!’%gv¶'ZÞYKsi~td†e,È£Ó’Yš‰dÃíñáÐîKömlØÚR²îÓ?<) s?ë¢ÿ=}u§‘²M ›7^`µv·iÚWw‰±1ç×þ‚õW³¼‚*ÏmGO´¼–æÂí°­a;ªóHÉÒLDf Fb6èÁ Ž<ùŒgÝ…Ú›‡º°­g3™êK g(h˶qSîÝË˾Ðñ0Ìî‹ÿ ²ìk³kظ S:EPê‹; ;8ø„Ö¥MÅê¾4®Uç0W,œ-gÚPnqú©'YjNDœ_²‹o‘N0íÀ5â:w‡dIºŸÉü»¤þ°þ’6+İ,çO™Þ+ðÁ½‚pw‡YõòÚm.ãwÞÝ÷—®”",¤·’›:;À=ìK˜Ç±¾Œ»”÷¶™é_üb¯-áúÏQÈI&üÿöŸµµ'Ç/‘8–ÓtŒ%ØK¡Û0®t‡ÎMpN7ÌXb‰¨ÁͺcDÌ‚ýX‡i¤6ç ug%ýÔ|¬Žû­?ÙoRÔùþSÙ†BlOÀëAíã{óÜhtfÖÉ­n“ŠP7j,cÛÕézœ®ñž»vOiq¿‡•MŸ¯Ú\Ÿs®?­íæ:Õ(1A„âQ\6Ú#þKV´MŸ£LyÙ.Å#¼mã çI<š¥ˆDe„åÈtKg/§±s™ÏÑ\Ú›1þ<×0=e“®a:i®aê‹tï$Ÿ6OuqáZ¥(Û°…»»Ð-]îzQ®`OÎÔѲe- ªñ—3fµ¡jhVJ–ÇÒLäš5& „[_žïÆ.qζ·À–)˪s;„íëÐì‡t»˜Èi(ˆdñiÇéi¯•yq*?ŶßÔß¹dîh†MÃQFï³ø¤HÆ çþéï ¼ï™˜ç¿ÐôÔQ endstream endobj 4571 0 obj << /Type /Page /Contents 4572 0 R /Resources 4570 0 R /MediaBox [0 0 595.276 841.89] /Parent 4579 0 R /Annots [ 4575 0 R 4576 0 R 4577 0 R ] >> endobj 4575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.847 584.09 196.39 594.621] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4576 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.156 566.092 244.81 576.996] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_cfa8a447539633296d50e67c7ab466c2) >> >> endobj 4577 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.034 494.496 319.577 505.4] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4573 0 obj << /D [4571 0 R /XYZ 90 757.935 null] >> endobj 4553 0 obj << /D [4571 0 R /XYZ 90 664.112 null] >> endobj 4574 0 obj << /D [4571 0 R /XYZ 90 649.541 null] >> endobj 4554 0 obj << /D [4571 0 R /XYZ 90 286.411 null] >> endobj 4578 0 obj << /D [4571 0 R /XYZ 90 271.84 null] >> endobj 1090 0 obj << /D [4571 0 R /XYZ 90 93.706 null] >> endobj 4570 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4582 0 obj << /Length 2735 /Filter /FlateDecode >> stream xÚµ[moÛ8þž_aì~‘šËw‘ ì‡4M{Y¤IÏqo¯h‹ ë¨m€Äé:Îm‹Ãý÷JdLQâHIEûÑ<3CÎÃ!%³ …lbé¤T%±BM–W;tò>}µÃü·3øz}ÿ|±óËKw«Ådñ©¾]3¢8›,Îßš011Jiñ÷òæ¥üù2qE‹——Us5¯>Uë)3EµZNYá>5’‹‚ 5ý¸ø}gqÇï½SB;ö¿vÞ¤“sðò÷J„5“¿ášfíäjLøëË“ÞÙh>ðy_€Š‰Þ#V©"„jõ°+Ô//%Ýf ’Ê%ÒÖ¾X-/oÏáV F«äËOî&‡c%Ñ\fpÕzí¡íQû‡T4¿¨œ—«ê¦'»škÂÏŽ}ô}η,Œj"…¹³á¸>pÞDFá®P®€Á ™$––-ŸÏ}tV©IÉË6«ûbýÙ#æ1¿Gãü‰IÇ¿÷âåÁ¿;Ü¥&š Dì18ci £ªÅH»ù- Ó|¢aÎrcúؘ†ù]Âe¯'0)”Ç,2P{"ùÄ€'ºö„[B͇sä`s‘Óâ[3ç¯?uÓ”ðR¶ËGãn$&Ëóº ?PEá?ëxaa©i <ç6ŠH7ª÷Íæls{Ó$à?g—·¾þ/Vþ£j¹¹^7×ë©(‹js»^UçÍ'~O}0”ÚÍðQ hÔëÔ¤ó:W.eB@¤Q³€ÁÉCŽœdç/™æöÞóWøéË8H6ËJ™2%¥A¥,`†¤,²•—2”ÐKYL8(e-Öa)Cù“õ:1•´Ø2ÆŠEŸ¨FJ©ñØ=ç6ÄL·¸YnR¨’ÃÈȇ‹Zd 'jr/Qk96,j¨‰IçÇùÙf@Õ ÑËÏ,`prc@ÕZÜ?ZÔâ#3ШөÉq¢šÍXÀàä‰!TÔtDzTO&jÒ@ó-qQó˜AQÛÚBD # ¢‹ZÌ:BÔ0þĤã{tÐ/fš(]â1{ Îi@BT;É<;„ ê Úöþ¬”5ˆû)YäÕ!C|htNÜ®.†tÌ­’šY€ Ô–ÂÔã1õW1ØÂŽjT¶s918JÂ$Di°\yÊÛ2‚‹ç°ûd¯üæR¨hmqñò˜AñÚÚBÄ # â‹WÌ:B¼0þÄd½¹Ü?Ì4bÊjà@däþRXA@´P1 ˜!1‹låÅ %ôbŠY‹uXÌPþĤã?úcï¤OÍ,l•Åcöœúr*m‹Sç&ƒ(Mý÷ÁjÈ©Y€ÔÁß^ýY­ï¤¬þ[]VWÕjsÓ®éÍ_ä­ÚÇ }:cEOÛc+|+T¤miÐh`©ÉqÇH’h¥±ŒÏ'O ¡Å.tI8•OVìJ®ð7f°Ø·¶bÇC±G„ÃųŽ(vŒ?1Y¯šS¦ ¿ržVëõÕÍçÔN¡ëàXøœ@9Óa”Ý#%ÔC‰ Ó6眄–øØ@m¡Ìg.ýò …°DPô¤=@š7l¾6°<ÛTçù à¦~éçánm ô½‰Å­&L5ÛßýÕíUµ>Û\\¯úÞûᥠýžÔÅ´ý:[K2TJÑ]%al¾"¶ "ë°Á`(![lù ò`”·m°gzžöù‰ vgHÔ‚±s^CyÌþßNÈ!3îý¸á˜=zÁóÉöÇ íÁþ|~zt|º÷Ý£Wûˆaæ2£Ûn¤!{ JÎys†“ÿ6i#Š{Ö¡U®$ôÈèw 1Eòvooÿ䤯iÖ —XìƒR»uT&Ô>vÚ ]”œp#G†Ð8b2ø·‡‡§oŽŽûóÔi4áû€Aù¥ëû¢ïüÝ• 69rô´ßÂóÓÞc¢è_ï¿>žOµ*Þu{d CfÛ~tz䃲×k®±-ößš&’磇5H«ñÑoáùè=&žöG¯ÞîB=œ”ànË“´î=åçP V«?į˜-D·ì5‡@Œ? qþÄdÿó©PÅî‹Ó½Å»7á ðn Ô¡e}ìדÙ-~w¶jØÈ4Ο˜ìIÀ›©åÅî|÷uW`™3Xu¢~‚#zgÊW{9ÚŽ_ú¶ð|xLß,8>ž¿8]̧¬Ø=:é.H°T»u0ö)­A=ᮇ-Ûžx=ÐùL€ˆ”j|&¶ð|&<&ÊÄ,! »†ž,HÓ¬±?i<õ:|X‘XË È‚¤´(»ªmRÉìÈ,4Ο˜ìó£ýùé›îù‰„›¸@“à!¨’*­S_L'’ëºpÆå  qþÄd»œï¿<Õ¿R¨Ÿ¯”²t ¶èÍ1¤¥™+Ýwã)ô¶eý┡"ón|ƒ™E žwãÌ£­¡¨Pì³¾#-¡m›5_(ó'&»éq9ø×”¹érØ= ’D)< ƒº!ÜA«ìM£Íßÿu!2s[ w[óC¯ú·«enÃÈDvK]ï£ï³[Æ€Ú3b\w›F”ÐkXLx±Útø –™6_~Rx4Μ˜Œ7ŽzX¬À£m 8¥‚ìòvr©¢.Þzô—›õå3 c» g›þbuöíâæýtÆ´.>> çœëÛe']ZyYŽMW@£¾§&}º¾®¯ºõbAƲ0J&£zá”(–¤‹Š¦DZòWwE4øô,É›; ië}å}§?ðñ7çΠÜ×νÅT©bíÎ÷ÎV7—g\}æGøz5oWçgõ!•?¡þcï$ìì¡•+8*ÙS=p¶`¨j4ˆ!͸³“W „ÊëÅ– Q‹ˆiX+Ζ¹X'.ºB¡ëV‰Ñ#0>Ø‹0gó‰DÂ.ËQY XÄë¶9D ªKcDBÖ–è(ÊvŽ© h®$köcr°H®Úæ¼sÕzÝ¡•”P¡‘\F&9Q¼]2Ÿ®ë°Ë~A„j‡)¨úw‰îDZL«‡ÿÊ·ùµª©›öèxª”þxܳ;__U+w8žÖ]û} ·Ï Oô—~<¥ï¦ì¯”ÿ*|OM1k®>M¹*“@PÕCØ<÷·ØëÜ=ú¯ÿ¾¸þöýsµJ³ã~‡ÜMÏÿ‚% endstream endobj 4581 0 obj << /Type /Page /Contents 4582 0 R /Resources 4580 0 R /MediaBox [0 0 595.276 841.89] /Parent 4579 0 R /Annots [ 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 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 4620 0 R 4621 0 R 4623 0 R 4624 0 R 4625 0 R 4626 0 R 4627 0 R ] >> endobj 4585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 625.136 177.611 633.983] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f23e7b02522c40fa5dfbf3d569348844) >> >> endobj 4586 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 608.458 184.17 618.364] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [306.611 608.458 336.489 618.364] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4588 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 586.282 182.742 595.129] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_7181ebe5e9f0a4058642c56dc848bd5c) >> >> endobj 4589 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 569.604 187.165 579.509] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4590 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [309.606 569.604 339.483 579.509] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 547.428 187.564 556.274] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_8f4a947e2605b35ffa92f08b113d60b2) >> >> endobj 4592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 530.75 189.657 540.655] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [312.098 530.75 341.976 540.655] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 508.574 182.592 517.42] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f1b99efe520fbd2d4bd0e5a35f87e186) >> >> endobj 4595 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 491.896 186.16 501.801] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.602 491.896 338.479 501.801] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 469.719 181.496 478.566] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0816c5f2354ee6c0044e11867d7558ea) >> >> endobj 4598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 453.041 187.658 462.946] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [310.099 453.041 339.977 462.946] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 430.865 183.698 439.712] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_4d37e0274dff84649cba075b8761b3fa) >> >> endobj 4601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.277 414.187 186.16 424.092] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4602 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.602 414.187 338.479 424.092] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 392.011 192.555 400.857] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0ed13e54c3eacb9325afbae78ef33b61) >> >> endobj 4604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [315.774 375.333 345.652 385.238] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 351.099 202.916 362.003] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_3229b126ed844da0a2d4f7abff1de7d0) >> >> endobj 4606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.414 351.099 264.066 362.003] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 4608 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 270.337 226.308 281.24] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183) >> >> endobj 4609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 255.114 217.182 265.3] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ec3fdc50ed9f4ca8d80d7ce7751ef0e3) >> >> endobj 4610 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [253.1 255.114 338.688 265.3] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ee9fbc64e56bb6d307d06d8ef8e8b244) >> >> endobj 4611 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.288 255.114 487.292 265.3] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183f574a836e251e8a0257da97580bb9354) >> >> endobj 4612 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 243.158 200.495 253.345] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831e4cf4eeb3cd2f4d8c2c1f040aa62f6c) >> >> endobj 4613 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 227.218 233.79 237.405] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251838553bf40509263e3c3a198810f83d26e) >> >> endobj 4614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.079 227.218 360.695 237.405] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183421fc9b9a2aac54bc832b3c1180f8f07) >> >> endobj 4615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.985 227.218 490.559 237.405] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518326d787caed068586fbef3d3c0fbce41f) >> >> endobj 4616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 215.263 254.482 225.45] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251835dd410d6f1a55543c4f7d0f82435eb40) >> >> endobj 4617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 199.323 249.292 209.509] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518381b5390b4f770515ae950d9e382b2885) >> >> endobj 4618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [272.723 199.323 402.227 209.509] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b251833f4b7a9a303943f6c12ea51cce2240cf) >> >> endobj 4619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.658 199.323 513.996 209.509] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183d6bf7801d043f41f67c54677d6cfcb75) >> >> endobj 4620 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 187.024 171.803 197.554] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183d6bf7801d043f41f67c54677d6cfcb75) >> >> endobj 4621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.373 187.024 315.553 197.554] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518315a9e5f9cbb559ef53018e9aade43e88) >> >> endobj 4623 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 131.791 154.926 142.695] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4624 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [285.481 131.791 319.015 142.695] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 92.936 157.696 103.84] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_62298e0fb06332a282d9daab718a1286) >> >> endobj 4626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.251 92.936 321.785 103.84] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.49 92.936 441.032 103.84] /Subtype /Link /A << /S /GoTo /D (structwcserr) >> >> endobj 4583 0 obj << /D [4581 0 R /XYZ 90 757.935 null] >> endobj 454 0 obj << /D [4581 0 R /XYZ 90 733.028 null] >> endobj 4584 0 obj << /D [4581 0 R /XYZ 90 642.053 null] >> endobj 4607 0 obj << /D [4581 0 R /XYZ 90 289.31 null] >> endobj 4622 0 obj << /D [4581 0 R /XYZ 90 150.765 null] >> endobj 4580 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4658 0 obj << /Length 3707 /Filter /FlateDecode >> stream xÚµ[YsÛF~ׯà[È*svN~s|dòÆŽ¥Ý­-Ç•‚HHB–$€”­ýõÛ=ÓCbpÈXår•9}ÌñÍ×=˜pø'&9Ÿ¤&e¹2“Åú‚OnáîO‚žÎáñ¼óüÇ«‹¿½QðË5¹º±¯'‚)&WËOÓ„ 5› ÎùôË¢ýsù•ÝÍæÒðé›jUºÖÇò¦lf"›–›ÅLLñn¦¥š •Ì>_ý|ñújoŸ¼3*Aë^|úÌ'Kðòç ÎTžM¾@›3‘ç“õ¨ öêâòâ×½w_Áý±57,SÙd®4ËÒ1‘@ô)4Ç^R3ªç©TŒ'‡NÒr’A'%ØIBæŒg/‚u53f `¦Å¦][êšÂýlêͼÝ›eÑÌT:]º»ÿ~yéí¶Ù-¶¬ßY‚§L$r’ ÉOþr,ŠB×ÓLIž3%å>RhezÓË`¨¿Ii†®Â+ÒL:º†]K2qƒB³œ§Áj³Ø“0…EÚÃÍ-I| ÕIÇ-÷T¢åÅÒNùu²L«x´$·i`"+v/7ÜMˆÙ4c2=;h’Ž;ÐS‰ÀB¿oÖ}ãF/“ÑId`PèƒA “ð& ˜+´zÓtqïôŠ8¶>’L3£“o_ëÇÖºAwÞÌ´™V_ÝÚ-›/ëMYïÚÕ£»Y¯«í¶\º¨ ܽ¶,e õò•{¬y×ËuFÕðuÃTšÓã߇¯k¦a»Çô¼ à$ðß™ïgŠO¿Ô–Ú£”¤Š™o€Ós!(á,ã*A$s‚º"3è!¨c0A]{g@PÌrO%Z^Ûq èH„Œ‡K2q£FÁî¢Âþ=ŽA™`\Ÿ5IÇ詌`L#“åј½ÌÀdˆBÆ.ê äc($ÎD!0.Ÿ‚BGQˆDÆÇ.”ayîÝ5Sfúb–›éÕëùû/‡ðÊsáŬ8,[–Mõ0¢\ÃÖåÁæ?¿:¢Ò †“”±ªÑ£äÀŠãÀ1ðäû”Lf'€‡dNÏAWxb=ðt Æ€§kï à‰Yî©DË»Mu yìRñpHܦÁî {`¶sc±mVϺüxˆ†%:=³¼tÔ§¾Ê½E‘^ð2“éœ%iÞ뇧2"ø5ü ÙOGÁQ,"ËeêÆ2ˆrAƒW\#/²Ø´BG¢˜Ì•çAÿüåíÕËÈŒe{ä¨þ™y(V»ò8“1yD.û^€b2ÅÒDGÅËœ”Ž®ã€5H€Ò5”ÀÞi@‰Zî©´ÉT¹:Êd¸ÑñpI&nÔÀn£MØ¿&ÙÎÏ Ú Ç͇ ã4†ÃzˆìeCI ¸üDcXbO©œtÃ/©œ¼xûár¾¨734a³­ éö…rU¶ÛªX¹Ë{—~ýÐC"bº}¼!€É€D}?ІI}Hæ$tE fÐ#@Ç` ºöÎ@€˜åžJ´ÜÞ/Ž €`ißüœLܨÑLò<ìßH&x΋š¤ãôTÆ@@±$±—˜ A –‘ôb~*(À²${ùhïa½;yÂk^ä@Vòï¶æa]§ÒÄ×<Éœ\ó]‘53è×|Ç`lÍwí±æc–{*í®ƒôx|ç×ðj4d’‰†?Çe×ícX÷0uZb¤û¼bS|­ÚO³¹H’éçx‚£Îí!/u´¯2‚°§Ë,Ú5$20 CfXšö:æ‰Ù…Î…-S~38t/2¨·®‹ÕMݬKªN,WÕfÙT‹q>p4°µ<ËŸÄAÁØ)šÖ’v=þ¯Y.§ES×@]FŽÄ´ˆïP /çGáÅËœ‚—˜­=¼D ¼t vÖÙâ®hÜìêNC­`[Lizù ¸—{*¸wH:îhOå~fýé麽,:\‘'ÑNò2QÛž%YhÛbN:ý|tF Á’Tغú*iÛ„^AF=Æ Ubìç8ýDŠdâ¦Gû®éë™äÓÈ—j{Wû‹u½`®6·x ð ëä®tíV‘C#—û i§ÞMwжÀIûÉæ0ô÷Ÿ>CK¤î¬ ~q†·­»X—ëk@P’¸q¿Û;ûÍÓà| c@&2•ç§r’žwćœ¢§2’;@ i’†Æû4†dâ&3è)H1º&ýÇJî¯ì†…ÝPµÔ‡õÆ~a{¦¤gÄd¿…À ‹ñ_aÂ/pÔ,XÃ]Ú| E£â†MäΉîꮈ·t× ^¹+7Cj©ñ  Zd~²Êã„çéb(<½@Dîv”À…>!"™¨e dIˆ$0|vµj}–;¤´ñ\œ¾—Ž{ÑSy˜ˆÏŸÃ~6œÀÿcÑ{™¸Ý«ÆY/zÇ©³dŠ'ç†LÒqÓ=•tž1²öæP©ŒFëe¢&•¶ðÑ5éÖžbŽø4óF@v’ž»—Ž;ÒSÙîö~Ñ÷@sÁŒI£àe¢v5×ö»Sí!íå̽ô Ó¡J*^ ·V‰-ÑF£%™¸I•Û2îøp3":Ú uéå{‹©ž°C£†VãšwÀÔ,,k|Ü’@³OðjY»_HÜ]ÐÕh²§óÂrÿþ„W¸Í_afyj¾‘ðü =2ï…¸X:Üw 5@†ô׉D͆jlÂþùÙÀX–b}^°N6j4P× õþa8Ó4RÅâô"1“=5GâÔÚØo Ï Ô G͆ C q«ç‚ÑXñqÌ`Î'r—T˜ÎçLJÑêÔÂsØ~Òý§jáNzÞ©…‡*³5䊫<4Þg$7™(¦L˜ôÕ ÝÑWL'Ýuáï!í¼o*—%à ›l+‰Ùèr·ð7ï¨ÑëÒ=‡Tz·Ú†Êª÷l/N•h¹‰!ñkËÕ =*–áRB—ë]—å¦ÏöؾzpÈÕ_ì¾V«ªh0Y’ÒÕ=°áÍb;`¢xcSc6´u×Å‹eÕ@b»"M×ïÞþèÚë‚n«¶&±Ò½l½eäèÜÈtú oMN8ö[¬ïW峑*õd«eÙ SP{SšD¿ê ’jмϾ—4ÆéÔõ¶³q¥83in¿§ê±^x~R¨PaЫúz€2χ}³ëBŸ7’HÔp¨†h„pÝ` èïzÄ­€túX & s`ÞÜÝꔃ¨q‡ÕüX…3žª±ï$»>bm‰$œøcÃ’Ãú),õrÁS@EÂóŽô'C…ÝaYÿ±ar{„¸08´s2QË}EÁL®ZщÎué?DE0¢DrELyü–þüŸÛøÏÐV ,~ú(4¢Q‰÷îÀ¢^–Ͷ°ÅSýE½¾Æ¢!–Ý›ìÃo§BT:•¯Ýº¹ÔîpýÓ¥ÓšO×X'=^Y;ê$\Ã.¸-×­ŸO¤xikÛ×þ%ïäei³pÈJ¦LH⊾.úÁ”ß—T.}ûÌ—K}7µuØ×®ºŠ¥GD0Aûz1Š7Ô@z¹/Á§ðïA”žä¿údqФçñ!aê©ìŸ0-Q»æ¢çJŸ%’LÜž"t`¤Šl©¾Sv˜cG‹Éûb÷ÉZò•«Ê§Ç‹ÊøðåG¼ýÿ»šåjú‚îÕ×Ý7¤Ð¬o7Õÿì¨âøsW´U×{|¶é µ»Å]O_±€ÅT/ úk˜ÞÅUj—oôaÓÎ h”§ ÏÒ#ç– ¯hêm1ük+H?“ދ˜>»çÿjÆî endstream endobj 4657 0 obj << /Type /Page /Contents 4658 0 R /Resources 4656 0 R /MediaBox [0 0 595.276 841.89] /Parent 4579 0 R /Annots [ 4660 0 R 4661 0 R 4662 0 R 4663 0 R 4664 0 R 4665 0 R 4666 0 R 4667 0 R 4668 0 R 4669 0 R 4670 0 R 4671 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 ] >> endobj 4660 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 696.169 148.839 707.073] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4661 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [177.282 696.169 210.816 707.073] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 657.65 151.609 668.554] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4663 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.051 657.65 213.585 668.554] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 619.13 154.936 630.034] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.651 619.13 248.185 630.034] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 580.611 151.051 591.515] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4667 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.493 580.611 213.027 591.515] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4668 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 542.091 152.714 552.995] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.157 542.091 214.691 552.995] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 503.572 151.459 514.476] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4671 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.742 503.572 284.276 514.476] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4673 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 423.294 225.192 434.198] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 4674 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [331.208 270.052 366.395 281.065] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4675 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [247.23 258.096 280.764 269] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4676 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.434 246.141 198.621 257.045] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.805 246.141 277.494 257.045] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c8391dd770637dbb841067996b7777ba) >> >> endobj 4678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.31 246.141 310.968 257.045] /Subtype /Link /A << /S /GoTo /D (structcelprm) >> >> endobj 4679 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.2 246.141 402.553 257.045] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e83952aec7c1ac76c090bc89bf4eeea7) >> >> endobj 4680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.369 246.141 437.691 257.045] /Subtype /Link /A << /S /GoTo /D (structspcprm) >> >> endobj 4681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [316.063 228.517 376.715 239.421] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.084 228.517 435.119 239.421] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 4683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.488 228.517 513.996 239.421] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 4684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.501 216.562 162.035 227.466] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4685 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.582 175.027 299.091 186.041] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [92.321 163.072 160.734 173.976] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 4687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.838 133.492 340.01 144.396] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.077 86.288 175.065 97.192] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f124a4259475ea355ced38e73a05363a) >> >> endobj 4689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.452 86.288 298.93 97.192] /Subtype /Link /A << /S /GoTo /D (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) >> >> endobj 4690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.106 86.288 360.294 97.192] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4659 0 obj << /D [4657 0 R /XYZ 90 757.935 null] >> endobj 4672 0 obj << /D [4657 0 R /XYZ 90 442.101 null] >> endobj 458 0 obj << /D [4657 0 R /XYZ 90 386.292 null] >> endobj 4656 0 obj << /Font << /F31 604 0 R /F42 818 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4693 0 obj << /Length 2864 /Filter /FlateDecode >> stream xÚÍZëoÛHÿž¿ÂÀ}¨ ÔsóÐèÑhó覶Ù${w‹¶8(²’¨kKYIn›ÿþÈyØzŽÝEQx4C‘Îä›QøÇf1…2$±³t}Dg÷0ûúˆ™Õ,/Zë¯nŽþ~&à-bvs§^‘œÍn–ï¼€01_0J©÷9­ßSÊ¿‡ù‚Kêå«L®²»¬š³ÈËŠtÎ<œ|.<&Âù‡›7G§7[ùF;)”þ×Ñ»t¶-ßQ"âhöÆ”°8ž­€…¯Ž®~ÛòÐóæÇ6(™îóî¹ 4j‡I1gÒ{š/l l2ØA¥ŸŠ²XÔMR,“j‰3¡÷çœQؾð‡eµ¬5mi¦‰€GéÙªÜ4y‘ÕzÁ¼ò§‘U¬¬TYè!ÊWƒ´,š¬hÌ›åžMúöôEDnw¤,‚ Õ½¡¸jÙÆR/ZäûôY¢‘àì«õ@xÇãÇ]á½ã°4n‘¡ έ-²nªMÚèíàìÙBDšpÁ‰¥&\–€·À‡Ójp ¼e–¬ôÔç¼yÐsgç7×zî!K–YUëéGÀ­š­3¢$óÎ ³’TMžnVI5÷©÷'Õɰà;Z°°‚}/_‰åwOzº4¬›*)êUÒd¸…®³ !I„`)ÜÈñ ¥9¥5]Ç>îšìù$L2³|y<ÅEÄ„Ç|šËÂç”Hw¬{y5Ô{ûæ²aáOó ਲ਼|zùöø—’ø2¸ousôÌ>c‚½R†Þ:yÒƒÛLÿ.ËÂŒnÍŠöghâèßÇf ‘¨ÍâˆpÚ6@°Vø„[oWy¶ÔO×0fç>^=×Ï• ÅjØ”}…íðîYÁV÷„ K»Ø¼¶Ë΄‰‡e5—Òƒ$Ñ®Ë.-á½Pa)\";LP$É0Aî †˜ [”cyÂ.›½©ô÷žJ ÿY_.㜀ŸŽðÞ-S.ãàï7°#Ïç$ĶYKí–ÜcÙÞv>¹ï0"ŒÅî}·ôˆôýî¾õOê:á%+ ê‘T¹'”káDZVU–6yYÔzå̵R¾«·O=ò»r³*ç\‚#÷z¶~ÌÒwšjò»M±c „yú WÐë•ÏÆZß¶Ë&«ºÔÞwkîFyùãÓœC ÑAÅøpCVX=½ƒ° „ 1y…k­ Ií—†{Ϲœ…W¸tÉòIaÆØ.tx­pjeˆÚZ¥K·KùŒøAè4†¥qËî1BÙ/ ÓÈ»ÎðŽ¡ÌļežÜ—…ºCÀt¶Âá2»~Vð*$¦Lè‘Ü&tMáÓ¶*DD6[åc©<m®úïðu<›é?Ž$1`ï3›ã×ISå_Œº¥VŸª'ò;=~5Ð"ô‰ôÃïÜFøƒ¶1~éÆ=$u]¦98‘½2¸sPÙqÉ]®LôOëf§§¿`>W£J! öÊuÞÓ±Ü"!Q39혭õIÇ´4ûÓ!ë+Ó©•!jkµLš=žé5œË–Æ-¼ÇÈzfÂU&MjtºX`‘¿¾W®Ì©wMÄŠÅ¢ñd.¤÷rKïætñöÕõÈM)-ùoæJÈ]YÇhAy¡çpµ¼­õƒò!X|Ê;Ðêb½´+‘à+:¨—ÔænÍ+«rL:ŸÊ™¹÷IJü˜u»þ¸Ô"YìÝUåZòÆü¢ß‚p]uÀD²ªà"ù¤ê¬ÁBÊõ—«&« ¶õ’¦%²i U9ÃM€—ÚózËȰWêƒÀ)Yñ +þF±’ ½ÒÛ¥ž3¯â–ig¯f˜(›Qw“hX8ín»õiw34{ÝmZÖ׺›K+ën-­6E¾ÏßB"ßiKã–Þcdý-­:®9̫˵q¸_­×ºYó›Z߬¸w‹>°iôt·W¢ Y „RîYµžVž“£ù“‡ }[SÿþëùÍ0yNè¶ÎdzG “Ç'„e²Údõs“.d@xÐÁcFîÑàg#ÚQn è“Ó×CÉœÙôýL{¡ÉX»ÉF· þsD 11Þr¶ àè¬ev?j€xkÅg£~•ˆ/~µ[Ÿö+C³×¯¦e}­_¹´²~ÕÒ*ÍV{ÜJ ŒœÖ°4ná=FÖ­ðZÙr« ö^ž_^/°KZšÂ£d•†^•³ºÉu+ò«ò£®môróôhàÛƒ&ÓM;}ä¿_Ž`S¨Fm”½ÛkHh`ñýúb$s²XµUm¿F©¤TMQ·wôdRëIF“Ȇ-'A!ñnu|óÇåéˆÛ ðjár{Í‚Nö|¨Ø0ñO¾µ> zK³ôY_ z§V†¨­Uý˜î½$ÂçNkX·ð# zt@rú1ÄCÞÁÊèWúi à J¶…Þ³³«Óß×WÏFûx”JW³”³-›Ó‹·‹_N/ælñû¼xï aÖ¤D # }˜ÚA’Údp¸¨{³ÓÞ9aܰºí˜~—./*B‡ìÖ§½ÀÐìõ‚iY_ë.­¬´´JUÊ_í­bh:-biÜ ôOð#é)ä±i,lûW„ã7½t‡;"‚ ~…U Þ¸pÞl*/–Už¢Çàä.E˜·›¬bðõzs‡œUKXñU·mM“i’Ç sÑí*[kÔr¸›DÝ¿¯duZå·¶o¥0¿× Ó\•B"ˆ¯gUw~/QÓX?Úvô9 ÿÜœ.\éX,·q$ÜüÍñ$Cû¦—vR¦lÄ$*x˜bXHk»W 3/ÿmÙyûøäìü?zH‡nƒeIHHEÈé¼Xª“ùÒÝ•naótؘ®Áöðl¾Ù M k°Û§A+\ $9!¢b_'ÞP/ZäÃÆxåÝ5@DzZô[ò†Æ-;êÛ²-J&,†þ6eÕ2™¶—ØKÄp¨pŸ=Ì^–Ú©sŸå!~ B­î2˜¥q ï3ÚFêþåHXf}÷Ø:Hã­ÞÇìì';\Cá öù4Ø Í!+)F´Ž´k·ð &¾ßþ­h5˜ˆ!(2ÿ@ƒYj§Î}–‡¡;Ìi0KãÞg4ö-³>ÚÅ8Ú±=°…9ÿ9`×]eêaÞ"Ÿ„¹¥9¨SÄCJ8\¬:zôqnhÜÒa- EGúŽêá>;Ðb–Ú©sŸåA8”DQä4˜¥q ï3šÄ¹o˜)œûmœû7—Ó‹-ÌÅ4Ìåÿæø¥N,†ùŽ|æ†æÆ Fj‡]5F¢9Ò¸…‘>´–ðo@9~õæ èPh3KíT»ÏòЀN©pÚÌÒ8…÷¹ºb6ºúõåñèþÏt‚¾¶6Üôù$Ð-Í!ÍÄ' XWÐ5[xˆMÖþƒ¯-¡ü@{b§Æ=†‡AüÈ1è(ð=0 ŽÆó0𴛥vªÝgyh<Ç$\6³4Ná}FSCC½ a’éo{¿í“nýMSDB·¿J‡r,ôÍ·xFºúÓDVd•úêC»…9ß›yÌ=‹ÿ·ic󈮂ã”¿Ô ”1Ó‰E·±‡_S‰Ÿ¿2¯’ mã=¦õåé>+úÖÁ·æùñaØÿ endstream endobj 4692 0 obj << /Type /Page /Contents 4693 0 R /Resources 4691 0 R /MediaBox [0 0 595.276 841.89] /Parent 4579 0 R /Annots [ 4695 0 R 4696 0 R 4697 0 R 4698 0 R 4699 0 R 4700 0 R 4701 0 R 4702 0 R 4703 0 R 4704 0 R 4706 0 R 4707 0 R 4709 0 R 4710 0 R 4712 0 R 4713 0 R 4715 0 R 4716 0 R 4718 0 R 4719 0 R 4721 0 R 4722 0 R ] >> endobj 4695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.611 719.912 471.145 730.816] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.442 684.047 284.13 694.951] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h) >> >> endobj 4697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 666.422 123.643 677.326] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4698 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.706 666.422 179.116 677.326] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_62298e0fb06332a282d9daab718a1286) >> >> endobj 4699 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 626.88 142.463 637.894] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 595 145.233 606.013] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 551.164 148.56 562.178] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4702 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 519.284 144.675 530.297] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4703 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 487.403 146.338 498.417] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4704 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 455.523 145.083 466.427] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 369.399 265.182 380.303] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) >> >> endobj 4707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.148 369.399 425.788 380.303] /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 319.58 267.951 330.484] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.917 319.58 428.557 330.484] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 269.761 271.279 280.665] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.245 269.761 431.885 280.665] /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 219.942 267.393 230.846] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) >> >> endobj 4716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.36 219.942 427.999 230.846] /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 [236.629 170.123 269.057 181.027] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.023 170.123 429.663 181.027] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.629 120.304 267.802 131.208] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [393.768 120.304 428.408 131.208] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4694 0 obj << /D [4692 0 R /XYZ 90 757.935 null] >> endobj 462 0 obj << /D [4692 0 R /XYZ 90 429.994 null] >> endobj 4628 0 obj << /D [4692 0 R /XYZ 90 407.682 null] >> endobj 4705 0 obj << /D [4692 0 R /XYZ 90 407.682 null] >> endobj 4631 0 obj << /D [4692 0 R /XYZ 430.371 372.553 null] >> endobj 4708 0 obj << /D [4692 0 R /XYZ 90 355.825 null] >> endobj 4633 0 obj << /D [4692 0 R /XYZ 433.14 322.734 null] >> endobj 4711 0 obj << /D [4692 0 R /XYZ 90 306.006 null] >> endobj 4635 0 obj << /D [4692 0 R /XYZ 436.467 272.914 null] >> endobj 4714 0 obj << /D [4692 0 R /XYZ 90 256.187 null] >> endobj 4637 0 obj << /D [4692 0 R /XYZ 432.582 223.095 null] >> endobj 4717 0 obj << /D [4692 0 R /XYZ 90 206.368 null] >> endobj 4639 0 obj << /D [4692 0 R /XYZ 434.246 173.276 null] >> endobj 4720 0 obj << /D [4692 0 R /XYZ 90 156.549 null] >> endobj 4641 0 obj << /D [4692 0 R /XYZ 432.991 123.457 null] >> endobj 4691 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4725 0 obj << /Length 2548 /Filter /FlateDecode >> stream xÚZYoÛH~÷¯àböAF=}òÈ›ã#ëc{de7A&0h©å#QZ’ZÇûë·ú’x´ZÚÀ0Ä£XõUuM’É2%"AÑtu†£¸úáŒØ»#¸=jÜ?9ûíšÁS(‹Y4™ëÇc‚%Ñdöu#†#‚1¼N«?1¦?Ð÷ሠ<¸^,¥9˹,‡$Èb:$u5å” K‡ß&¿Ÿ]Mvò-:Áb%ýßg_¿áh(?Èeiô Ç‘,‹VgÀÂ/ÏÏþØñ0×\÷)(;®!eÇb§!¢(±Zþ2“J˪v÷¯‹Çë›Ïæ$VÚüvMéžX“$(¦\óºÛ®žÁšx=7¿r)W²¨+s¶(ÌoýÝ ¨À`u^oíýÿ ‰Èi½¶\JYoËBÎÌÙó[מ4ËÃ,J°@œcu£|±ã†mõ¨A®íÓT©ËR)æÖþO,0ü“. ÆÊDEg],IPt‡’ŒŒÍ› 8¢Ü°b‘4n®bê_ÅéÛRÃ’e¹R1×ZæúKW«T L²(¦ JóiÅP–Šˆ4!ŽØ>ÍÆ<Å›9ßœ;—}Χ½ äåÌzõt½Úäõây±Û/ê·a,¿š[ÛJö|:ÎkÛý°O[ê ö.˦OX|¤I‡Väh‚²ÃˆŠ¶ìÙ¢„ _¾ë!ƒW—!ªZæ3¿ßN=Çw)úªØ®d –^Û43&|ð¶±ap¹óO·*¡2åˆñ¬ÁËPC_¨¨zÒ7ý!#”a‚¶$£Í¡@\€ÉL"pº­Ëw½(°îë‘zØÕ»âyÚpu†Vò-’Uàj<~º»ºøÇù݇«ž×’ÁPuÆå)$"PFI8!®Q*Ò0@KÓøøéââêñ±g£,…¢N£×~o N'€ã@›±$ÎÑ4­÷éööéáþænr5îâóýc^ù`\Fè‰S`Hâ0FKÓÀøñêãýX¥Ü/>¦)‰Œû6„â§1æg" ÐÒ4WøæîçÛs@:ùÜ7"$D Ö#¦ºl†‘§ˆ$<ŒÑÒ40¾WíüòébòåÁ*Ð`r5x{€­ 9$$D*X¤¥ñ€|¦ð;>ÿØ V¤ûgý1MÍNuIH ‚@-Ïš÷÷ã˧ xçàü®âT¨¶ˆD !}$<ƒ,uªbŒ8!a´–¦öbÜ!=¨¤ª]‰“¨!Àƒê;ÑKYÊçrKâµêøîj ^@7ý€â|5‰öú(X®z*Òòp|ª¥i—ñÕõÓÃÍg€ @ÁºýåÐ ¦QCB†Ð9œˆc.@ŽÆõŸ:°îm?OACŦ!£ÄÑô€t¦9FÁ‹bºï_¸í^®·Åtß ]®më£&®@÷ÃwÝÏ¢¨ÛÍ9SCº¥´–QÀr ’.Ö̦u¹ì7q e©%X`ÕCÏçº?_n: óL‘ÿXT}¾ZBpSCóˆ“Á7Ë¿ªË­Ì÷ÚlÊ•aAøžE’éܰ}YI‚xB-°ñ¨ÇQ5¼¥žW' % uÂ*èG½¼XwTrÓ§j‚•µykß-ToP§1”lºSÎŽ±Ææn6Ÿw,¦ùÒŽèë>¤XÀhÌ÷ÐÂi)„YWšxž‡Æ»K–ªÎ–À¢˜¯ÍQ®G¿í¶°~¾™€€ócXµÞLÀm¹1e ÀúTû1°õ»2_Äÿ—+s‘ì\™Ò®,åâç\™‹Ø¸ò^¿§ˆÓäˆSÌŽú1këæ÷c -áOø±_®<`a1™{œCÍÖß„ª/pz \:{pjXIè±ÑZí6({“mƒÑ)›D„ª4ž´…÷zSC”K e§Ð4…ç›Ír!U(At©¿\šc½G]x‘ \´TÃ7TKý=/fK½w+¹ÉaÊ”z6§¾-75ô!N´¡£*Ôe©·ò:¼å&b=K†¬éhÂÂ;ŒŒÇw¥ÅÐåR~ªÒ–:,·ÃRÉÝ‹#ZgL`A­-MXz‡‘_kø ±8QiC|Dj‹¡Î­rÔ˜«‘7£AMPv—‘Wc5éFNTÙQ‡åvXêD¹™†•Ž¡ëŽÃ©ÂÑ„…Üt" ½'/%ˆÑìTµ-uXr‡¥^kµ»ÿ^oµÀYPuGÐe´ÛM÷ìר18 n×íIíÖ‘Œ ÈßZЃÙÎW²–eupÇ®/÷ð8ÒЬønkÚ’˜ºÏ±§­¡ˆ ÞéjÚêÜèrØ Ž¤ ¨U¡˜Úb‰›€.UO§ƒÍºVmf¾Ô&Î çUù\š›u™Õ2wÅ îêòwŠu1‚ö¢˜ååÌ\Q¹ÒÐ@±(^*s9·Îd5-ÏÒRëOpÙ”Aõx•¿HÇ»–•iªaPÅŠý®@á6mpÛF0ï&`mHà„{ïá¨G r½Ú,m;±­Ëâ`7m†¹­…¢»T–&,»ÃÈ';‡…–d<<87ˆ»ª¥9ÑWw­r ‡ ¨ÁË¿bhz Z&àÐÃàÚu³2þ¡ÆnDZÊâ¥þ^¡áˆA|ßÌÝä¢ïó "¾ÌíKÍúe÷2Ô=_Éz7\éßÿÊr½Š^ý…‘òh[ÁÃØRUí²<5-s •;;€£ à[DЀ×Åré^Y=ï†Á!W¯…U'û—JªrvØ9i†hÂŽ8çžè°sZ…íïG<ÓŽOíª‘0CÒCÓöJ5ÚÒš‹õºœ- hЭר„9_—+÷Ò œp³«;‡-¥Þr zÄR{¢Ã–²4 ÛߎXÊM‡Ýz#â#€,MP7ƒ Î[€݇ãõ‡jØ·çór½2G2Ÿª/:`ZtµfW#ævM|ÌŸ*W§¾ÛïŠRµ1f¿¦±Ã?Þ^úÅG}HÔ7ÏÿEÑd? endstream endobj 4724 0 obj << /Type /Page /Contents 4725 0 R /Resources 4723 0 R /MediaBox [0 0 595.276 841.89] /Parent 4579 0 R /Annots [ 4728 0 R 4730 0 R 4731 0 R 4735 0 R 4736 0 R 4737 0 R 4738 0 R 4739 0 R 4740 0 R 4741 0 R 4742 0 R ] >> endobj 4728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [298.307 702.288 332.946 713.192] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [88.007 644.77 138.508 655.649] /Subtype /Link /A << /S /GoTo /D (deprecated__deprecated000040) >> >> endobj 4731 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.11 624.68 328.762 655.649] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_256ce6281894f65dd15396cc0994e875) >> >> endobj 4735 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 213.57 123.643 224.474] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [326.159 213.57 357.481 224.474] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) >> >> endobj 4737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.227 213.57 394.877 224.474] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_883167275c4d3855ba453364db3d8d66) >> >> endobj 4738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.624 213.57 428.388 224.474] /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 [431.135 213.57 463.563 224.474] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) >> >> endobj 4740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.333 213.57 511.506 224.474] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4741 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.876 158.335 179.045 168.866] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 4742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [378.485 142.041 409.658 153.034] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_07281faacbec1df800a417bf157751d7) >> >> endobj 4726 0 obj << /D [4724 0 R /XYZ 90 757.935 null] >> endobj 4727 0 obj << /D [4724 0 R /XYZ 90 733.028 null] >> endobj 970 0 obj << /D [4724 0 R /XYZ 337.529 705.441 null] >> endobj 4729 0 obj << /D [4724 0 R /XYZ 90 688.723 null] >> endobj 466 0 obj << /D [4724 0 R /XYZ 90 611.115 null] >> endobj 4642 0 obj << /D [4724 0 R /XYZ 90 586.9 null] >> endobj 4732 0 obj << /D [4724 0 R /XYZ 90 586.9 null] >> endobj 4643 0 obj << /D [4724 0 R /XYZ 107.713 527.779 null] >> endobj 4644 0 obj << /D [4724 0 R /XYZ 107.713 511.858 null] >> endobj 4645 0 obj << /D [4724 0 R /XYZ 107.713 495.937 null] >> endobj 4646 0 obj << /D [4724 0 R /XYZ 107.713 480.016 null] >> endobj 4647 0 obj << /D [4724 0 R /XYZ 107.713 464.095 null] >> endobj 4648 0 obj << /D [4724 0 R /XYZ 107.713 448.174 null] >> endobj 4649 0 obj << /D [4724 0 R /XYZ 107.713 432.253 null] >> endobj 4650 0 obj << /D [4724 0 R /XYZ 107.713 416.332 null] >> endobj 4651 0 obj << /D [4724 0 R /XYZ 107.713 400.411 null] >> endobj 4652 0 obj << /D [4724 0 R /XYZ 107.713 384.49 null] >> endobj 4653 0 obj << /D [4724 0 R /XYZ 107.713 368.569 null] >> endobj 4654 0 obj << /D [4724 0 R /XYZ 107.713 352.648 null] >> endobj 470 0 obj << /D [4724 0 R /XYZ 90 336.871 null] >> endobj 4630 0 obj << /D [4724 0 R /XYZ 90 313.618 null] >> endobj 4733 0 obj << /D [4724 0 R /XYZ 90 313.618 null] >> endobj 4655 0 obj << /D [4724 0 R /XYZ 335.935 278.489 null] >> endobj 4734 0 obj << /D [4724 0 R /XYZ 90 261.77 null] >> endobj 4723 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F48 2408 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4745 0 obj << /Length 2871 /Filter /FlateDecode >> stream xÚÅZëoÛFÿî¿B8 ˆ6ûäÃpì¸gפ±ŠôÐ-Ñ{é’Tß_ßÙµ|­| îÎþÀår8¯™ýÍŠd†áŸÌ<‹D„&f«Ý ž=Àì÷'Ä<]Àã…óüÍòäõ%ƒ·P²Ùò^½$(™-×?!"l¾ ãàiUƘ~A›ù‚ \æÛL>f÷Y5'q«9 älÌ) Kæ¿,¯OÞ.[ùF;ÁB)ý÷“ŸÁ³5hy}‚KâÙŒ1"I2Û 3ޞܞüÐòÐó æÇ ä#Ƴã(ŽFI¦(bAÂáÁ„Ap„"Âf–Fzã/ҜחS*)‡\ðËÓ$GÄI£IG>…†D¾Ý«x@“¶Â»*¥ßÖÑ´­†æ˜­>yÖV¯8c«#Ž[ߦš«ìƒë®¬ì̽¾ªr UZÔÛ´É!)Kmqƒ&[ë»ÔeUì…®¤nì/˜VN]EÔn?ˆ#»åE£ù¬Öj+Ò7Ÿ±ÀuSíWæ!lT ×cµÓ2:E‡ˆÅ¦Z 6,èâ5’Ó@OÂQÂyËCSæÂEIÈ]ªãȪ©x¸ A1â1;ðÀŠhσ:Ó¥†[ws(¥éCY¤[}g*¾ÑK£i‡š²H©¤Åœ_cqÇ[‚|ÈA $²îúuø:x"&æñoéÐL`Ï[ö»´©ò/FÝR_÷EÞ<ëan,I·Û¡1…JLþφD†à_rÏdI~~RÛ}µ6+–Âþ¸ÊÓF‡=žòf££ƒÁŠÇ ëì))‘(xÈeMÕ{_¡§Ò/jK„ÑS¦’Få.o€1lÑ4I‚³Õ ÄæÅƒ~¨ü ×’Kú˜Uúöꕾ*ßJ¾…ÒzèxˆD_ëàÈï`êw0!±ßÁÒ€Æ\·[3°îñbn½©/—WË[=Údé\¤†Å<ì, $“|5”iUJ,$‡EÙèA_L­3…ûÒýVѽðàßYUŠ1Aƒ¥†90Ye5š¥$¼‘êÛ–t¿M+}צLhbIÒ¾ÚdU xI‡ä\JÕž,ÙZVåv¿+: &TvÚº.µœ4<’É/¢qh¦ )„5¤ù œU¥»L0‰jF$OÛ¾ cPÞÒH¾;åMéï¢xAêuˆ!hÓ uŒpB;Úœ—*›¡r8ì}YAœœ­Ç&—Jp…‘©4SKûŠIòbôé{XŸžÜ1üii¾ €rÀTeÑ$(³4G@™Wže~q÷¸â•½+ àÙ¤ÅCfÝñû>¯,´’èA×&g’PKŠIôÊA9"â#Ž:M;ÊÐs”Ožu”Wœq”#î¥Hcˆí0ºj¿ =–¦*\ÝžPDIè7ÚÐøE&PpØùXª}NÇõ# ,‰†ÍÁúÕ‘î÷»‡uÚxÛHžz¼}RTüwú¨ºaD:ýC«è°8&âAÁb"÷0@õgê(¶ç81 ©íz\/fº˜3œÍ,ß.Þ¿¹ŠàSjõ_«-K²Ö»•–=ŒžÌ‹~¬0*«\2cP˜¢X TK½pÈQÓgyÔÓS©_y7ØÊì½Q$ºZô"ÖÒxesŒ‘€Hue«00þ9Gq° }Æ1  ²´Z\fÚ¢Ù¸èL®ª /×XÄZœü ‹Ýn±YTC”ÙE]ù„(lo6§»Ýi]ךAOË„« Ác -å`´ƒ†G‚=”˜*1 þq}1RV±¥ÒG–’{ޘ뽾ªmNÉßVáŸõ @lB±Œ[l¡Xòh¢Ukû<€ ­PH™äÕ‹žÄªØ0¨1MŽD¤¥^8äèè±ÔiÎC96œŽCëî·õH¬ÎQ °ŒÑÅÑÄA—¡Y8D#À3F€§¥Q\­CÑd, TíXUx õ¦£Ãôöb¨ýÚôX¾ k!É‘ˆüž°4^Ù4„4‚a×Å_åo  'L7ôÝ6²_QžñXÊt*S$ ÑN^èiKíµ¶Ïòžæœ¢ ¯§-W6çPhÞ‘m~“ÛƒÌÜ“àê^OÜ•í‰Ð/vL줊V9¸“õuo·õ¼NªÌÐÜ=÷1íEÈ›tkºßÔ‚‚çö”ÓÐÔN"ô%ïoNµb4’›ª¿sh¦Z1 I"—î?èšG$Owe}ƺfKóm]³Ï!¶kîk3Ö5»Ú¸]3ÈÇiœå´§qfP‹iwµ›Î6CíU´Ïò%hTVoŸ,_vŒODG6ìÕ¯Ëjà8B–¼ÐpKíÞgé>¾³ñ(‚-ÀŸ,–Æ/:ôÕ5{'ÓY®þ]f … K:EwÕÓIL1ŠÿÑ—C3™Ä€¢bñò_ó|b™Û“;vžbi¾í<€4ó·ÎÑdëliŽ´Î^y¦uö‹Ó­³+îržBùµ‚ßOšI7’#^ò 3NòÊÒ>rd½ô$…@!ÂÉ‘S#‡hÚNCsÌPŸ¢14~¹ÐÄ/]¹¹îY‘Þ»^YdC=N^èKíÕ§ÏÒø\ð«V§möúº4‹¢ØëKã× ÇHj0þ5…aFâ¡®ïÊ&Ó¸£ËwN—ê»Fäy@€nÊ*o6»Z?Ø×*J™ê²†œÀ+ük›d)@wzÀ_÷Šrê!=ú{Ú¬6¸ÔríHs5Á×Ïn_é—©0“‚-„0´©±aW®s©˜¶„è~^ú ¾+CËyÄS —БvNç>Ícé—mº2(âÞfë¾ÎÚÄT×Û›³›«7&JHìïªrßä…=/ã½­‚¶_¨œß\\ø-÷ÚÓ²´XqfÛþq}~3„¡ö÷~4ò•¦ßÞÀjØ•áú¶îÑÁEùåù!”W{ßÐ=Í_æ4 endstream endobj 4744 0 obj << /Type /Page /Contents 4745 0 R /Resources 4743 0 R /MediaBox [0 0 595.276 841.89] /Parent 4579 0 R /Annots [ 4748 0 R 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 ] >> endobj 4748 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 405.913 193.212 416.817] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.262 348.631 397.771 359.645] /Subtype /Link /A << /S /GoTo /D (structwcsprm_ad387ccbd7847672b5dc2223d9124120) >> >> endobj 4751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [497.07 336.676 513.996 347.69] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) >> >> endobj 4752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 324.721 145.8 335.735] /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 [191.062 324.721 260.57 335.735] /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 [374.393 324.721 443.902 335.735] /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 271.184 376.801 300.25] /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 271.184 478.056 300.25] /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 171.945 193.212 182.849] /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 141.336 355.36 152.24] /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 141.336 481.774 152.24] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4746 0 obj << /D [4744 0 R /XYZ 90 757.935 null] >> endobj 4629 0 obj << /D [4744 0 R /XYZ 90 621.078 null] >> endobj 4747 0 obj << /D [4744 0 R /XYZ 90 606.889 null] >> endobj 4632 0 obj << /D [4744 0 R /XYZ 90 399.065 null] >> endobj 4749 0 obj << /D [4744 0 R /XYZ 90 384.876 null] >> endobj 4634 0 obj << /D [4744 0 R /XYZ 322.685 89.441 null] >> endobj 4743 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4762 0 obj << /Length 2890 /Filter /FlateDecode >> stream xÚ½ZKsܸ¾ëWÌ!UU-aø`›ñâöÁñq2øúŽ8JcN›f=™0µD’p:gŽ• :Bcs`aa«¨Iœ« —+/žY€Ó$„aèÂì–6ˆÄï1ìl’ÂE‰2ý嘕.ž˜‰ qÃþH%X{×e¹+Í &³D)“eð¢Z¡y¢Pf‰(ž#Ê ‡Duà(òt}ܘås¾¯’Á—úÚ Í÷e–úêÃs}õÂa_;pOó|*· #ÙÇõæ¶FÚoÂ@%FE, ú)-'œ…þN£ŒRKѰ¹ßA‘Åœ]}“ªJ·dœ¯&‹5MhÊTÔ-¤Âa!µIóAÕ/}`òLW?LÆ„ ù_(ĨüaûÊ:c4御ã4zÙäìmõÃ¥h“=¥\ÿrºõu°…Dš Ñܤ0v]‘$­LFc›ïËÝßÓû êžö&wuƒƒSîrõ÷¯>Nk—ECù1ÁEHbæÒð7ï®'òl]—ÍM¡jLªÒƒ5=s6Ö¹Û¯éãmí8ð’m›—Cµ7éäå¦õ(l€ÛÀ•¦ ‰ÕÒtBé #>±ÈõUz¦“a!ûà£DÃÊø!!É uÔƒ´žN,Ò~ïVÜ7g1LS˜•GÃZ»ÝfÆjÿ€ßû/5¿ð4Yåa#³þ¤öyS¦àŒ[ûãëCZØ'禦;—d„ áu.˜.‘›ŠÄê|{‡ºÒ¡±IY&OhC]â ¥Y½3æÚ„ÞHæùnS[l·%B%êyÌíÓT.B2•8äPá¢ÃXé #>á0}•è0`ðìÖdŸ\³¾ª‘ñC‹ˆèHô väBìƒã¿fynŸnñcíßö0í뱇7™ª“¸b7TfðD¯?€ÞòkV¥f–GrBcÜÈ6âs869ìa6¦<îOèñ¶c½²<ß0ÑLʶÃ79xïK½äŒ»4Ë“[ã4(©º+æf‹uÿ…ÔÞì¼#3—K keÿI±><Ÿ¨M˜*¤œÌï+¤|„¸BjhÍT!Õµ¦WHQ1.¤à§â:¬sðži³ÓØI{­ªlãþùy½\ mJ’8^zœŒy¨È ×á8€iù|v­Í|gÏ쾓ö1PÙíþþËÔî…˜ç뻓ñÂuûþX-x¨C•¶¸2ÇÛÙ¹ 0÷ÎÝVfnî ¥IôìºÚÚN×êT]íd~_]-¸‚…0ö—P¡ÙÊÉ,”P^<,¡üp¶„êÂý_êjAa”Ãh¨Vhž(”Y"ʇçˆòÂ!Q¸çÖÕ\ ó…¾v„fûêdúêÅþúál_»pÏ©«{¸Ëuµ×„ÊåºÚÛiWW{!±®îBÎÕÕ“£E$Ž—F¹še”Yeže/ŽrŽã(ÿ˜>îÜ! ¦ú630i\Oe¹ (´\¢¢š§e–¨ðá9*¼pHEN ï²"MÊ™gxÏ&Þe¸Q’á²%Èý1‡†J­çy’á| ÒðÔ Íó„2K<ùðO^8ä©'‘§·ÅfWTYeN~ðìÎ¥ûE™nv÷EöO³2àʱlæ'ßsõ^ÊA@ˆÐs}€î \öÛÀãÞC½‚`Âh²EŒ¦fÇã­obizhŽ…‡Å…‘Ó1¬ðriKÉIñq16PÙ-ÆÀÒ©JT—èZ0Q‰?® I¬d7Ûi‘Ü]ß9>Fõ°d! ©~&NÚkÏP%òüÍš3{úSE±—'ã·` ¨9kÊêc¸{¬ 5ªýæ7k(pg¥þ'·ºXÄ!Ûe½=æÆÐñ¦.8“ŠGÇLDnøŒf›¹~÷ýÛÓðUNºV9 w#Hý6 mWáúô_·€ ÊVÜmC_^]ü4}- ›ŠñV6‘Úp\^¼û0©ñøyþ2­!îì–ÿàV§‘ÞNçDÁb7¬ï®¯&Ï_D=ϸ?]¼›¼°E%ó+À¯^.ýjn|Q]»†½H&c:32´>Ð¥]ûS3±“Á:s:FS¡¼ÍìÔvØúoÂë:t›‡qè–à7Zò€EõâU+tÄ'®êôU.n#JHøCÊú6 CÊø‘ŠìVšá†‹uu¼5§…–{giÁ¢£qD ôêâr̾4†Î> endobj 4765 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.094 702.288 199.263 713.301] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 4766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.197 646.631 439.366 675.697] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) >> >> endobj 4767 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 4769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.669 467.432 137.202 478.336] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4770 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [101.648 437.853 136.288 448.757] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 4771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.207 382.196 355.859 411.262] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.005 382.196 439.041 411.262] /Subtype /Link /A << /S /GoTo /D (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) >> >> endobj 4773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 290.674 193.212 301.578] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4774 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 179.093 355.36 189.996] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4775 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 179.093 481.774 189.996] /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 [401.946 107.356 462.597 118.369] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.703 95.4 217.859 106.414] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c3c9c869bef4e4850dfd9762b33ce908) >> >> endobj 4763 0 obj << /D [4761 0 R /XYZ 90 757.935 null] >> endobj 4764 0 obj << /D [4761 0 R /XYZ 90 733.028 null] >> endobj 4636 0 obj << /D [4761 0 R /XYZ 90 530.203 null] >> endobj 4768 0 obj << /D [4761 0 R /XYZ 90 515.632 null] >> endobj 4638 0 obj << /D [4761 0 R /XYZ 90 170.126 null] >> endobj 4776 0 obj << /D [4761 0 R /XYZ 90 155.556 null] >> endobj 4760 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4782 0 obj << /Length 2223 /Filter /FlateDecode >> stream xÚÝš]“Û¶†ï÷Wè¢ÒLãƒÉ½èL³­3Î$mâÝ™\ØžMQZ¶µ¡¤ÆÛ_Ÿ HX7_t|aI|…÷àÁ×ÁY±…l‘ÓE*S’ ¹(÷7t±ƒO¿»aøt ×Îóon^½ð-’+±xØö_WŒHΛwKE˜X­¥tù[y|O)ÿDWk.éòuÝTæÕÛj[u+–-«¶\±¥þ4K¸X²„­><|ó·‡Á£“Bi÷_oÞ} ‹ Dùý %"Ï¿ÁkJXž/ö7оnnîo~Ú0Ÿ øüZËô‹œd ¼¦É$¡,4#Œñ« ²œPš,RTÒÃøiÅè²èŠ}uªºãí´oŒr’ ¾pZµÎ³¬vKÆMIÊÄРŽáOÚõÕë$sdœ$2võs¥Y\BÂׯ…5†c$³h8wlJhÎ/¢¹;ºMÝ'ó$ËSW´Çí¡Û§úКϞbd™€¦rèñEhúA·CÅ['H«F9m™Ï¦G’*’Ñ<ÀjÂÞ#Š_¢ßφÀÇ< ”Œäº þ—ª•E»«6³éËTI=Áep%;ßJV)%’¦½ãÛêt†K.[ÿ2ÙËwê{±`pùZ6¾?§óÑl›¢5¯ÿ³ârY4çêJ8ØŠPD2_8F³vDóp8ƒllH‡óžs93ä Q2ìg$»œ(×nÍnWk›èߦÛfä-Ž_ÏuWmÌ»÷TÒöp2o ¤TÁéÒu‡2âÅaœÓ¨Qä…š¨Ÿ´CPŽEN÷粬ŽG_)´/’H_G‘¿¯¨‰õ5ägû´Ã¾:vÜ87ÍÌVQ¢ÒäÒ×»CZu8„I“ã93Ï9áL…;š°ež”ª ˧CÝ™hæõSq<^ÙÿìÊ,#*Œ²#ò޲ÕDF9臣¶3£ìÚqå«ý¡{ÆeÝ4‡3ý~ÛçWVP¤°ñÊŠQäGšŠŸE´CŽ@?ÔmUà ˜&Nú3x­÷»ú“y[ã±q¬Ûݹ/J¹ôs’p`³§Qä焚§Ÿå´CNŽ]‚œÞ´å¡=ÖÇSÕâyp@jç¶«Êî­ÿ«O<9J''ígÙ'KN§þ½TB~›¥"‚lù‘¡&†,äg‘í™c'd«dH*êÝe0Ÿ¤~"E.bDF‘ŸjbDB~–HЉ8v*Dd:U†U³ÉYˆÌ€J_;òªQäG…šªŸE´CTŽ]jQ5ÍVܦÖªk¨’üê†5á´XCŸr–AD’à1ðZ'Ývùšøhn´ÌÉØE„Px£ý³y~™Yn/¼ì\ææ¿MuêOLu¶ˆ»)äQÅ£öÒ w”ºßMþ‹$„J½›õÚ‘_¹›^6é^Î ÒY2!¾yÁôfŠš°¯ÞTáðq}ë-j‹€ëËcv?N˜" ®~/ã`ÕÁx¦M"@ðOŽNþuŽ?‹%£$M³ « G0iHG@̪½Åv”¼°ÖîÚûJí!S¬´;¦Ÿ]h¡ÎfÒàgWÙ,†"{Èþ²™¡Ä>ù9¨Ì‰¼þv m1%ÿ÷Šö?vUì ¹[IR$×­­ã®ƒû®‚MvœËö|Xå|yÆø[jÇ*.Ëo)¿Ô¼ã”1{õáãºûåîþXÅo¾Å¯¸;˜—ñæô×çç]5[Rÿaq†çwbÅ endstream endobj 4781 0 obj << /Type /Page /Contents 4782 0 R /Resources 4780 0 R /MediaBox [0 0 595.276 841.89] /Parent 4779 0 R /Annots [ 4784 0 R 4785 0 R 4786 0 R 4787 0 R 4788 0 R 4790 0 R 4791 0 R 4792 0 R ] >> endobj 4784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.918 704.958 368.569 734.024] /Subtype /Link /A << /S /GoTo /D (structwcsprm_e1f462606974e1324cd38f143eda691e) >> >> endobj 4785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.297 704.958 477.805 734.024] /Subtype /Link /A << /S /GoTo /D (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) >> >> endobj 4786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 601.481 193.212 612.385] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [305.228 489.9 355.36 500.804] /Subtype /Link /A << /S /GoTo /D (structwcsprm_f54ce939604be183231f0ee006e2f8ed) >> >> endobj 4788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.613 489.9 481.774 500.804] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 266.999 193.212 277.903] /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 107.597 355.36 118.501] /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 107.597 481.774 118.501] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 4783 0 obj << /D [4781 0 R /XYZ 90 757.935 null] >> endobj 4640 0 obj << /D [4781 0 R /XYZ 90 480.933 null] >> endobj 4789 0 obj << /D [4781 0 R /XYZ 90 466.363 null] >> endobj 4780 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4795 0 obj << /Length 2612 /Filter /FlateDecode >> stream xÚÅœmoÛF€¿ûWí 8m÷•/ý–ø%½\pNm·‡" EVl§¶ÔJòÅù÷7wÉYR;\J.EYÎ3³\>KJ´ÄˆÃbTðQf2V(3š=ðÑ<ûæDØW'ðò½þúæä‡ [±"U£›ÏÛÍSÁŒ£›ÛIÊ„Oç<ù:[ßß®Æð8a÷ã‰4<¹xxœW®æŸçðZžÌc‘ÌÊgs.U"´¼y{r~S—` 4*- øûäÃG>º…Bßžp¦Š|ôs&Šbôt¢¥²O®O~®sTÏ+x~WF¨þ&¥b<5®IÅŒmó×q!“éêaúÉõv¶œ=?Í›éZ{X.ʆ4‘š)]  Lسåb½©6žÝOWå?\Ýç,—)$)7þsU…à3¦3i#`è!H¾ü1_­žÖw“¦ÉÇj#)›&EÊ$ŒáDd,•z»ñùjµ\UÅ<Í×ëéÝ|]ý´YÚg§›™Ý¡›û²g]$kèöÙÆýw,M2}|¶Ã±šožW‹ùmõÓçÕò©z4Ÿº,ŸŸ³ «»‚Æ”¸)ÍDží;½`nm³jÞ´íïŒï³Çç[Ø4…dßAbvÿ]w€ËJ$Ì­jœÍË^ÀØt§«Ia4‹4x<¡×·S ïÁS¦U^çØîp)M#8l" Ér14PhVðÌ~k»ëPuÊ2™ùÔò…Õ¸Â|Mó[)KþN¯:»úc±ìV áÀ)è¾] É•&Sžz\þÂíŸîpgL¤rdŒd™‘»°¯P<ܹ+`¾qÐÏ%Ø–¤å(‡’ÒíPÈ‚ñ¼f”½~ظƒný§=Z–«Nu¸Äd~uáÝb£éZZ)­Vþz¸ÿÿ‹Îž™ËUF ÑÄÅhÉs&³ÂCO·¹ˆíÙÓ\?¡íøÓ&ܱÑ,7tÃUÍ…•‡ÂO¬;Ç*Kæ_æ3; ¦VžcÉ“—Í|±o®YpºjÁ²B ž®ÊÎV!ÁÃ",2 ë’–´ÈlL¯Èš\„È( ö‹ S#DFñ[)‘ÈÊÝÖ9Z4¬¼‚lÛÅØòÊráa·»(ÿ'(2‡…5 ‚³!{x Wá1ª–VÊ ò®=†Ð„Ç¢z®=Fqý„ñ£v£¸Îcl=6Íæíë0RÅa“A‡é%8½¤æbú†r…F­Ã0°×aµßa$¿•9lU-CÓ1!CwîbH²0tê‘ù‹è9Ópts­ö×JÒ˜ ®1¯º~‘µ´RÆkŒ¢FcÚi £Ã‹ëÙiŒäú £5F6l5Fr­Æ08p:(¸ò]ÜN·¯ØKÜ?á¢ä¦xòíë²z!l7ÂLÌõ±ÎдL(EÛÍÆôÚ­ÉEØ:»!`¿Ý05Ân¿•Ùíôj¬yrYþu3.TòêaÚ™^J1“ r\ Y†TpÔÁŠ„Ë¨¯#5ª9jxòª~« Ç Ñ*¾:¨Z»›³Ì½³ùîöšé¼Þ¼[Ža °ÅtòH{Öqqu`®ã†F)Á``{P¦°á•¡,ùh—î^/§:¹0ؘޅ¡ÉE, Ð- Ø¿0`jÄÂ@ñ[)ÑÂpþþòô§k`šdç.†$— Fáqë•@†&†*2¦v\· ¡•À… _ ¼êúW²–VÊø•€¢f% Ðn%ÀèðJ׳[ H®Ÿ0z% ¶+ɵ+Y ¶‡ÉNæpr[Åì0!ÒwЃ*O™ÊÒc]ÿ«L1-5)BÓ'B”+,BhEˆ½"ô¨ý"$ù­”H„¿ž¿»:¿ “ì°aʤdû.†ÄK•³LI_ûP'ˆÉaq>@‡õöAV{È•áB¢?á‰0Ì­=Øp Æt[[€zéâH´êH@êÚãk@Wš“ÌzO•Θ‘òh „8C¿jCzXg"üGМþZ¿ý2B~ÜOˆß8ãüó/»ÞHaF]» \ªQHÁµôòà”Kez€õšAíÙ=¼‡«‹UK+åõ…‡¹@×òChÂ~Q=×ú£¸~ÂxR ;R\§@ôvÀYõN}ëÊ[°Bè¨Kø]›Wª×¿ìy û1M³c]J˰Lзó¸˜>¢\aƒ’@«P ìu¨Gí—(Éo¥D}Ò(Ì,#{w1$[ÂÓ©Ïv&ÁÏdÎY–pKJ2© nR¯º~“’µ´RÆ›”¢Æ¤Ú™£Ã&ëÙ™”äú £MJ6lMJr­I1xˆIËCe‡I9˜´øšT¦ËÅÑÞ””&eyJßOäbzMÚä"LJI°ß¤˜aRŠßJ‰MZ}Zõöý¢{e,ãŠìÞÅt©Êû¨µGw.•a—êr±?àZ%ºÔ†ìáR\]„K©ZZ)¸4> endobj 4799 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 565.519 214.692 575.447] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_92a0007f672a5498ab1b6ccc6a4a002b) >> >> endobj 4800 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 549.922 207.034 559.827] /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 549.922 255.846 559.827] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 526.665 205.287 536.592] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 4803 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 511.068 207.034 520.973] /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 511.068 255.846 520.973] /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 486.834 217.451 497.738] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6) >> >> endobj 4806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 472.213 207.034 482.119] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 472.213 255.846 482.119] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 448.956 234.557 458.884] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) >> >> endobj 4809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 433.359 207.034 443.363] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 433.359 255.846 443.363] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 410.102 232.405 420.03] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) >> >> endobj 4812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 394.505 207.034 404.509] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 394.505 255.846 404.509] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 371.248 237.237 381.175] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) >> >> endobj 4815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 355.651 207.034 365.655] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4816 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 355.651 255.846 365.655] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 331.417 234.627 342.321] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_63eb554461f3df5dc64a25f71891b9f1) >> >> endobj 4818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 316.796 207.034 326.8] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 316.796 255.846 326.8] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 292.563 232.973 303.467] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_3dea9d7548bdbc9a7cc8d0a04cdd46fb) >> >> endobj 4821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 277.942 207.034 287.946] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 277.942 255.846 287.946] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 254.685 228.699 264.612] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ee4fe41274945f9e34009d2eb309c922) >> >> endobj 4824 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 239.088 207.034 249.092] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 239.088 255.846 249.092] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 215.83 247.359 225.758] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) >> >> endobj 4827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 200.233 207.034 210.237] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 200.233 255.846 210.237] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 176.976 241.82 186.904] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) >> >> endobj 4830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 161.379 207.034 171.383] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 161.379 255.846 171.383] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 138.122 226.876 148.049] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dff9a101a373a634f3a1baab29e92534) >> >> endobj 4833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 122.525 207.034 132.529] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.974 122.525 255.846 132.529] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 99.268 243.464 109.195] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) >> >> endobj 4796 0 obj << /D [4794 0 R /XYZ 90 757.935 null] >> endobj 474 0 obj << /D [4794 0 R /XYZ 90 733.028 null] >> endobj 971 0 obj << /D [4794 0 R /XYZ 90 716.221 null] >> endobj 4797 0 obj << /D [4794 0 R /XYZ 90 716.221 null] >> endobj 1091 0 obj << /D [4794 0 R /XYZ 374.54 681.092 null] >> endobj 478 0 obj << /D [4794 0 R /XYZ 90 664.365 null] >> endobj 4798 0 obj << /D [4794 0 R /XYZ 90 583.517 null] >> endobj 4793 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4851 0 obj << /Length 3301 /Filter /FlateDecode >> stream xÚ½\msÛ6þî_¡™ûpÒ̇wý–ÄIšŽ›ø5—NÓÉ(–ëbK©­4ο¿ E,()J3ÑârŸ]`÷YÈFþ±QAGFR5º¼=¡£ðíóæîfp; î?žžüû™€§H¡ÅhzU>®Qœ¦ó?Æš09É¥tüõòþz~7ë1¹žd\Ññ³åÍ¢ººX\-à^>^¬&l|i¿Í)c&ÅäÏé/'O§µ Î@%´5௓?þ¤£9úË %¢ÈG_ášV£ÛÉ…»¾9y}òŸZGõ½€ïû|”T‘\ä£LH’›>¦¡ \ö=θ$Tg† BuÓN’rh'mÛ‰ñ‚Ð|äEl[=^n&ÉÇ·³ûOÕÕÕú®ë>3†hÞ,nœþå½Cúï“×ÖYÁI¡\Pø,JË>AÊŽAÇß¾B8 3žß“­¨¤†0ÍG†2Èø|çœ.e'RÉ(óè<'ºu«rÞ0£šHÈZ/cmǹÚ6ájèÚNa'ƒ2I jZ€ÿ˜/ÞQÊW‹-T©‰á¦O['ãwTZ|èÉŸO/Þ?y9jüè×U_"å²@÷2(8ŒQ´ÀéµÿIJcá¡$|ð¨)5P£T/RS*×ÚQª½ê¥TE Ø[Æ!ŒZ ã–´áSˆ]ƒ5OæDP\K¹¹R-à^6•Ðgl Ã^GÐF —+ØŽE”ngUO;.\x„6@ä2èZÊ.«û0„©ï+,RÝ…<âòh[ 7ÄPíÄVî>ïUò¯mh,H£êö4"ѹÙ$|:I¸yqú´ÇEE$e‡¸(k{,…äü¸÷ú÷>÷)˜ø>=˜UåSèœ@ VÕ³ŠÅ^hf Rƒ £•V+ÌŽViEc_ƒWZ'“¬´.¤Òb€¾Ò€éJ¢¨´~GePiM”ÿööůϷZzËŽ.Ã9 C8k£»R›#¥Ö¦ïñÑ”ÚFA´Ô:‘¦Ô*ãK­Š–ZSÇ–uh­µÒ¸-•ê-g k¢ÌË Ðå‡ét¤ÞBAè´—Æ‘;*‡Õ[ˆcÜi'ƒCCÅ•² U]?»¹Y­ú¾œŸØï–·3;øXÎ"²ëÅlýòŽÕTÂvRS>¿rŸ_–7ËrcoÛéIù}ÏT¤º±YW’Ÿï&R×Vìïå|á&50ž¶AZžUËóÅÕìËͦúãïÙÍ·a#·¼ª‹–ñù¦"B‹•UÁ`ƈ’²Iqr£)NÉšcä-IÈ!dš1ð¶ÂÏÎz™ØÎ³æ³Á`¹€á¨!lEÃvy+Êh¢™ÚŸ†1ö"Í"ó4,X„†[±¶u WÒ¸-•ChØ\`-”9˜CZkÓÂíå`]®h óØKãÀ•C8Ø” ‹¨ËN‡ÖÖçvÏgU¿;¶_­±Û;Û+ààrÊ[ñ%êý0×ráÖP•1’Så‡á!N¥6+yÜÖ·¤T‰‘—œÍ5´‚Ô­…¨.¹W}$"WÊNhÍш\r˜® œÉL’Ê]—c€žÌÀ4›‡¨èÃï¨ Øüç§N·IÂÔÑö⺗A¡á{’+Þ‚.IÝrzœÔíì¿8`+P%u'Œ­i=¶¦±±5S¦m:¶¶Ò¸-•(‚— ƒ5QæePh;¶æ¦hAg•ï%c,î7wËK×.Õøv È~ÕŒ8i„wìõêæ›ÉÅù:6ÅÑø€J˜ó+œœL’]`€žÀ4„¨øÃï¨ øà1£‹‹m> $çuÝˠЖŒßCè’8Æ2r:hž±“Ø BÓÒ\€ÒV8œ âÓ‚ëy ÀMÒ€ÿ¬ü®ú,³»» SãÙ·$AL26N‘„4`v~´59©5:DIÂˤH"Ð' БD˜$‰jš$PüŽÊ€$Î_¼={ñzº= dDÒuÝË Ðv²X´€KŠ(E(yÌàˆFA”$œÈ,Z7€&0[:*w ŠxL@×T@'¹Âý n/«Ä(Hv2.ŽÆ<'Z88™$4ºÀ=€iQp†ßQYsÀ«÷«õ¶œÙß%ê·—Aq9ô¤²…k) V)?d€Ð(ˆ&¿Ù#ùCë$?fKG¥KþëùÛIDyŽ5QæePh» Ä¡/Bh—üóõêŸ6—]£|½[n|ù_¹Â¿°?Á>l«ûåz_Tˆ:Vr‹†¨Œ¡ÉíeRÉèŠ'7 è’;L&w 5Ü(~GeÜn%ªG²œŸan{Ö.9 ^´`éóg±F¡Xà ÄrÛ‹ìžÛ-ëÒ¹ÚÒQ9<·‘&jrƒö¹BgÛÉì—ø&3h‚±ÞÑ–ø„ªöÒ¡Éìd’ÉÜèB’ôɦ“9DÌ~GeÌ÷³«žJMIÁ4ê·—Aq9ÐǺ… •:žÍÂnZ=`Ïo  šÍNdl­͘-•;ds¼‰‚lF ël ·³¹ ‹žt8 Ü%¶^'˜9|½ÎË$“»Ñ…$7è“;L'wˆ: ¹1üŽÊ ¹O_=~½êû-NòuÜË Àv§jÁÚ- ÙÍ¢AA)Ñ{E“Ý‚hv;‘=²;´n@vc¶tTîÝñ& ²®³;€ne÷ÖV:® zýVA0={õ$‘L¶aŽçE¹EõHŒÀ!\à‹s^&Å®8# €ŽBÀ$#´PÓŒ€âwTŒ0=²zÿi¶½8ljb¸ë^…¶»4(Tü8GÃBsbŠöÉ bœàEvç„–uiN@mé¨Î H5œ€A{N¡wà™Þ=´…èlßíìÿ5~‹íû¾ÝÃ2÷ú«hì´%¦Þ$çÅ`FÉãçQ”^ œâd’œÒèB8ôœ¦9%DÀ)~GeÀ)çoVïo·)’ÏHÜs/ƒ"[ÞáB·Rd4*€llîO)‚(¥8‘=(%´n¥`¶tTî@)ñ& (®)%€Þ¦”Îq††Rðçozø†Á’£|“ãtãÉê6B7;mÐ<>íµÎ²á´.öx¢a{Æv \Ö'EŽbzÍã‘–mêLŸy@³òǘ/3LÂÈ£•ZØFË mu£e¦Ñ…” З™0]fBÔeÃï¨ ÊÌ“‹ó·«ž‘+%‚ Ôs/ƒ"Û2c ÙB†2“Ç¢‚å†PsÀÊs  Vf¼H³µX~k1\EΧ+H˜–uèùt+ÛÒQ9 ÌXR™ÒD™—A¡ËõCÅ[ÐYå{¬Ì" ?Uý_âØÝùÛÞ¹n^Ô‡Ãv¯ŠH“7ïú ó<Ð%Íðù"qôîôlRðñ´×MZSãÁnFaÀUÚT—ãúúÛË=~r ³»ÓÔ~öCä1¸˜‰œ•ÛÉÃÝÖ _§¿Ÿ÷/Ó4‡bæôCX"mŽÄîálXð—ø´ñÉ…]b~sÖëhºS;â8e¢ƉŽ˜®ÆéG?0…‹âoeð2©ñC +>~@Ýø!LŽZ¨éñŠßQŽü[f}'”rŽ:ïDPl˜¤ÁX ›>°è¾&rÂÕûØÑ„i&ªRú‰ªT±‰*ë[Ö¡U+ÛÒQ9d¢jHi¢ÌË Ðv˜a_òBgU+Ä'ªy}îþû¼Ÿ`/*–|×7ìGÇòû½¤àP?¼¦`¯éq qø‹ u±¢€„<¼Î@Ôñ¢8Zj·‡ÂÐ:ãd’u¦Ñ…Ô Ð×™0]gBÔuÃï¨ ê |¼ì¯1öˆ+æy} Cöç`CdúÀãU†ÂDë€ãV˜R`÷…ÐÀ®ô2(bEKÝð%Ðh³4  qP¿üÙ€îð{ŠЩy'ÄFS—V÷›Ålîvc\m# CDó†÷†±-DYŸM[”tòømÿŸu-õå½õBÈ3}À[Ý+ˈaEø®D]®åUïJTE™JÖÁç‹Õân¶Yø6]UŸS;±õÇY_ùÝë²ú`ÅO”ÿ$hõ§Œ¹¨Ÿp5öG_¡íÏ&lüâ±{”À@Ä“q»_O×ß>.¶öi(&¼Aóüñ‰¢’ endstream endobj 4850 0 obj << /Type /Page /Contents 4851 0 R /Resources 4849 0 R /MediaBox [0 0 595.276 841.89] /Parent 4779 0 R /Annots [ 4853 0 R 4854 0 R 4855 0 R 4856 0 R 4857 0 R 4858 0 R 4859 0 R 4860 0 R 4861 0 R 4862 0 R 4863 0 R 4864 0 R 4865 0 R 4866 0 R 4867 0 R 4868 0 R 4869 0 R 4870 0 R 4871 0 R 4872 0 R 4873 0 R 4874 0 R 4875 0 R 4876 0 R 4877 0 R 4878 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 ] >> endobj 4853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.632 720.235 209.504 730.141] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.091 720.235 259.964 730.141] /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 686.517 229.845 696.445] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_df57a609a5c3f7288452cce86210260e) >> >> endobj 4856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.594 671.419 207.466 681.422] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.694 671.419 256.567 681.422] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 637.7 235.723 647.628] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 4859 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.339 622.602 207.211 632.507] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.27 622.602 256.142 632.507] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 588.884 234.059 598.811] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 4862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.954 573.785 208.827 583.69] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.962 573.785 258.835 583.69] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 540.067 242.358 549.994] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 4865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 524.968 207.034 534.873] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 502.209 241.82 512.136] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) >> >> endobj 4867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 487.11 207.034 497.015] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 464.351 232.405 474.278] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 4869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 449.252 207.034 459.157] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 426.493 215.24 436.42] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_54634ed49425e8842874e9e2b77899df) >> >> endobj 4871 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 411.394 209.024 421.299] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 388.634 205.835 398.562] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5592649ee4c25e118559c6d283c51930) >> >> endobj 4873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 373.536 209.024 383.441] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4874 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 350.776 211.912 360.704] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_446914676e0b3f55ac6a080015a52b43) >> >> endobj 4875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 335.678 209.024 345.583] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4876 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 312.918 227.424 322.846] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6779d48001260a0011b3dcffdcb64cb6) >> >> endobj 4877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 297.82 209.024 307.823] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 275.06 233.511 284.988] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_96b787f84207faa42599e50e6e078d21) >> >> endobj 4879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 259.962 209.024 269.965] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 237.202 230.742 247.13] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_222a5bd7659f3e1ea1a9ed21f54c50ef) >> >> endobj 4881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 222.103 209.024 232.107] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 199.344 231.299 209.272] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ace96fb8c1499616dd1333af3e8340b0) >> >> endobj 4883 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.548 184.245 211.411 194.249] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 150.527 234.816 160.455] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_95325b53ebd8d7d0a371a65b27b3d04a) >> >> endobj 4885 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.008 135.429 208.871 145.432] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4886 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 112.669 234.059 122.597] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_9a70ad2a355a9736711d8017535bf72b) >> >> endobj 4887 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.161 97.57 209.024 107.574] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4852 0 obj << /D [4850 0 R /XYZ 90 757.935 null] >> endobj 4849 0 obj << /Font << /F31 604 0 R /F42 818 0 R /F22 597 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4905 0 obj << /Length 2954 /Filter /FlateDecode >> stream xÚµ[ÛrÛ8}÷W葪aq%ˆTíƒs›ÍTÏÚÎnmeR)E¢mîÊ’‡¢&Imí¿oƒ$€—–O*¢ÉÃ>fã q ›PøÇ&†N´ÒÄ5YÜŸÑÉ-ÜýùŒù§3x<‹ž?½>ûËKo“‹ÉõMûzΈâlr½|Ÿå„ÉéŒQJ³Ï‹íݲžÂuFî¦3®hö²Z•îê²¼)áY‘•ë)ËönA¹È˜”Ó׿œ½¸Þ»àT"·ü~öþ,ÁÑ_Î(¦˜|†kJ˜1“û3É…¿^]ý}oÃÝp¨Š‰ãä‚Ð\µ|±ÞÝ—õ¼©6ëí·”9Ìð´eáüÀÂhN¤(üû–è7ÎU—€Qx+„% 0*&‰¡:¢*¡M=*a ì2¦²·ë[ÿü2&õXŒ41gI]Š|,ëú~{ûqÈÎ B5CZ1”¨œGÄÿí5Õ$/$‘ù±¶zð쀰‡XÒ>»úÛóË——¯Þ={öâêªßXM‰½Ö:Fͤj‘ÇÔÎ ª2úS2D™ÛÀ(yj0m÷Ûw¯_üõâÕÛë—]O$•„iƒ5>@0~É8ô1ÐxÖk¼”œh*Ok|£ä©Á´ñ3K?™ ®‰¶AdŒååÍ‹7—Ó\eÿêå¥2„6É5'ŠKtÀÌ"P?­HC>0V‹y/0d’+‘²ŽwÆù;&ÓØ< •?ÿøìâõ»7o»î¦ œ BÀ N¯äPÄO£’ rPu²&àã¢à1i~ž_^õûgÉYÇ•®2x êçŒ0Z$øÈ¾6€^³âÄö{0ΞNë©ÙùS¨²wP¼>ßæüMO1%ç¤Àãâ!¨cTÊ‹¨(÷ó?KœÖ3!Ú— Cƒà¸—^îÖ‹±ª § ´a¼ÈŠžVs¬6À¸öÕJ5"¬ÖMÈn;fÌ7ÞE<gî˜ôeÂCu×—FÒBãõœ¤Ñð”ò7ªèân^»ïÎd”ÄÆ7æŒ IÒ‰˜‚yÄ]9_B¥+iöÓt&UÞ†q&™ÊÖÿ±9^Náòk].ÚÇúð¸.Wó/ÝwM½Š€=ç˜ÖDÂw;Õ»u]þ»\4MϤ,HAÅéácysÛ¦Þ-z9# F¤2'æL@£°k2äLÝ+'m¥åK;èR%öC†hµÉp\ì÷q §X¿Çj¤´„0–=,‡y‰ý¤ƒ éH!g‘ÖiÉ'Ðç¡OèH«T¯®¯œ´»‹‡¹¬e[ÈÖöoHZ•mvMµös¶›RÝÏ-òÖåo{˧¹}¦m'”‡…ÔßÜNá› ÕQlTD•¢¤09*¢sLD#[ã"І\‰ET“Êõ„Q‡Æ™;&}~jDT(Ѷ:N¨ ¨ÌÓÐŽ+(ÉœU>¤ \0§†œëMMnzMîEf¶¥{ʳ Š!=äTÍÔÉî/6«`”(, Ê¢S 4{Ü¢„Ï/¿Q³ÝìD+rág'îKëx˜Í+:sòêÀ=º<à!ã"Î4ƒ9°J˜»9ë!]¾t¬„™*dćK¹8Qʹ ÆèGHùÁÀ¨”{È£¥üSµž×_Ýu3ÿ–çæk«âËSä~\ê™ ôöQRÏÇ¥žÒv••z9*õ[ˆÔc„Aê#©7¬HùP©·hœ¹cÒ'(|Ë!©W…Àë18¥²+n2.¨ýˆN9¡ÌœÚfÆè˜— ~P1¬ÉÒ#LG,xeGÚâc²zD'dR+ù÷ëDd`L'ĺsmgÑœf»ÕÜ÷ÿLVÛϳ־VÀˆ8Ú½%T“ RåUr&e0 £Ý;`ŽuïÈÖx÷F }÷Ž ‘îðïÞ(sǤϫjù¥ß½íÞ Ãë18%tïž%Ñ…îíÊ%È?ų—Ã]¾]¤–üÄ84êT×$Òåí"?X¦G™tz»¬ªe''>>û˜ÍWÍö=×PA9áEñA8±n¾Z/K«_ö.–õzÞ”A F:[V‡{íòÁýlËuãöÀÆ5Â.‘qóÃ4fB¸FxÌQ8ØB4# bó sÇd˜í iDA„xc=§ÌaÎ"eÝoÔM¸’'Æ! Q§º&1(ˆ6øG˜e¢V  HãðÑ|}(CÌî6u¬ŒÂl”ÒïyKüJ!!!£â!’„ " ôb­~ÔB0ä€9& ‘­qA ½€Ä„ˆ€$|Çeî˜ôùùÇM]–=z»€§9Þ\ÁIóœ¸Lâë%¤¿®·ãÈ7.B#ê#4Ñ §1 ÑötM"ê“ÂMކ0`z”‰úhFt‘wBø',aˆ¼ J›ï—‘ÈÀ˜ŒH»„1UÊ+ƒ—‰æ.¬DÔµ†ÌýÅæ¦ç³al,õy¼?x4îaÇ$6¿4Dç Ø,`PJ¥yBéRG¥IÎTq%ì"bnpmô˜£Úx°…h#F´1"Ä´1æ;A1æŽÉý±¥ÍXq…66W(¥/®’èÆÅÕ~a©®r’[‰9)zÕ5‰WW †h ¦G™VW”hÞI³S–]¢Êª7”Aä kãûÕöþƒ­l76ìFIdø¸ »eTT‰A,5WPâƒQ%ööz>*ósLæ1®½Ì£„^æcÂv…ëuR¦ºGÒ’Uµ§‡÷ÆóÕ£qG;&{‡Y‡ÙžöÃB0(3‡„•2e~?¯uöa,¹,Ú׿;#c" ÖŸ«fÞì¶ñ|¯ÙÕ~yù¾Ün£í¤ñꆋ*¢GLe#ƒˆ*P³?µN˜?·þ¼læÕªô›_ÏËí¢®`šj÷ƒûrn»$B:C—náܶÝHÜosWù;Û“W¸œ×ᢺÓ-Ÿý«q¿íˆó¥©ç 0xëî¹ý½Öðͦ¾ŸûE{¸qSoîýûîÇ \Aà«’LíÖìúÎRµƒ™{úPoì_TË2øê/îªÛ;wd•&gUW0á‡ì[åj?Ζõýžó…<>•Íç²\wŠù—À¾WRçXØo\v û½L»ˆ/ @HÖÛ¸ù6ÉÂ~…ߎl]¶Å±sù|¹¬,x¾Z}µ§lý ~ãOëõw¬ì1q¦`„8º>×BgìÀ^UdìP<ÚznhÜ·»QR³„}`ÃÊB0V;ç09‹y+ß!£/b¾q¿ŸÆþý÷nÊöHÄv?®ìlTH}ZkLÇàxu ¡…Á‚ Ÿ„ mb¾o) ”ß4sG½­!—‹nÅìi]•vŠñ0Ù]7Õ¢z€\÷Ÿf[þ¾³=vúUˆúæaÿP\ܦÎÝlV«í¨Ÿ·Oª;²•æ¶*ˆžVs¬*À¸öUJè«‚˜=™ÎT>­È„‹E"ìE®ÈÀE ªóRu?¿õ—íѰ84.“ãH‚ÂÇ!·V]…Èv[/Õ,{fÓâÕ…ç³c‡S¨vüqr놻èôo¶ûÿ*àŸÅò %‡lŒõ£Ó[`¢Ãü† |{å±W)Xaîˆô÷ý7+wjWfâa7o=rîg·Îý\®m‡\bÞîSï|¾_„^'Ý3O("¨ÿŸ ”1Ÿï6×á;^Û$xê_%0×ôÃ’_Fz¾ùòõ¶\í‡çÿ¥”£ endstream endobj 4904 0 obj << /Type /Page /Contents 4905 0 R /Resources 4903 0 R /MediaBox [0 0 595.276 841.89] /Parent 4779 0 R /Annots [ 4908 0 R 4909 0 R 4910 0 R 4911 0 R 4912 0 R 4913 0 R 4914 0 R 4915 0 R 4917 0 R 4918 0 R 4919 0 R 4920 0 R 4921 0 R 4922 0 R 4923 0 R 4924 0 R 4925 0 R 4926 0 R 4927 0 R 4928 0 R 4929 0 R 4930 0 R 4931 0 R 4932 0 R 4934 0 R 4935 0 R 4936 0 R ] >> endobj 4908 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 697.247 229.068 708.151] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae) >> >> endobj 4909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 682.024 226.069 692.211] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaebfe69dd9e4c486f856a5dc44b02e79a1) >> >> endobj 4910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [262.601 682.024 405.176 692.211] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae99dd31e274ec97542e650ff89357cded) >> >> endobj 4911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [441.708 682.024 513.996 692.211] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0a858638ef0dd0dc9b529f98b14cc46f) >> >> endobj 4912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 670.069 160.087 680.256] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0a858638ef0dd0dc9b529f98b14cc46f) >> >> endobj 4913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.657 670.069 316.459 680.256] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0c926e2cc98a8c39585aa0e212423459) >> >> endobj 4914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 653.785 219.613 664.316] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae218297c7a2a4d405c251e9ed239e615b) >> >> endobj 4915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.183 653.785 423.866 664.316] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaeeae58359638c0c631e6c7c573a343508) >> >> endobj 4917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.567 598.552 158.783 609.456] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [480.462 598.552 513.996 609.456] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.69 547.743 156.907 558.647] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.538 535.787 172.071 546.691] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 496.933 156.58 507.837] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.023 496.933 218.557 507.837] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 458.079 157.138 468.983] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) >> >> endobj 4924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.046 458.079 257.58 468.983] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 419.225 159.35 430.128] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) >> >> endobj 4926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.258 419.225 259.792 430.128] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 380.37 164.869 391.274] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 4928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.758 380.37 270.292 391.274] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [190.874 365.749 220.761 375.655] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.921 341.516 159.35 352.42] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.7 341.516 259.234 352.42] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.673 326.895 200.56 336.8] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [164.54 260.753 227.952 271.657] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_06cd9297f8315235ba1cf13d1cc115e1) >> >> endobj 4935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.404 148.727 218.467 159.631] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.351 148.727 415.885 159.631] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4906 0 obj << /D [4904 0 R /XYZ 90 757.935 null] >> endobj 4907 0 obj << /D [4904 0 R /XYZ 90 716.221 null] >> endobj 4916 0 obj << /D [4904 0 R /XYZ 90 617.526 null] >> endobj 4933 0 obj << /D [4904 0 R /XYZ 90 279.727 null] >> endobj 482 0 obj << /D [4904 0 R /XYZ 90 223.433 null] >> endobj 4903 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4950 0 obj << /Length 3705 /Filter /FlateDecode >> stream xÚÍ\moÛFþî_aà>Tªí¾ò%ýÔ$M/Eqí%ÆõC[´Dۼʒ¤»¿þföEâ’ÚÓÃMQhIŽæ™Ý}fv–²¸äðŸ¸,ùenrV*s¹¾¿à—·p÷» ៮àñjðüåÕÅWo|‹•™º¼º±_Ï3R\^m~YdLèåJpΟÖÝݦ]B{Áî–+iøâM³­]ë]}SóbQï–b±Æ»—j!´YþvõýÅ·W¼FehÀ.~ù_nÀÐï/8Seqù Úœ‰²¼¼¿ÐRùööâýÅ?:Ü}÷OõŸ®”fEžvTŒgGHytàÓª¸ 2è‡_¥œtDpøŠ4—]¬ C ÍJžG€òÅre”Yü´fQµxTerÑßÙ†ZÜÕÕvÍîvl”š‰|d>ho½Ä»Aš´s¬í„YñÐÜýÊ ‡ÿÅÄS2®4é¢ CCg’e:‹ ÷í.×̘lnŸ½4 »‰Òìúº}hëíüêæƒy§+ XIVõN`H†•yî_-K¾øæå -%3E+vþ±Ÿµ >Èf4¬T!Xi\÷~zY¸®}Âæ¾ÝtŽ`NÎq‘—¬”Tqf¸ƒðê(=]‰±B?Ø}uœà°tE¦# ÆóÛ‹P¸#5ˆËNðfV‚ËJ•dµÁó$«™s¬FaXô¬6T/00˜Å7[ˆÛýºê1R@D¹¯ïáξ}v—7°¶5_|‰Wå¢Úm •墅ésb*É ñžÅ13éWm[=wΤ›vïZ–š±qÝìªÐ‘zU]o}/íÌ~êë]×ìáÁû‡žÝ2h•ÊÏr«åÕ›·WïßþèÖŠÈ2¦ `×J»ì›]=? ã Ñ;ƒ©œÁxŸY^z5ŸŽäH¥:œË¾û€#òáÌ‘œq¡cƒÆkÄËfHàAÅMdÆ HNq˜76B³ßã§ð‘n<´ûíþöÑ_ío&|- Vðl¦Ã‚4iéX%Zz[÷ÎO8±![‘–‹’ôR¡±GŠNr‰*Ë ×šÙg/MãŽTzîìê>51´ÈXÄ@u9ÈÐf(t íb"Œø8&â©| qˆ&!†‹k½ßõ0o\ì9c?û»ÆG#PeÉkã.‘»ê{d¯ÌXÒ‚{ÍÎ}>T-`?n«Ö]¯+¿È­Pï5ïÝçµO§oÚºþb pýV„à~iuõ$ê)m`é—3{¤iF*‡½?Åß8Ýo/CÃŽ%WĘL—é•p|ž^ ^æìJ °Ž+ +ah`%äè¼Ý5}Sm›?¦©LÎAˆá‰üÞIÓ†ŒT†-l{?YO\2Ã%Ù÷ CBJžCöTF]ß>®m`ìì"ZéR'–5î’D1ÓAš6h¤ò|¤V\CN¡H_·´vM  mvý‡qéP—B0ìþ •îëŽð†Ü43z¦‚4iäXe˜#²K†ÁB²L”¤‚ ]ä°'ÎÆþùjZê8¬(H²ò\üÒ«xz‘z™0/äCªßÂpVä"6bÌ^††)r¤‡„é+‹0³¥Ë’råR{lS{¼š¦öÒÏ•ÙL'iÒÒ±Jï¤i@ÀãÚ”¤o‚ GäE„ˆûcÛçÊ}lênÝ6½ÛVܼÕyÙ¥fŸÁM¯á®¹½[áv¼^J³øˆ;ÔzëýlshàR\J»-¿Í!aQÂìVªÏf1¯1ëÞû4w«ÖîT43äàR$£Ùày2š™sÑŒÂ:D3Ð/”!`æóºWÛºò]~|8$þù pù©é§3(“¬,csÓ“× “vú©û‘Jðqod Òe^„D©9ä4q¡f%…S%3f|êóÖ;sS÷U³}qjê(ÉxQ¤§Îñyzêx™³S'S¢ÀÑL"&­ ók`]gºdyFÚ· 24´‘@o2‚¶›Þ\®q„1f ½ÀzUÄúP¢²ý]Õ{ÚÆóŒ Ô³Usï¶7pˉ±! ‹·½WW÷í® \æ`1nÈxÚ-rezh¸ð->P&þĪ­ë”ÕºíöN ­×ûÛ]óGíñ|÷°y8±“§ŠØ/Å„ÞWÏqAœ¿‰Kµ°÷@› Šè2”T^=n=~ÄYmkϾ›ÊWwa! o “ë:$…ë»j×t÷'iG+ÆÓõžãã4é8‘³œ“ú\Ê!L Œs4‰fy$É Ê A„Ä58~[uLs»>”+ÚÃ'ù¶[—¬nk_ç¿®ÛÎ]Û虹 餋+¶—¨Æ:aÊò‘Ât:¡¤‚®¤<D(<I¸€<—K¸.ƒÛöëÆÀu %5¨Û¸ëí~ÿ»ÍÈÐQ–¤§HXzRÄiŽþôlV1XÅôùn1ë|7KŸï•àücî úÊož L4kwïºrdM›Púp"Œ÷º~߆çߎC³r>KF5v;ìø.{L Í]":æåÛ@÷€]_þð­«Úï¹´Úèò]Í 5²ŽŽ«ÜiRìDåÃ9à§:eg28¨¡áÃôÛÈáˆþ¾šºè@ë0<é·@¡šË Ì1 As¸m˜²'äÅ,éW'Ï“üdÎ(õ™ JZå…†V#4›§sIå‹CÒFBCÒV¨“ˆõ{Yê¬ß£4\Àp˜Ãž{[ H¯â'œ«$Îa4Ÿ1øxü¼ 3»eíŽÝØÔÉ#weËRb¦‚4iÓXåù½†‚=>$â”7¼ ;2Æž1¨\³¹£îdiÌHÝù=¦:5¦$ûdHà±¢ÔÆ^ ©Nº=xžŽ^ælŒHc}nŒ ¬ 1b`Õ¹’¯0¹=á ¼dhp;U¾©Ã«3ÈŽ¥Æ:¸-‚cÛ_銂öÓ±6O¼·%$“jäÉôüôÒ¤Åc•D’ùRN;)ÈÐ@]9äY ¶½ZñE÷ˆ»Rëï³#QáÕ‰wƒ2ÈÆD6Ó3Aš4s¬òNó•9KWI Ïe+¤àï£Iö7'û4S ûj/á… BâÂÄÒYäŠOmÓ‡² \ºišZÂ6Zë?yaÊ’‘B")RèvjXVA„ÄS@ãÈbG¼Ã;Þvô¿öq[×éVktŠ'´ÓºÂ3$qü“þ—D¯kÌfw>õ|½_?Þ×»Þû²œÔLù÷ÜW™ð_þÛ&úöϯÞÿýõ»ø«£}¸ÇŸ¸ÿ7ÝhbÉ/g™tyñËpØq_u¿ûSÚ#û¢ìc_Ï2h…}n»Tù¢ÞVOS)-Fx_uk{™Ì±g 4H-ìaÕ™Éä¥Wñ£«œSÈ6L"6bRÈv244¾Æ™ÇÐ'6ˆ²ÐÌèbn§½4¬ª­­8*ó¸·"pd7KµU^qÕçɹ¥«öàÛñøfÛ¹ƒK_ˆŸ8¹ŒUÎ|â•(b#&TìdhèLÚîz·/–˜St“»oLÙæÀ7§)£²¿A0Æü—f ýe Û*ØGÎeŒx’1‚Ì|ƈŒH1 ícM0ÆÌNÆ ‘G*ç3ÕécPÐ1†Ðž1ªõº~øŒaæ3†0™M¬g2Æ@<ÉAf>cDF¤ƒ„öŒ1„þÓŒ¡HÆp?pÖ8’9gS¿,qðœñl>qÅÓÄáe>ƒ8†F$‰ƒ‚Ä1€¦ˆc^§ÄA!T~q>} Žô‰Tcú‹’G+0Ÿÿg*)Àf=›IŽÒI"ñ"óydhAŠF(\Ï"Ü1‰Œ_;Äš¢>ˆÇ^Âý¦ûÏýu÷ûÂþŒoð7€ríÿFƒGG;¿«wu{<Ü ïx]-K¹xô=ø1Ìí>Dù‚ËŠ»+ ,è _Y¬¬÷LŽ·/ýWYÕðÖ×û§çÛz7)ýuÂ=ÿÞÔ endstream endobj 4949 0 obj << /Type /Page /Contents 4950 0 R /Resources 4948 0 R /MediaBox [0 0 595.276 841.89] /Parent 4779 0 R /Annots [ 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 4962 0 R 4963 0 R 4964 0 R 4965 0 R 4966 0 R 4967 0 R 4968 0 R 4969 0 R 4970 0 R 4971 0 R 4972 0 R 4973 0 R 4974 0 R 4975 0 R 4976 0 R 4977 0 R 4978 0 R 4979 0 R 4980 0 R 4981 0 R 4982 0 R 4983 0 R 4984 0 R 4986 0 R 4987 0 R 4988 0 R 4990 0 R 4991 0 R 4992 0 R 4994 0 R 4995 0 R 4996 0 R ] >> endobj 4952 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.179 719.912 260.031 730.926] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4953 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [273.56 719.912 310.411 730.926] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4954 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.866 707.957 215.16 718.861] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4955 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.425 676.485 221.01 687.389] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 4956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [327.809 676.485 376.716 687.389] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 4957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [382.702 676.485 417.889 687.389] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.522 664.53 440.123 675.434] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 4959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.802 645.013 326.441 655.917] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) >> >> endobj 4960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.643 645.013 380.119 655.917] /Subtype /Link /A << /S /GoTo /D (wcsfix_8h) >> >> endobj 4961 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.964 625.496 203.498 636.399] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4962 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.521 625.496 305.709 636.399] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 4963 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.658 625.496 483.615 636.399] /Subtype /Link /A << /S /GoTo /D (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) >> >> endobj 4964 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 613.54 151.868 624.444] /Subtype /Link /A << /S /GoTo /D (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) >> >> endobj 4965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.499 613.54 280.455 624.444] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 4966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.994 582.068 306.576 592.972] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 4967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 528.935 150.762 539.839] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.364 516.98 159.898 527.884] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [300.539 516.98 336.832 527.884] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 490.414 150.762 501.317] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.804 490.414 261.655 501.317] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 439.937 150.204 450.841] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 4973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [290.962 439.937 324.496 450.841] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 389.46 150.762 400.364] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) >> >> endobj 4975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.298 389.46 208.361 400.364] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) >> >> endobj 4976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.891 377.505 248.425 388.409] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.564 377.505 362.416 388.409] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.703 377.505 410.555 388.409] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 350.938 158.493 361.842] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 4980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.238 350.938 344.772 361.842] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [464.919 350.938 501.771 361.842] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 339.357 150.762 349.887] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 312.417 152.974 323.321] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 4984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.447 312.417 235.981 323.321] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 4986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 238.432 266.177 249.336] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 238.432 320.403 249.336] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 221.181 160.714 231.712] /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 171.172 266.177 182.076] /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 171.172 320.403 182.076] /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 153.922 160.714 164.452] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 103.913 266.177 114.817] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 4995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 103.913 320.403 114.817] /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 [123.863 86.662 160.714 97.192] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 4951 0 obj << /D [4949 0 R /XYZ 90 757.935 null] >> endobj 486 0 obj << /D [4949 0 R /XYZ 90 299.026 null] >> endobj 4836 0 obj << /D [4949 0 R /XYZ 90 276.715 null] >> endobj 4985 0 obj << /D [4949 0 R /XYZ 90 276.715 null] >> endobj 4837 0 obj << /D [4949 0 R /XYZ 192.415 223.961 null] >> endobj 4989 0 obj << /D [4949 0 R /XYZ 90 207.791 null] >> endobj 4838 0 obj << /D [4949 0 R /XYZ 192.415 156.701 null] >> endobj 4993 0 obj << /D [4949 0 R /XYZ 90 140.531 null] >> endobj 4839 0 obj << /D [4949 0 R /XYZ 192.415 89.441 null] >> endobj 4948 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 4999 0 obj << /Length 1841 /Filter /FlateDecode >> stream xÚÕš]oÛ6†ïý+ ìÆf–"Eõ®qœv]±dŽ×¡h‹ÁI”ÄmbwŽ‹$ÿ~G&)S<¡ ìÂ- ÓÒK¾çPG)V¬Oá/ëg´ŸÊ”dBö/ï{´Gßö˜=;‚Ó#ïüѬ÷êD@/’)ÑŸ]o»+F$gýÙÕç",Ž¥tðxùp{µB{@n‡#.éàdq—›Ö4¿ÎáœäË!\G5åbÀ5ü:{ß›ÌÊl€R¨"€{Ÿ¿Òþú¾G‰ÈtÿÚ”°,ëß÷.lû®wÞû³Ãp¼-GÉÄËIrA¨’e’„—è/WùJùÒ¦ö÷øüÝñôŸ1ä5 :8&t0ftðf17úDÍV$ûê„óÌ7K‰âÉÖêh±1]îçßMëzµ6Ímnº'^w¥ ¥a”¢÷z(ÒA~7jÚpÒêæÛKqóó>_Z»Õuý2p#¤T’$af"‹ë«˜zSêÔ#O¾ÖJ µ!‹P j~,n¿PIák¡$ašUƒ¨]M§Á­ÌqZµž/¯~:!2ѱI[5î\Ò&}± &-XFš¢I; j-8#:«ZÌõž_^æ?6¦LüÊ‚¤‰°e2®×³-?êé"4³z(÷FÝ1F2éêî׿ É4wý›ñH’¥i[8¸&T;£ed$¾U‰Ëd†{AÖ©ˆµ"Åùþ(†(¸sý»ÝPÑÜÜ«z0ž-³¾Ò)Ñ,}¡zäÉQòåZd2#)ÓÕ jµè4¸µâ„S]±^®6–¡’4¯Ç(5= Ö‰Äy$–(‰'@â³Óñ»:|ùáÁW Ÿ2¾ž<_§‰‡o%ˆ|Qk _ßodÒ¾¨smÈxøbI—ðŬ|}ë.ð%Ü‚@9wDlALKASB¹y8%)eÑäÙÉÃ䱚äñƒ’³väñ¬÷&BÉóÈ3ù0œ ¹Ôñ“~dÊ`"²Xüxò ~œ&?• BøA­-~|k?‘I;ü Îµ!ãñƒ%]â³vøñ­»à磩ãæz‚·Æù£küaœP`VgþH)ˆÔ2–?ž<ȧ‰çO%ˆPkËßzoþ¤/>ƒSº ô[ >úáCB3 Ÿ< «é?ˆ |0kσO\Ò%|0çÚàƒ$½ƒb]Âdzîôà EÜò„ÏšI÷¬ØÖß4Ìùoq+§âAŽîA®D+’ÀÝI.O$—ÓÄ“«Dˆ\¨µ%—oÝ…\©O.’ë È5n#£‡G®D¨m-E’Ë“Éå4ñäª"jmÉå[#äŠLÚ‘ u® O.,é’\˜µ#—oÝ…\gãVr ÂKÉÿC®Æš‹MÝn“ì@.˜%!y4¹vò0¹¬¦¹ü ‚䬹<ë½É•½H.³YøþlYe?@v •AþÑÛýž<È.§‰gW%ˆ»PkË.ßaWdÒŽ]¨smÈxvaI—쬻|ëNìreܲë#S·9¾ŒÜun¿î‚û•póŸ1òäA9M<*A„„Z[ùÖ{A‚¦€ 7Ç“ñù§ó*€’C…§Ü$zËÛ“‡d5äfíäYcŠKºæ\²€¤wB¬KyÖ]4uEÜä‹ J7–8ðÛÎ÷ ×p£W8;u/VO?‚\0_ËÏw´°w´ÏOÿšŽ'U²è$ zFïf{ò Yœ&ž,• BdA­-Y|k„,‘I;² Îµ!ãÉ‚%]’³vdñ­;ífÛnngk’Ò´Ûv6/®½Úƒ;LøMŽÏN&Õt@D=˜µƒg½?}8JŸc ÏéÑyõ±ŠÑdSš¯E²Ç“Ùã4ñì©bjmÙã[#ì‰LÚ±u® Ï,é’=˜µcoÝ…=ÇPÁ-[B)¿ÆŸ¨jàáÀ*I»ƒ‡IJ´ŽÞöäAð8MUÐÃcÑ£Jô(fÑ£BèI‰(߀ÃÑ“–SCjG#Ê…QFDöòn´Q> endobj 5002 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 5003 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 5004 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 5006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 635.172 266.177 646.185] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 635.172 320.403 646.185] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 617.921 160.714 628.451] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 568.056 266.177 579.069] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 568.056 320.403 579.069] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 550.805 160.714 561.335] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 500.94 266.177 511.953] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 500.94 320.403 511.953] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 483.689 160.714 494.219] /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 433.824 266.177 444.837] /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 433.824 320.403 444.837] /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 416.573 160.714 427.103] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 366.708 266.177 377.721] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 366.708 320.403 377.721] /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 [123.863 349.457 160.714 359.987] /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 [229.326 299.592 266.177 310.605] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5027 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 299.592 320.403 310.605] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5028 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 282.341 160.714 292.871] /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 232.476 266.177 243.489] /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 232.476 320.403 243.489] /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 215.225 160.714 225.755] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 165.36 266.177 176.373] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [283.552 165.36 320.403 176.373] /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 [123.863 148.109 160.714 158.639] /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 [230.051 98.244 266.902 109.147] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [284.484 98.244 321.335 109.147] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5000 0 obj << /D [4998 0 R /XYZ 90 757.935 null] >> endobj 5001 0 obj << /D [4998 0 R /XYZ 90 733.028 null] >> endobj 4840 0 obj << /D [4998 0 R /XYZ 192.415 687.817 null] >> endobj 5005 0 obj << /D [4998 0 R /XYZ 90 671.79 null] >> endobj 4841 0 obj << /D [4998 0 R /XYZ 192.415 620.701 null] >> endobj 5009 0 obj << /D [4998 0 R /XYZ 90 604.674 null] >> endobj 4842 0 obj << /D [4998 0 R /XYZ 192.415 553.585 null] >> endobj 5013 0 obj << /D [4998 0 R /XYZ 90 537.558 null] >> endobj 4843 0 obj << /D [4998 0 R /XYZ 192.415 486.468 null] >> endobj 5017 0 obj << /D [4998 0 R /XYZ 90 470.442 null] >> endobj 4844 0 obj << /D [4998 0 R /XYZ 192.415 419.352 null] >> endobj 5021 0 obj << /D [4998 0 R /XYZ 90 403.326 null] >> endobj 4845 0 obj << /D [4998 0 R /XYZ 192.415 352.236 null] >> endobj 5025 0 obj << /D [4998 0 R /XYZ 90 336.21 null] >> endobj 4846 0 obj << /D [4998 0 R /XYZ 192.415 285.12 null] >> endobj 5029 0 obj << /D [4998 0 R /XYZ 90 269.094 null] >> endobj 4847 0 obj << /D [4998 0 R /XYZ 192.415 218.004 null] >> endobj 5033 0 obj << /D [4998 0 R /XYZ 90 201.978 null] >> endobj 4848 0 obj << /D [4998 0 R /XYZ 192.415 150.888 null] >> endobj 5037 0 obj << /D [4998 0 R /XYZ 90 134.862 null] >> endobj 4997 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5043 0 obj << /Length 2166 /Filter /FlateDecode >> stream xÚÕZmÛ6þî_aà>TN<¾‹ê·¼mš"¹Þm¶¸mQ(¶vרWÚÚNw÷ßßðE2)Q27h»ii4Ï|晡b²Äð—,K¼,DJ&–ë»^ÞÀÕ· âîæp;÷Züã‚ÁS¨”lyum— J–W›Ÿ2‰_åcœ=¬·›ý ƺ]åTàìb»«íè²¾®ážÊêfE²µ¾ª0eáÅê—«oo®ú\€‚IÀ~ÁË úí#VªåŒ1"e¹¼[pÊÜx·ø¸øwïÃ^gp=6GAØx’”†“¤ a)Ì$mðfÇv.¡)Qö@}cã,.=èÎ:÷ÌGðC—:XÝOÇÛŸ±ÀðŒ‚%*ˆ ƒ̺³™‡–Q¬è¦=º]H‡„w扜QØÞ³Ñ5þ¶©Ƙ6ÎÍ^}üæõ寯€ ÿ\Qœ½øÐØøë?c‹ãG¼$’ÔÆôr{\å¬(³;pR~³_®Û½okë{ P bã`¿bEVïªÇ1L½ÄÒÙU†µ7ŸïêÆ ª¬½®>e%¢%]Ê‚!Êå tÖ¹g>Ú‡¡KGûí$hÁ$ b@Îfº€Ä€üñ¡«f3Â+%ФNÚYÏ#\žç=cÁ–ÎÍÙ™Ì3Æ!5ÂÕÎ-“ªõVߟ°÷”D Ç“í83* ån¿rDxÁ¨P+›1}/ƒH$s·¯fP ÄÙí÷3ŠÀ€¤D¤!ÁÖeGAÉ.œ„òôª&9CR©UÍ3Ÿ¬jMzU ‚˜ªj³Ð®ªùÐÏ©j"¨jb¶ª½X ’}ÿûoƒš¦æj÷j.¼š_lMƒÁñV Ѹ¬I¨”%•5¢ÊxYÃ2ZÖ`ºJ¢dHqu¶¬YëÜ3”µÐeBYƒé{à †eÍÙÌCÃŽH-:VÖT ÂR'í¬ç‘.ʤ š›tg3 ͨm¤}èÜÒ©Úí€O튊ì¡#XmÛ» nÝÔùm]mê}Ïûž)ÖCc¿WŸ·»mµ²ZC™ÅôµrÃfÃop>‘==èa»ßØÛ£;4ìëû}}^ê ŽÛ¶É¶—c‡u{_÷še>ï÷­v÷GoSÙM}­ªÏ»£½ð‡žjµûìÌL^{X3€ißÔµ¢6œIj)¤¦·JUKÏ|R-;›tµ ‚˜RËYh§–>ô—Ÿäµ$Ùû÷±Ôöi)²;«”0²J)åD÷‡V™&“EÁâ2 1™TˆÁ³æËyyV&­uî™Gd2t™ÒýCS.‚ FÝ¿µ™‡.$ôO$€Žvÿ@O%S'í¬ç‘.SdØÌÅì¤;›Yh-S"€Îí~ƒ:ô _­FÇŒXä¦$;„‹N#{š„ $œÀ´ëÌ´ìŒÈø¤30VRY©4ÔN›]2MÊëaJ.M7ñ'(¦»¶ßWOkÛ~?m]lÕ§î•ÞUý2}Zq š›3qqnuœµCÚmGMPšŸÑÈrŸÉ}ìÉzR˜Iº.ûLÉò®Se÷Ë[ØbV”ßÁ®|xûÍ›¯=UÖöi-,É´ªL‰ë_õ¥¨*K¤êÎ2޽ gO‡:’p´"4ªÌÚL™ R%[r&lÌYe¶Ö¹gQæÐåùí§R¢r7bÔÀZ›yh©PIiÛ©C¿tÜo×G»âñKïÀÓ}}°ÃuÛ cÚ×ûŒ‘¸Þe4 {qTWìɲ°QYi²¯NÚf÷´ŒG{5KÇ—@Gè^\^zt¤8¹Ià¼k`d›Ä› yÈSéX Ö´DøÈ1’0u¦ qqö•™³Î=ó1).øX$€kA£NÁÚÌCëWrng~¢£þ¥£ÙKG=:Â&÷Œ4w[ûÙUsÍV=ôª#Q&¿8šjt®$>›¦å,Mÿ¥iúÃûw¯<šòtšBGjÎ]†©¬;ø³b’©œ>ƒ¨˜Ç‰ÊäQIQ.,©À4¨Ú:÷Ì£Dõ]¦3!ª¶™‡¢²’й]ZÍTXrGV6¡fžÀÎò¾ùò©—Ю{]‹þª»k0# ÊFçÓ7™A=§x†™ßý ‘7mwMÓ2­Œƒ±+ã~ó/ãF*ápE é£%\gd¤„cÄÀåÐ!Ñóï ¬uî™GJxèÒ1ñvÓN—pH (úA£nmæ¡e G@ç®ùn›¯ôr¸•xØo»Þ®j mìC¡Çc ô öï*`ó¬ç龸ß<3ЭãᴳÖµ(ý§šj gºfg{æãöuà2aÕ5µ) ƒ®º³™…:êß‹úeÝÙg‘#ç¬?áÇ‹‹ÿ¿ü" &©Dj~yæ“ùÕÙ¤çWÄT~ÍB»üò¡óqBu[&S4“ÄŸ”IDr$ej"¬'óÈ™¤§‘ÁTÍàܤåPÐ>Qz.‡Õõ©H]$uMÿ[IóTœ$'ÑÉ|:‰œÍ3’Èb2‰æ »$ò ÇIdZ”XIrëo^Þw¯†Ü3Á¡S¿Í‡ýþKëWY€r©Yw²žÌ:g’žu~SY7ƒ;pÓgÝà÷R¢„ãZ´Bêÿ6&ö·>_öK*óƒ0©àX\ú¿ƒT*¸û©”C×Á½­›z_» nÝ‹À«UI³î5âwkÇ n?Hù5¦_3l¿QLˆÛWýö±=½á|¯ÏW/Ý£H!êÞ.:¾nŸnêf¸:ú·^ãåù/´åë endstream endobj 5042 0 obj << /Type /Page /Contents 5043 0 R /Resources 5041 0 R /MediaBox [0 0 595.276 841.89] /Parent 5040 0 R /Annots [ 5045 0 R 5047 0 R 5048 0 R 5049 0 R 5051 0 R 5052 0 R 5053 0 R 5055 0 R 5056 0 R 5057 0 R 5059 0 R 5061 0 R 5063 0 R 5065 0 R 5066 0 R 5068 0 R 5069 0 R 5071 0 R 5072 0 R ] >> endobj 5045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 720.286 160.714 730.816] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.295 670.093 275.147 681.107] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.084 670.093 331.936 681.107] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 640.887 160.714 651.418] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.273 590.695 270.124 601.599] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [288.626 590.695 325.478 601.599] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 561.489 160.714 572.019] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.367 511.296 274.218 522.2] /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 511.296 330.742 522.2] /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 482.09 160.714 492.62] /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 [230.897 431.898 267.748 442.801] /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 [239.697 370.123 276.549 381.027] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [239.183 308.349 276.034 319.253] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 246.575 268.389 257.479] /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 229.324 215.219 239.854] /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 [229.326 179.131 268.389 190.035] /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 [176.156 161.881 215.219 172.411] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 111.688 268.389 122.592] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 94.437 215.219 104.968] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5044 0 obj << /D [5042 0 R /XYZ 90 757.935 null] >> endobj 4888 0 obj << /D [5042 0 R /XYZ 192.415 723.065 null] >> endobj 5046 0 obj << /D [5042 0 R /XYZ 90 706.712 null] >> endobj 4889 0 obj << /D [5042 0 R /XYZ 192.415 643.667 null] >> endobj 5050 0 obj << /D [5042 0 R /XYZ 90 627.313 null] >> endobj 4890 0 obj << /D [5042 0 R /XYZ 192.415 564.268 null] >> endobj 5054 0 obj << /D [5042 0 R /XYZ 90 547.915 null] >> endobj 4891 0 obj << /D [5042 0 R /XYZ 192.415 484.87 null] >> endobj 5058 0 obj << /D [5042 0 R /XYZ 90 468.516 null] >> endobj 4892 0 obj << /D [5042 0 R /XYZ 112.645 423.095 null] >> endobj 5060 0 obj << /D [5042 0 R /XYZ 90 406.368 null] >> endobj 4893 0 obj << /D [5042 0 R /XYZ 176.475 361.321 null] >> endobj 5062 0 obj << /D [5042 0 R /XYZ 90 344.594 null] >> endobj 4894 0 obj << /D [5042 0 R /XYZ 112.645 299.547 null] >> endobj 5064 0 obj << /D [5042 0 R /XYZ 90 282.82 null] >> endobj 4895 0 obj << /D [5042 0 R /XYZ 219.802 232.104 null] >> endobj 5067 0 obj << /D [5042 0 R /XYZ 90 215.75 null] >> endobj 4896 0 obj << /D [5042 0 R /XYZ 219.802 164.66 null] >> endobj 5070 0 obj << /D [5042 0 R /XYZ 90 148.307 null] >> endobj 4897 0 obj << /D [5042 0 R /XYZ 219.802 97.217 null] >> endobj 5041 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5075 0 obj << /Length 2461 /Filter /FlateDecode >> stream xÚÅ[[oÛÆ~÷¯p^$ Üîý’7_”6…oG’Óma¨¶lëÔ–RIF’f¹KjI./–EjšÎmg¾™Y®IägpO … ½›§Ü»‡»?ÿ4ÇIðührðã{o!#Yor—¾. ”ô&·¿÷%"|ŒqÿËÍúáv5€ë>z$TàþûùãÌ]fw3x¦û³Å€ôoì])ë®N~9Nr¼‚‚I«À?¿ÿ‰{· è/1£{_à#bLïé€Sæ¯ÆÿÍy¸û îÇl„µIÂRäF"Š(ó–þçvöÆtámûõxüóÉÅ5Øurq4^¸›ø+&Ö²ßSºe Î% IÊS¾Gó sÜ‚w§ë¿Ý/wË•»Ø<Ìp Æ¥ V¦ú³Çéת$Ja¨§›¦®¿~š-¬DfúË»²Û)5HÕSX Ήsœ}°º÷£À…u§n,êPdiUI£dùþ‘Š`ž”%%J«—Ñ4‹–aÁ ¢çÖ/«ùÆ;6\sª‘€õv³ é}…ÕždQõ¹@F)ÿø+Œ¦k˜:üfùøü´HÖŸg7s<7N™©M‡éãòþyænÀ¤?Oð¿Ã!´?&^ž}„„OB2Â…§ ˆ¹çµÈ¹¿æ‹éê›»ÞLÿzœ­Ýõtqë.>ÏAü×EîÎã|½Y£TX¬NŠË`Çjé>xy‹å&cm•)-*Qà7A{R ¤e[deÔI@^YÞ2Ë‘eSP¡ D9²½ùM {«nzc‡7R3¼‰èSi8qÛcÝÚ9ê$ 4AE–Ýæ7 Õ® Dd~³4Í¢a~“XD'Îôš&ˆaÐ5C¢ÿ5'«]äè‘”y¥Þªa²âù—Á8L_ô…2B¡Œ–Rv|r:0´?‰X C±0{Z*rKkå0†8æ{X›pŠ‘(5mf_ˆ˜,|“R2oSã2`fÀÆìan(£¥˜O>]Æw9‰~5+£2`Q•dodåh Dÿãi*¢S\¶ØÈ;fÇÕyÔF¡Ì«Ù##åodãäÓ®ë(»ÆjTľë¸Sér0ô·0êÔ‹y¨ú‘&ËõºÛ¶œ¤±î:±äµKFÓ}b)(Q7±4‰.3ÚaÛVµ,çŠû‡gÛ¡…àn[·&ûäDÿädoÕmÝJÙmjÁÜÄ·nMü““Ý{4=f? +Ö:µ8ê$ L-E–]¦Œ˜,êPZR’fÁ C 'λ_`¡j÷ne^ÛàÁ/utøQšïˆ"”3|¨—£§ûTðPN+Fëë.µ§ÞÒ¨ èù´4oýãOÃè¤&Ô^¸/ÜŠ°é’ï4tˆ€>×áR€%{,ô×î¿c‹·;¶¸¸cKŒÙv²öat»V@A¡êE)­˜¬½ ’]=W+F#LÅ¡ŠiOˆïÐî팊طÝÛ1Ú¾íÝÅDtJ¸r±&Å+ïÙ2*a¦k×v@M÷¨ D]Ô$ºÌh—=[ÝÖÁÕù¶ý¡¸ÛÙ= öíÀÛsXu÷L¾eÑüåZÒø¦íöãT±ý¶8P%ƼµýqÔI@iŠ,»|¹VˆVT¢òåÚÑ4‹–ihCBщ3½þàžÊ?>ÚeŒ6HZ7niqÄy–‘Ûê| , ÄW¾%9‘Q‰¬3ÜegW˜€L¿2P¡ë<m©kÀ“t€Pƒºüo[bóâìÏNíF«éf¾ôŸ„'Åûß>{ož,íÁä4Ó? l7;D<Ã0ô‘™}¾ž­Vö$ïúþ:}Tr‡C—N$EJÄ_{’$ ©œMÖ&Í ¢1ŒƒîOfÙrõ®ØÁŠH­HÏh+â¹#jå{Ÿt?ŸŒ†£Ñõøêøx8WÏ3(š²Ñv]ö«%äbüèËVA¡ÀZô4EϯNO¯//>œÛS–ÃQEQ­= Ù€ª´PÒ)JL‹¦Ð"›5õ4EMφg#‹þŸªÞäé§“€wÔ›ÒsïâMh‰¸iÑÑÓu<PÑ?<¹>¾8½‡žWT?Z( DTõàiC»©Š!CT‹ªž¦¨êå@ƒª£qdÍ-ÜöÎUñÄsºÛŠŒ¤Pz’¸/'v_íðhÒÕ)8õ0×ýð¬šXÆ,Ú ­B,v$ ŽîLغE¤ØýÏ-Ò¿‘P‡‰ 1 :ÅýßSƒ„p5í§Ù¢Õ,«°9Úöh|qãûî~óÓw »ß(&Ä>뵬ïgZ}8ò¯":üAøoÈýv?[”Ýhÿ Ä+¸çÿ;Ô«Í endstream endobj 5074 0 obj << /Type /Page /Contents 5075 0 R /Resources 5073 0 R /MediaBox [0 0 595.276 841.89] /Parent 5040 0 R /Annots [ 5078 0 R 5079 0 R 5081 0 R 5082 0 R 5084 0 R 5085 0 R 5087 0 R 5088 0 R 5090 0 R 5091 0 R 5093 0 R 5094 0 R ] >> endobj 5078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [228.6 702.288 267.664 713.301] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5079 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 5081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.174 623.574 276.237 634.587] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 594.368 215.219 604.898] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [231.156 544.859 270.22 555.873] /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 515.653 215.219 526.184] /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 [236.959 466.145 276.022 477.159] /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 [176.156 413.029 215.219 423.559] /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 [232.293 363.52 271.356 374.534] /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 322.359 215.219 332.89] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.326 272.851 268.389 283.864] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.156 255.6 215.219 266.13] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) >> >> endobj 5076 0 obj << /D [5074 0 R /XYZ 90 757.935 null] >> endobj 5077 0 obj << /D [5074 0 R /XYZ 90 733.028 null] >> endobj 4898 0 obj << /D [5074 0 R /XYZ 219.802 675.861 null] >> endobj 5080 0 obj << /D [5074 0 R /XYZ 90 660.192 null] >> endobj 4899 0 obj << /D [5074 0 R /XYZ 219.802 597.147 null] >> endobj 5083 0 obj << /D [5074 0 R /XYZ 90 581.478 null] >> endobj 4900 0 obj << /D [5074 0 R /XYZ 219.802 518.433 null] >> endobj 5086 0 obj << /D [5074 0 R /XYZ 90 502.764 null] >> endobj 4901 0 obj << /D [5074 0 R /XYZ 219.802 415.808 null] >> endobj 5089 0 obj << /D [5074 0 R /XYZ 90 400.139 null] >> endobj 4902 0 obj << /D [5074 0 R /XYZ 219.802 325.139 null] >> endobj 5092 0 obj << /D [5074 0 R /XYZ 90 309.469 null] >> endobj 490 0 obj << /D [5074 0 R /XYZ 90 242.71 null] >> endobj 4937 0 obj << /D [5074 0 R /XYZ 90 218.122 null] >> endobj 5095 0 obj << /D [5074 0 R /XYZ 90 218.122 null] >> endobj 4938 0 obj << /D [5074 0 R /XYZ 107.713 162.755 null] >> endobj 4939 0 obj << /D [5074 0 R /XYZ 107.713 148.335 null] >> endobj 4940 0 obj << /D [5074 0 R /XYZ 107.713 133.916 null] >> endobj 4941 0 obj << /D [5074 0 R /XYZ 107.713 119.496 null] >> endobj 4942 0 obj << /D [5074 0 R /XYZ 107.713 105.076 null] >> endobj 4943 0 obj << /D [5074 0 R /XYZ 107.713 90.657 null] >> endobj 5073 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5098 0 obj << /Length 3777 /Filter /FlateDecode >> stream xÚ¥kÛ¸ñûþ ãPàl 扤ži¿$Ùl.‡4I“M_w‡Bkk×êÙ’+ÉÙl‹þ÷Îp†zKÞ¤ðQäˆ3Λ´\8ð“‹ÈY^ "í-6‡ gq½¯.$®axÝ~}ñÕ†¯DäëÅõ­ùÜ—ÂSrq½ýyé é®ÖÒqœåý¦Üm‹´—b·Z+ÏY^¥û„Z’ÛÆÂe’­ärƒ½¡£ôRºÑê×ëŸ.^^×$0žö‘€]üü«³Ø¡?]8BGáâÚŽQ´8\¸Js{ññâOõÔ¯¡lžÔç©´p|¯^¤°Ë¼:e›*Í3Z×e¾9’¬Š+XöÂbÉZ¹B»Qëk!ùû4«àS_!¿ŽéŽÚ¿8ž³ÙÅ~þÕtR¤Ô"23×/Ž£ Æ `Vä3Ä.‰· ÏÓ^’ …R.=Y­=- )ƒÉ”ŽR ˜ý¶ÒÎ2y(’ÍpJ-E}íŒE²¿Œ'…£å×N¶©Šýp.ñpb®6o;sgmV$ÿL6Õoõcê³íng "#Øá†=leUœˆ²ÅZG ù°¬µ”"òH‚QÖŠÃ í åº-‚Ɖ’J¸žE9JˆxԚȓD‹¯…ï‚ÆÉ@ø }–{3PÙ,+i&pÌ$`%‚eZâ3\ÆôºKïvk°+Ê[~^Io™ìiøêõõG‚øË‹ÔUä§*Íê­vqE­c\”‰4c$‡ø.¡.V!×Aîª(X&iµƒŽÎ,á2¿mQ.C\<Ðû—Ÿè£¼ vÐÛ“ã “OK4\Ü—*ÉJ°+bµv=wùl¿§AZ"4~ƒK ÷ØÌ‹mI#Û6SeÉ–gf ï6>&ƒ½~ÂOÛˆ³­íyÍ=°¬‚©Kßeé¿“-€k@XƒÇû2§VµËËÄZB³Xß,öTb|½¼y 'ð•Ï^¿ÇùîrFXO[‹Î‚- *€Þ$E›ÁKΛÍ fDfÛ ElMËÊÒbçIâbÿ@ˆ¶E|[ñ—f‡Ú¤ë¡q´\„v\vÖK›K¨Ž{ Õ óÐú÷Ýt¥Ð2XøZ HrX8PÜ1ć–ë²Ðë¸q_mUêOÉjwSíjÅꀗ ü.=¯iaæQ¡ðý.ê,¯8 ðéAH@m³ð*mÚlˆo´Ê–èãME{ ½E?PDÅ Íî:°!€«MÐl+õФ‚b*å5îk,âÙB¢º³4 Ê´ 21‰!Phô,DÁ¸È’±ðBáAÒ–¨Û¹àz,Ð8ÖàÀË&‡ÏÓ,®x°HŽERšð„”úH‰ q:òT9=•Ï{àõÔ%"í€m¨ìhu*²Ò•r+Í€ÒaÚ¸$qˆ9ˆ²[ Mж~øÂUá‹ Ü ˜pV?zÝÑî”]ÙÕ ý¨‹| 32¯íw0’Ï.ÅP!GàÿÃk’¥1fTSIÈÊÁê WžZx„§Rc-C¯[àÃuö¦dÚ«øfÒôDžð ¸èÑg1ÃÌ£ŽBá@ ÒFmÃô$Þìj3OT %Êó…éG²ÃBÏÒÔŸrZÒ ^ âü96X˜y” <ò:(YÔìÊ+Dá'+1gåÐmñûT¸%°™!ì4,Ñ ÃsÂÃÐëøp{S>Âo¹°H0;Dô…‡aæQ»˜ Êj t耉Åä5É0kÕ¡Dƒ9PY?‘ómQ»Žs“ïÂ.rX%½ Ôâð)û-ËÑQÞ3mÕÃ1ù}Ÿ+®YD ¹5z–?ý)ÏoëBÒ ÕìÖX˜yÔ`­•êJÅ&¶{ƒ¡<ñ†œ=¥@}Òv5?Çáç}br«çÜgÁά¸q[Â Ç cú¥Î;àu±$µ…è³"ô„#Á‰8ZHg܉0Ⱥ3¨J„‘p°o+Køð ;„G‡|vùt¨£ ÜÃ÷‰’FÈqä)4ÏÃÓå7§)„¬„¥ F³fG8ø9Ú†YÏ äÙëwìZ8'im[àˆ°]yPUùݶP°ö¶Eéîµ§„Ú‚ »+ tFKðW‹C/»×¾ª·Jûrù]+ÖÆ4¶Ø~G@ˆãÕÄ$€ØóÝ&.¶ÔLaí¸õß±µ†.àN J_Ò›±ÍðdvoˆO€/th Xß §Åæ³/0©Ææ“êÄDqÈÄ:éA³¤9IÕ6 …FgwÜt¾(‡GsÛð.­L›ünö§m¿ýôæ µžäÆõ*‚„ü9¿½¹Z…T —«+z²(»Ë°ŠV]\Œ1åò˜lRHtF–© ©^'¡EAc°AÖ\ 𦇒yMïÙi¿_—F1¶¢FÙÈÂNgÒ¦0Zffò»d9U+á¤ÁÏØïOTŠ(T„§©2šr³Lü&Ù“+6Ë—T,²Æáç_ (å¹ù–òÃ-½›RIÕå¤È­¢q&@ÿ±ÈÑp$%VQ†¬½y©Êµíð\T¢£Ñ¢æ{‘r¤ˆØÅ~MŸ $Å”ëq¬E¸ãöݺœФ˱0D¥ëœñ:½Êu‡4¹Ì“Æ0Òº®Ç‡ 1êööt¸1¾¡•kL‰ušÕql¬‘šI>êBšPÏó±4ÉG óH>Öõú~Í Ò­y¢f@T?—AÔ!ê’t´H’.¨æeÙ®. cg”@˜‰NÐÆ0ëÐ6‰Œˆ…1 SÊ2Cíóød;Ê—tÎSª±~°EWæH¶ç•Ó®ŒµKŸnÔ©c€ûÐ3ºÇÓ „°;;Nv´g[pƒb’ÃH”†Á5Ì4 ä{'‘¹" ±}®0Dì¥ÈnACpãÇËÿÀº]?aw<Bš<à 2‡³7 âäM¶=Ø=¶YJS}·ä!ŠCÌCƒrXò˜ÙâÅ ¼žO@2ÂÎb·õ]a#C×Ä>U‘ïéÅ„>ð¤ [Ö]ôSIf\}i,å'!è@oöËé9t–Ó-t9 )ñ3sÕÀ]Æ7­$¯8þò¨Nð·1$‘ÇÑtfy¶æ‹î¸lGžÍ¨â>¡K îr›–XС; €”ï,¸¼yð¨lî Õ){™µU«Îé*»öÉh£LX-ƒ¡É£oóSfƒ,ÂÞqŒEöຑ F"S[¡.ÒªJX¬ªÜÆm`;‹•ç/»Õ«x Ñõ)Ù½ºUß2úð$ qmIÀyòH«‚ ªNØDcäj–+”ô¿í ý+ ¶3é…•ã‚A8“¼´€¦Õ‹aΩ×>«^sè¬zµÐ­#qC°dmfà½‚Èæˆ~Ô‰i|[gòGêLXC¦¡{s§ý5Åpˆ” ZåiƒÛ}{Ú[Lœ|˜Â%ªš PgM‰}¼Ê™–mÁŸ±†2ˆ„ ÎøÐävY˜3Û5‹·koWÝÚ8Ì!Y97ìI1õÑþ¸ýýÁ#ƒ:¥gмf.ò(OìkÃìà` Ïø¾Ú»$aãÁ D,#›öMþ iÂ3Qo3½rnûfÙÝ›Áe7¯ÁµÖ6)·éž+ë„ìÆzÙ†lö-SŽe”ç®#´Î0½šæ:Ücû>Ë÷9t–ñ-t yÀz_ùËñ˜ã:¡:|®%=ë_ ß°ñÙ?vÎÀ¸L7ÔœºwÕ¿– éYõ='ÂNË‘š‹v4üŸá÷žˆ{ùr¥½å³×/G|ž/tØ\€RîGÿøÓå%…W߯þï<%ëñu„óë°Ë|÷üãHÄ™Ëô³äÛÕ=[I×[þëó¯F‚÷öõãòýØhOQ!‡—«´ð2Q˦}‹zõòÝc@$ƒÇîð_ÇÈ‘‘~Ô®þí›>¶<ýûr_ø®÷Í|l ¶\ ]U»>ø‹{Ž×äú]Ň]6Á~Áž´ÒKsˆ†ðæôž÷)f&kà™zçÔ‰fòí§7 ‘Wöc !ôØ7‡û?g¯‘¶Îû¡]Ì¢æÇ…îS2‰¡RJ·=ë[v˜C©¼Hï€îê‘IÆç8x–UsÔ\ÅÞPÿ »¾<Ú»oYß\¡ªêC¯js“ôOS1ƒ‰ÇÜyä,¼HxÞhE…OúÞ·ÿmÇüûÈG‹Ú7`|U—ÿ—ÃØÍ•á$KЏÎÕmî}½ŠÔòÄKz·á5ºôÑSG=Õ½)GZGŠa®Í™ {xýœ?à–º‡'—ù—‡»$+üÙó?£¢ÁM endstream endobj 5097 0 obj << /Type /Page /Contents 5098 0 R /Resources 5096 0 R /MediaBox [0 0 595.276 841.89] /Parent 5040 0 R /Annots [ 5101 0 R 5102 0 R 5103 0 R 5104 0 R 5105 0 R 5106 0 R 5107 0 R 5108 0 R ] >> endobj 5101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.321 630.118 177.172 641.022] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.432 588.583 178.966 599.487] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.256 570.959 196.549 581.973] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) >> >> endobj 5104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [255.697 570.959 289.231 581.973] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [108.286 553.335 145.137 564.348] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.576 553.335 443.428 564.348] /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 [147.265 354.607 206.821 365.511] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 5108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [477.145 339.576 513.996 350.48] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5099 0 obj << /D [5097 0 R /XYZ 90 757.935 null] >> endobj 494 0 obj << /D [5097 0 R /XYZ 90 733.028 null] >> endobj 2062 0 obj << /D [5097 0 R /XYZ 90 716.221 null] >> endobj 5100 0 obj << /D [5097 0 R /XYZ 90 716.221 null] >> endobj 5096 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F42 818 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5111 0 obj << /Length 4170 /Filter /FlateDecode >> stream xÚkÛ6òûþ p¼Àš)Q¢ôCúHo{išKöÐmQhmíZWÛÚ“ä&¹_3œ¡LJ²¼ ‚À5â<8œgå"‚r‘G‹Lg"õb½¿Š0ûÝ•ä·+x½òÞuwõÅ«¾y/îìç©ZÉÅÝæ—e*dr½’Q-?¬Ûí¦¹†ñRl¯WJGËWÕ®¤Ñ»ò¡„wfY®år³&RñRêèú·»ï¯¾½ëI`uœ"ÿ½úå·h±B¿¿ŠDœ›ÅGBæùb•¨˜Ç»«÷Wÿê× ùæ§xLd$Tj«8&›‘‘Y¬@*Qz’…LN²Q&2/ äoÈίã)‘èÖÅ÷‡¦üO¹î†LËĹ Û˜$Q¤”‡JÇ"ÎT@Ñ›ãþdÌ&Ëúõò§¯ßÓİ_ËòZêå§8¬›MKoˆÎrC<Ô¼BûéÐi\6MÝ´7ðšeµÛÙu¯õ²ØÑW^+|8–¨ìÖâz¥óxùO|5‰øP[é,VÀC– ãRäšxiÊuýx¨þ‡d¡Z-ýZ~p0Íõ[²6¶Õþi÷‰ÆÕã¡nÊ K§§ôÁ®­iÔÕÃíŠ Zd@š”´[8Ý<òûwÞ¾1ìê<Ú¶p9dÓ}·ý5Òü—Cô‰¥—y€¨ã 2‡6QJ¤ÒG ²gi1RQ>ižŠTÇóÇÆ:{lÌ³Ž d|f"ø~ž‘œ™D‹LœOŽ;3( <3ø»®A™ªCá$Ô”OMÙ‚®-áDtU}`E{¨‡ÍyéöJ_Þ è¼ôæ9Ò›^¬qÓgÉ!5¡ð"å* æm]:'½ŽÏPqpǰ)>õ‚¥T&T’„T=Xz–Àá’,ާf?B®ÈL:+3ü£ÊÒeÛ5Çu×:M©ÕᑞO¡¬TÖkh×”Ò9d)e,Ešh¥ãå¾n@Ò±NÙzk½ì¶%Íð6à°jé]±ÛÕë‚,>Lß"¥ò¿ÔZ䀧ת§jKPÿ¹ˆæõÌ®ùa[­·ZW‹ÿpDè*@#È|”5‰RÆj‘¦Fä&¿ zåmß`Ifvå¬Ñsð©yHÄÐê2Ì<êÍn æJ—eá$D*C³äÀ—À±Î |¢Û7P,[îyÛqlÅ=ôÊ*3Ë• ¶¿åÇÃÆAU]UìÀ»Ò3(KÕô«‚=ly¾¦ßMù€ÛUwMœÜ=zÓ\õÞÞ±7¥Ï‡¶4ÆZ`°ÄQf.l¯ƒ^yàc»4Xò²O•i"’<¤ah dqšÂ…ˆO^Õp˜ñ¦Ÿé¶Å(T1è¦y¦8x–¨Á‚,Œ¶ìÎ C¥ ¾,™•†ƒ™Çœ D'í¡®Ø b G!ØÈpxWœÐÑRèÆ†T.íƒÓ¤ÁÞø¶ïnkq$9F¢rÙÛ5œéHb–ûcÛÑì}I3MéïÈÚLœ8¶ Ì@è =þEª¡ï ç!+hà‡#¨Xlú…Б¡Wø8x,É»‹œœ7e‰P"F–Ì‚ÌbN@­Rô˜f²9 2d(Ú2–Z2eÇDZ¦ DÍ;~Ï1rÑûIÚ‰0ˆ¨º¶Ä=~à“õ’ýd}ìªCy3Rì܈$’%p!³Kg‹¡WøXÅK²üÿœÛ€8‘"Šd vÀÁÌ".„ÈoX2|Ìžšó¡?«;V.ÎØ¸üfë`‘Þ¶d)ß[ÁÖhÔ? £˜²–R n5­F ²ò`F%>3J:ÏDöYxWvÇ©>´/ÎEÒshûHzˆ70ÕI;Dü«cëb- ‚õ±wmäð*à í>CÁ¬<  —iXzZȆOJé±·L0§™ÅG Б‡ôÑE/è½?®×eÛŠ³¼j, ¤x=ç•a.ñ:‡Ïñ:‹ŽyõÐIæõÍq·Ç‘umÞó CÏ“0Xò|"s–7gšaæQæ°³Q |òs³§b€Íù]†üÏDæÂ.Ÿ€Îï2Ã\Úå9|n—gÑñ.{èï²Ë†¨°c‚ÊEÅV»9Q'±¾ ‰æ¼ ä’f91Ìáb)œp%,„WhQ‹ÎæÀ·-ßù¦Îùç|_QEï#k 8ƒ¢Á’1N!Z¡¸\ÅÂô1Ì%Ò'™H•3ö^µ`B&F狌´I.E†^yà —|Fn sØc1܆™G¹L€³ö8’]·âߘ5ÿf7®˜²éó‰ñ>d„¶\heú2½€€ŽKõ`P#4³ãÄúþõ¶hhÅ ä$!íײOé£x\o2Bó±-‹MÙŒ)SF(å*ÀJš*KÊh1Ô ­\éïë”õSS®ÇKYþÜM¹+>N‡¡”ü«ä­»f7Q)8û«k1§ÑŽ©KDHgVôw+`õüf9©­ëÝ4>H§õ\|jß*‘†â@/Ø÷nBæÕD³ÆŽ1ƒ‚3‹9I¦5ä¶Rã8ÄæJ/xÄNN:DžIbù4¶‡uت$"O¼z™ä¼6KÁkg¥äã:Uq3ž \ÉMåeð[Ð϶z3¾]eWx?6 ÜÑ«W·wïiD·)0à,Š18€ŽžÐ„KßW‡ÂºX„-îwü¼ya·±J´\Þò*[0d;·Lµ/ùÈï/Ö§ŒÌ&)Ç3ÕÇžج]ÕvϾÂj$ ƒžö.£¼/]Þd ­Î1=–~6}Á‚ë ËÏ9ƃ{i g1ÕÀá—¼jWZŠA²d‰…ÞR– `¼!0"f`Ðv Œ¢ÙÜL¨¸ ™`tYS²±¦ u\¡‹O·lL·Û ޵Óg$‹0£ý°fÐFíAº¤ý¬- >_«X¥Ë;WúÑn‡RÞ!™ (£Õ~®K aRûW’ü\4  ,GÃ6W° ê5¯²/Á1ªvO ›ª]Û9iƒ¦2ŸÛýwµX‘{ãL#FçqªÁà^ªm;è•>Ž2K" BÿøæÝï/Q´ÿþùö‡ïF•‘íé–üf;î°£ëcç#Þõ¤"⛹ë!èỹ%}¾_¿žàËé&’³<;˜YÌÃ…œ)¿¡½·a6üî{«†¾´íÐ4Ú05¤¡öŨ\'!²–Ù3Eå g .y>{- ¶•‘ƒ™G© ´òt-ŒÛR8Œ0Í(¹H˜Ò7AÜ`ËÆ@öŠõ©uÅÅ]˜úPa4k_⽬µMô ««ÖÇ]ÑÐ3Zþzwܵ*ÜmS¾9×Bšø3*¢±f%•ìꘖ,ªu•ðÂW¤Ù†õá\è+È„*¬¥nÌfK¬ =Âßb³©(ËŶ 4‘8ëÜ4ŽÙðâ0Xy¨:^ÍöGLNJAàâØ~ƒ%ï—?ß¾‹+ÉN„–E\vS—ŒÌî' ,gºj»yDâ– $w¼æ'×È‚¯ÇÒ˜ ,P›»W·ß¾þf‚¼¶ø€\Z_ùD5GÈÀ³ï°Ó%J¹¡&Òçj"tExc`“l´»ÓomRþD²‡çÛzKƒ”E†onoy/ðJŸ:b\E¼¿a˜n[· N._c’O/ùÕËÛ·Ìú>¬&E‹V)ÄàP­Ë/´é¡¦8iNšÏ:ŽHÁ!n /ŠÆê 7Mñ€™EÄÁ’¥8fà'»mxê%ªm“Ð ÓÓ(â¢:é ÆïËUÁ¯ÓÉʇ‹öôgéqºlKk㌃?˜‚´ìpÜÓ¤u4W|üå7z8]É"ÄMòqÞx€¶ª,²YÕå ZyГ÷Þ‚ç=G gF†¨‡Þ•af1Ʊ‚Ð6 Pž<‡eÛzDÕÑ ´ø5{…xÁöÓäš}ȶ&„Êß~²5ÆFˆø Ö4í±äY!õÈg³ `ÁÛG‹ QËßµmïºâ$c"ñ ·ÀÈËnh¹S~RîʽÍP,UŒ¤?Ehs#1Ñl©’TÄò’f`_¨9Ú#o¡™Ò6fì‰ QŽJœ3‹ Kx:J”^,‘õ±„±±„¢¸!%/X=r»Ã1PŠ{ŠrÃ*crN‡D9 ¼µ9 üR®[²ë Í?4õ~ç¯Pf{Q‘#_ñ¦Ì'W·ú[Âàš…Ø`ÀøË/é7 ³QÝe¯WЧø“{æÍκ즥·6í/iÌ'Å‚Mto%p<³|¡d*²ø¢©aè•>¶5ƒ%gº·2)Œ q³™G˜Å"ËM€°W,dûT)·¢›h’Ê JˆÔ焌¸·]‘[\ÖŽ šuÕ¬ûÖ%¥¼3x⌺ªÈ|ìO ÍëÆ.{Çñß oÖÅц JZc¢Nõ0Û8RQ™ÄB7%%lë…Þ—<ÍÑ‡Šœo…QN‹Bxµ¿Ù·üÞ©Ž­ÑEÔ%œÃb2±¶Œµ^Ít§í°¿— 7XÚ:WyƤ©Îu&Y¾|{Kºª·>ÉNÕ迚,À’¶Vg4¶'YÃÕ DILšdêðéˆU êw©­ÄÁ®zàñ9–;uûmÊ¥HÀ{臧!ææ XóØCJ!Ûº|b¾©»Ä¸"™ñ“–‹ý嬩)è±°zðxDoÉ2>U3«,à}éªTD‰Ÿc¹j“ájSŽY{×TT(6؉BƒBO{½ˆ©e¬—¯+>kÝ®’K™Æ¶Eõr·+B¯<ðÉnWÉgl\ªD’¨ˆQ§ÁÌ£,DåôÑÔÕ<«H9)kóœfÑ8ÎE’ëgŠÕAÏò6\’‰‡ôùlƒõ#é¬XÌ<ê "œL¨éâÚЍ‰Ô£n¦âÿ$Ö"Öχƒž¥i¸äLñ(M…¹ 32…ÈŒ^KµéÛ(Qª2pËÝžëc’2¶æû˜<˜s}LØŒDDã[[|nŠ}ÙAà¶•ióù–¦! Sà`†¿_øã€S:þƒ$9+3"iêO’|’¾Þ‚LÖ]ßÌí|™ [ã3—°Á > endobj 5113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [384.264 707.957 421.115 718.861] /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 [226.248 679.042 259.782 689.946] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.425 665.836 440.065 676.849] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 5116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 642.299 165.486 652.829] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [235.483 642.299 270.671 652.829] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.605 628.719 435.206 639.623] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.45 616.764 342.033 627.668] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 5120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 547.112 193.212 558.016] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.863 477.066 160.714 487.597] /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 362.096 207.262 373] /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 362.096 313.797 373] /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 362.096 452.155 373] /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 267.071 330.777 278.085] /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 243.161 122.538 254.065] /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 213.581 272.817 224.595] /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 172.047 292.477 183.06] /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 160.091 263.439 171.105] /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 160.091 374.793 171.105] /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 160.091 467.892 171.105] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5112 0 obj << /D [5110 0 R /XYZ 90 757.935 null] >> endobj 2489 0 obj << /D [5110 0 R /XYZ 262.98 479.846 null] >> endobj 5122 0 obj << /D [5110 0 R /XYZ 90 464.159 null] >> endobj 5109 0 obj << /Font << /F31 604 0 R /F14 1084 0 R /F48 2408 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5135 0 obj << /Length 3699 /Filter /FlateDecode >> stream xÚ­[msܶþ®_¡ñ—ðf|,@|ñd:#E²#W±IIÓ:žïŽÒ±¹#Uò.²Òéï.°àñ<»}8\bÏûˆŸ2øã§1; eèÆBž.·'ìôzßœpz;‡×óÆûó»“?½ð•âôî^}pWzüônõÑ \îÏæœ1æ<-«õªœAÛq׳¹'™ó:Û¤ºu“Þ§ð.rÒ|Æ%öFÌ—|öéîíÉå]- (E€üëäã'vºAßž0WÄÑé´™Ëãøt{â{‚Ú›“Û“ë1t¿€þ¡9J.ú“ô¼Ã$¹»Ì:ô„Ë©fz™,aV"ðœuš¬`2ÐæÎ‹ß`ÂN:ãÒy.ÓeQ®^h¢_™d÷E¹MËͳîy±LÊ•nf€Á6yH_×]Ë"¯²jWé§â^ÿª?'Ë„;Ó/Âù"ÛéæÙíwWWºùã–Y¾ËòDf;çÜ¥žÁr”0TZO'ËõïnêF™äÔdŸ=Fo ÓÒ;œÚÓ:C8ðQ˸ÜìW) üî§ë—ºu~K»Y,œ³szº~=‹˜C¯_ëß$_aÃw¾ƒYÜhdðFåÎcºÌ’  ÐŸV^¨ùªe¶[';Ó¢•×SP¥û“’ÞÁðïg>Õs¾ßlæ€Ò6Ë“]ºrk–ÂýH±|Ã%.âØÉÕà3é$»læIçw|NõËß±#Ùì4ðŒŠÅßå®Üè¢Y¥D¾H7~ñ¤¦ÏDqL+îã'M”ÑXÛb•ýʘ—®ôsUè_ZýîV7A€þDzX›´ª`>´ …wÛpÏõ¥„H{~±[k¢æ‚ýE!á IMÜËt[ D®•î¼/‹­ne;·k8óÜPx§l]Á½Á½mhæ "µ¿¹ß˜ ÝŒ€¡ÑRúLO”<<Ûü·™žhQ í¢MO´–鑘¥¸%Ú»ývaQ Ȳ¬Õ¦†_X2 XµjÆqô¹+Â)Dã8Í‘8–é&ùÜ Æà`Þ­BMO¨‚>8¥0n u¡÷h™¦mq›WUcÛæ°^õd#xÒõáwP6¢™7ˆú²‰Ø cQ¤ó<ÙC¸^dç§IììüÈõÞbÇ^¯àè‘—ÅCžýaÉÑÅ(§}uwÛ[cOؤUæÇ°®Ððäf×.ž;F÷q¿ØdÕÚ¼×vÕ¬<¸Awa°>~äO | G˜h¦çç»q„mõ ;ÊzsÓRƒ†Ø.”ÑCC(Àäû‹›€SëŠæ1éFž´bah¬l»![ÒþÙj›‘§D È ÓŠXSr_`@±Mˆ@{ú] ‘ D+íT«~X×oÁ®Œ}´‚àFµÍòtþP&™ZG"Š0Ú•Å´«ÄN526VMÜ$ÞÄú]ViÚdƒÞQQ@ºØ¤àZ!Jt"Ôs{ÜÔÒÄÊ”â+0HÙò‘ö‘ÆeÏ錚Z„nÑjjD£¦ÖÐijUœÑ•Iø.c¾]&¢éÉÔÞkì‘ %ÓeY¥YOEyˆÍt|‡K4J$¨p\b­°âqwXZ÷f P„gJe]›24® ч=å¨}—à¡CÙ­OƒhÔúš ëcåGöÝÊŽìJ“±ï…³Å®©ƒ™Âüøg iÁª8Œ¡7j»¥€%L€WÓŒc§I¦ ³03ÈYxà¼8áö¡,Vû%³Ä8Çt¾àŸ¶`]•('+×L?R“Cô#¶zÁŽ…nm=`Ôœë.JƇ45Û`Gþ@4=ÑLaoãgÀ·±3è7ØyuXrX¥©J¹ûÐtD²êØ‚ZešTÅÄOëY½è÷SMÒÑÀ8Ò ›@N } Gšh¦¶ñ3HÛØ¤ì" IåN:ödÑHÃÀ+ 8‹™ÇœýŽ”ïÄVmBbIatæE>×k×6PSN O©J¡µÊ*,‰¤+bª•/´òà+ØF \ÜIýÜÔl«e\Tª^›¹2­Ò÷eíJp3ÁH9䫇Lô¾Øç&:á莂'ßVÐaEf4ÞS™í ¢µV˜€¬f9“Ó®„š Mn||#µ8;rÜßö“jÎ\2Cýž½<Òª`Нó{ª÷SzpöŽÉé£ÿ)§7uŒQìKÏe‘gß_ ¢Ñýeh&ö—•í/+;Ú_MvsåIüLY @ ˆMšÄ­p&0¥š` Të¶Ò¯žÖE•¶¾Öu%|¥w´ªýõ}¿ßN¶«Úî5/ÄM *æN·P¨]aV5W¾ÅúžNµíê:«‹h¦ÔeãgÔecgÔÕ`7Wž‡=ÔfWv}Z?~W?€á!+&#Ô¤5–v)/Íã!&†/ÈÃÁ‹"§´ô)ïÑß CÀ¹ôíá×94ŸQ™ ÚDã$š) Úø ÚØ 6ØÍ…IjMi·ãÑZ‘y³Ža'°ãÁÈíh3æ_†Qà o"×h"oh&·ò#ä­ìù&;X}àÎm²p|©¥‡¿s®ëPn%¬áßÕÀ.…¼"Lªl©›ƒ…§žÛòxìriÜÖ7” ³†?u7Eè÷¿_v1Ò9›AÌqw9àú`ʪ„¤/$q}ã—x{ÑÄã® Åì’̇çÙça¦ùþüv pˆÕI—U|3»³÷¥ó3ºß LÕÄqù¦/H0zô7dïû¹ÀAŠ–eû&õæòý0°$Ãc5üË8¼žŒ]«ûª ¦ïK¸/¿ÇæÂ6,ÃÖkÖ×®°>Æä!ÙÇ {(LTDè°°Ñ áð+áðÈR?N£^CÂïS† Jh¤ÎAšîD3ùî§k¢(væe” úgs8UÛ x;*Rñ¡Ôíú„0E:ª*ô”™ÀI¹I ˜”¸ê£ ¹:6Q¯) *Êìä®i¶(äþ9  œCÈðP¨F3Qˆ T¯Û±N°U;&*L>wÊ6‹´{,‰‰L2èÔ©Ö•ÑĹNƒh´ØhhŽ,6ÒñX•öK޾ï†o—Œhz’µ½8=?hIöóŒsî@œStüö¯Œ‰„J3 ­ÙÖñ+]Ïm˜÷u¦´«Ã„jWfK˹²ñQDñü˜Vuy³Ê`u¦«ÑŒG€>"ãi‡D3Œóû«P&XhEW?¼ùþòì¢wèá{nV< •uw :ô@u\muÙn¼@\G£a›'¨D£ú24ú²ðûB}Y…"¢¦P¤¯sPØÙÍ;„´Ê774VÖÝú:\š£Ådaîe5&e™<¼}…`UüpB_¢q}Í”¾Æù}©¾lB}5„"}}¸úåúêö®§/áA\ ¬x+ëî@ }}È>« s6Yµ›Øa脺çÐ,½]‘ýþ#-‹—µÙ55&SÈ;öR1S$ï”Þþ‚Å’þ9¶ça±d­[É@‚ eA´s»ü?ýéj (–®ê;"É@üí»<0yJQà˜+M°xóúæÇ oïhäâpZ 5ï—m·ªˆm,"º¹0[ »i‹AÓl15l1‚KÇ*ÐxÄ Ä([ë1\z­ÐfCÚd¤Â¾,ÇKbTrj€ô5°ß Ð,?" ]é [vÁCÍ€x‡!. ³AMسÔGȲ„ ]êYÖGÈÐòõOû¢—êÒ¸Œ Í w(âgýbQèºì ƒÔ,6‡¹ãÆ¥¶xòÑÛ†ægà 7Dã×¢k\ˆÆÊÚƒLÛï°&U¶]{GNÚPÛ9w†œ¶¨÷$ÖI+ëî@:«#Ì»õ·^;ò^÷d9XÂl—äêˆ2ÄJJÒ• Ë›X¤ãà1ÔV»C6à9»¾†UÑ•ïØÚQwpZ…ØÆ±8¦p%9šª•~еÎX'íé # ‹p£­‡-Iô9Qè’«¤T.PN¦"Ú 2I3ÒÈ5¨€Õò<–ê%ä†è®u¥6ïi%À3‚Ä&´BÔóy_+!Z™k³,&h­Ôy$ç!jXžò8t™©ͼAÔW\6Ô«ÇÙÂ<Àkzmvãv‹¨íŒ;CEÜe¾o³¡±²ö"0ní)oôò H3ÕAL¨sLè¨ö÷hûñ Ý2£‚B¨óMx»Löz†”lb$’»r¯ƒõJ¯Ù@Õ¦±ÂJúæÒwY·Þ,]¯ÒjYfƒ·lêPÆ£íj´ìÀƒØ…(Ø^vh– ͱwœŠÍ`ÉA¸>‹íRMOªn¬-â–PŠ,ß©\é “œ~UNMºÆ$Nl‚°û-Q곆J?èÂCsÀCáAõ®i„as„ìÔi”©8计ã^<ìeÜ Õ¾èЗBwz׌´Ïp¡„ªV¥[)|ÐAÒF°ðZ}…]Ò€ß,_eKZ´a]± i@Hi@Hi@èhl2ðŸBpç½)þ½Ô–žª7¡.ý<äÙn¿J­— 6ÕGö‰Î÷ki«N-h“滵Þ:½ ‘j=ŒÖ8„­ÂŸ¨'4ˆFóSC3‘ŸZùÑ1•ežMv¥þ…a½)TÿyêFâÕÀé­Òýw EàꢌÃ~ÈøDãˆÍ¢6~Q;ƒhƒÝqˆ~ûÿA´ñ<ýšrÌNeìJ9¸b0qâúêÑ×ýŸ–úw³Oqâæ›núôßfÄçó&ÍÓ2©¯™k]w³Øsö4™÷¦Pëë¿bÞ+Áô“Ǹ9œEl\D ×`®ÎéS4Ò¾Ù~Q|~~èÇtÅöáù/ñuü endstream endobj 5134 0 obj << /Type /Page /Contents 5135 0 R /Resources 5133 0 R /MediaBox [0 0 595.276 841.89] /Parent 5040 0 R /Annots [ 5137 0 R 5138 0 R 5139 0 R 5140 0 R 5141 0 R 5142 0 R 5143 0 R 5144 0 R 5145 0 R 5146 0 R ] >> endobj 5137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 608.331 206.821 619.235] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 5138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 299.489 243.892 310.393] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 5139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 285.541 243.354 296.445] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) >> >> endobj 5140 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.265 271.593 233.939 282.497] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 5141 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 218.771 224.724 228.699] /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 [242.525 218.771 329.2 228.699] /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 [425.668 218.771 513.996 228.699] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) >> >> endobj 5144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [461.085 205.84 513.996 216.744] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 5145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 193.885 177.661 204.789] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) >> >> endobj 5146 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.366 193.885 282.04 204.789] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) >> >> endobj 5136 0 obj << /D [5134 0 R /XYZ 90 757.935 null] >> endobj 5133 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5149 0 obj << /Length 4054 /Filter /FlateDecode >> stream xÚ½ÙŽÛFò}¾Bë—¥«·/^^ìCâØÉä°½ž’ ŽÄ1‘H™¤÷^f‡ÔŽÞ¦÷)<‹¼4_ o‹w#.•'|¹þåöë«· D ¯$àÝÕO¿ðÕýúŠ3G«Gs&âxu¼ÒRÑøpusõïf{_Áý©5úB)e»H!cÀªC©|³Ò—ká{E¹ÞÀ¯Þ§vp‚ÕdðQz°wYUÛÑïÀ /ÅgqX”» Ûg¨!à’@b¹}c!4ïB°°ÈÇ3ø,CzüëøuÍâȽý{bŸ÷1©bHòÝä,…£ðù…ŠE*Z¦0Z¦P\ PÓóŸ¹Ï§‰T0KÔ°qŠJIÿ/¡rž ¿c‚q%þ³û¡Ú52/Âê Þ/àmGƒ𦅞W" ‚X¿~óÕoýöõ«/¿yñã)}¦BÙ£` ¹d ¯…ÕÅ›U`o4(cžÜÒÈxŠw¤—®‚ô7INe‰ºŽÃ{7(òÔo‹ÃùH€uaïRû[¥‡t[§;º»–Ü;޼¨é=0*×¾ï1ä߈¡iÂcßZÛ½¡,àžû=燌, XÖ˜&ƒUVŸ“:+r{ù˜Õ{z3_®÷ké{É!ÛÙ×:Æ©L·hš#ô÷Ù–^LÊfêãéðÑŽËô7³@¿K·É¹"8K ÌnÙ‡kâ½å˜E€;°¬ð‘¶ºÌò*ÛÚKÃM¿™ˆ{û4Ù¥%Á‚­­¿÷ö²å­¤fUZ¹9“ë›|tw‡ÛýÒ{§²Ø¦U•îØH7¸5ÁA(™Ž&%ÓlZ#™Bw4‚ƒdÂ2äo¤ÆQÏÜkßéinÙ="HGàÝé±Crz ê+£Lr^wÈn¥µWÜã¯JkoLú3óÄÉ„}Á( Þ®>æuòÁŽD Œ© ò²ÃÁÌó°F‘´o‘|žS”Ö[¶Þø±ò¾ÁG“ˆQŽŒæ€õµèÉŠõCžýatE„¶Ù¬Óë±Ò¢FÂÓÈ>JÊC^”Vô}Ô„{'šÉ¡*ú ”Ñ>‰kz(pë€ô}R´Ï"\±h^ÆæO „nc oå/ÓcAFäôd ž¡è’ã„ ¹R2o à~–'Žiez*S0+ÂB£F;s_œóýTàA£KÜkæ¹G0†{SÌS>ºžEr,Ȉš>ó8ã±ìQó¦“i¸§ãFج׊AnKgæŠû±{ ™”ªf=¼ƒ^$p8%±ãTGÈýœòò9˜e”|HØ‹.ʪ.ÏÛº²<Ø 1Yžå–çSŸW2ä2t C¡y3rç„®§éÆÐÀˆ°giÆ:Ìé¼ñ‡`vUhÞü.=%ì˜ò%™M¿…ÚN¢2·‡b›XS —w' T.n…óâ€Q,±Y…˜c";'š5ƒßÅ YÖnŽ„^ó€ùì ÷Yë òå 7ðÑf§¤Áî6$‰P1“Âï13³ŒZƒ¹€]ÔÍ¥‰ã=ڷŠˆ‚ æqß¹}¹CïHÛŽc^ÂÀèuŽîP†‘—€(âöWt™ïTVgÆýAS°de3+ØÕŠîöw—Þ›èç|¨íÖÏ‚wU±¤ÔÜ<#7f_ïFoVÏZùŽ&åVνW ‰´&b|ª• @uÑYèM|Âõ§$!©ÒzNHÐÐH«Æa–Qœ…~ÔC=âU‡’¢S+lXKÆZ[#dس” ±?€ˆ4Öï4b¥#ïx®j{×f&‘w_¦ðŽ€(‰=ˆàK¤ò©½ü™sYÚ÷#Žûë@ó:ઊp±…e¾¾ä_ô¦>âïpJÚZ\ɼРÜ}"Fúo@1k˜Á½t1S"“ú#oì~×(釵AÁAñ{>bŸÒvß‘‡ÆU4^ªÉU:.<Ãdöøž4ë3rFŹÎòôéHª!{Ô@ªïƒÑŒ/eðzÓË÷`Jâÿû¥ P«2;à`‘'BäOG†ïï³Ó)çŠwM"é`‘Þ*MÃŒµ¶ 1Š(#°)"^ùÂg±–“‹ MfT-bƹ^ùJ±˜œÈÛ´>—Hu^=›‹c—Ð6qìo/r¤8ÖÁ âˆiΕ h€’ÇÆ!LC³pôÅ9fÓš(! Ú‰LÐv{\ƒÒ˜Q,â³ ÐÙÊSf•èæ¼Å$ŸÍ­UöFñ…µv€f×ê`.¬u­u]k µ¾:#´V!uï| —IL9ŸˆX‚å –M0Ë(cÍBôPžšÌ-C2SÈ¡]a“Bua—[ ù]&˜K»¼„Ïíò":Úå:I»ìr[‡0AæB ûe‡%V€yÕþ%V´@ó¬ ˜K¬XÂçX±ˆŽXÑA§ˆ×ãJ'o«µ¾«Î{æÙ^'Tú;Z yvÌ%v,ásìXDGìè ÓÄÓ²Jj“RømM»±ÿÎiºˆä¥­Ê} ™”U§@Ý÷mÂÙPé+å`ð?vk1‡HN² г-ÇÎó g&ÍN;câ&6жw0¹NØ›'އh" .Mhó²ý\\$tÌÂ`‘¾ƒYF탌{˜w)¾#…ƽ+Mj/?a©Ú¦©Ú¦…å%¶ƒYY¨,ߥ§þåµ-|* }a@¡/@%“®Ö®RªG³–éiCqÈT¤z¹d§ÊÒÆg€²¨‡RÙ$)O’'ƒˆ¥_ç6“qON„™Qäùío^Œûj¼…0¢ÆÙTcÍ.«)¦àÇa;#{ØwJŸCqB…UθÇF:[  £yiä75ÓIÁ„,3Òj+ÁŒ°ö O3ER÷°¾Âtñ³®oÆ\S@cìÚ±Ogy¡!‚å—xÑMòBÊv"Ç‹»E^,amx1À:É‹ÖïŸß|öË›‰ÆmÌdà81!_ݾï<£°X0SÌhÕÍ Á8Fmµ„µaÔVǨÖ[SUÚª Ö!”B#eŠ ÊX5Û¥RÚ(?þ&¹Q| zJÊäˆ6Ñvð¹íb©aK •À6S [´gjÐÊa_ \aBT<¦‡á®,ZTóqÏsÂ,QK5ŸºÇŸ`Ç ”-rTvD3¦eü˜¹‚‘ëa>f‡Ã îäæÜy rI1 øk  +ذß<²U¥kt öÓL;RÖUÀWœ‚[ !˜'ã;`h²m€¥*:.4–^ÆRà±ngí´v€ ^dni/‹Ü¬;Ò®ŽOó%çÙ!KJzh{xÓ4U{pïŸÄ¥%0ù|Hʉö0ÚOä ž6V¥ŠßÅ\eǬY¦ ï¶é©ží…‰¦ÉYµžkÜaÐ Ý‘¢% ¯˜Œœ]›–DI-À‡ %ý½‰DòN_ AŽÉÃð@@§¥CûF¼…É ;ü³š ⇖ƒ¤ /M‹~]üƒ.ïq§ºL‰E¶²¿mÌŒ±uBwûsÄÖY¥ÎÄľ^} ËY\­$þÊ‹eR‚ÞtÀÇ•²Á”ó ¸Š"Ƶî#çfe æZÅ=”M1yx4+`ÔööõÞ±Æ6Q``øôŒ¶. ˜ÄÚVGug:ö0H‚k#7Vö¿#;l"%Á¾A„³)IçùlJâ`L>>›’,`ú/S’Eš¨KÓŸKI–8Ѥ$‹¨!%¡è¡ž<'ˆùä§õ&¥ÅÍA|ÌéQ-A2ÊÏÆ˜'/¯ooìèÉ´¥þešôች NOáI¼¤ƒSZ˜~0RqSØã^€„æ¢)Šíö\–ÔYm"ÅbÝÏw\’b«d]cgæÈ Þ6‰ãõ•-S§­ulZ5Òÿ²”Ú–½¥jϾØÛX¯ßçŽÆÜÃóí"¤­­–Ásdò«×7·öJp¾‘ŒOÇ p{\z>ƒvççdlš–kxÝ©xaà•…{åfÝ?s® Ðçüacªxƒ4¯SÁ¿Aëmg‡ÅÙu'áj¼¼ †¦Âƒ)[ Hgr´ç³¶ÀÁ˜‚Ô¬-XÂä`–Ñ‘šwÑ}1áTrÁÈiÛó·kŽ×(:·ë»IãDWCš>8º˜‡ôÑ]Â=ž:Þ*pz—&gÿÓñÖßæ²ð6Ÿ½Ô3çp …³/o¦3ËèÿG'°!pïÃáLËCZÛꀖÖ^ eÉÉÚQà3:tÅ Ù«…CzQÀ†S^ö#Z…LøbQ¶Ì2j3?Ð=Ôó~$úT?¼.Ó¤vµ)Á”–Ãfí±hÐFöw.v1=á‰ÁâP<¸¢”=@ÑëÏ—*mÎçÄÎÛÎ÷g zÓŸ< Õ’¸Áö#Ü‘6 ëážx ˜eŒƒ‰ã¤A…í–Á‚AmŸÏT‚1%íyƒº€©5¨KèœAí 3ù¥V÷Æ”ÐO¨•xy?¡w̪:±¾Å䫸h—â© “॑ „=µŸ‡à}ûyŽÐ[[ ~Îà³ tæ è±yÖwõI¾âæ³)ƒÃDäîùä'(,ÐÍ— ¸öñ§ 1(‰ó S8¦xS#…dÓz³Ì©ÅAZƒûJgÖ8…¸UâüRñõŸ |"j³ÖÁçBºRïß—?£¹¿üþÛ]2:ed“zC¬tLÊp á·:ßUuVŸM2ÃéÌŸØÓ[å‘«ráØØ›.ØdD¦‚7ñ£†f¾£™Œ¨ûÆTTlƒUÁüH÷¶bƒllÎ3òØ Äl‘=LÀ;†jáN\Ã46Ñ+××öׂpíî´íGÜ}>!x§ºW¥ôžé °åÒÞp/öö ꎧ>JÀN–Üð3 Óë8VÍÚâã8\ŽŒ¥‹Ž­¢ã%*º9bÇ}ï9$ªé;˜ãl{*cm×ÈÏ'Ú4Tp3èC¢Ì8¹ u@Ý›ÓËŸªuº ‘&=ôFAò°—ÍÛ–æ´dx ©1`¶–õîL#“%c§ü…?ÙlCDàú7†ÆÄ’q·júR’°#Ù_¦yZ&õðì„âÒs1Ãë-e>šÒÁø—ϧƒË\¸<—ìr`é· Yןӫ,b²ß@û¢øðñ!͇ÜÁ¯ ÇìùV§Ò endstream endobj 5148 0 obj << /Type /Page /Contents 5149 0 R /Resources 5147 0 R /MediaBox [0 0 595.276 841.89] /Parent 5170 0 R /Annots [ 5151 0 R 5152 0 R 5153 0 R 5154 0 R 5155 0 R 5156 0 R 5157 0 R 5159 0 R 5163 0 R 5165 0 R 5167 0 R 5168 0 R ] >> endobj 5151 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 708.331 226.368 718.861] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) >> >> endobj 5152 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [226.225 627.933 259.759 638.837] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5153 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.571 602.641 440.211 613.654] /Subtype /Link /A << /S /GoTo /D (wcs_8h_2afc8255fde0965dddaa374463666d45) >> >> endobj 5154 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.076 579.104 259.264 589.634] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5155 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [395.605 565.393 435.206 576.297] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5156 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.45 553.438 342.033 564.342] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) >> >> endobj 5157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.678 482.739 193.212 493.643] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 389.511 150.762 400.414] /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 [355.506 253.373 389.04 264.277] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 222.713 150.762 233.727] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [401.296 164.769 438.148 175.782] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [260.838 152.814 285.794 163.717] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 5150 0 obj << /D [5148 0 R /XYZ 90 757.935 null] >> endobj 5158 0 obj << /D [5148 0 R /XYZ 90 407.874 null] >> endobj 5160 0 obj << /D [5148 0 R /XYZ 90 371.802 null] >> endobj 5161 0 obj << /D [5148 0 R /XYZ 90 357.456 null] >> endobj 5162 0 obj << /D [5148 0 R /XYZ 90 342.737 null] >> endobj 5164 0 obj << /D [5148 0 R /XYZ 90 239.04 null] >> endobj 5166 0 obj << /D [5148 0 R /XYZ 90 181.095 null] >> endobj 5169 0 obj << /D [5148 0 R /XYZ 90 150.435 null] >> endobj 5147 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5173 0 obj << /Length 3702 /Filter /FlateDecode >> stream xÚ½ÙrãÆñ]_¡òËBs2˜‡«ü°‡¼ÖÚÉ*+Ù‰¯rA$DÂ&­U¾>Ýs€8¤l§¶Véž¾»gàŸSøçŸÇô<”!‰¹<_îÎèùFßžùæé/ZÏ_Ýžýý o‘8àç·÷êõÀ'’ùç·«¼€øâbáSJ½ÇeµY•pí‘ÍÅ‚Iê}‘mS}õ!½OáYä¥ù…ï-q4¢Œ{¾ä?ݾ;»¼mH0J ¿ýð=_¡ïÎ(áqtþ×”øq|¾;Œ›ëíÙÍÙ¿š9ô8‡ñ±5âÓ$ §YÀ8¡ÁŒXàSF„äçù I>…˜ÀÑp†&Ô¦ òm~¤’Â@ŸˆI.úÆZ2ÐÑAä+Ä×U„*%Ìlˆ»«7¨=‹IE¨¡}ÁAu²¼Nˇ2­õm½Iõë¢õzÀ€ûzyÁC/Ý&GÐpÂ)7p‰ÒÌõ~—æfî¤2¿úç÷ _zé².J}_Üëß)åÉZ_ßeµy©.ôïCYà{¿g«´gyºX—I–§ŠAÀâ’H(1“Xjî-‹¼.‹-¼$cOÏ¡@ìÚ&©õ³¼ÈU ÌNÊ•ù÷ë}ñ+¢—âkOxY”«J¿®Èˆd¹Ljr±xäÝnR=Ú, Í’¶4«ýÝ/ÀˆîLËM’¯ @–«uÑ΂î÷õ¾4žUC]T›b¿5×wæa…ÂUOúwÞ¢Êòµ¾C‘« Ðàî2­* Žì’eYTúÕ¦JS;õ¶¸`Ò{ÔŠ„C÷ö¥Ã|ûò¡¨Ò¡³ Â0>î.ûl „E„Ë ™Hi7cr€û Ü…½†?ï5x@"&f¨2@mª@ƒ¾|óágP­´O£œ„±“¸……qâíO„x?EŒ¸÷¦È_ 5‚%Åë4G©³~ TûcæUVä•C¹ç…NQèÚnrý¸Þ€ˆõe–k ¥jº²LêU " bïö‚K¯L3Zš6Ø €UÄ}{•Ú%è=˜'lŸ ^üÕŠ'"¯Jv©RÉ“¾I <¢U&}â´›4Y»ÔûÔ@Pî§`ÁÙîakÐdë¼(Óƒ…‰vÓÆÀC£9c8Mƒ™5†i„§ƒ‹*k -ªŒ1$Û퀶XTäf†q£íMdlƒ€_åWnHP}ÅDZ2]B˜ðÖyößtÕu —”¨„”Þ´`™O„f{š¬™ì4ÂSë¢Ê ¶E•l™ªh6ðsd*ÌÉ ãÄÜŸÈÊ–bB¬ã(ãÔ†q ‰ä88aí\‡·Zåx§B3c˜ ˜‘d^>fèë€Ò¢teœ¤=ÞKýdñ3Y§Æ¯AªÇ¢Žx̶* ñ½â¡m|Â{¦â5Ž?”˜”­ P®V5øë|xèl ¬RHàv°L•þ艞ô»µÎ?˜·¬!ó¶ú¦˜Ù¹rófnd§^?Pz7æÎ²|Y¦8Iº"ÍcNb©Ç·›LåF¢•ý EŒ×j½ð»¯áp¥rø­p9k`ÞHÈPª4_š;•0¼Ÿ°Á“11ãRcÖ–£ZÇ?œ)õÛsW_UÖt“HåO*ëŠýzsð±·ÊÌËZ±דUæVE¶‹1QǺ˜—¿©Òûý¶Ÿ¥UݤwMUõ!€lSÄšròêö¦ƒIOQôÈгIÃéI‡'…OB!ݯ4éð,ÌœÃs <Ñá9©2@mªŒÃ{ýíò=þ¹½ˆÁdÉÀûAmÈÈÉ ã$£?‘ñ~aÈld”ˆ‚S–­ü@+„CSîÑ<ÇØéølXæI‡¶%‘¯¼gÉœQBýžx&e`¡‹ïO9_s‰ æä»…q£îMd*iÿÓ!ÿÀuø¡èò¯-6ÿ:â̆@#[Üçã’Ç%Ñë0"9{N— µÆ^Û!¢±½u¯ô)´]<âEGLë–ëãëàJþc–Ž,cÚcCæV3í¯4Ȭ»šÄvª·rdÕ$ã«.¯ß¿þrÄ=ùDÒÀÅ âBÛ›f˜u ¹\`•CÑ6¢?’vPs§LÊXÄ!‰}·Œ0“26 s2žÆv¢Œ]$˜IFÆß^~ýáò Ì+FÎ#;,ˆ wo+hO :$,¶®Ì8´ DÐè™’æ>ÒÔYÙt´Ñ°®%v§;&Ò€Ûœœµ N´’;ÖÁ i0Xie`† UœªÊTÝK“§Áƒ—W×7 ÈùЛF Vºaà¶iÜí³ŒçÊÃ$B?ž™Däî$b]Ð /-·ÐåTË-¨ì>o‘3ˆ?Q½ölèµËS‰4N§ ¸€’ J’]R>é{ì”b)R'йj #Ñ—ŸãOà½Ðw/L·.ï.õöµéRÇêñkiFÖPÍåIšJ"±Þv‘C†k´UAøœ}…HÙm5"x DÌCG€6f=º‹òn,û¹Þ¡¥ÈmÅ–Ý,U„‚ò‰²IÉæ\…^´À‡VÛ›²åŒ_béöÍ®þñ¶O‡¡°êý]5ãÄ.TíbϬm+SÊ¥yr·M§ë6&àûs!ò4# ÌlœFxj”tQeÃd‹*[·½¡4£ô—±b Û6.ŽX'îþDÇ&D6SGGªpU">®¾{/,†_Üf4Z×A1ÁÙåŽ#Òjh'ŸúSmä-©Ž†[ãFÝ›ÈÖuÓfZî‡sfrš63k&ÓO5UÖLZT3¹~=e& |“prÄÂ8q÷':ÕLÀ3á„ þ—šIì2“€Ê.w¦ÍÄ@;ùÔŸò3ª÷ã‘…q£îM4o&`ҌϙÉhÚL ̬™L#<ÕL\TY3iQeÍDwß]çCÁn‰“#‰¹;‰1¨§Û~„µ°¿»ÉÝ€}ÓiºÞ¿pi9æÊîâZ®¡ íOy„–Cq áä°…q£îMtÐòEÅxžCíàŽÉÃC ¹9î7„z«GaHmæÀåªLîÕA¸V†=t]‡QŸPÖ)îU¹þ úïï]ýíêJ_á¢ïÒûBßÞO€»ÇÔŽWÛ¬6ù<Üê!ópLÃ0/ýmŸé|&Õƒ­:œƒêb¤pb’Pá7ÉÈH««¼ÀícmZÿóHFoÎj);’ÑþLV‰P“bÀu¢ãÀqþñÄÅDýɈß³×ß>‹Î#™¸£S)ÃVi«T{®à]{çpxÆ ÷ßtµ‹÷ýj—Mµ‹?×#/ôÝ‹&,ôJËÀÌú¬i„§ú,UÖgµ¨²›K7ï¿ùðúrè²@á˜ïdˆ…q¢îOd¼–¨«Òñ›¤ E_Ïb#RG“bä!OÒiÒ`=jlÑŒîaàØëö"¹ìTÃ=îð¹[õà‰cOŒ<O Ï8cÈì^P„Ç…»{Aƒ–]-ƒ–ÖA‹v½‚ãWè‹q\%ƒ‘Æãh×ëù ˆ+ýXéÝ«wpäwüSìKý¼¸a…Ú÷âøÞ!u_ÆÓRaæÚš€ë£:|ú~Jø~“7æSCà <&4ÿŸ˜ðl;9v›…Å\u«xã|É\ÄÐЋøHÄèNydÄÀìVtéD ãÄÎ#£‹ýôˆe" #áŽ- Éˆaaæ"†á‰ÃI•jSeDóæý«›‘ž˜.k]ì°0NÄ ãõ»ìøs+ –+]Ç;Õ™½—[ó ÌhÉb›Aâêç|ÅÜö8ඤâÞ²Øîwù¢zH—~ý´ÔÃIžl‹õ>ÕÐc.ÓçíMü7ø1ÆË‹Xz·—æ3 ÜÆa÷¼rC~÷|½ú–±ÉþQñ_=Ùl|x<¶ÊÖ›Úž(µ6ÓÉÖóÖ§%¥=ÏŠ­«> «T쵚8*;{4 ¢(Šglï4m{fÖö¦žj{.ª¬íµ¨2¶÷õû¾ýêò»a¶Æˆ ¤“!ƉšJIÖcÈŸn}qض>Ae«€…§‘·-Ôqg€Ã³Î•yå^ÿjýÀÓ!öp…¾½ËrÝâ‚ jtÚʶEPˆJ#Zm‘‡ì£îx˜îFsn»9=qö\)¬þ^óàq’Úœÿ$ùäpÆÃ¦Û$ÿÕÀÞ4v®,aøa¯ŒUÿgD†èp|ý…éó>ùUŸíøqûÃ弓0.ìÈœ·iž–‡VQaìóö"fÞÞØèû¥a˜Ð?~üeŸqªïõíç„èìv`î×À°«WæUÖý"çMññi¢ŒÄÃÂöü¯Ïª endstream endobj 5172 0 obj << /Type /Page /Contents 5173 0 R /Resources 5171 0 R /MediaBox [0 0 595.276 841.89] /Parent 5170 0 R /Annots [ 5176 0 R 5177 0 R 5178 0 R 5179 0 R 5180 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 ] >> endobj 5176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.91 719.912 150.762 730.926] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 674.084 204.789 684.988] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_92a0007f672a5498ab1b6ccc6a4a002b) >> >> endobj 5178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 634.234 195.384 645.137] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) >> >> endobj 5179 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 618.293 207.548 629.197] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6) >> >> endobj 5180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 538.592 224.655 549.606] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) >> >> endobj 5181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [319.017 538.592 355.868 549.606] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 510.697 222.503 521.71] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) >> >> endobj 5183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 494.757 227.334 505.77] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) >> >> endobj 5184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [315.333 494.757 352.185 505.77] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.082 456.899 435.074 467.912] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 440.958 224.724 451.972] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_63eb554461f3df5dc64a25f71891b9f1) >> >> endobj 5187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.369 440.958 348.22 451.972] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 425.018 223.07 436.032] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_3dea9d7548bdbc9a7cc8d0a04cdd46fb) >> >> endobj 5189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [308.609 425.018 345.46 436.032] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 409.078 218.796 420.091] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_ee4fe41274945f9e34009d2eb309c922) >> >> endobj 5191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.989 409.078 338.84 420.091] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 357.272 237.456 368.286] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) >> >> endobj 5193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.612 331.369 381.604 342.383] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 315.429 231.917 326.443] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) >> >> endobj 5195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [292.609 277.571 382.601 288.585] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 261.631 216.973 272.644] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dff9a101a373a634f3a1baab29e92534) >> >> endobj 5197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.828 233.735 233.561 244.749] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) >> >> endobj 5174 0 obj << /D [5172 0 R /XYZ 90 757.935 null] >> endobj 5175 0 obj << /D [5172 0 R /XYZ 90 733.028 null] >> endobj 5171 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5200 0 obj << /Length 4636 /Filter /FlateDecode >> stream xÚÍ]msã¶þî_áé'iæ„’÷íâ»K¹\.¶’´Óv2´DÛLdÉ¥:î¯ï‚x!H -!©'sBÀ>‹Ý}ð²¤ñyÿáó,:OX‚2ÊÎgÑù”~}†ÕÝÜžY÷¿šŸýõ#…_¡ŒÓóùmýsŽ#ø|¾üç„#Og8Š¢ÉÓ¢º_n§p=A÷ÓaÑäc¹*äÕUq[À½tR¬§x²¥iDè³xúïù7gæF% £\ðÛÙ?ÿ/AÐoÎ"D³ôü ®#„³ìüá,&T]¯Î®Ï¾7mÈr å.Œ4±~’!±ánô\]¾EƽÍÔ?Š yU×î42Ô£”Ä û(E ÎŒîã¨Ñ=Ž)">O0¹y=¿õµ‡ˆ¡,I YqûâêËße »!’ 骲–÷ i·ªÛyw|pJQ’%ç–¤ÇÃVmÀ¶ñà ZHh öÜ ŒÆˆbì–ô#4B Ï‚Óm³¥!4÷aç ‰áÒ¡ÞH•$(‰q©T[^+#iŒ0NÆXYúB+³qQ`—nË‹‹RŒ¢4{!.¬Å` ÖÑ#ž²0¸T[^÷ IŠ"Žs[ò§ˆ³0Ž­ÛòJCüè¡c;M ã´Wç1gˆ“0ž«ÛòKžEmϽ¸š ¹!`Œ2ÆêÒ/—ŽqÀ‡iÏøå}ðˆ2!†0è™üÕÿŸêb&Ü'opV1öÒÏ ˆi]_.£W„µI£Ožþ^L#2.{Øíe—FâÓÉ¥ƒÞÅ-6ú^n9]¦zTɉ£jÂx—+Šóæ¨`Wéãj,ä¨9GæRé`%š1áÔcï:š¶íÝœ „¿¹§>sÇ"* X»Ž¢¬Ýdvm콃® °<ÂÕ!V–¶À÷Çïà‡oÊPÊùX‰TíÓâ·³+€Ç)Ä)îàœ‚3¦j~ðÞ1=€˜@ñ)<óIÇFðFäãÐÄðŽœA¬€Çt ˆë¥ÁÊ­‰ãlÎ@n î` w >†Imʇ#ù«QOÌ=¶o¢¹5ôswDKizJ4ÏPŠùØpÂô›€îï#º…pôË#ðÃrŽòxlDÿÕMÉ›Ý'N„9%ÞÝ'Á2†Ê#(ôâý§iF&sGÄæ(áGîÓhî°„ °è wò…|ÞRGñ‘»k†d€k8¦ÎÉ14C4É8&„TzÊglzj„±¥£ŒeCQ!°5ÌçÁf˜ï%Ø> Ízú‰/.½ås½õ7aC›Q!¤o×#½!ܶôÜûš ÜŒ "¹¡JŸäš*-ÉAðQz/û©.ˆÙ„gº0DÇ`¡Èˆÿ˜…GbEt?|¾t C1‹O9gô³\ø¯8U…EðG/Íá nÔ Þ—kÇx+~ ÏQÄR<–ç@x®£'ÏYÚ™;ñ§ˆ$øü1"q6–çàox®ƒßÉsþ~ž;]ªÀ<ç±{ÃsÃv¯ÇÍ1ì 1šä¹Ã_Ç(Kuv¹‡Þ^‰Zzó8Œ¡7Ûa®™õ8=e^Â`NÆÒ[ièÍ_Ó›¿7\&#éí¥†cX-ê¬fFiÆœ!GWŠ3Î%Uøt_lÅsÐ ™ìîÕÅã¶|È·ÏòK¾^Ê‹j—ù¶þ†'ùjWl×ùNýäv³}¨T3›»šÚÊoOåî¾Ó<4~WÌî‹|©+¿íË)a“ÿˆÿå«bŠ'ëê¤;Üí¯î7¢êÓZ>×½-ïîwOSAõe%Ë6·òSv ‹Íj³F¦1 E®æˆu4›Àý;¸Ê¢Ž,«›Éêf*UíWÑÈÈ&ÏuŸÙ'ÜYlö«¥¬£*/‹j±-oŠ¥üšWòöoû¼*g²L++ÉbDõlÿèÇÆR¿¹kn• ד±óÞ߸¢tóê±KøS™ ¢T9 VÜà˜ÑXZö¡ÆÁ.07?uÝ=&Àt$e¾µJóÇÇ<Œ˜wró,?J0e…P@'åZÞ¨m]\ÔÖù{þð¸**Y¢«ütq-/¾ˆ*ù£pAñõòR~æÂ÷TÕþ¦×,Ö»Õsí7³׬lk[;Õ¡B\¬ªC1"pkJ?ú š?Иã:ÕpTÿÉu¿ôNÃùjé¶‹a©•5¶Û7—&œíÚ">IbsXÕæxWîʇò¿u$¤¸6fqSÆg¸(¶Û|—«ÂMë&®Í¶¶@eˆÇ¸ÅÂŒ+Wh¿ÞmË…°^XàIÎôk¹¾{#¾RÕ8”o]Á¥¢¸ÒŒ—ùVU\oÖ³jb˜0ÆÊêáB¸¸r;ÅPºØÉÒû|J"`6Ѐn¥\'JT·Ÿ7 ‰–k’ql>/·ù­hŸ§’ àS¢‹ÚÃÅ…T‹¸N@ò­,¬Û¶«Kµ#ðxOþ&iµ%`‰€Ysq%´¿ßæ+õû:ÔìŠuUnÖULÍŒd©ÉõÓEå®8ÝR:OÒÉ~½*e¬[©[µqÀçªñ´-wп,ÔóÄh¯®£‡ÊË5TÞ•b.0£"9ù~_©;;Yf’ÇM'ɤÊoUwºû|±(wJ¤ûâÁ1LÛá?å²X¾iOK`ª°­Š7zŽ’ï:³•mQíW`i»²6H(qL;äå¦PsžõF5#eQËN³élqŸoÁ8km@Á |rçrËÛƒ-‚Â;§ÖL½·G”oïT…+ëí6ªò̪}8m7(zãýÛû«Ÿ/>OÅáÊ·ÇY„¤(‚Ö¢ób]ÇÛ·X£3NZ—JÅ:¿YYªS³ÌšÕä•ú®~Ôôšr‚²,~UûT”f°&÷ïSÁœñdTRÂgÓÞ}ë8ŒŒP’²©²„=}ª‹ÜµEY ÔÍœéE*»³°˜/føÄ$ô€Í¦S°kÓÉÜ»éD*¨à•J%*ØRý‹¤/Ë „`f'Ëçz'kØ3Ò¶g8§¶tD&yh:ÉÀ§sd0¤s½5B0³ÍåóI½Íeé|Þ¯UѬÅz7©‚¯7©¼Â«M*Kx+]ér Šé`ž@“x­@QX3$ óØ Uï7L—s>+×z¨àÈT9KÒ¬Ôíd% öÜ ŒÂ’•g'¦É…Ö°O˜“} 2Å|€}BHeØÇ'•fK*/û¬aùö6ÿ&ÇíýÑ1Áe¨Ç£pC= 7Ô@°†z<Žg¨§ãxG?¥DrÃ;>É5ïX’‹ˆqå Åx8;-Œ5¼Öì4!6æÜË:bï=Roqbë|p>ðÏ’IÇôtÒé¢v’NÄë—õ?iáÄŠÅk’‰(XCD]°N"²ÀöQ©4y¥ÒDdIå#¢‚"òy„&¢‘61trÒKDApi"ò)ÜÑ€Â5y„Ì‘Ï5Ù Ÿ;UÚŠ1½<DpÍC^ÁÙ‚‹àxuô³BaŒ!µ9$â‰÷¤¤bêýŸ7â°œF©Üî=pŸ€šåàÀª‘d-Å sµýÔ^-›"¼¸‡[ÜØ7üt|©Ô£Ô`QŠƒË(Q9Û2_ï*y³>:õv¸¨³¯ õÃú5‡$S<¹þtù•~Ý-úi£~Óf<@M¥~ÚPui£¿Ã—Ò†O*M–TŠ6Þ‰''øûå·_ž…Ç­¹ÏÂãáÞÅ9ƒqné$8o$mÞàñäÝJd8È”YAºˆHÅh刊™’Y·r+?s‘Ò–p{"ŠMªìkg«õ$QOdê|Ù[ðßõ.y"³§rYÏþð¤Zl Y§N"+ÇCÞÈeù²¸­R÷«,WÉ­{ÕÔm‘#ê¯V²¤Æ\‰¬ho~/³Èd ’YmžM?äjêu£æ¨R ™¾³-—KÀpó|˜»XϦujÔ¢üW‘…¼£`]y´¶óG¤TEÊo²òßÈ$©\ÞpG,òRÔ-Ç«˜YCˆ¾µ~¸üüÈSrü‘‹"\Dí§¶µB40ÏK dêLÊÍèä±z¼Ei=\ÐY=\:Al›?WvòV¤Þ”k95MˆÌ±¥*”#í4Á(ê< ¢Œ"š<–¿×¹Òé:ÕÎ;Å*ë©NRIC&5»Î$²Y–ÕŒ&.öëUQUƒfsDš9fQp¾Žòö–g™'í¨>aÅõ“¹9]Õ<›deÖmoûòtpÌafwúi¨‚0r‡BÕîÛUÀ0?"IOºŠÚ™Æ0[Kåfì§wÓ ‚Å—ï>9¦?€îÍû¶­—ßì#våoí·©}DKþ[é]œà³ÚÃ5B§mqÏ!ŒÜAÂðÕ[HI¨ô°&Cà>ñ[ 芩w÷|úîs¹ˆ¿¨ÁÍÅôÂZÚ¢;Å}„µ¸¿eÂXJh¶¡d¯ÌP¢ â)÷[ Ä\¬^|qõázþñ ‚{Ÿ)4í…°…ŽtNc°¤6†«Wß¿øìÖCp¯Ø²Ça#ŠP’e–1|ïœaEŒ…¦·¦ÒÝi)–è°¥öŠù%…%$˼†’¦(Ž™±“Ÿ¦¸Î×ñó¥?`1É Á4½0˜—ÁXFØ‹ØÊ@)ÕŒZOœÃÌ,Öûb7…»vHÌÙñ·þû¾üàŠG©cõç}D_&·"¾.ÖÅ–3êÔE¯aæâÍò{µøNŸJÄògo#ò–Fò˜(VëZ±ߨg~º¸þ«¥Ë¯ÔOø{{¥ü~óûó]±>;ª´Ôó?ì2  endstream endobj 5199 0 obj << /Type /Page /Contents 5200 0 R /Resources 5198 0 R /MediaBox [0 0 595.276 841.89] /Parent 5170 0 R /Annots [ 5202 0 R 5203 0 R 5204 0 R 5205 0 R ] >> endobj 5202 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 5203 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 5204 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 5205 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 5201 0 obj << /D [5199 0 R /XYZ 90 757.935 null] >> endobj 5198 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5208 0 obj << /Length 3625 /Filter /FlateDecode >> stream xÚÍ\ësÛ6ÿî¿BÓOÔL…O‚ù–wÓsâ4vzMÚÎ -Ó1ïdɧGœÜ_»H‚$H);£Ñ‘à» üv±‹é$†¤ñ$‘ I¹œÌoOâÉ'(}yBÝÓ<žyÏŸ\œüô‚Ã[$U|rqm^W”HF'WDŠP1Ñ8Ž£ûùææj=…ëˆÜLgLÆÑ‹b‘Û«wùuÏt”/§4šc©Ž¨”Ó¿.~9y~Q‰à”\¡ÿ=ùã¯xr‚þržêÉ=\Ç„¦éäöD0î®'ç'¿VuØrå!%å]%«•¤\ÍÄ$aœÄJMïoV;M£ÿ€’Q>¥2úúyÊd”-vùf:ã y¶v4Ù|»Ë‹¯ön·É¯,Á¥+ùçÓóÓWO~tÄK÷4[lV÷x¹Z_mì“íM¶µÔwë|.®J¦»/Å¢ÈÖŽG±œaã‚Ò3JI*­"׫õm¶-VKÛ3¶:¼*6öSÜÞÁñz»htåHª—òv·1­ˆt’+Jm»cùú“#xçõ@I<«©;ЪÐôÁ|s·¾msæT“X³çV—$Cü8‹‰L¸Ïo³]ïæÛGm†ñ*{¨d”IÂ$R}z\'„ ÖU¯Ñ)' MêBÀTÀ|þŒeüfeÁ;_-v·ËÙæ.ŸÆ1›÷ —h»m$eDa#~ÛÌx"I’$“Y媎F<é‡ÑD%Œh6AôÓ {"‰` ÔŒ4Y/ÈjVDz–ò]é†úÈΖ¥Û,®;Nª|QÅ0ìð=þ±¤žyäý²8”†•ŸŸ½û—é‘N“‹DÑ” å'-Å W¡c¢¡õ|®ÕÈ‘oI¯Á|?m0ÎÞ”ÈQ÷šŒ$MùÉM¤¶ó+Žéï_½9›Š8ú½k;|XÌ÷ÚNÍóᔕu4h Æ €&æé.ÒÊÝÔä.m¾Ô²«,‡¸Ê’-;ú•¦8Ž~Æu´%ûÚq†ƒqˆ!Ì%cÊ´Ó»ÇÏžŸ8€E‘ª½`©x•¦àA¨x¢ïÇ *À‰†*Ä~œŒ¡š“ï÷-0øiu0L µê…‰L~C8©V5åS”¼Ú.[…„¶lA(xÒýÍPE¹*R®~=å¾-@ ÒäàP &ï—ÅÑx¡@¼Â¥hJÑÍ o‘B Ùà ÆÔ33B!ôCë¡ aœÞ;â(AjAbh½~K–€=Û!öümÕu-ÝÍ÷z|Ù.¿-zÈÐ}á÷:ªŒ ıÁ8ÊëôÇ…J¦ÒCPI0ï±Vu89{Ò±*5³1 Ò=Oø Ô ¡’•Q”;â0RÊ”p*‡ ]“Æ´‚Êù»§ö*5³1 Ò=Oø ÔíP¯2ŠrÇìU YH‚ J/ì8þÛóÓ³¾”CÆû¡R3*-уPñ„ߕ߂º •Q”;f¨pƒùÐ$ ä*%T¿yy€JJXÕœýP©™•–èA¨x•)å2 xIHªÀË(Ž; ™Y¶‘æŒ% K㆙B‰–wÏ_ô‚¡®êHæ„ÛÊ…’/O½¿oÝa„¦i&Hzœ©5ÒT‡H ¬çCSb2¦DrÚ‚QËçÄD@²Ççx¼,ù7ãlÏŒC[ÿ мø¦¡S"mz}ÈŒƒGÞ+KIãÍ8¸N¡²ÛòBCrÖ¤=éàhÙ f¼Á¾œtH¡wcyðœÃ(8n“â È6`QíÀí"¾ó³÷ïžæß„&I¼w5¯æ5ÂÔbKðÐ î‹~H¼wö>8~«Dí¿ÇP­6ó~Õ*ËòTû6+—rv°•×äý²8ßÊk 4-´>ÜÂÇè¹q |ĵzA9ä+CSŠ‚¥à«â7SG_l\Bž žwŸ× ,}mã-éƒFîÉ¿ßȆ]#O‰Öz¿‘ [mäºU–åéV[y@G`%UÙ7 dPGÞ\!imkDTS™nòÜ”B‰›u™/V¸¹í£Ñ~Ó£½Žx¾^@¨E㡤FÄÖ¹4òãÀàIM8lX5³rà¶èAËò„ßoYû†Oʰ¬Q”y‘–€tÇ8®qkÄP´Æµ†¬Çx6ÅI‰i*£‹ç³ÇS*dôÛ”ÇÑËN/0î†O¼ê.lYYG؆ƒãp˜:q…˜S¨©HoŒWxësLã(zÄž‰'œÄth¿J£º0q+)AtÔuŽŽ–„AtT2€ðPÃýôÂaÍÆÇ…ƒŠ‰Ú!• Lض~ý˳üEUéphJDƒ'ã~<€ס½"æÀLŒ¡Ý1{ˆ:0ƒÀDv:å&†\C]ÙXh‰ƒ'ÜA`8{܃œÖ+ĽHE¹c†¶ƒÊ9O‰ävC3Ààåó³Ùï½X¨k -Ù‚Xð¤Û”?°§– ¢“t/FQî˜G Ì$-@û°€cª–>>ôb¡®m ,´d bÁ“î0,|x0FQî˜ý¬#ûùj"U:Ø $k±ú†ƒdýìîo ãÅTÛˆUÃz7¶Äxm¼È³ò­ ÇÙ#¸îŒoçVìnY¢Ñ/ÖŽ9?m\\Ý­¶à¿Šlao¯Šk„¦ñüÀØ?ÿ»Cbó:DÐ< &8Û{ÝRÏ<òÀAôf•Þ"ècTöýï¯^w§PT /©¦íSéŽf;O(áZ7¸—-àÎîc^Ûÿ|½^-óÕn³¨Ëø8l)×ÖnɇAØ#U³GL-ÖÃnJ¯¼Ú9Ÿr5¡±ôý²thsó ŒŠê ÕhÄéž¾)©gy7¼iUé÷Íéi _˜d„IÑ”¡Õ/%Í çvE¥Ÿˆµvœ:ÿ þ¼}nG(5­ dØæ—âŒ1Á5Œ|fûWƒ²ì|î}ânqÐ\”ã¼å†E{‡J@Í!ñ’`Ñ}a†]Aa¨ØÚ"ó¹ ø/¶›|qmγ‘Š»KY°&Ð(çÊDì³>K<ó¨»Íܬpà+±&`©MÖmƒs4ƒ1š—ès´ß°*Û8€Â8hïçë"°+{c}"<õC3(o†f–ä‡ì¶Ð„›-~/Ù¸…+ûYü¿Ì¡áKfèW6 ÂN´wW+ûozŽ·=8—)„¨µ3-@WûÒûˆ©veÉ­^¶,+ë^ζëkùl|4ÎW „¸ÑÖ`ìiäpoB&ãÎ̧[°(~ŒzåBx¤…ðͰìéŇ·˜‚s’¨2|)B+ð¶Š:ªh|€Å~<CèlÝæ€ â¹‹ª­!¦Qö¥uÀ¬Ï¯v€7Ú²«âÚr„hÚ‹%aiÍ2æÔu“ a8èTb/†ªÐDè27tÃJäKœQ’$¬aSv(KXß•pë{¢ƒ̖7SÌ„7R̤tÏHoº„UÃ&–•i[âB̺Þ*çC\ÎÅØiKr‰‘7¼‰vã&JX¥{Ýœs?»©Ælöqj(C¾ÍÜf¿Kç¬Ú¦æõ³Ù««|é9?;în7wBÄTvÝz#Ðð$ðu.™)ƒ,ºB:pê}ïw»ÌçÇ”6ßññæ$1ãîëcŽ;6äË|™¯ÝàëM÷˜|°œU8›»¶ö¦böˆÇöÒZÎ>RÊéü84î«'îUaC³•Ÿ­¾|ý”& y yþ"±èz endstream endobj 5207 0 obj << /Type /Page /Contents 5208 0 R /Resources 5206 0 R /MediaBox [0 0 595.276 841.89] /Parent 5170 0 R /Annots [ 5210 0 R 5211 0 R 5212 0 R 5213 0 R 5214 0 R 5215 0 R 5216 0 R 5217 0 R 5218 0 R ] >> endobj 5210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [285.545 707.957 319.079 718.861] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5211 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 5212 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 5213 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 5214 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 5215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.081 210.279 370.073 221.183] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) >> >> endobj 5216 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 5217 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 5218 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 5209 0 obj << /D [5207 0 R /XYZ 90 757.935 null] >> endobj 5206 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5221 0 obj << /Length 3967 /Filter /FlateDecode >> stream xÚÍ\ësÛ6ÿî¿B“OÔL„ÓÜÜ×qzk;ism§CK”ÍœDéH©‰;÷ÇßâE$H¥{ãé¤&%÷vàBd‚á?2Ið$J˜˜Ì×'xr­ßžÓ;ƒî™ÓÿÍÍÉß^1x %!›Ü,Õã!A‚’ÉÍâç D„Ogc|šW÷‹r ׺ŸÎ¨ÀÁ«|•é««l™A_dÅ”sÙcÊ"Âé¯7ßœßÔ" ¥ÿ9ùùWt-C—Üš¦k_èŽëvß@1â3…϶Z)M€´Æ”qÄ”Æ %ŸË0ÉH°È¤Ó(2é5.Úçp¹q¡’._gEÞ3]廇i(|˜ÒbÑzt¹Y­6S*ÀGwº©ÇÁSŽ(ÚAÛ6-Ó5¸£ œø”â`¦ÜnxøüëŸn·K?çÆ©ûõmV¾è©‚ (ŒŸØLe Š ž©ðW¢æX¬&X횀B¬Äà¤n—ݾ¬#» ?Æ¢×ó´JÝy:R$m¸¨8B fù8š Œ‰G™Å£‰Fˆ‹¤H`ð0&ÒP—gž¡¢Øb(Šß<¡%1=ŽÀƒ˜c °¥tÐçª}‚ùG_¶ B„† ×rÇ!8ŠêO‚D€%ÅIŒÂD'Ug/½CÁâp‚ñ0¿À Ä‚-¥½tÔ‚G-7€ÁQtw1øÔâ)¦(tƒ8DŒÅƒ篧 n<•Á Ù.Àò~0ø¦–ô^09ò˜†'ÀRÁa2rK£¨þ„ý™Hj€÷`I$°…ÉN¦ o§œœz0%'i#Âú å°Rm%|rÕøzH¹vèb+±ì´*ú 5Ž Æ…‘/•H÷+ Õ*vX1A¸<XÍvǧו9R=VEB¢BR}, :vjìf#]×R¡éŒÁ:óma÷ÂòecöAX‡QxlÇÊPÏò~Y ³cƒÇƒÇ‚Ón(á1àühC öÖ•¡ƒÇ 2]Öî«l‡úv8FøæÇH9A8–Lmé L7ˆ£&/}÷æÂ—PDŽf§1\wKn¯ëv$ÿz×ýî7Qr4Gõ'œY NÀÉe–‚Ã$4™å͇ËsoVÕû©8:ðG-ɽ8rdÿzÝ|xtV9ŽêO9«¤ Ât0«_ 5ü…ÞO Áék/ =¾Lq˜Ž¨– ^@9JŒ‘S*+<T£¨ÿ8§ÑB !äó!PQŒh¨ó¤Ë÷ÉîŸ}zÝØcÀ°¥´†ŽÚ_ CÙ"”¹Ë™GoX­ûÑ;ŠÕžrhŰ~¡d½8B Ö_±.=ß)AH£Qö®Ð{s ô¶”ö¢×Qû«Ñë1›@‚%5zG±Ú¸AŠ=­9À㉡¬€'° õªîìü>zú½/ÃŒg½ù€ýÈ~à6Âû–è¾ïõ®ðrýPkïÍX|ôƒþ(ºø=t$/JÃ!(Eúc¨N­^ž_y`$'Ñqx¤–ä^$9²=’®^þéo £QTÂÛ&ù÷G@ÕÙõë‹oL•w«™ø;¨¼•ößïZ•ÌÕnSÚÚÀÜ™ íʼnå1 UŒ0G>ÿXê™CÞ]­µ^©\á¼Ú–ësž H-¼[_z É0CAeÁ‘˯ڕû¹5‰-òÞÎW¹©¢—F¸†‰&+¾ SSN æ‹[S®gƒ,òÌ*é Me9Ü«Ù!ëÐýW€{N+s¹)ºÆ9Š!È2ø‹Ã蘱 õÌ!÷,›¯0v"9&ó¶µ Í0Ë$F' –µ½™¬wU®®nÝÊl·/å©HhP‘HY4Õe¯ÂDP}ûÂ)ÜSê‹¥5|fO=À<Ш‰µ*p`ƒìpõ£Ì¤t+ý{Ëg¸ùA[g ‘'g¨%´~‘ýÈ ; ….édhh: ŽJHlóË¥üBl3¢ò°À¹«“ éIR Gçp!ÇP;ÐØe ™#©‹æ•ÏS1p×õ¥Œ¢ø°\׉òˆð€òˆ2¸iÑlÐWÒË ¯\o"5):1 N ˜8 4c “Ä¡F.4Øh¬à }ÞFQ¤…2…nÞ¦å.ŸïWi©ïm—uÔ…gêÛ‚q¸È KÈá~¿5ïØèvaÈŽÊ> ]Ý䤑*(ÖÿÕêC3M"ˆ+Ñ0š¢^4[šchdhÑÜfèC³ËP¡YDfäEʶÊÐÜe ÒP†‹(GˆÔ[*ÊÝllÅ|–g¸4ûÔÜZ‹:m•ÍŽÌ'@æjΰ˜kxk$G¢"ÒÀÀî^]b¸wºBI;d2YT€–RçT!N¶ßšþgúŒÝ=d½ Ã3ó´Nm`¹a¨MòÂÀËWzéuz¬¨õŸ*“‡vY·Öƒ¨U'€±£Ç¥,õÌ!÷T}4_ÙåÄcßÅ!V5#¦Ž¡É& ORCÚA*nŸaÄí3Œ2CÛ˜9;Ÿg[OæPHKêbEŒ=Û5 òäËö{|Ïë‹ÆWgyŒ¡žz™Ñr0j—g^ä‡ìÿ&¢9ûø1«B}ôæ„\›¹C±Ó‡{äRØ ˆ\ðµ]Ö;TïE Öue†væ+>¨i½JÂï“r—Ù*ý<…ÿÐL•ÕC6ý·Ñ#ácüÑ×'ÇAöý½k­gƒOmQ‚™Y¦ƒ:®© #Àó¤+éF”/Q‡Teÿ®ÌÒ]å«Ï¦bØ1<¿|{öÏ.gN©©ycµ¿=¬p%[뚯1$úöÕùR¤woTU™ç0§™[î×YÀÅu¾ÔrÜnd Wz—Öúð,# c?ø!bQ˜~¼á”ß_¿}wuæYsÈ£ë-µtȶp­= j©çÚÌx‘®çˆQ]𯉈Hú%r7ùì)\@x4µ¥k’=¯s|Ôá·*ó,»aìI½h~þúêü• &IË>e›»OjY3Òúµ™çKýfƒ¾¸”³=ÝÚÉqqñÜÖvc”\†á„DÑ(9£ õÌ!ïÆ¨Ö+UàØÎÓ|[ý‚†¤#…€°lHÑ®Š44ü[/r†’A¢'d¢§†Rïa¾Érå$Û>"¸®XßÛÄÏên,m¾ÐFíü¾Ï Dy“¦mïkh†9Ç2© Ö…÷ m„0µgJ@¸[}ô¾½8Fql§H-ûŒEa0ß—%ø¹y oËl¾¹+ò?2}«sV¸8è^\^Ï ;“M/C ½(û½‰]GXJ!SH¬<ÕÇ:‡%ˆˆPhÕòé y§Üƒi:5ûÆn9V3û[kØ3®2Ú.¥oXB$Ëå…ÖÑÖ(Û ÑÖ*f%÷WÕÏ8Ïôÿ°ÁÒ&Y©™Ù[àV¦«Ã)YäùÙ BCHéâÞßåpú»@ÂúXýýã}Ùç:kdG¸*†pٽ̶Y±Ðç1×óœ°üUµE7`\–ÞUšâ>•›‡µ-±ÜnÎÌSU¶ÓM¹i;e6ÚsW’H 0±*§, TúÒ2+¨WOò·HîökR»‚ª½¥GM6)óÜüø®wŸTsjô^–ïXÔ­4Â4ê ˜µ³ü}ÌŽù:C=sÈû‡ÎÐô¯Q‡Á…%hƒy-†f˜%LÅ„% –z­R½èÓrÈ{ü<­šš.KÈgamk_cvDw ‚¨MŸ!n†d›Ù¥p¸½Û63[ÓƒÙ¥óûlÑq€p•ÿGT:®Æ/ËÉ*þÄ>£ÏÕˆ Á}úÊ„Œ„âñ¿½£\UÙ%iª !{ãæ„ wi¦o³"+ÓzÔ:Ðéà÷FÁ·víÄõ’¼ÀôÃÆ°˜ci/ëy!Ýz-ƒÙ7æQ#Úü±‚—›ÏwYá[™wÍó?Äím¢ endstream endobj 5220 0 obj << /Type /Page /Contents 5221 0 R /Resources 5219 0 R /MediaBox [0 0 595.276 841.89] /Parent 5170 0 R /Annots [ 5223 0 R 5224 0 R 5225 0 R 5226 0 R 5227 0 R 5228 0 R 5229 0 R 5231 0 R ] >> endobj 5223 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 5224 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 5225 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 5226 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 5227 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 5228 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 5229 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 5222 0 obj << /D [5220 0 R /XYZ 90 757.935 null] >> endobj 5230 0 obj << /D [5220 0 R /XYZ 90 140.241 null] >> endobj 5219 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F48 2408 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5234 0 obj << /Length 4237 /Filter /FlateDecode >> stream xÚÅ]Ü6î}Å /ç2®%ٲݷ&mÚ-ÒKö.8´Eáõhw|õØSÛ“dûë)¿Æ›(A0E“I‘¥›þ‰Mlâ(öSmòÃU°yè×W‚G·0¼Œ¿¸½úì•‚¯üT«Íí½ý\ ?’bs»ûÉÓ¾¯·"ïCÞîwÍ5´=½•Qà½*JC­7æÞÀXâ™êZx9B“@*ODñõ/·ß^}uÛO')øýê§_‚Í&úíUà«4Ù|€và‹4Ý®B©¸]^½½úgOƒà àKk*~*h„~/¢úiƒ,¤ò}–…”gY™ø*Ò‡ƒùYÊhº"¡„Ÿ„j3 5gÈ8ë •öŽþëHîjú•1ý¶]sÊ»–:÷uC “嬛úž~OÃïÃÔKÓ”y]žUë:U—UQ=P?«è·8d¬â¬i²ÇÖŸ-ž%±/dô„´ÏH—¥Í8OJ{a/í5†NÚ†NÚý‹×"òLIݲh;ØVR›­~*bþM,“ïëÎnéuû¬Ã–ò ÷ÛÒ(¤-v¦1;‚ÃFEâD@ñT ‘¹ÏP©²k R¨[Æ«è‹ T,A³ŠÙee[÷4xÌž¤µ-D·K PÁ~‘‡ÂÒ ã96S&0;A‹üTf õ­4€âØ# )ýì"°äÁ Ýu{Â*S¦~’$Œôsð_Ù]mZjUuG|oòßS3ç™(?Jc¦vûê‡7ßÍ9ª“bœßÀ/zVE°Y7¼VRVA¸æ¹xxJ¤9²™8ò… Gru馎FJÖƒÛÔý²…¶y†R"¶BTQä§¡¥tâW̶Ér¿õ(•X¥"8¯OMKÀg°Æd8Ó"§î]QeÍ#¶ÁÁ³;ŒØÛ›lbðêâ|ðƒSU$¢ò‘ ¸âÆÆ‰CÝÞg ã@w*©Sžµèv¼^q^°ŠP)'¦´UËLëQ­ðS -žÒ·kâ9ˆ 7(²©û’‘ðcpZÄ~¨¹/hãÍÀ‘9ìí}æÈ¦$yúGظSæ`ØRyO\'£¬3L´¯9bH’m%‘Q¸Ñ­€jPØÚŽ!PcŽi CWÔZ_ÖÇôJ“µm  _§ÑHóu…ž,UÞ»—o±!/lGÀà-­ù9de]C*É/8ûh÷´ªÓáÍG§–?»cV<[œh u’(5Ö7_¾ùõ‹×¯o¾ûzf(ðe(Çs˜Z ã¬r–òc¥Fœ{/e:’I‘XÔ»½AuÐÈ«Y³n¦¡ö‚®[!ß _fL*+;ÓTvobwlsŒÒ8n¤(nõPȇQçíÉýa“¦8÷M.ĦÂ{_Ì\‚ˆ”¯ÂpéÈב~Jጽ Ï>!ù´Â!œé8ÏaªpÆYå<%„œŸÓÒ»}Ýj^PŒ 1Ê€ðëš~ïxü™ýüã>ƒ½ivÏøëŠ±wŒM! éS霈 ý8–¬"šcQrºÖ€ÓBK™êJC²«ùÆO)ŠP·=î\KCb—½¶€óL jÀtšï2Æ /»[pfFÛ ø؇¢5.µ åPoWû §¸H¥øò1s0>_y€Iêià|âùÙ"€ 3_ãäpÖÙ9ÿ7`÷=;í)ÏŽ!"ó¼¬cÆ^ç>!é4]ìûüa: Â"~bጳÎ"u$#ÖÕRî#à,$ä_K²ä™ù5&˜™b€(ôv§cYä™u£8°´ï1†&Ý€ˆr¨1ÖâÇyÖbxFàÙq ËssìÎ#Xžs‘øQ FØT×Vº“E[†Ý‘¤+¶|¿lËŒƒì’˶|™Øh‚*øÔ€¿6'gðƒ9=araêÇzu~[‡³Î:’¾ŒÂktË‹&&ù×ÎuXÙhgÞYJËNÇ‹¸œ\3öêr¦$y²Õñý%IJ çˆdUŒ²ÎX+H®Ó%9ŽSú€"ý§-™±×9OHöKn/-Y.U°¾f‡³ÊZÁÖÓ±Ý"ÓÆÖG…,Ê ±üÒÔeýp2}Ýk2¹§é§…Ã^æ”$KÈßÏx+üF® Æá¬sœbÁˆq¹êuÖŸƒ8%3Å”•Âé9òƒhr|ÂjNèСq|ÿÓ/טíq:… Ö‚BW¤¶Í™Têj(#³ #_ªp&)¦ôOX%#oÏØs£\9ãÆòb=â<Ý~Œ²Ê/N}¾nÀï\ :©úó¢ÌP¤|`±81jï%d·æ÷>ìI‘p&…90E2‚/MF‰jź>Uàw\ö-ÍHñ¹Ê¥²ç6A:µ¥]þˆuÚ—vŸ»¯wÆÑ§вt›¬3ÌäÎŒë͘†'Xšê\:WB'7Œ0ÄôbÀŒ_ ¸¥’^ ¸kœúäq•ÇÒ!»[+Zx¯nnßR‹ŠkÅ âÌV´;„êq•X ¯,@2­Uô²¶=°Â}®Sh:L¿\ÝZÃ:t©¢š-ÄZíÇì1Õ­¥WøÆ_8±Ò°øBW ØÅÊÈûÀÅ4,ªó/ôEA¬„qE?BÏÝ d‘÷_[N±T`Íc¤þÞ®’ +‘öŒÿÎ’g>;Ó™œìçyD®ÔÔÕ±½ã¾îz´fa‘•9uMQÕФXž¡=„¢»Öpц à)uS[ä=d%—ŠL¾Ïª¢=ôC\ø•î`aÅý#ݲØj?ߍr|“ŽKÆv˜‹g®t…ñ1kGË#OQ5¹ˆ„ýU"FÔü…ž•'K †é>Í'‡ÝN5ï².£ÆäXGÝœ®/œ«@WÌjÀ [aé9Xµ äO{ ÈZúš´lvãž/¨îG\DvtIÁ T‹6?µöԀݽ3Ø‘7||í^.ýК’ì±uáõqìôÎØEà‚u|&rɸ”Và¥Ònºƒ}`+éa¨;E—-5÷Ùµ ÜGrg sáIBËN~Û®níp*»âXrÏÕÐ!D…Þ ƒõf@uüöhòÞ†‘3ËxÁ… 7ˆzlêvEN). ºìß,~…p~ uHµ¥_¾©’¶~‰´ê¨ë{Óíëynw<Æ2Œ€G®ó‚j…Òy´ù"G·¨Šn?¿7¥…ÑÍÄø4¾¦ø³7z»ÃÑÞ¨€º`&¥±é ŽdªlÃB–MQè´ \¹w'Uìƒhàt¨ßÌ)FÕSãìl@Ù†± ÀàYöŒ/¶h)CöQ±ì:“‚œµÀíËÛÿJ ³5_ÇîŽ°ÊæBdŽÁ q&v6&ÒÇYMo‘7Jj?ŠäS9,!oØ µÑÁ•Î~*cÖ³3$á¬sÔpèš°ìë~¡½of>Ç9%¬[Còékç-I®²I¢m¡k@”;Öa¿uÁn Êg#á‡q<É4p£ÄàY²·\E=FÆØ]O#¾p ²¤¸>ý ÝIÜ_³Æìãá¥8tì‰Á ½õǹ"°íc{_0¿S{ÊJtf+–®%9éŠ)gÐÚÉAç  °‹Z‚ï³ãÑTÖ#AoÉjjžg º-%’Ã:ÚÚÎáXÐv…ÍL`Ì9";Û>1É'|ÌÀ“Ø@cöicȪ…%™¦±ß*E1»>•6À„®ÈNCHdj×BúA™¾Nž* ;ìí}ná’¼©ZÓ]¬ÏàI2IÇ“˜n.ÆYg‚×zÄÚÚ¥Â{>ŠZx[Mž—EdÃ"ØÊ;øÌ°M+ª{:˜!Ð3Ø<#pfŸZ=œì𧾡 ûö!í>%ýë]]‚Æ Ë»a8V½F€ õ1Nt]Ïð•ïàË…K5€µü Ÿj?XPÂNTÿÀ±¡mǬhtϘ½YÏSÞ•` :¥ºi(}Åýó6?ô?q+*~G>ˆÚhFýJq ¸9§ýÙ+KŸ`5òªÅ‘*9ãÄàuö…²(L3TÃHÅß`lxÛ*àWöœæRÆ ÔbÍ\3'ƒ: ˲û5.„)ì‡õ9Á˜n®Tú2…Í`…ìÉr$coèóm6!y9l*©0¾ŽxO«„²Êƒ¥RbÄph)AN\ýÃN‘Üë,¬€Ôõoýû;Œi­{¦ˆ)“8Ü^ã±ë=?‰J’Éa¨Îyú“€Íô¥ô,¼laWD¿½Nï‹s""õ£D‰ Å2$ÂâÝÎÓ5{j–Àaì#3ZWާ ·7R.€ýÇy}8‚ šV’ð“³äŒÚË}r¾1Î0¶àhCÍé(4ì™gÕª“ÆðˆÐQŠ }¾³Çæ±<µ ¬è‹d6lR—2§¼³‰t¨9£cW<PϺ[Ç„¹Ù#ÙÎçAú±%¦yîŸ èó„(åhÞ9^8Š6óâæ{P¼Å¿þ •çöÍhkk´íßOݹðµm,7Õ9¥Ašk‚^ëÊL®¬Ýë³´_‹…-åóŽÊ9Áÿ½`Š ¢/ëæüëük¼G<|X: „~Ô{ØÅ«©m$ÚÇ/ð~|»0QûWÿ3 C}ù᥂ïàø9¬<Ïשb?˜ø¡?T†è†J.B,?§Œ?ø¿ª;ÐkÚ—¦ŽÂE-ÇëŒ×'(?q‚”,Ƨ*ìs±ZÖÉÌ' ‘.úo ÍÝÚøíœpÏp°Q’ëà¸t‡­»‹J ýJƧ%òhüFXË¥w¡]_*Ÿ| AÈÛöÂCðÁ•‡8Z‚4ĘõôJqÖ9êÈ>²ì3 íªÆÚ•Ÿ¡1ðËÐëïš =¿ð”øH¤Ÿ(!‡½:á)I{pÏîs0mó×59œU– Nf1—‘=ƒC`¼aiÁY¯¥VÆ¿‡“ý3Í•úe; ÃÔ"ùD19ìÕ9OI^Sé¼ ×MÉᬳŒ¡]6%¾ت„ðFÅK[6ü¦~J“Ñ :÷M} —PÏO0饷½ÑèëÓ2æm/E_”N7вɚäǘøËo"¡97a)ð øfûTÀ!oÏØsk´{¼»ƒ9Ì8ã½/Úï€óÔ|e•_"@wÑßùú–ŒtgÚ¼)‹j"mû°„Œo¸|JD'·÷³‹ÏÀ“ÔþâIÉØÛúÂë˜äÅ÷6è 5yO=$ã¬sœZ~ï@ÇÙqÄ °½ZéÏh.1jð†àœáòWü»2ø!þ0m‘§üÚÖ(^xS†þkñÆWAö×þþÍ^‘krɃ¿â¯‡üW|Ìåöµ©LÉÞÔ³ `aÒsÏf~p‡Û~Dúy ?WÿT XòöHçþþéÝË·¯A 7/øS?ñ%_ñØ—õÇLJy0jA<ÿéÎÂr endstream endobj 5233 0 obj << /Type /Page /Contents 5234 0 R /Resources 5232 0 R /MediaBox [0 0 595.276 841.89] /Parent 5170 0 R /Annots [ 5236 0 R 5237 0 R 5238 0 R 5239 0 R 5241 0 R 5243 0 R 5244 0 R 5245 0 R 5246 0 R 5247 0 R 5249 0 R 5250 0 R 5252 0 R 5253 0 R 5254 0 R 5255 0 R 5256 0 R 5257 0 R ] >> endobj 5236 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 5237 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 5238 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 5239 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 5241 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 5249 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 5250 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 5252 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 5253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.044 120.772 163.578 131.676] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [297.723 120.772 327.94 131.676] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 5255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.121 120.772 478.338 131.676] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 5256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.144 108.817 380.139 119.721] /Subtype /Link /A << /S /GoTo /D (structwtbarr) >> >> endobj 5257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [99.793 96.862 124.749 107.766] /Subtype /Link /A << /S /GoTo /D (wcs_8h) >> >> endobj 5235 0 obj << /D [5233 0 R /XYZ 90 757.935 null] >> endobj 5240 0 obj << /D [5233 0 R /XYZ 90 547.559 null] >> endobj 5242 0 obj << /D [5233 0 R /XYZ 90 517.735 null] >> endobj 5248 0 obj << /D [5233 0 R /XYZ 90 471.843 null] >> endobj 2211 0 obj << /D [5233 0 R /XYZ 90 256.714 null] >> endobj 5251 0 obj << /D [5233 0 R /XYZ 90 242.144 null] >> endobj 5232 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5260 0 obj << /Length 3238 /Filter /FlateDecode >> stream xÚ¥[mÛ6þ¾¿Â°6ºâñU·èI¯)RôÒ^³À}HƒBkk³ÂÙ’O’“ì¿¿¡8´©7Êè!HDKf†Ãá¼Qa+ ØJÓU¢¢…Zm7tõ îþxÃði#ïù뇛¿½ðѱX=(%bŒhegk¨ –„QIb™¬€1fujîןð›§]Ž.è‘‚;¶Ùã±>Œ8 NÒ„õ8VÓA‚ü„"B Ÿ_ÓÖ§mÛÐÕëW` ùïß¼}xÿöû£®NmQæwC™¸Ô$ÕñuÚpàt‚Fºß)åmóGg»?`crÌâuk7F€¡ÊT‡4ä !dŒ wF zýœ5V¹±y3:Ö•±«ÏÅ.ßÙ;Æ€»Aû\ üxªU“#•,q=2,™*˜9¿N•𯀠™Æ§¼ý²:C„Fž½åšÍNkh|Lž$Öš05í/&ò@có2lɈç„Ò´Ïm~—!:Ìw@ÒðkjòvΚE8]˜2b¬UJ°éëb¿‡í³uÆpj«CÖ[ðŠ/ön›ýǸ;ãÌb ίlë _¨žìMk^ t¦;û½i¬:'šïfqǬ&§}V#ÙìÔå'û°h‘le?æÖNb+¼o&Oužßn ”ílD{|/`J8‡)§ á‹Ëg±Ñ<±x>9\:#ÅìÚÅ`ÜÑ<þÕCDˆkˆáú­odÌÀÆ53:œšÖŽÊ YÛæ‡ck÷¼Ñª¹i„¶£ÂÁžZ 2ôd‚AùUúsØÀLúä–M_Ä’HÔç!¦qLtšzL­û4cݧ2&¸ßç;bM'öˆ%$æÖÖÞU]’ h=kÇ1‘ Á3Ž5QÉ¢£@täÁ'âcŸ$jëX<Æ}!¦ÌÆ ¬áã²ÇÚ$@C~iLR®¯4¢Ãœ$qÒíì¤9g$6«˜´ÃYs®À1ÇýI"¬>ø0LŸ7œ®+t Q?!7†¦!Ûuâ›hÖzü4sž\Ç¢*í5϶ÏxçÉ™Þ8\CS’_¹ÔĤ³¼q*(%è,Aå;L˜¥L‰¤}–˜ z›î¬Ht^0{PöE?,Ôy{ªËQ0‡4„20-¦ˆNâIYy˜Qµ•j0ØBÊÓŽá¯Æ²:;äàB›ûqªÎI"øçñþDìH&ýT=! Lcdø«µ0™úÑŠH%/f8vZÊ$d!… d$MoÏJJ¨æ=i¾¯ªzW”]aÕEª:+HHÍfªJŠŽgYLW ¹¨ô˜ï« Wë/f[ñEwv^òOì4BÜÙ—NÖ%¼ YŠjíFr]~i-Ж€ƒ;ÃdÇæ-ðä\;jL½ÍM[Â#R‚m:o‚Z"ŸX) k›ˆ¥ÈèȃOT3}’WdO&rsXõž£Àb¼„&“}ÜüJÆD$<è<ÌœP&1jXýf’qZå¼s±=;…!ß~ýn‚ÃÆïÛ¬=áö²^ÑŽ?›­•íOù„8H²)æÄ±˜ÈM¤ÊPíÅBÝæƒ;ÎÐ%‰U˜Ÿ…,°Ó$6+ì±£÷°»À3¿?m·yÓÙ¹2“C.ÍõšŸ+b–æâçæd‡sõØ1œë»¸€Q^HIœÈ>ßù< Ña$çS¦9á,O1a–Z’„Æ=–Ǫ([Wú3(%v³«,uJ”báUö@³«ì0 «䇫fgWÙgÇq•ÿé9}‡*ÜÛO]2RìCªH9‰Ù’*. yU fI!~NAv¨ @U¼uù¸qhÆ8m!A·k.×p%Tf*<ÈY¬“~ctUûβ±¹ó¼»q®"Ædâïã\ÒîR.v‡+d/»¼í–ÅþÊëÚ1;€sÊ>å6+*Ð]Cj‚õy9 ‹¢”¥¢Zœ,µè:òàã9 yÙÏ÷÷ éH%‰0ëïK0 ̈ óUPïAŽêó-žPCeöêºsú˜(}à%ª¯ÔƒCå’D=€ þ°âÌ¥*2¥$IÒ F&,Á€Ð9Uä¿B;bœ0•œO~üÁÓð˜n›b÷õ’e›ãjBª;ÑÚn‰õBŸ+‡àšºTF[¦aè, ¸ (Ò\ N…ù{]ÁÒæ§å@€ÉÙÀþV©F`¶o§i í¶òž|të ÞÂ3 —×B%Ž«‹”$)•<Ög/ÒýÈJ¼š\ßMYo®<±×¢Ü[“¯ã+¶ƒÛè3/ïÁ‡aY?·~™Õ1<Öy“C1câA㨉€Àå"ÄÈ–¬lp iª,:òàVÝ'9Ÿ/˜ƒÀ㩃Â+MWR-d¿‹À… Ò¹`ø5Ñ.ް ~&°”)YtäÁ'2¥>Éå6‡lŸCÀï 1ìh!&ÈzHȺ’H¤Ê v k0p¦y…¦T¤I¬¯Ô”CÅ’\îý ˆÆ1Oƒšr˜0k eö€u×?k ¨Û¡9þx)ð[±Í¶ÏNoFðmµÇ“.®,¿WUžÌ1Äýï¾³W×n7pÙÐæþ.¯ “ï|6‹Ø¶ÈóÑ³É ]2a†Ïy¶ëN¼eºÆf¥i}1CðH/²—S3а‚‘páD'KŽÁ‘‡+ºOÐ-ñîël\5˜²¾Ã¸Š˜ g &IµmÓ˜S‘çªÉÃÊ…e8`ËQXJþ2>‚v ykòÌÝìRtI`m?0c{0«×ÇâkÇ›6û¢i1µXs ÁÁÃðpÃÂÃÌ5,„TD`ëõʆæçùÞÅP„©†¦ÃØP*éBŠPN55%5õDH)IÔojª®äð%zw:<ºb³Â$u;htbkñ‚°ÍâûGvÖׯjâÐÙiì ¬5Üò@óZEÌ•Zï%ÂNñP ©N±/Я~ ïN'³ÒW’Søèä'ZKö¥šÿèÑA‡$çÓnÎÒÓ8¨‡ ³ŒáIÜcyÉYÎ¥h>{Ä-DÒ•²×©Á¡ƒ2 I.ç,"{4Þ5 ‡ ³NáqŸu5®?Ó˜P•\;gD‡H.gª!ÍÂ&à0AÖCBÓŸ¢àŽçZ)¼‚šõ c¸ýeÁ%¸ªï$Qñ‚@ˆ Ô?èÖDÁ¦óz[îìgræS0nÏ?áŠ'¢”ù…yà»aóÛ+„Àw½1s»À«=–Aç`î7BÈî˜çúÑ>³Ù>ÖÐ/_´€|îöÑæ0)&úߨ¸.Ïí« cl}‹ýŒ¼Ý’»A«Ç¹¿ˆaÐx|ÊqÉÉù+Asþ•Ž;XV}Ùá¸ÏïúÔ`:5¡.·pC”Èýö×[›žô«ÉóËåL—+U¾ gØíó°=Hº—“tQÁŒ€\Ñí«Ûo@×Q u¿É˜Í5bߎ«òŽ“€T>bpKø_ÌÔ¿ÓÈ%ïv0Ó¦Ú‹±ÍsÈ 8xt.@¶Å„Ø¡#>ñ¡aŸd ä$æÛˆ¤Ï|rf™@îÝgÙëâtçi¿;Ÿ%Î,8“$‘W.ø;»àq9H·¸ßØËÀ¾I…„ÁE0ö0s©0Óôœ _svb{öÉC¾SgwóÿÝ1Cáö¾šmï;ÌB{?È×?Ìζ÷}vמݙ”RÊ¥¹^@ósEÌÒ\CüÜ\ƒìp®»kÎîz|—Ïî‚" H.ŸÝ'íÎî‚,ñìÎgyÍÙ¦+ÉšlíP oÖú$tÿ±Â|VÊ´ï bðK;‰ÈÝÈûc^æõå» 6š¯OG~q.TÚ Ó÷”ß jqʘ;£ã—Hýïïßÿ Aýík|•¤„Ÿ“ýîúêë˧qÜ5­Ð±zþ]*Yâ endstream endobj 5259 0 obj << /Type /Page /Contents 5260 0 R /Resources 5258 0 R /MediaBox [0 0 595.276 841.89] /Parent 5286 0 R /Annots [ 5262 0 R 5263 0 R 5264 0 R 5265 0 R 5266 0 R 5267 0 R 5268 0 R 5269 0 R 5270 0 R 5271 0 R 5272 0 R 5273 0 R 5274 0 R 5275 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 5262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.651 707.957 133.867 718.861] /Subtype /Link /A << /S /GoTo /D (structtabprm) >> >> endobj 5263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [248.9 707.957 324.485 718.861] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) >> >> endobj 5264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.896 707.957 513.996 718.861] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 5265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [89.004 696.002 114.119 706.906] /Subtype /Link /A << /S /GoTo /D (getwcstab_8h) >> >> endobj 5266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.012 696.002 156.199 706.906] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.23 684.047 166.831 694.951] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [330.306 684.047 365.493 694.951] /Subtype /Link /A << /S /GoTo /D (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) >> >> endobj 5269 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 5270 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 5271 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 5272 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 5273 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 5274 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 5275 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 [166.396 391.781 203.247 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 [310.773 391.781 347.624 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 [379.534 379.826 418.597 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 5261 0 obj << /D [5259 0 R /XYZ 90 757.935 null] >> endobj 4944 0 obj << /D [5259 0 R /XYZ 90 454.551 null] >> endobj 5276 0 obj << /D [5259 0 R /XYZ 90 439.981 null] >> endobj 4945 0 obj << /D [5259 0 R /XYZ 90 128.323 null] >> endobj 5258 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5289 0 obj << /Length 2586 /Filter /FlateDecode >> stream xÚÕZ[oã6~ϯð ÄF#–w‰3èC»»S´X´ÓI 4̓c+‰Q[ÎÊö$ù÷=ä!-êF{;OEˆ–?žyn¤Ù„›:ÉUNŒP“Åæ‚Náí÷Ì›Á×Yôýw7_0‹-&7nºfDq6¹YÞN5ar–1Jéôe±{ZÖ3OÉÓ,ãŠN?¬Ö%Ž>•%|WLËjƦ û¶ \L™2³»›/þusÁ ¨„¶üïâöŽN– è”SL^`L 3f²¹\øñúâúâ—# |/àýŽŠ‰ÓJrA¨VG%‰$Ê+ºªö¨h|¿|ÅñoTQû(óõY4´µ|$p¶¤*˜ƒ˜˜§DÂC®f™.»}}X4Œžë Îc²™—3Âh˜÷¥ÂþˆÀ‰T6(èg¤l 0¨ ‡¥/ŒîßžËZš(“w”yÚÖÔ'Ìçëý°\Â(¹µÖ¿»åÅ›Yð$ ‚M‘±œh.ƒ†vY1Î#nUìh-E™Lp6­Ëý¡®vøa^ùg]Ïßp¸}À§1¯øà9>WÕråöµ'ñ°­q°*=±õ¾¬«ùÞ\l·õrÕ|®ËçºÜ•Õ~µ­º4îW;Aèt?¿_—Au§N0 7êj3´µ@áw8~u”4Ÿ>¯^gLMË5¾_¯v{YUøDyÃ|œÊw\”kC(/&ÚظÌ~Q?zħÈÝ:‹àÎåâÅé’ô é·}Ì\PJ”6mæ˜$KA%a…l±D¯óFÁ]Q.ñÓý[O’B~¦›–§E.ìäýÓq«vØK&SiCL’q—eMf™–fúŸ]Ùc+sÂÎUÛƒÓìÛ½â«åë¨âlùü„â“æ\(ˆí€nç]Í *ö´¸î~¾x²›ÃFè£ÿνÛ—K e½šq5ýìü΃êíGÞaíð©œ/!EºñïE§¥òöb‡+v¤k20‚ÈIÁ‡‡d¦—ë X{ &PŠwÊ}´<çõ|SBÌÚ½ë2f”“\ð!Î= ¶'BœÆlŠÌ!' ÆgIG2Y7—¶d“”@ÖNÅCzŃIE4X)–è§Ãæ>,Íö‡ñhÀº·w‚ ¯öé«`xÕjJF­ ©¶(FT8Zµ[ÕcδêQ…"Œ¥%BHO ¶Q)¡†·ú¸…2#Xu¿õÆ©b#ƒwsÏ ‡š¥%Õxò褀]’ã9ˆ«‚ä0R& ˜4K¨¥y®[,9wTÈAöÓ@‚jXq¦:)S—äéL$rØyž4GÀ¤Ywa&óª j=å! hÜC<æL eoÛE4ɵLËä1=™ÚNÂH.uK¦ër]†VàAœƒÁ¢O'ù`Ôäܸ0§ x&‘Úc²Ô—Z’q$ä,ɹê‡gA ÈKòCHš,xN‹}iòV¨–\µÜÍ´X_#×Ðù±Æh@ãÆð˜SÆHñ ÆH± ƈØ1oŒ¨à·š»‚ÔŸ”†Vš³´?E Q +ÉßN8SèûÚÎͶ>!Çôꮄ‚€ ôCµt•tpRç<öYB1‡£ùÚ9oÖì›8ËÛÏq³†oVþé¼S Ž{ AçÚ©x»Ø®ïnéÂ\áÅô¹¦°GkW\aá zØ“Š¨ìlH1 %¨ñå* .¿1Ʀ—W¸ò{ ·Åa3‰ëÞ¬_ݽ<•u‰CÀâÌÕ_`W–ÕåbISÒg6Ž+¬“$µÍ¿àÒù²¡k£^',¸¿ù7'õŽêßaw,—·¾>èÝ« (Ù) a{;ѯË}»¨È˜Ÿä£eµõ¿–ä(š€À›wÌÍs°g¶q?¸ên‡1à Õ!ÃÓÎ:Õ!cMóÑ;¦´xÚ¿ôAžùÓ;Àê€v‰­ÝÛ¢Nôvu‚ápÃÏ7Ïëòªm…=®º;drUÿ.XŸ—/a`{Ï·–%,¾3q¤[õ¬´…·„ ]鮑Yu®-é*“ÜÕM Tmˆ‹‰»[9»üöò+ë"šR·Áì3cïû‡BŽ—¶»ƒwÝìgk–—Õ.X«)Û—K°Â®wWýÆ¡àPûÉœ:ß=QœztÁû•b‡d¢8…DPð¼Í¼[œzLšenˆ€B0fÙ:–t½éaŠÓrlÅa±?oÅÐÑGDhUÜÊ~…ð~¤k–€¨IwÍf¬k–P0…‰å“­Ô­£Uã-sŠí1Åvù¶2šO±ãÊCˆ'‡V»€ãÏ6JÏׇr@¤bO6˜1Yê‹u:Ó ¡ÑR—7ÉÏï€4;,¿bv¡î»>,àšdTWØÌœÒµëê1§tMñ º&Ùy]#v¡¬ûé°^÷ØB£sÙæ;r:-B‡äxÈa†B§•ö˜4K#INu‹ås|Fð<ßAa@úW°ˆ85“6GßÜè››ÏxUÜß´ŠZHª\Ëè’¥_ÑæDæü/tÃÓÜŸpÛ«Ø`×¾?iŒÓ¿EÄQôoQ¸Ó‡º´ <¶öݦÜl];ãùz½]`{ºÄ7ýó {j ¾ HÇRä§2§Gg¼ŸÆ:$Ã6^žgp# °¶Ý ê1iÖ¨„0-ÖP6õn4 ××ù™:t’q—äg8*)®“:Lš5ô¬ ú»˜5ÖŠ°à~_ï—ì»þÙžé)gg$ “RuIŽÇ2 ;\Ù8Ÿ0DÀ¤YŠ‚¦ÍÒŸíÙºRäÖ¡y½Û£ ‡”.iCUÿ{æ¯$’h]òUýµ!‘!É‚ŸŠýEðB£MÒÛ˺øØbx ›±b)zˆIó†RWÀ‹˜wè:|û•ß3u7„¨ÝØBÍØµ ׂäK€f¬ä}Äÿsm2Ày¼ìŠ0tÜ0V†¿ÿù;“”EÂIWœ¡;“Xœ/¹3yتå{ïºÝ¼?,»ËÞÑ“-.sRÈtÕÝ`Æ sì<~‹’’Å_¢tDºC‰D¼BrŠ;Ô@ÓX¦ñ\ëÁ)ñ:=ªý ´„5$ÉOKB¥Žùùûe' û ‘î#ÌhàP‘šó»ÄÛf¿vøu‰óe]"+ ÷«dçF;§€9Ñ9%ùùÎ)Í;§˜Ý¹]"Ë¡IQÅ ]и®sJ׿ k’×5bwN—Øâ{ºKLŠÐ!yºKL*ºÄ$Kß%Æ,ǺÄÎO • 2p(ÐgZýùºßNêÂõSQ4ÐÄ€uðW…ž»•÷û²*ëù>œe‡€t33|zðÁûçÐJºjÞQþNøÆ¡ýð©Òúp8Žýï?®ÿ Éô‡ïüTR~¼=vÏn_ßûç³ög‘}óüu4‹¸ endstream endobj 5288 0 obj << /Type /Page /Contents 5289 0 R /Resources 5287 0 R /MediaBox [0 0 595.276 841.89] /Parent 5286 0 R /Annots [ 5292 0 R 5293 0 R 5294 0 R 5295 0 R 5296 0 R 5297 0 R 5298 0 R 5300 0 R 5301 0 R 5302 0 R 5303 0 R 5304 0 R 5305 0 R ] >> endobj 5292 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 5293 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 5294 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 5295 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 5296 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 5297 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 5298 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 5300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [257.156 316.284 294.007 327.298] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) >> >> endobj 5301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [304.971 316.284 341.822 327.298] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [404.025 316.284 437.559 327.298] /Subtype /Link /A << /S /GoTo /D (structwcsprm) >> >> endobj 5303 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [104.227 304.329 143.828 315.233] /Subtype /Link /A << /S /GoTo /D (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) >> >> endobj 5304 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 5305 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 5290 0 obj << /D [5288 0 R /XYZ 90 757.935 null] >> endobj 5291 0 obj << /D [5288 0 R /XYZ 90 733.028 null] >> endobj 4946 0 obj << /D [5288 0 R /XYZ 90 367.099 null] >> endobj 5299 0 obj << /D [5288 0 R /XYZ 90 352.529 null] >> endobj 2060 0 obj << /D [5288 0 R /XYZ 90 160.139 null] >> endobj 5287 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5308 0 obj << /Length 3460 /Filter /FlateDecode >> stream xÚZmÛ6þ¾¿ÂWp6P³|Ñk¾¥MrØ^.I³{h4(´6×ÖU–\Iîfûëo†Cê]rpX`M‘#Îp8œyf(±âð'V1_…~Èbå¯v§¾:@ï?o„ÝÂð¶3þýýÍwo¼Åâ@­îÍë`¾«ûý§uÀ„·Ù ÎùúiW÷åÚkvÜl¥Ï×oÒLSë£~Ô0­u¾ëöF\ªµøæóý7¯ï¬€¾ P€?n>}æ«=úã g*ŽVOÐæLÄñêtãIeÛÙÍÝÍOÍÔ¯ j¾P×)ãß,’y,´ MóšeV\PûWîs€Å|÷ƋڹG>pÆ©J%_ˆ¨ËP Æ•°4ßn¶>°©êò²k9˽'¼ö½P0Á•}ïWÎÕ˜ȼPZ ˜fÌÖ{^Ÿw³’.3Ò¢¯f–ÿ¾Q|­ŸK½3U‚…ñ`Á»cRNp™ê®pš±ÌóÙQ'{]Nh9bRzÍ\¾@’ÕVùŠ)O®¶"dŒ[MáÖš)¤ìÉíû¢‚›i¶ŠÇëºLò*Kj]Á³àëdhØ"Œ™y«ûÌó™&”Kñ±c¤ŽzÛ!7†Úg8¥ÝÚJ—¹`b2è3œ G³ÈR‚½õX:SE5€éN¦ãÍíýµì¾øþšm¶^­o­êŽš^ÙY~9QçIŸ€Ú´‹G¯à=,miE¿y‘oÿÒeA+$‰º…uÅ>e`•ãû~Ò<)Ÿ©]'™¦fzJ¶™”eb Ì @K„ë'h¦Yf'²äç²Ø_vzÏЪ£õ{àX>¥•+WJ­ÓGËëhéaÍàÄúÓgznÖ íbHlËã½u¡d,Ö•F—ËV¦›–­„†Ï)ðô×:£Þ,­ì{v“Lï“Y¶pqæµvqžòú‹ã’&@êC¥âƒÕ$¾]”ƒ.ÜLâK­ó*-òÞº‚îY&/Hâ@ëÁ†•V÷f{„q¾Õ]൰s` =ez+Ȳg"Ü9Ñê=<–ʼn†ê°Ry}—нµf°ƒÐJÖýð<<}Êç&Ø>®ìÚÑwÔÛùè§tG?=6ni(DäƒÓõúB \€£Yf=˜Èúp+§lÐé¥>_êž¶Œi±7ÉNEE¦ –`Ùv,z§Ë:IsÜÜê= [áŒ!Íé7¡pn¨€½x¤f©«³ÞÕÕ‹ ”ÅdÎÂ ÎøØñò€y*jæ0á@Jäó9¼"ýE^Žf™!†iöÞ£²}¯U6¶‡$}›!£@lU£>+zúù‡»-‚cã¾ç­ÇaNã³9E¹¯Àž…ˆýõmN/“²N¿]²ÄY ÀýZÞûBÛéó¢¦i-× U=ÃÈ®Nwxð@–?.i‰Âà¶u„v<4X]v_&SpÐi¹}wûïo_OÄñPcØàÑ, ìfŽwÉ×/¹½›˜†³]œÆá¡ïoï?Üþ21‡Ç”l‘1à ð"à„„N¤×ï^'êH6að~è± ÞœÁwÆg ÞÑ\3ø%^Á/2´ßeøJŸM’Í*å¦ÙL„J3N?|D0úmö~ÃvZÉûûÐìy>V¯Ïâ0ê‚G#†4‘ÃmU'ù>)­p—Š4­Ó²ÛÓ€EKl0ü°šÎ,¸Äúhð <¹_sáÜí³Å:€€UêìõYç{í²•Â:̧£Æ¨=ˆ€çTú$ ¢øJˆrÔÛù*¦´! ¼ü2¤$œL¼'ƧZšeæg¾ðûÌ]Ô7Îã|ÎR½G!&‹‚ çÏJ3<TˆäêI™gÔ”nÜ~º$yÖ©®æpxe< XÖi­ç­m>k96.yZÛy.•óÏòuIˆ "¹õZIEΜïn÷ú8˜3Ùï1ŒÔ©³É†ë½ñù‡RëjrO@€#ç7¥ŸßKsu[xµû²ÄÐmL‡á›¬Hê4?lÏESEø£»[ä=És³)Ú«¼¿KÉ5§}¯w€²3“á ö”R½H2?V³JíŒÏ*ÕÑ\Sê¯F©‹ ­R» _gúë6ê“dJð‹Æ6Š ñÚÛ?Œƒ¢+çäÓñûÝðÛøí.jøo2! ¼ bKpJê’0#¬=¡Ð2›Ž=eZ×f»á!5kRk/v‘‹›!Z®Kæ©–á™Ggæº`œAà†$ Ã$.Xy©¾µQ…+ÖGåéãà,7Ë@·Pµ>㹡ËÉ®sk³ºÝ®IßdW>iªž‚œgÞ)wÆçMÕÒ\5Õ^­©.1t¦Úaøz=<˜ ô>ºi„@.¶&A.`=©œ%–ùËë» {Ïø–*Y†4èëž €úÏ»Ûû Ð +vr¤S&O©üWñxûþ݇÷­÷Ö±Pó눙jÀ<ž‘±¾Bq‡Óß¾Ü@Ns?Ã*`Á’ÊUМàg»Eç­-%öNÌY'¶æ5aЀdÌt;>oЖæªA/ðj z‰¡3èC“‚J75xR½ümWœN˜’Ò‰W͉‡w̉‡ž¬¨jÄ 4™ÕÇâr8Nlaì×N%{¾>+GõYänJ[Ž^›Î …E½´¶t’C”~¼XAq ¸€©-TaÄüh¾ŠÐŸÝBGsm —x5[¸ÈÐna—á¿0Rô}ËB›ÊÛ“ìŽI~0°‘Ù M¼•p~âhnbS¦ë]’SäCðÛK‡Lý¤µ%jоÂ4meF¨2KT ¯­åâ[X˵ý&nbg§ê‰Xõ´"=bѨ<Ù§;É ìà|É f›(a4AÐÕ­mòîú’/XÔ5 Ä¢.r¨ú€×¢”^ñ‚sØl›‹£+‰˜¥ÞvÈ'r¡þ” ×mû^Ðg>L¿,Í2Ë0d\…=–TT¢Èg\Ä+‡ âÚ$KK²íÐŒ.í¢Öèð™ ~0ù^™œ4¤+ã à’…JNqž8^D;¡{W…w}¡PÍ„ä„<>s_5ºì ç &à$-©ÅÑŒ„êƒNˆ±aÜêU“gõÍñ¬ËSZUÝ„CWŠ“1 @÷2îžv,›¥ÙvˆÆ²u„ãͬô ._äG$ËìHÈ@ôØñtôQïŠCžþå4ÒžéþjP•ì–$Ûî55r—?<@òùò¾æèưÙR¦­±Y `QÁ5 ·Dó¶4×4¼ÄÏix‰Óp‡ÝVX¿ÜŸR›ž&õ§ùcQ6‰j{„7kE>á-"F øñ!º‘‹~“æz{(“ÔlŽ2Á<¯ËÂÔãš«lÒÕ…Œ;EKóHýÓ‡ƒÆRû›dUAo ¥ëDì·ã´ÀsæäQt‘C ÿ¼À;äq´yÐY¼Ÿ0â±Yg&±^:ã/'ÖÍ;1Kƒ¬ÿ~ŃÙ zò(ðÃbY"IÓ7(†ìIó¡0õ§ÍVÄ„àðw|Ý,ŽU_‚ùëvK½,Ì`Ê¥ëvXö––ïhYJ‰eÌ ÇÒ]dâ²íý âzƒ.À1B4k4„àÊœ2*¸aß¹‰Š ïaÕúg¬dÅà2$ƒ‰±Î ^qO,æ,‚“5UÈõŽâ¯%ó…øóìÍš§£AþvÅ<Ÿ¢ôä2w˜á²\–f$WÏ6üÀ¤ù]¹Þu/%‡á¤{µÝ -%¢Ý]{ÝUêúRæmåuà ¿¡i¾±~Õ!âù ÀØ'‚+ÐÍo€¥ùš h¿ÈéÇœ²i±,’¥‰Ô×½b*”=‘'¡dD×+ðkòüµŸtHûi t™¯LëXd{sžÌ›ä•£þÇ+xÅyW%e"0úX”ú†EdƒC„A¯p·WðHŸ ¾‹òà˜Ç­[mê $Šýs7‹Ø|0J€CI¦BrRü^QŸ±Jø•QÄ©õ€wJæ#&|”¤öú‰øt…¹L²3 ÆÎ®ý’ñ¶|©j ŒOó‘Ih«œ!Ö%µþÇËÕV´gê'ë†Æ¥"·B<-°«‰/hÿÄEºoò­¢´(,ÓÉïUû…ˆb!%¾¯s ‡e$=u›rf¬jàMĬ¹¢ç¬@+Á-‘^}Á&¬SŒ>œën[÷¢ø½¦ ¡0ôçÁÏ_Üîç—,ÛÖZ0ì±ÂÄkÄ'Ò}ƒ D®¥Ù˜9MàgGIYÖW6Ùçkù²¿ uû!ä„0ýzÐaCúÄ?;ðx–Û}¾Â•cÍ(ºÊVŒÙF _]ïæRVH9ç¾¥skK2—°¢?õbÊ?¢¯GíçóÙêÓÆ¸ökNä¾-‰ùH¢NêK/ÚPûOD›IvÑ­Ž“ª*viÒ½1lï÷ ý¦ËòT>}F%N}tãÇÌ÷'ë X„ÿÿôKí`©8îêÂ2úª×rÇEÿÐ{Iθ{;~¿‰ÁëØ¿wßßzô#â\¾Pœž$‚Zæ²ÅÕ} 7y Ú¹ýÞ¾Ê #ê§…¯Š/ϵƒŸ%Õó?aÄÜÕ endstream endobj 5307 0 obj << /Type /Page /Contents 5308 0 R /Resources 5306 0 R /MediaBox [0 0 595.276 841.89] /Parent 5286 0 R /Annots [ 5311 0 R 5312 0 R 5313 0 R 5314 0 R 5315 0 R ] >> endobj 5311 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 5312 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 5313 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 5314 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 5315 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 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 5306 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5318 0 obj << /Length 2979 /Filter /FlateDecode >> stream xÚÝ[[Û6~Ÿ_á·µšåM·yX É4ÙÝf¶1Ò‡¦d[ckkK®$wfö×ï¡x(ѺP™tÚ E!J<ä9<×ïÐ6£ð›Etx‰„7Û¯èl___1œ]ÂôÒš±ºúú•€U$òÅluW/÷ñ8›­¶?Ï}ÂäbÉ(¥óûM¹ß ÏÉ~±ä¿J‰ý˜Ü%0ΓlÁæõ5¤\̙Ͽ¬¾»úvÕˆ€zÂWüvõó/t¶A¿»¢DDáìÆ”°(š¯$8>\½»úW³‡þ.àûÐ%õƒÙRH!F0ºà‚P¿Õç­.g„ÁÐÐ(…|àÜ랈qI`ÚÚªÏO“L°‹ˆ¶°ÙÑëÅR0:wÞl’²$=ÖxŽžŒ{gm‰ÆÏŠ4Sguñ3gu²Ã³Zìžõ‡óáÐcëSâò’¯š(vHñ£-R»Eèl©D?ÇóˆÎ|÷¡‘ÆÍ2’$ þËSžfÄNF§¸,“í¨•ýŒNXÙ"µ²¡™°²“ZÙÍN[ÙfÇÑÊÿLŽyñ¨ù&®Ò<Óïweæ1$‡*ˆq9¥Š–h\H3¥ ?£ ';T…ÅN *¾O³$F¨Š8+ïòâh©ÆT‹ôA¿¦¥~–i¶;`¡çÍÇõäEDP9¡§–h\OH3¥'?£'';Ô“ÅN¢žÞd›<+Ó²J²J« G­³"Ùä»,ýOšÚꛥ‘–h\#H3¥?£';ÔˆÅÎwi¤ë*M‚7YØ(Îá<ŒN©ª%WÒL©ÊÅϨÊÉUe± Œª‡%DÜ6UH†T%£Á„ÕÑÓl gŠXy$Ò<^-˜×„o‘Tç"+íׯ˜…F¥OàDZ/ù»ž¿žB2Åiö†¹~l“ª® ú-) Ãì8*Þ¡ôM.M0£¤YWÑ‚úô?ó"xRN@C½´È{JïnÙBëk´''!°Å¥[7_Ï'¡'/ø¦w¨¡,^ƒº¾2úHºRHæŸFŸ¨Cí”§»%êTðQ‹ózþïõ2¤$B§F [‚ÎFJ¢ýÌ"ÂÍ £xÐS(ºò*)¯k‡¦ŠÄoQä~›÷½U@_å1t׿hKÁټƀ'ˆƒR¿WûD¯—Özß'”‡¸¾Xˆ`žâ‡>è„0|âº-ÛuÑT{ÇÈ#V• !“M¥âC}Îïôó¥"Þéñ:mËõªS‘«u¿§Û¤!çY²ÜqZç õ ’GUäÜ·¦¯™)4£?ÞïÛÔ)‚q 9ž*<­Ç,Ï–egÛ¸PR9ÿéå;=øU!DØÇŸ?Þ«!ä¤RÏÔÂó¾H+¨hKðùjŸèÍ™`Œg‚Q\ÔÓb^ž×ÿM\n´ÙÇÙ×Cv¨ŸwgHXø äÓƒrŸŸ[½Ó'ë¼Rs{l¥=àYA8¬8{,=à [Õì5 +Þ(eÏ1U)ÇQáY¿¬“C®JÙ½v¥<›uí–çâ”—ýò¸ŒB:® ¬ù~é€,&EØì1Z©(,Ðpð’$ 9Œ&Ú:t4˜ ‰l©Àmþqóö#øS/«±u›àR„¡qóíl¤øb½É³¿© Äs. ÍT4`”¨ñ@ÛÊh9h« T2jªfzÜRšdÒP£Œžj'‡HÆL­Hh¥x û¡,tiÀ8y^ncYè'•,š^Ô€ì(¶]A,*a©L~;§*R6½‰Ê-ª&Ì“x³7a¬SQÅi5hpäÁvµÅÛùq“#ͤÍÇy=Õè.©ŒÕ-©Ðìe|×Î "4r ·44n¾&L‹&›ÆhXUQç‰AÃ@³M ã$Æèkœ¯O…Á¾mýêÕx;p»¡Œ.@T/7z;?nt¤™4ú8¯§Ý%•1º%ýæí‹wYÿº Ú‹~øºMÓ¸w62VZ½‡ó¡IÀ£9)á„Q \©«;²>ø‚'0Ó*Cø>bŸƒ·ÎGÀ4§d“*¼´ÑŸã,>ä»sM$þêÉÅ„G|³ëÍðÍ"òæ«o—Œ2ph‹Ì146ºî…bÔs­Yš€^8a€m„R)®`R"ÐÁ)}¨aÜA¿Ò²‚‚µ <Ðàã­¢ˆOêŽA½¾yóFR…·ç Lï”úãˆò›“ÞüýBÐùëãJ0o`ðn6°3 ‰ð:;wwì™ ‡‘a Mß¹^>WúxóPWúiÞ¢Lwûj¨·€ÖÁc—Ð÷ó|/wçVŽ>µÖ`=?«læKt¹GD@Q£è¸Ô/“x#¶^Pwøp˜Ã£þ°M4âߢ/á熥îà²ÞÊ|Ðédq•¶,pe® 4(P“GJòÿ’Xhb£nÿ9×¼áy?œ$4nÔûôðc$”†ü~ŸÖ%vO§CštXj…)Þûü€Ã:ê”â¨RœòŒ×04Ÿ.ʵééLQUí8‡\8YS’Ì-ÈDi#‚‰ÑÒdÍ–&C3Uš¼žXšœR!‘-–¦ÕíËìã¯qW>N)ñ#éÔ…¡q²îndC•D•=¬$ª^ߘ›-y]Ý™ÓȈˆh¤—iÔÒõ~fÜ'¡Ï›ÐX~¡Pž.Ü ‘ÆÍPC./®nû±Í8äqÛö>ªøšBð±¿\y޹Ñ¦í¸ƒ$RúÎBr6V/$Ðý…n Ãg’°éô­‚¬^낌a3õK(ÞÀ^,1ô5ؾ¯ª^ó¨ eÿ¬TA5ÜéA‡ñ±wë!lJ~g@fÕÞ×ßããé€t¦ƒã”çu ›ºÊªº”E&«uEW±kåF¬mTuRj2 –*Œý‹¼z¨ùïÒ*=¶ícsÓ´ÿè 0Tré`‹h4€ ÍT;šv2ĶŽû…ÿåDðÍ€`„6×§_@ JðèÖ7ÏÖåkí]QÓF€ÑæŠÔk¯H5Å6¯1Œ²é€Ù$ÍÁ²ªÖS›}\Äý[´¡$0e‰g~G‰:ýp„ ÎôÃQÓGÆ8ͨß²K$bêMÜF„ï]'¬Ôeñ1KŽy–np dN²¤,›p»\Qîó¢ùTáÛÁ[7ÍcHýQÐcÍ‚C3z¼žzœR™,cI… çö}öñ÷ò`J¼¥¡qsîlôŒ˜‡C†áDÊl‰ÆS&ÒL¦LÃ&ev^"L™ÃÔmÞ÷³ 4;‘x–\uüätzq •N Å„øÍšG<ý5â7©vfæZÃ\Ì9…Ì$§œª%w*¤™t*ÃÆ©\ SY WïÿT˜z|†2ünê³PþÅ®áÒñ¹?¤9Þ|An¿H`ð½Òð¹Ò¶˜#~ÓФn8t;lG²gS#ZjÓ˘}.šNàýçuá3‰XwÜÜBqÏîJ=¥[˜2­ö«LÀ%ú|ÄŸäu© $¿€üMùÂÞ@»Ï`Øå ­“ÐÀy;YD£)ÈÐL¥ 'C“‚º ‡êšÍp¢0Œzöÿº°Ÿ™Cù‹ÕùâK-mª«ä1áW-Ѹ_!ͤ_¹6~åbhüÊb8žpü?3'>©¶ :GHxÀ¾œâÆ‚^”¶ÿÇÓûB;L/"ž7x÷¢LÎô¿ù¼'Sw¨~HÙ1åƒ{Iü×>È]©æ5œ ŸQˆùkÎÕBÝâ‘ÞnðWp©,º¦üZPý°Óü’úyÇxTÇïA¡o^àRîJÇ¿~¹ÉwIï§`‰õüÈû:Ê endstream endobj 5317 0 obj << /Type /Page /Contents 5318 0 R /Resources 5316 0 R /MediaBox [0 0 595.276 841.89] /Parent 5286 0 R /Annots [ 5320 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 5320 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 5319 0 obj << /D [5317 0 R /XYZ 90 757.935 null] >> endobj 5316 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F42 818 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5331 0 obj << /Length 2622 /Filter /FlateDecode >> stream xÚ½Z[sÛ¶~÷¯Ð¤/ÔL„Aykì´u'usb%9™$Ó¡)Èb*‘ IÕñ¿?‹EIàÅNNÆ3 .ö[ßbwAâ‰xÂýIÄ"Ä)›¤›3r ­¿aótg­çÏçg?ÿJ¡â!Ì—ª{ˆ#x2_|ðB„Ùt†}ß÷îÒjÝLßC«éŒ0ßû5[ }õZ,E9ű'òtŠ=Ù~äáL?Íÿ8{1o,0ö1Jü/g>ù“ØùÇ™('wpí#Ìùdsj®×g×gÿitèv í®!ʧ3 8êžB‘îg€ý `?D'VFNÃGBØñ@°]›´tcˆÇ®Ô#ÙPÞš'¯[a r~4`•j[õîüú÷‹¿þ>ýê¿yrbQÓ>ófV¦ùH‘D~6Q ˜bæ¥æÀ*«ê¢ÌÒd­ïK‘TE^é›wÀŠók}ýJöJ¶Âô»Ô? ñÑ÷I.'±#÷1ÂAìH3…{¡jc¢8$"³°á Å(h? ‘9 ü @~–h‡v1Ä£ÔÊÇr-µD[‰P†F$×ÏÛKÔÖðô´»¤!6³ü‹—SN¼¹Ã†EŒÿÞ\]:ð XðÿÄ,þüý+ç`<0þ¨ÁW”Nò…C‡Å#gâõ”1ïíK7#¢F€Ë†VËÒzèM–×ÉÍZTæ¹|-Œ"~Ôïk-¡N_³2C¾Ö h}­ÐøZpîö& “±+y²@m&Í»ý…RøìA|íFqz%Èçü;!89cˆàj$Â!çÛPœŸw³Z® Ádõ6û*Š0ag a¨’]'p#Ω€Ïq´ïFãÈÛUB_ÜeõªØÕú&ÉÍïºežÔFæ_…PVYažW[‘f2`AƒÁ )„Pìý^L óî„üoºÈ| ¦&€§7"MÔb©ë•j€Ì "dv»ªgé*)“´ÆÎ¦h…Tv'/‹RM0Ìx"â,TÃJ!ÒÖenÖ!Ëõ/ˆÛ@[f‰Ò´°Í¦X¨ʶ´Xï6¦K¾ÛÜÀXõÍ-„ñºÑ°JŒ ç&®÷õd]R12‡„£í:{¡î]ÇÈ î:}€Í®sèŠðmÀáïØÎ}D£%§ÌWKÍúÃÞ.^8£’Oñ2àÍ•ÓñdÀüýcf @A`C®3´c C2dƒÞ;ì Cv°oˆí"SxÙ^¨Ûˌ̠—õ6^Öh½¬8wûÑA’6’E=ÁýÅPæõHÒŠìˆ|·Q8Ù>8 'ÛV¥Íöy7Ÿ„4*ªKú…§Q„\Guù*ªë&² %H´ê²å ªKÑvTW }æ«-ÅŸ$OàC¬§aì½ÌLdV‚Ыó§ºåüÂ\¼z;Å„«ü(ÒŽ©›¯uƒ#¾WÎÒ¨Ï*GÌW¹Š,Àodï³bWɆЫE¾P1 S‹ÈÐ/Ÿ@š°Ô)ˆl\ } =4´n‡ÉÜM:[‚6›ÈÆ&?v[£Átææ‡ù‘wYë†Ì¨2“m Úåk3ëûƒ¡éóH4j9=*!ÓÃ7Û¤¬džTê[môn½Ð·¥ø,RÓ­cVá‰JŒ¢Ð®XäÉõ.+Ó¯æÂðGZ åó"ŸÝ¬“üÓÚ¦ÒQ‚¨•dF×°I¶ΡffÏÞUÉ­IÇl“Lë2HàÄ¢•ÂRI}_%K±ßðº–"-6É„rœÁ1Ê ·;OÈZÏ;OȬÌÐ YÖOÈz­2Bm«ì ÙÕ”2ï—?OOɈ+ETßtX™^ôcE­S²Ó¹:L’íÒ]^Ž= c cÖÂ÷2܈ ð>4¿Ð\Ir mèÜãjJ|ïgrDãoLÇžB½¾øö,õ;];"8Ö¾õи:>O xñµŸc{™NŽ‘!Žõ¡YŽõ¡ŽµÐæÝ,Š‘ß?uJáœDy` 7úìÄE˜i}Ç ‡Ðjaé½ìù½µ1Y·æÆIu2`ãÐM¡²¥ú©}hÞ I˜"¿ÕW&ÍPzZ\rTtr’È‚Rî…ºYidiÙØðòеùµÇí~:ÎÇ|Å#ÏÀÇöÇ[G’ƒõ©³ø9 õ =Û_ˆÈèøúý‹ÒXÒîÁ{ ¦C|Û uóÍÈ ò­°á[ å[ pÞè2¹qGá‰c#lj|òGRæ`#lSfî&¥ˆ`ö8Vôì‡1F0ÌövxU¨£a?0¥ õU=ûœ*©àÎ]ÈÛRo‘Øë†d÷5[g‰ªà6ËåÖ˜Ôú°T9I!“a‚âXV"¦£:DV6ˆQUø\ˆ…¬ÔãBÿBA°ÝÕÂQ„ íœ`m&«› évÞªR`'…Êæ#¯³d½6¡a—÷Ô&yQŸ)F´¶!CÉB©Sgá*`h JÃΦõ¼³€±2CLÖ ˜^«ŒPÛ*SÀÀÏ•»x!é +Ó‹|¬È/£Þ¥ä Áà·«Z_ëŽ aŠŸðÐÎɰÒý&©T,M«›z%Ïdä9̉q™ëŸ #ÓÍ¥»BçÚßaôôBʽ»2Ó®t¸`»‹íŽ*—͹8ˆôV1 á&¶eyU‹dÑžú£d&ŠØìn.‹M" †D ¶ßÕ.HCŠY·Ž Ô&‰äë-æ½[ÉÏŽ=(”œægˆ¬Ü¼ÄÏöÒ§Nr¨p˜˜sU·-8ù F‹ô០àÖòÕXåTn3ü‘¨÷ø5Bd_t.;å£Qä†+_D~Ùeú&üKÖB¿Rä±WÈI-£âJÓa“Üë pÃ…ó"¯ÄÌœ×âQ@mÇ›/;PÛµÖ†ï>SÑÂÎ÷0òʘÃù…àc¶l‚0ì×p²ßý•/þ“2“™¤ÖtQ¤;Àª{2z›@ š(k)@بPomMÈ]%¥6­Þ1,u̾OOí„.²µ(xÂjQþ-J¨¬n?HzŸN—}Æ!•âÀwàPHôÐ^”¥J„æmD%—@ÅßÐ«Í \¸„œ$]i]ïÁE£ÝQØyTŠzWæjâánY-&«e¹ËS™æÈ$ý7êð$`€jÇñI7.­}{H‹Q9R…×_M«é*NçòlÖ8°ÝWö± Ky" 0W_â8zì“âÔu k®tþ”åéz'ÓÅÔ>IÅ­ž4c–‹È\rˬ–|8– \²ë,¥ŠÿQú¶åçQrÕ6…[mW#õ}5rÇÞÕYXÉiÇúãÇÇ}ŽªòÍ0Fæíš,„b#0ßÔtiðo"%¤ÖfC*Ìs¹ì ;þJͶèÌŸùäõõ¤kØ/Òãl1à%¸ÍåsÓA±n Þ{»A}½¿ùñì0LÓó?Ñîd; endstream endobj 5330 0 obj << /Type /Page /Contents 5331 0 R /Resources 5329 0 R /MediaBox [0 0 595.276 841.89] /Parent 5286 0 R /Annots [ 5333 0 R 5334 0 R 5335 0 R 5336 0 R 5337 0 R ] >> endobj 5333 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 [252 381.183 288.851 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 [163.912 369.227 200.764 380.241] /Subtype /Link /A << /S /GoTo /D (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) >> >> endobj 5332 0 obj << /D [5330 0 R /XYZ 90 757.935 null] >> endobj 498 0 obj << /D [5330 0 R /XYZ 90 343.698 null] >> endobj 4947 0 obj << /D [5330 0 R /XYZ 90 321.386 null] >> endobj 5338 0 obj << /D [5330 0 R /XYZ 90 321.386 null] >> endobj 1092 0 obj << /D [5330 0 R /XYZ 158.712 274.302 null] >> endobj 502 0 obj << /D [5330 0 R /XYZ 90 257.948 null] >> endobj 5329 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F40 783 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5341 0 obj << /Length 1450 /Filter /FlateDecode >> stream xÚµXMoÛ8½ûWíE:˜á7Žt“)v³mâvmª-Ç9•ä´ù÷;)›²-Ê›l –Äá<ß›ácø#cÇJ(¤™ÏîFx| _߈k@óÄk3½eÐ iÉÆÓEÓ]$(Oç_"‰ˆŒ'cýœUwi½DËxBŽÞæ«Ì>]g‹¬ŒIe1‰Š™ùª¨P‘,þ6}?º˜náÝà“üÇèË7<žÃ ß0b:ÿ„gŒˆÖã»§Ì=¯F7£[ö;ƒïÇâ„Èq7@Ê–¢ ðe^ÌV›9 ZBŒ/êô;Z¾0Ãw¢¤ü˜LÆ©vYYÓEþëT¯Ëyyª©eí´Ü—yQ/Nõ\—ùí©ž7E^ŸnÊl öu±vfë"æ8z0æY‘g(ž0¢£OUë·¶}êµ{o§Â¼¤«•}X/ìo½t-UvŸ–iíÞþùãæÏË7~ÚÎ!H ábæ0eœ>!µM^cÛÄóÌLX‘UG²žŽ—½%Éko2Ö§Š`‰8K¶> ÖWJÅ> ÁÐôÂjm€Ц±ê¾œ»èPaJU]TÓPÞ:‹kßY‡ñ÷\ü—ÀB ‘ðp¸Î& '„ïÀ1 šJÁD¢•f”%\RÉ•tŽ Rš÷“»kï'×Ù ’ÀÚ‘lÉõ‡ÉõQO 7„¿ç²Éz}€,9 #¯³ ãI`—uñ>\ž‘#|8É Š³D¢äèþHXX< ëòd×ß.¿tœÀpd3ªNZ[6L¼-c¦¢,«lá±åG¥)é*A°fS„¤L1¬æIrdf°$¬öÚûéu6ƒô°vô†[z=Àaz}Ôè áï¹ìÐ{yõù`š#ªt8pgÖ,u˜@-ëÕPGu‚HÂz™õÚ{™mm†˜ am™ :f}ÀAf;¨ÃÌñ÷\üOWço/¯.V(г`Ô­M•Â4SÂ;¨:QRpFÞLë¾¢N†(ÓO_ª<}KUkbFõ¹YcÒÕÆþ6U{šn×­¼˜ç3wìÄQê¨MÑ’èÌlR8YFE×±ýËUÑäw­ZThĨ‹ßÙ Šç+ þ`+~pXü>ê âáï¹4ø>qû#€ :¦á°­Iµë¦™e,ðCLE#4x!V3ÏöÓë×ö׿hL"HÓ¦CŸš8Gì9çÏAo¾8É_鬌¹ˆÖ}éRgUíöpöJ(œ3…Išáœa qúŒ ¬çàØõ/…ƒ"e»ëßÿå‚ÍÝ åõvWk¯´pd.ž2øuÅ\vqmöÁUuµ?­ßí¯½îB'ÜBåÝÞešüz¶¹ËŠ:mÆãn$½áÚ®ÛÈwyÚô†ÃEóë]’À ß“@qtƒ`î§á¼óôKñ¦ÞÁaHíó zPÜñêÐMxï²"3·‡n^[J¦±¦Q›|Ïœt¹ý!ú¦¯¶o —· “³­º 30ö.º¢Äàsw¾þõx›û³c®í§ç_úÌrö endstream endobj 5340 0 obj << /Type /Page /Contents 5341 0 R /Resources 5339 0 R /MediaBox [0 0 595.276 841.89] /Parent 5286 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 5342 0 obj << /D [5340 0 R /XYZ 90 757.935 null] >> endobj 506 0 obj << /D [5340 0 R /XYZ 90 549.557 null] >> endobj 1093 0 obj << /D [5340 0 R /XYZ 90 495.947 null] >> endobj 510 0 obj << /D [5340 0 R /XYZ 90 481.377 null] >> endobj 5343 0 obj << /D [5340 0 R /XYZ 90 430.567 null] >> endobj 514 0 obj << /D [5340 0 R /XYZ 90 218.855 null] >> endobj 518 0 obj << /D [5340 0 R /XYZ 90 160.155 null] >> endobj 5351 0 obj << /D [5340 0 R /XYZ 90 137.843 null] >> endobj 5352 0 obj << /D [5340 0 R /XYZ 90 137.843 null] >> endobj 5353 0 obj << /D [5340 0 R /XYZ 90 120.219 null] >> endobj 5339 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5361 0 obj << /Length 2214 /Filter /FlateDecode >> stream xÚ¥ZÝoÛ6Ï_a`/60³üþЗ-Í¡ËÒÄÛÖ¡Pl%ñàH®¤¬Ë¿£HÚ%Ónƒ °,žîww¼OÊd‚áL ž(¡ab²|:Ó¸ûóñ«sXžwÖ\œ½¹`ð2’M÷íã’ AÉd±úk*Q³9ÁO¿,ëmµ.šûSô8›S§ëMî®nòû¼š3Í‹¥½%áS"ùìïÅ/gï; ¼|‚I‹ÿù쯿ñdrþr†3zò®1"ÆLžÎ8eþzsv{öaÇÃÝgpLEAØq)CXŠ £DQ¯çw«ü#Æ´ðzÓwq}ù†hŒ°UèÍ¥{~`R¢¤¼ewaí“-›²r”¤ƒLRF–ð#fd6grúÖê=!åéÕsb‰Œâ-G†ó C’ÏÈ¡h a&Ù“5¥ÓfY3ާÿZaóªq7ï«òÉ]­r»ðPåyín„çªlµž‘iVÔÈ¡u ;—iª®õ¬ËÆ­{CÏÝEkÚ7×—_k]}À¸_k´î.q$t×foÛFX{¼íjͶëÛtgl0lþ•våãv½ýpcÅXPo]Ä §Àž0!)S ¹Ö^wÞ³¶AL³c;^¦ †Ä`È㌌&£!<÷¬æ^m v64 a4vÑá6X êwá{§îs¯ÜUYl^ÜÕÝK¬ <'Á1ÿ6—Ø…êÁSÜt²J žwÈ[{.±´2=•›:o>b០„0ieúBD -Ф¡BLõ-¦³Ç{B†Ø.µüúÛû¡A)F¢ÍQl«òŸ|Ù¬ËÂJ?曄DsNqÄ9/¯þðþ ® á¿÷Ú8¶ûI€ŒÅlëi.^‡níœD#Êɸg ‹P„äˆRñ*×¼æf±oïð„F<åÜ䛜['‚?þGœÛSÏ;äC‹XZ™>×Ëÿh}ȹ)8#3}"ßö$I`ŠÒ`†.ðqßþpûÓë}›ƒÊðüˆoËqßþýêüÝÅåÕ;ph_ÙŒVRpF¡¤çÆ«oÌ –¦Ùæ9w;T‹u±Z/³Æ¯g…§+V¶z8QüŸŸ³¢Y7ÞG¬ÅвYžßcæËÓUvå+Ò2+€ÄûÔ@‚mY5ÙÝæ¥ÝjØ¡Áð˜¥Ô¸¥@â ® *¦Ó»å¾“nãŽ9Þ¾í›ù<¸]ʦ¿f˪GD«oëµëǬJ9bΨçÞhõHcÍ”@„nü;ëÃèÆq¦w<Ú ƒä5L”ðä´V IÚn «àÞEbT.‘¢ªz8yê4~ÄÒâÿùÓíõÍåÕââÓõâfÍ(”V“TÜ“$q#6!™ÕME|†ß6•-ƒþ,ÐÑβ"‘t 9¤˜ŒÉág˜Í‡£›>…vÏ –ÛBi¤lD ‚7Xa¯­#û@Y­ªSдÖaNXûØÉvíp½®›<<ñ%{™ áRǨ2Ü@¦¯PfÏ`lîƒòݦ‹Ï‹ç¢Mþc‘D¡åbšŒ¤ÎúÁH 4Ç")…µ‹¤$ ¤. Ý£$Ctïp yê4rÄÒ"ïrÝ'h{2h‚ iI=MYÆkÙ72„ÑÅåûwÃöJ¤¡Ës7fé1T(Ÿ›TÐQeÚ=þf?í08tÄJt›û¹¶Ïþzµ®·e½¶>¼¯`ƒ¤Eâ²/ðÁMÔIñb–½M?Ø ÂddOnhÒè#‹~0P©Wæ«·‰ù]"J;9œ !T§³€§9šö¼Y ²@0•ºx'drIJç鈬÷¤ôõ4iTØ[ÌúúZï³%ÇÈò1«FfAØ%Ž&ƒ0vAP=eÍ÷¡dBà‰ñçÄ„°gp0!x’¨ ßû:w¸w¾ñ‡¦æýå!ed¶¡~(ʺY/ý™ÔŒ‹)tÃdú Ó?€ÕÄT¼.š5˜HÅÒÑäiŽFÓžW"šR€!š:€Ç=‹!"TäYçg²/^âÈÉQ§XöKðÝŒ‚KÜUJUÒL&‰N)CŠDûÒŽm€[®WÉÁPG¨yEÈì Obåú9ÔÐæ1ô¯¾ºÞG`ļ*²Í®ßÏÁ²0µµÃ!‡Ë1)õнÃ`¬«%B#¡änêDÄÏçy“Á”éÂy^/«õrLµÅèÔlçLî̵xÌk°3jZ•.3Øo¦ßMi§à/nRÊ.ØåСصöà;ö=¥ƒ-!Œ·þu¤#ñÔóùÐ #–m°æ›muðØ•A>‘<"N[ž& 3ru1aˆK}¢Ê:±´¸›u‘RÙžešVÙÓ¤¡#Fã*spIrªÆŽøj¡;¿û'¥/8ÕGôõ4iäˆÑ¸¾0|²Âž:±´¸õv™P™IO$U4Iè˜Ñ¨Ê „ÁìD•u7bÙ¾YËîR* Hðš¤Uö4ièˆÑ¸Êhå© ·´G0»ìv•û°²d4Gö×Ó¤#Fþõg|š«‘óB)¢êØ™íâ:”Ø#¯l^UŸ fe¢IO“D&œB,ñ|{¬µ;è†Ï*_­«|ٴ徇õÌ}؃É'mOŠás ÝôtÛ8«0HˆÑQ̾*‚†ùÛyÒº8 žŠ˜n3¶û…ÁÝuœE^eÍþ}û\Ì †7¿-}WÊý«Pó¦?0ì¾Aÿê_†´ŽÞPØ‘> endobj 5366 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 5368 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 5372 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 5374 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 5375 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 5376 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 5377 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 5378 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 5379 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 5380 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 5381 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 5382 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 5383 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 5384 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 5385 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 5362 0 obj << /D [5360 0 R /XYZ 90 757.935 null] >> endobj 5363 0 obj << /D [5360 0 R /XYZ 90 733.028 null] >> endobj 5354 0 obj << /D [5360 0 R /XYZ 292.107 705.441 null] >> endobj 5364 0 obj << /D [5360 0 R /XYZ 90 688.38 null] >> endobj 5355 0 obj << /D [5360 0 R /XYZ 292.107 655.622 null] >> endobj 5365 0 obj << /D [5360 0 R /XYZ 90 638.561 null] >> endobj 5356 0 obj << /D [5360 0 R /XYZ 270.405 605.803 null] >> endobj 5367 0 obj << /D [5360 0 R /XYZ 90 589.076 null] >> endobj 5357 0 obj << /D [5360 0 R /XYZ 280.916 555.984 null] >> endobj 5369 0 obj << /D [5360 0 R /XYZ 90 538.923 null] >> endobj 5358 0 obj << /D [5360 0 R /XYZ 446.709 506.165 null] >> endobj 5370 0 obj << /D [5360 0 R /XYZ 90 489.438 null] >> endobj 1094 0 obj << /D [5360 0 R /XYZ 263.597 456.346 null] >> endobj 522 0 obj << /D [5360 0 R /XYZ 90 441.676 null] >> endobj 5371 0 obj << /D [5360 0 R /XYZ 90 390.965 null] >> endobj 5373 0 obj << /D [5360 0 R /XYZ 90 310.203 null] >> endobj 526 0 obj << /D [5360 0 R /XYZ 90 176.2 null] >> endobj 5359 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F11 1069 0 R /F8 1129 0 R /F13 1157 0 R /F14 1084 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5392 0 obj << /Length 2735 /Filter /FlateDecode >> stream xÚ¥Z[Û6~Ÿ_aLÀb.¯’˜}Ú^R¤Úl2»}h‹@csf´°%¯$'™]ìßsx‘u3í¶`$“Ïä9Çf l¡é"U)ÑB-6ûºx„Ñïo˜Ÿ]Ãôº7ÿõÝÍ_^ XEt"wvyˆâlq·ýe™–®ÖŒRºü¼iuQ¶+¦–äiµæŠ._;ãÞÞ›S¯˜^šrƒC‰Örɵúíïî: ¼|J$Èÿß7¿üF[ó‡J„Οá¦õb#¹ðï»›7ïh¸qãs**&.ëÈ¡‰êt$Ükù­ù•R^z¥¾­6ǽ)Û¼-ª5k.‰º·”0¿ø«í`õÏß|x÷þÍw+¶|ýñÝÝû_©¢M[³—«µô¡­Wš/ý'˜à` N¸´\þ‰°|w4¯ÆÆÌ¡L/•ÀSô­1±Š‡®{Xk Æ :õv ³È¶xX­ ÅY­pvà¿~œ i¥eš0žAl™8‰»XÁµ·/š_í¾¼hn_ž¢boèX6Åci¶ndW•èq.ç~–ýu$È¡@+ŽóðÿÂì3¯Aożô ½(ÿï• Æ‡q@¶Gâ,„·‚óÓŠL’$ãà`Ä¢ ÎI|Eãž¹{js¨«išªv#û|SWîõØ@ˆ¢áñC[… ¿§±ÝÖ°Òx’E9 ½©ÀqMkúóŠÁÜó*cÂ)ïÅìÇôO@ƒélÙT{ƒoé²yûÆ ·OƽÜnÝôCUïóÖ nM³©‹C‹ªà\mÊ­©ýÒÜ=~üÇÛ·nöP"¦ö³C)|ôÌÀÍ·´Ð ˜.+@Ö ¸™ÓlùT­¸Z~6øÿžƒ@VRØÂaÓ2¢•óoÑ3VÛã&˜î–Þº—à…)oÕ[ôcYìЕ·àG€AòÓÎ`ö-¬ç‹²*×ÿ1Á¯ÞoÀ€HÀCê‹åé}þ¹hŸ‚€0±ÄH·Rz¦'#X-œRNá;°è$¤YFS>@ÿ`0'¢‹Ux5es¬­9áCû„!Áiõ‡çu|뼎 Ïw›>@ý˜ k ¤ãGm(øEåvÈMX3»Ðf”“ŽÏ¾ë½äpãàÇ]'ÙÔ²ó´>¸uoíÓ± +**¶6Zq²Ûwœ±û =$9î18ó%ßvf8Å`õþžÎkO¹-«ªc{8¶þýa&¶[Óœ¢û±Î÷ ™º–¸õ)‘ Âß“¯åÆÞ¨£Kä‰Ü³¢»g»ƒ©;¦?6Æaàà…ûæíwN&&{á(ᤪ‹1*Ff'LJd¢èƒ1¦ºñŒp!O¡Ê|0d”¤Œ ¶ÅPÄIÐÃ}«µš½ÖKÀƒó¥Þ30ÔyÞ·Es¨šÂÛе£ü€§pá¨d!AoAS— àDýèï{)B@¯{p›#ô“œÜ–Á}9¤[`Ô£üÄC¢¼OHJù÷S±yr°»žÇ÷îþÙ´îlê‹$d€T\iš€ŽŠ7&‰âmÌîP·çì"%' xÔ0g="„¬_N¹A¦Ç²kUöè |‡$‘ï®(c*§°™e<&ÎzDh^匑T\­²GÇùŽH"ßCý¯ˆÊŠQ¢¨Žª0QÖcB³*C/… Bñ Úb)ØCN¸õ!£æ°‰èÈ8%:CÖ#&ÊuLhVGÆàÕ•Šô¾C’öžËïc*+E2 À˜Êg="4¯rBIÉó•*{tœïˆdw”ŸWYK[EFUö˜8ë!§²KZ!Ý_c ”¦WêÐQÆ$½î¦®?Fô牂|–Eõ˜8û2:ty ·{QšÆM,uAÕî°ÓcŠŠP±5í¶ ³öæƒçÖ<Øl÷9ÑÎÏ3‰ºÐ„BKÿLÒ´Ÿò¦«¼$&T6›|·3[r¦‰!RN¨”³6 Í‹fÒÕÉ@*BSP$±¢½³ªC~j h&Ý›» >ÇyÕ;a^Òò?Ñtæ‘tšd2I”œd™édFdÔ*1‘hx´@|e| Ñ»P ¨0vð™—î2L|‡ÒØä{³µ¾Yã‹s¬]t0¶oƒï¶ÀÀ—Ï5ä¦å#ìj¡åÒG(d¥ld:Š_X…ˆ)O„£ VÛ¢r›“CÅEÈ®¸¯óÜüà+ OojMئB` §/ÞÔ½îÁgnê!Éáåu<ƒ¡¡Ó¡<“ÌaâRŒ¡çŽ6®a»k=Úz˜³G¦Ò¥}ïM{¬±º/ÏŸk1¶Ýy6æ;ÐÑŸgƒŒ?@~ôg|BøÃýFÕl“º£ »RgLî1ëhÆñŒ°äDȯœ«iÌI™\”Ÿƒ\`çâ¬Ï޾rݸÇ öRgÚpÚ¹†ŠŒ‰´ß¾àgÛ§Ö6u`3{Àæ)¯çº*}uÃf®}:íd¤D¥áÚ§CÈŒ¾}@¯¢µ«àzÉËIÛIB!Ýw?“„"eî„§+êñͦ6)+ê™Fu0aLH /œ6½îÁgöùä增ó„dz(Ã8Gt(ã™Ù¢€c‡ wúUútœíˆä办C!TWØcâ¬G„æU†ôZA¢z¥Ê}ïä办Cù"’ >ö˜8ë¡y•a3%ìÚ¨è |‡$/øBÀå£eT倉²šUY(ÏDr¥Ê}ïäå²TwqÅTö˜8ë¡y•SjSÀ+Uöè8ßÉ˾¤’0ÕØC¢ŒGdBuŸ&sÕ½„ƒN¦×ú: ãüG$¯«îeªlû>ª½ÇÄÙ§P˜ 7ר¸™EôÓþ7­Ïªª^‘ïòm[E‡”k[ÔfãÒ{©»Ú?)åáá+Æ®@2à ÀenE>“@Å•$úOôü÷–_¡ Q]êe@˜s95K <“Ý…œº‡9—SCêN8ã¿§]0Ãù|z=a®]0W¶ †éܰe¥ˆÚ&`&’ Û >¤m}É^cµá¿„?…•oÚò¦ÿ€  ¿ƒ±u¤Ô¾Ê ?-°%š8uŽ\xì‹Ýso•‹„ÂS<•üêTò7䬣¤"EÅëŸ較<æJù> endobj 5396 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 5397 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 5398 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 5399 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 5400 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 5401 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 5402 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 5403 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 5404 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 5406 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 5407 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 5408 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 5409 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 5410 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 5411 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 5412 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 5393 0 obj << /D [5391 0 R /XYZ 90 757.935 null] >> endobj 530 0 obj << /D [5391 0 R /XYZ 90 733.028 null] >> endobj 5387 0 obj << /D [5391 0 R /XYZ 90 716.221 null] >> endobj 5394 0 obj << /D [5391 0 R /XYZ 90 716.221 null] >> endobj 534 0 obj << /D [5391 0 R /XYZ 90 502.748 null] >> endobj 5388 0 obj << /D [5391 0 R /XYZ 90 480.436 null] >> endobj 5395 0 obj << /D [5391 0 R /XYZ 90 480.436 null] >> endobj 2429 0 obj << /D [5391 0 R /XYZ 90 266.514 null] >> endobj 5405 0 obj << /D [5391 0 R /XYZ 90 251.947 null] >> endobj 5389 0 obj << /D [5391 0 R /XYZ 90 89.441 null] >> endobj 5390 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5415 0 obj << /Length 2074 /Filter /FlateDecode >> stream xÚµZ[¯ÛD~ϯˆàőȲ÷KAHPhUTQh#ñ¥‰“‘ã€ãô¯göâx}Ûœž‡ãØãùff¿og×6™bø#Sƒ§J(d˜˜®î'xº…³Ï'$\Ãåytý»ÅäËg îBF²ébãn— J¦‹õo™DDÏæcœ½_«r·‘¡»Ùœ œ=Ûísô:ßäåŒè,/f$[Ù³Ê0“)g,~œü°8‡LÚþ™üöž®!Ð'1£§ïá#bÌô~Â) ÇûÉ›É/gþ<ƒóC9 Â.'IÂRÔI*Äký»ÜÕæÏ·3гӯ§ø;øÝŒàì°[CŽð“ØÔr·KʯþÍ`óå3JtaPî³öÖ«s5gDfe^ÀwYýïê.÷ËõºÌp)\8lZ"ȼ,–{ÚŽT±õWê8¨Èì¹ë«2_VùÚ¼¿ƒAë Ç1A¦ Ä9ñe¶Êm°x¼¶žGæ®èqÚ]—íjóê\Šn,R#)y;–Î×6éAëV»PÐ]1ã8{gkuøËŽ2TÇŽîœiÓœd„'Ìû]°«ŽA /^þà‡šðh¨‚ŸõHcÖ'ƒB\Ñ`±t Úžîó¢ò^¡*þ :øÿÿæåu ¤ÂÄL%7Hi>XŸ`2lzªÐa̧R*¤™r½>–VñÅñI•`Š£IØÚ¦‡—€`…H¶¶±Àß:¾Û±ÁÊ“þ{²ÃA ;ÈaïOœùǾ ˜®fs®I¶¨o?àè~ùÑlÊÜ]´ŠÚùsÁ~µÜï-b—ª”#Îx»&ã² ÖÉêt]>\6š#ÅUr|j›tE;§[‰e-Œ°¡-™¼³¥[îaºœS.G$ÂA"p”ÒGF“`ñ…õ¥²m‘Å70ôëé ?Ü[,;žÍÔjÏ€Ý~÷Öß å²üLOŪÚ ÿëþt¬¼ÑO¯ìŒ°ð§ßæþäÐ4á êû=}¬éêPxW2ûûàë¹èÒÝÕ…Ú@õÒFqh·ê±º®óÍqS:hNÀÆsúù®XíOë`GHk¢RÐ{}¿îû…‚ù~YÝA = ²€Žê¾éû˜˜ìmµËsDs ™~©BÙ6»-ºûì\¨8Fa5àÙõ= 0¦tÅþC` ”5£+ èúÀt$ApúìÃñ’RÑŸÿà*’XµMÁ±j~¾ÙõP¹DŠª6êè S[§ñ;.-þ¯Oß,^¿xþçÂRëÕËn”¸E's¯m’Ø”hD¡1ÅØ$‡ºõ«­`ž SnˆcÙ"‘°àSp88  ëÅyäÀEÃéTC4ÒU‚B Ôg DzÃýrWÔMxŸ»n¸,VA~›Cé–Ç]M8öL±«Ã±} ¦Ðvæ¦#M¦Tƒå©6†–Àœkè»~ô,L‚CbâT"Ì娘¢ë£bªm.‰)…uS0ˆ)„ñv? $Žé@&”ä­Óà—݃–°,R*m°IBç ²­¥ZÈ8ðp»Ï‡gžA'‚…Ú> endobj 5418 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 5419 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 5421 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 5423 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 5424 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 5425 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 5426 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 5427 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 5428 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 5429 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 5430 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 5416 0 obj << /D [5414 0 R /XYZ 90 757.935 null] >> endobj 5417 0 obj << /D [5414 0 R /XYZ 90 733.028 null] >> endobj 1095 0 obj << /D [5414 0 R /XYZ 90 625.71 null] >> endobj 538 0 obj << /D [5414 0 R /XYZ 90 621.102 null] >> endobj 5420 0 obj << /D [5414 0 R /XYZ 90 522.63 null] >> endobj 5422 0 obj << /D [5414 0 R /XYZ 90 441.867 null] >> endobj 5413 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R /F11 1069 0 R /F42 818 0 R /F53 5433 0 R /F55 5436 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5448 0 obj << /Length 2282 /Filter /FlateDecode >> stream xÚ­Ymܶþ~¿b›¢¨‘õb$;v¸pr>Àl#àI¼=¥Zi+i}¹ß©Õ®ö´E¯8à–"‡Ã™g^4CñU|•G«T¥,—jUl¯¢Õfß\q·Âr8Yÿñæê»×v±<‘«›;»=áL ¾º)? ãÙ:äQE?tÕfÍUÀîסPQ𺪠®ÍéÖ< L³æA³i.ó€'éúËÍÏW?ÝŒ"8•LP€_}ú­Jô竈É<[=À8b<ÏWÛ«XH7®¯>\ý:ò y óçtT\^VRH%jT’q§æ+3hP«$½^™¾èªÝPµ Vƒª|÷Zˆ'@SÄLƹeôñÔE΃Òèºj6ôðP ÷4*Lmú¡Òµ{lÛ®¬=zîûÁl{zÐMéfw÷¦« ¿i×µ¿›$jáçHE}»u<¶mgú–ÆÃ½vò´ðè’Ós5¸ßuB58g¹"<Ú»Áê‘d G_uúÖš9Iƒ¡¥é}oh ÿ»Ù׺£‡­Ñý¾ó[îõ@Ó 8:Ï× ˜ï68ÿ‡.agv ƒAÄŠÒt{G¿  jXö¥™.§‡å¦í÷3ꡘYôí~ÑÓ®­ [‡1OƒË!SÁÇ—Þ½ý‘Ö»v?T•V˜<í][×íZ(°¶µ;®ADÕ¦mÀ8:ÍÞí›Ñz°Ïáƒäú_kŽŸ—²3þkhPÿ9£RÕ»–ÉMgLÿâLÜ%R1‘ÄO&†Éº™©§ó(a±ÌFxìg!Ôé1<‚-B-³<0²K8ÑmÜÊõD Î.J/H刦Rm_bLXo?•Næ,‹ä"1‘„Iž‹+&E°ÍE°¼ž Ö’T¬‰T}Õ,€iRÛ‚taL$ÖÓ¯•+CZ^ËÓ\kÂë™`-J刦R z¬$O—¤C°ä"X)°È–=ËÓ\ëÀë¹`-IåÁšH¥ã0Ž™€àZ/TDr-¥˜J.¸–£¹ˆÖ×sÑZ’Ê£5‘J/b,˜Jå’x¡"’KYKAâKdºŒ–£¹ˆÖ×sÑZ’Ê£5‘J/Fb,‡úuA<8Ð’\ô-È|)Ëh9š‹hx=­%©¶1´oÚ„áÌC§w;hé ›-·ý ±+uWº¼°£I'ƒ· fyÌ¥Óe¥›3 ‹k¿¥¶E—%5M0 AîixgÁÄCÝÒåðŒ“ä¿rÑdÁEc¦2òP¢r.Ç“”EVº)Kuÿ †Ïàÿ¯«éÖq|;¯ Aórd›”_Ê[Ž8îð2©~t~ hÉ\¡%¢¿¸Ä IÏâíZDÁ~pQiÓ j£Ýu™½‚_ë$§­‹×ÆhÇ‚.L¦L¡0½œ‹0½3žOîæÄx7÷9ŠDã¼j‹ýè>ÇLnãhëx±÷çòh·‡ä¼AxÿŽæ¹ò³}6ðIªWíVû;—ôètS˜“¤5* ¥=fбž ÉÆA†mÒñÒô‚h‚©ö÷K'ç€R² |ݵUã,ÅC™Nwk¦ëÚŽ@5¢TöÖ¹5Ÿ^“Bìóé×s©[®+Ÿ™GX¼ú€ÍÆÌb&Q,SÂíæó³¡P3Òò÷n9žV“Lq/ÛïóíÂæ³#ѧÛ¸Fúônè²Æpþ~îÓ³ÑfB›3p9¼Iˆì#8¡Ì±2œ÷a 5x]È!\¯×a¼…ù,x3Çû/Éoó3|%l+H:â=–Á»9+ŒŒñnªÑ^ÎWªºvAî 7tFþ"\÷só2_6B¶l„fçmðÃø=!õ~r¤•d"ö\Îd“Pªœ %çIEº¼ðÚ…ÛiRÁ7ÊÓyEŽy¥l÷·þ3ö >*UäV¬LñÔDÊI'´-Òç‚C…›ä€± ±Ê";Š]{ê 2ãùÁ$ÃPÑÝŸ*°©|v´…¯MSþwS nuS*žæ8ì'7Ðì´É‹@"žqÆŸèËI8¡™}½Ér(ÄâÏ!?‘E~±¯©No ¼©æ7ßк²TŠsÏK!G;“à8û@z‚÷»§!„ã蜩Y¬âSKŸÞíd _DÅÓÌ„:²wœ²,>ê“3Ç—'m!SèÊ“e[hž´…:Üû]£sá©Í‚%Ž=XàäÜãÛgGƒ¿<㿇—0bÏÎ|ô ÔÙ¾õ¿¥¤ÏPZó| Þ¡*OGñߘêˆ1áú„t³Î¡`vZ¼/\¶Ž]±’¿ˆÄ Ñ“ˆ¸/!0>}€íÄ®ý…[™-¨l¦ôIïÇiNÑÁï¨sxþäçð endstream endobj 5447 0 obj << /Type /Page /Contents 5448 0 R /Resources 5446 0 R /MediaBox [0 0 595.276 841.89] /Parent 5386 0 R /Annots [ 5450 0 R 5451 0 R 5452 0 R 5453 0 R 5454 0 R 5455 0 R 5456 0 R 5457 0 R 5458 0 R ] >> endobj 5450 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 5451 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 5452 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 5453 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 5454 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 5455 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 5456 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 5457 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 5458 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 5449 0 obj << /D [5447 0 R /XYZ 90 757.935 null] >> endobj 542 0 obj << /D [5447 0 R /XYZ 90 733.028 null] >> endobj 546 0 obj << /D [5447 0 R /XYZ 90 374.072 null] >> endobj 5437 0 obj << /D [5447 0 R /XYZ 90 351.761 null] >> endobj 5459 0 obj << /D [5447 0 R /XYZ 90 351.761 null] >> endobj 550 0 obj << /D [5447 0 R /XYZ 90 281.946 null] >> endobj 5438 0 obj << /D [5447 0 R /XYZ 90 259.968 null] >> endobj 5460 0 obj << /D [5447 0 R /XYZ 90 259.968 null] >> endobj 5439 0 obj << /D [5447 0 R /XYZ 90 125.317 null] >> endobj 5446 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F8 1129 0 R /F13 1157 0 R /F11 1069 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5463 0 obj << /Length 1185 /Filter /FlateDecode >> stream xÚ­XËnÛ8Ýû+4; ¨Y^¾™e;“¢Å3Ó˜Eš…+®ÄÆÈN›þý\JÔ“c¥¢¥kžû:‡×‚„âK-5±\&· šlñî‡ø§K|¼ì<·Z¼½äø+bOVwåÏÉ Ym®SEÀdK ”¦?n§b·Í@¦ä[¶d’¦—»û¼Z}Îïò"“æû Ò[wW[nSP&»Y}Zü±j\ðJ®œÿ-®oh²AG?-(áÖ$?pM X›<,ã~}¿¸ZüÓìQÝçx,F üù 'TÉ&H ón_븎»ý¦Z}¡’–O0¾ÜÅôöR˜vK`†®Ñ·ãz¿½÷F]\ƈ²ÒÛà†àL’%H À.4QL”OKàrÆ:(šhz½-7)ý+òÓc±?V_NßZÿýêpW]×ûúº-ƒ6Ýî2&Ó﮲¹ºó×Mîîn‹R‚j›ûl/Ô:ùÞÆ_-Ûts™uòÊÇm³Äì‚Ô]RsOêﮩ»MC‹ÛÃñLfsÀœÌaö›l)[)m»Ç ÑM#}¡”‡˜šͼúâa3‚3ðäÙx˜˜<”GÓØ¡Ø/á*Sh—K#}™v­kÆÛîÀrMh.MÓ$"¥ŒÒ©c3E'ɱ-¨ž£j#ÈÓÔº0¦kµÍk[,-² “¶®SÓÚVÇ)¬! d\f:F“¹¨mìoÏ$ÂӮ疓KˆûãmziàšðN`gËÞhv 6™~.;­Ñtv¼Í9Ùñ"ÑÏ'Bè¸?Þ&ð§Ÿ¥Pmºþ¼?çæÇóTànVó(•;6ST8NR¦Î>c°mU"¸8£r«ˆÕ=ÎÄÈŒzZ3êè1Fñƒ¨è°Q=/QÃÕ®õ ‘Çm¶ùþ49£¢È¿Ž¤s.‰°Ñ6hM¦º€KN$ê× Aq§ûaàÀI½Ék¨y$#˜<ÓòŽGÏŽ©ÌâÀ`âUèØL–Z„†³Éƒm’?Ä›Sk¼ÊLÙ¡A÷þʸ*Gø½ž1ªâ± 5ŸBdA¬ÞÜbkzW‚»âð_³¡0ƒßÈPA=i‹cÞãÊæ² f‰ªhul¦ˆQ…§´™Ããäé^º0ÆäÚæL*?Ž1IÍc)©m‡úç-%ÀlÏ¡º$M ×éÕòz o`’â μñ÷›© £ÈsãŠÇ`Û² pÇ(^Û8à“Í;Ež|f&õOsiqäu¢ äË_‡•oõþ̓žl*.„Ÿ%<º‹êC¾Ï‹õ)÷šrð¥^e–¥>°¿n½¨‰êö‚² N«oŒ‚'ý;’Eõåß÷W"«?¾ó?%ƽSs˯?«ëŸ(˜Ãì¸vazþ…¦( endstream endobj 5462 0 obj << /Type /Page /Contents 5463 0 R /Resources 5461 0 R /MediaBox [0 0 595.276 841.89] /Parent 5386 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 << /F31 604 0 R /F48 2408 0 R /F22 597 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5471 0 obj << /Length 1739 /Filter /FlateDecode >> stream xÚµYYoÛ8~÷¯0ÚˆXÞG÷)½²)‚¶›d±mQ¸¶âpäT¶7ɿߡHZ´Æi°ÓâhÎïŽd2ÄðG†•PÈ01œÞ ðpWOÄïf°Eûo.¯>0¸ Ɇ—WÕí’ AÉðröu$1ãŒ`ŒGwÓõ¶XlÖèzœQGËÜ­Îó«¼3Ê‹©½¤˜T#"ÍøûåÇÁûËqïš`Òšþ5øúgàâÇFÌèá¬14̯ۧ—ƒ‹Á_;î:ƒë]Ñ Â2„¥áiÄô!ÎVÛŸ!¨ÉzQÌÜòØnÉv!¨W¸®uÆ'<°*œ@l”£Êëjt+1ÌSHs …$åÕ®3Z) ´V@)RXÔp¥¥ò­Ì7Û²X»/›kïü¢s<úwLÄ(/×þ"èÛIá–³Ü ÍË<_£f½´@â’’B|¼3á^$‹dZ9×ȧRcÄ¥ªbø2&árr“oÀ¿×MÃCÀŒvYnyd[.À².VH6‚ŒË#ÇÅÁãZî9F9éŒx‘–;q= 5H(²ç΢hÔ°œs¿üš‘#ò½·>Ä ¦uº>µLo}ÜùrnAeqQ$j“°Zפav/ ¡&^Æ>Mãvuå>|Z¤‡®x˜L+BãŒa=:µã|´°€àÀÀ_ÛŘ  #ü›TT¨X[›•µ˜i7À6r5)!C„÷DàÕJï°OFUDª/"öH‰“ðÕ¶˜n«ÂyY¡ >ÿy{áÜÿbñ7¹ŽJwåôô(D´ÚίÝún±ñ« LDPñu>sâ“ê™c¾½Œôg F, £Vª1G2}™ÁðJ ›<á8ë°Üߣ›.tgAæ™Ãk*#axmºÓ5¼ÆîÔÔkÁ º4i>Åê¢;Rgu¿A½iåñô·éOe%q`"ïÛ‰ЉtÊ/Ñpe/Ì"ÊD®šÄû®$JÃHb &›ôŒÉô’ž¤9×O+)³uñv»¦• S±ÑŸVvx°ånBiv/3G|ˆÿŸÚ  ãDÇt!;aµS)p@É'¿tÑC0®=ÀpæÁs7•Æ—‹bºÜ‚#™¥/@k^–èúE{Òû­pì}ïòoÓ"_w¼Ê!†ÂȨ{ß2Eû…Ð3½ÓQe’RÑFÜ“UÊVI$¼:Öcƒ/g>º–U ¤¢jߪÝ(ç^â<¶ï¥Óö*­}8 ÿþtzyñãËÙñ§÷?Ž?œ½oºBP ÆæT‚LÒª`Žî9€ÛéV0/‚RHÈÎWlD"ÃìxÔw|`cì@¼SPy-¼ÝùõΆu丬ZÇä!<­R)†FW}½Zy~ß.'áM@DõŠþ!åá¶âê LJ$É“ãb!,Š4‘ýˆ )ÃÓˆ÷2"¾Ö•@|Ê`@|dðqÄÇV@|Ê~Cåâ/>Ÿ¾ëC<††H“ 2I,-ˆ¦{^`Ø×3Z<ñµ‚^Ä{‘' ~½Z.fÏC<ÕSù<È«~ÈÃaH±ICÞË< ùZWò)ƒò‘ÁÇ![=ò)û •{ûçñùIíœ!¡Y2ö “´MÁ6†á%¶M{Aq÷àz ÖÃí½H¯ž€ó©º†9Ž©ÑÜ>^ýÒa(åü÷{;x®u'ÐíTE¤øý߬*¦H £«‰Çið æ~”ðL%\ÊNò"/ax÷¼_ùß.Ç†Ž¶>/Ÿ§þMwļÆô5ÃîÅÄ¿/¾²o B’Šgð°}úÆßŠ4¢nùÓ—çÝêþažÍ Û_Õ¼ƒQzþp Wø endstream endobj 5470 0 obj << /Type /Page /Contents 5471 0 R /Resources 5469 0 R /MediaBox [0 0 595.276 841.89] /Parent 5386 0 R /Annots [ 5477 0 R 5478 0 R 5479 0 R ] >> endobj 5477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 190.201 274.457 200.129] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_6ef9e3ba449b38275c422e454abe3601) >> >> endobj 5478 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 151.617 271.688 161.545] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_69241e398126a72e5d095ed3aff156c3) >> >> endobj 5479 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 113.033 244.58 122.96] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_45b2d15aa5504b7e7e8b7b345d090f32) >> >> endobj 5472 0 obj << /D [5470 0 R /XYZ 90 757.935 null] >> endobj 5473 0 obj << /D [5470 0 R /XYZ 90 733.028 null] >> endobj 5444 0 obj << /D [5470 0 R /XYZ 90 607.943 null] >> endobj 5474 0 obj << /D [5470 0 R /XYZ 90 593.494 null] >> endobj 5445 0 obj << /D [5470 0 R /XYZ 90 464.927 null] >> endobj 5475 0 obj << /D [5470 0 R /XYZ 90 450.478 null] >> endobj 1096 0 obj << /D [5470 0 R /XYZ 90 293.618 null] >> endobj 554 0 obj << /D [5470 0 R /XYZ 90 288.457 null] >> endobj 5476 0 obj << /D [5470 0 R /XYZ 90 208.064 null] >> endobj 5469 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F22 597 0 R /F14 1084 0 R /F11 1069 0 R /F8 1129 0 R /F40 783 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5485 0 obj << /Length 1797 /Filter /FlateDecode >> stream xÚµš[sÚ8€ßùÌì Ÿ$>dùȬOí?Ö7´¯¥&†Ëþõ´GûwöÝ÷=æ>=°Ÿ¿÷~}ÇíYÄ(Þß>Ÿ®‘Àúã›OE˜0JéàÇõãr6Y<’oÃtðnr_ÖGçåmù0dfPή«·4WzÀ4~èÆ+¸kšäªBÿÛûô…öol?ô(á¦èÿ°ÇÔMÚÀÝñ}ï¢÷û*Gý>·ï¿Ô»êÓ.H¡ÓN¨Zw`ÝyF¼èû˜j>ÈfGµ§€ì¹Z,ƒ™ †êøËMù™R˜•-ªPDƒŽ©Õw.â<ä»hœßHYñÿ|sqyz4¾øçäìxÔlpJ ÉОû” œ. "óö8k” ¢aÖÈhLY•µ=|ñ;A¨Uå HðÜ .lKÔó€!´X1ª†>Xåàê©ö{2»)‡@?ë?oçõÁtîÏ?Œúpñô½¬N&©Î(S¿ví w}a@ŒdI¿U!0†úícr~¹Ò~£@çwÌúQó~£üFÊÈïñèäãèüpÈŒ/ÏÛ®k;â`ÐQð1h+@+;¡FI;”! ôöª Rªûª/Êé÷²Ž\,†\¶1_„[þ¾Ì’p©qó]LÖüu.Ä| èÍ€yóCêæcüFÊÈüãË“£Óñè´e¼DYa°Þû”ö2Ï8Dt™ÔÂ^/ã;(¿NTÞ…tPþ~9ÌæËGµ(g“ÅÓÚ3C„»iií­Ú’®½‹Éj¿Î…h½ö0¯}HÝ@{ŒßH/h/.ZÊ[?´Ä{îcP2p TDV)%¤±Kli¶W>HRÞ‡tYÐ\=>v÷[”¨}Ù-•¶ÓMÚícrv¹Òv£@gwÌÚQóv£üFÊxR¾ÿÖò[ª@ûîcP6Ûw¶N*!h*vð{ é· é2¥—³»Å·- Œh!÷µp‘PmÉ:¾Î…8޽ã0ïxHÝÀqŒßH/ÙNÚËt°_VhÏ} J®¦y¡TD.’J0norw|u~Òï:¢Ë"}2ÝbUn/V¤0l_r‹Â0î¶ É©½Î”6£9±ZÖë™×ƒÇ #©_OÚuF5XŸ}†­ª,&„š”ÂÞÈ£¶:H2Ú‡tPúky5í®´P¶Q\ïkM"$³ÝÁKˆ>&+õ:b5ôZÀ¼×!u±1~#e¬öQûÓÞ é‚£÷1(À.¸5ÀŒ&•àŠ0±C 1HôÛ…tñ{2ÛBo„{« û¹\p½]LVïu.Do èõ€y½CêzcüFʆÞã¶ÞQZ£÷1(€Ù/;3–R‚M Ø¡l$HéíC:é½è®7/á°·2!לp— }LNï WZoèôY½#j^o”ßHéýæìò´-8¯¾ƒíºAÑÀírL„f”Bö›Ù¡H$H îB:~=_ζQ\hbWCûZ p'/ ú˜¬âë\ˆâÐ+óŠ‡Ô Çø”’àPÐÁ{{|ù¶}g©€Hë 6>m(i×£ùYÞw7”½…Q{+‚T¤`xYÅÇd_çBÇ€^ñ˜W<¤n 8Æo¤Œ¿8;ö{üGgí OëƒVèø´ ùó–zØ–ÜñÁÈ.‹õõùIÑëˆ.Óû<˜Üý6ÛñŸÌ·øØ°½•iT›^ô¿Éê¿Ê„ØÐ¼ükZÞý¹úÝ•³æKÆ}ƒáùŽ– q endstream endobj 5484 0 obj << /Type /Page /Contents 5485 0 R /Resources 5483 0 R /MediaBox [0 0 595.276 841.89] /Parent 5502 0 R /Annots [ 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 5499 0 R 5500 0 R 5501 0 R ] >> endobj 5487 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 720.889 231.847 730.816] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_807ef7c93e34207776303badf177fa41) >> >> endobj 5488 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 682.034 275.025 691.962] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_8bb521a40223ec7358f85d719834ad7f) >> >> endobj 5489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 643.18 255.638 653.108] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0967644d30d7f98f21b6bb0e68a637c0) >> >> endobj 5490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 604.326 230.751 614.253] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_8f84e63b1fa2003f3438e7cd21231b92) >> >> endobj 5491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 565.471 243.464 575.399] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_59e3354bb9908a4841aa478f2dbd3973) >> >> endobj 5492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 526.617 227.972 536.545] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_347b88663166b66404cbb2f8aac211bb) >> >> endobj 5493 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 487.763 232.405 497.69] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_11a1284e63c7515fd0240ca8f85fc111) >> >> endobj 5494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 448.908 220.779 458.836] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_84fdca1d2c8647a2f33a760578de62c6) >> >> endobj 5495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 410.054 219.673 419.982] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_7332ce1c3c715011599d4b9d13e7b760) >> >> endobj 5496 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 371.2 237.935 381.128] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_27df51b1593f3642bfd9833e71c73a34) >> >> endobj 5497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 332.346 263.538 342.273] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_ce657c3f971b4ac9004a2639d142f636) >> >> endobj 5498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 293.491 231.847 303.419] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_2cf5fc976d2663fed07f1f837245f36b) >> >> endobj 5499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 254.637 251.772 264.565] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_b622892a80194a6a432510665156e4fb) >> >> endobj 5500 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 215.783 236.58 225.71] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_946bca82ae3fb279ad3d86dbc793be07) >> >> endobj 5501 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.731 176.928 235.723 186.856] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_7daf2b3a5c7e96f2823bca916554cc4b) >> >> endobj 5486 0 obj << /D [5484 0 R /XYZ 90 757.935 null] >> endobj 5483 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5520 0 obj << /Length 3035 /Filter /FlateDecode >> stream xÚå[moÛ8þž_‘2Póø.ªÀ}HÒ´È^ëä÷n½Eà:Jb ±³²¼Ýâpÿý†“’8vúòé°èV•Í3Î<R2;¤ð;,èa®rRu8< ‡wpöÝsWÇpy\?žüå­€»H¡Åáô¶¹]3¢8;œÞ|Ê4aÅhÌ(¥Ù—ùz³\Ôkr?sE³·‹‡²=º,oËjÄŠ¬\Îí©\èýFoÀÅ_(…9üÇ‹ÃÇÉ…;~8¸:øû³ö¼€óC£SLì„jÕ ït¹y,«Y½X-×CÞRJ”LÇñùrÃÃù–‡QM¤0Þ‚åú7çªËÁ(ÜÁFä!(“¤ yÈVÂÈzl¢€àˈ͞¯îà2äu`”76hy}–\—Uõ¸¾»òƒ I˜6ب=cçB­Šý?½!»Èh#Ió±cÌ=àÉ`{Œåý89›^^^^_}<99½ºê˜1’»Ñ²Ã äœÁa!#ò¿ŽÆ†«Œ¾ê±*J µçØg F#? •½¹ž|üpýáãˆeïGϦgïÏN/»žI¦‰á9A=’\ ×âÁzñJEÁÃâÑ8Çd’±uàp,$#Ôä6½ z­ð¼IšMÞ½?›¼»>>›œ_ô& ç¼ÉŠÁŒi!ãÓŸ2*AˆžÍ¸øXÕæý|áœ(*bÎtÂ84Nß19˜2gpâìè=äÌõÕ¿>Ÿ¿ï:& ºF 4ƒº#LN„ ‡x•Ô¥IaøÞÚ±…§µÃa¢p¼ý89™žO®O ç“éé¯ÓÞ å”Ø'`äR7+u„F¤2‘#O›Lö"!˜!y®÷Œ„G£tM&Æé¯È È@ZÈ<…(Ðhx êŒ4rG DÃd*´jß¼ØÂÓyá0Q4>NÚx¼¿>¾<²ºaóão§ýäP‚hè­"¿ºÉá0¨7ÂÀ¸Ž¼qU¢û¢‘Óš·ý¢áÑ8Çd"östy:é¥kaˆÊA‘ °Tó¡@äé´àá\ï[x:-& ÄÉùäêôÄ><¬\\ô{iˆ *ö§›ƒzÁˆ¥Ô‘)ufÒAN‹=£àÑ8Çd—p| ÿ´Õqáè7T€(æh0<uFRУè7–*°üØ/ówLê¦o<˜‚ɨñ°Øë«‹Ó“^úêœHQf9áPƒk‡ ~Òj84Ïv‚šaý•°"fMCãü“ƒ²ÏÚ^ÅÛ+Ùž Ç .jŸ#j0,- 6rÿÇÉ3:--¤#ŸWGoO¯§ð$aÙd@4àÖÜD¾ô4£…`p ‰¢‹Ð?~Þþý_˯ÍÇLµw'´½ëíf9O­Î•„Bž^žדësÙµ@ǸžWè(¡›“p±¬{|Ùè˜/ 3wL†«ôrHtnðñ: Î ]¨î˜*:‡¹¬!Š<›ßϪöè~6â4ûcÄTV~‚¾Këì·W#¨µ"Ä1šÍ–uƒÍÖd7«Í燲M,&_ ë§¢ï[/¨h1‘®BÁ2‡XÏg¥ãOÙ„uŸR»Mr‡XÝŽ`Iz».ë]v ¬÷öôieÍ~)+ûà{åT?gÍ'Týu]mæuj?þ‚ûnðäŽÇ¸d+«ªŸiFÚ!ïeZ‹éQF³«m'§"J¹áèÙ?)à¤$ë×|N€§ÊvÈ3ú.r8ôšKB ±À@ãµä‡èu[•…hi´$ºǦ6ÛÃõS9_ÀPø¼Ù¥lOBQØ ÿÃîºΓä @œ˜R/„pc`œÆ“+ M„¨ÆzÌ. l¥5%tjl‰bb>Dc[4ÎÜ1é5¶®–+ˆa@‡ë08)T‡ÈE_X;ä6Mêêá•;lµÓçV]2Û¤Ù @p#€,ß3R:Ý5™Á(Q,Gãä1=ÊP ƒ†vòðG„4 ÄÎ|»@Rá!ÖéH©¬²OÉÙrýè<]š¿—«åx]Ï–70Ù"Ïn¶3>$&ÙrT Op•?M9 ÙËuŽ+‡ÃìTŽ­-D90B¯!¦!ßÊ1wLzå€ÞæùϦ%ê+ˆ$–aè°'‡N®Ãöh{è† R\p…¥i¾ws =¾3—ìŠ8á°èzi˜ÜŽa/å“ÐÇHYì9Ó»k2­|›[{½G†KBKÔaÂOì)x’7êøí‚·5<yYGô4k[!Û1–¥EÍ.-©øi¢Æ Û*.j³SÔ¶¶Qý¨„˜¨…|{ˆÆÜ1.9ûbf_Åh|¸ƒ“jEx7©f‰§k®ûø'¦W ºÅ¿K°ú(‰¢jo“ÑŠµ ‹c®_¾ä ¨ImWZ¤Kd{=]"³³D®m‰`„¾DB¬DB¾=Jcî˜ V =vUà£uœSÛ8º/]/$f]ðZ'g=¸žœuÙ5ë×󬣄nÖCBdÖ#¾Ý³Ž2wLv»½ž6R"ÙŽ; Î ZP‡øÿ¦Óó9ÛÙnæBaÜv³nëáöuÒ¬ZÌÀÒО³Я$^ 4y¾½žÎs‡Ù™ç×6Ï1BŸçawÆ{ aª;¥qRªæ¾È½tY84îhÇäÀ‡dýoÈ`Q¯8$A¹¹n)"nÿ”Ou‘‚Û¯Óô·÷ÁTì!ÖŸ«zVo\ûÛ¬ìËzS¹Î÷±\¯g¶;¹³ÿ+Óëy» Âiþ³Z_Aíg™ Ï|‡Ù™ù[[Hæc„>ó˜ù¡{{d>æhÇd”ùõ×§¾q±d9#A©9‡”£ñ¤ìJ|nÀÝâÛó~{*íÂ:3™AnÇ\O÷_× üö_¿o #_Ô $éí§$Z°Ÿ•ô:*ÃðfÖcv%}`+ô(¡KúðÇ%}äÞî¤G혌’~p‘È!r¸‹‘Ç ÔЭ®dD½3é%¬¾ç=P` ™ö’ÈûöÃû¤ƒBÃsN}‡ƒ[C_Ìs* åÒÏ? Ìý$àMYÏ¥Ûg~S®çÕâÉî,³lÙïÛl½H"dõËÕ¦^,ý@îiVß/ü6ÏfQ»fî¦l*^Ù—E}¿kCÈ-oâ—eÍZ¿²/ËÖ¯:;Ö|å”þÑDp=Y곫Ô.ÿÒxϯ@P¯(ôêùÅ¿íþ·ú`9a„DÃá18{Çe=²ol²»…ÝBh'ÄÏ{³Á²B_X@VÁÜùf¿¬+>yÊÔ”·ço«Õ£+¬¥¿gÕ¹wG•}ÑB†’Äv”…I'Éöz:Ifg’¤¹^š$˜W>I¯ü›ËdŽØñÀj‹†ÇàäC.G¸ÑY]µï¸ "›—hGÊa~Wˇ¯í¥ÍºQ 8ÿÙnêmêötð2Ì]vy×`y»XÞ¢Ža±™Õíõ…ã‚¥n¹¼ñF› ³ŸKçÉìÁJ^ó­…äЬѧŸËÛUÕeHºÏ8#l÷;g‡ð~ð:&‡Þ%gÐhz»ÓA‡Á0†ä¢ˆ¸_Ìï}™5“Ôl¸.o¼ÚÓbHv•½{£=Xö³"½ï\O¤Ãì,È4×K óÊdàÕÞÓª ÐE`Qñ܉Ž!/Þ¹´oZÖÍ<–Íì_<œNø—{icøó\²ÿÒ®7ݱû-ŸPïÕ× ÕýäF»¨¿Ž´Ê¬ææCí¶w¶ª óæáˆ¾U÷,´¸’Æ?¿Ù>¼þÏg Û¥ÅpÃe?:,ˆRƒC!|nMÿm?mlVC=½«ýÒ—öû¹Û€Ýá]¹´¿\ôÍ—ÏÔn`mܳì|Ò}|Y¼¦üµ î@”1÷\´Q]¹í¿ž\ٟ✻[‰!î›ÍÏ®–߬þüzWöö©í/ûáù_$Óà endstream endobj 5519 0 obj << /Type /Page /Contents 5520 0 R /Resources 5518 0 R /MediaBox [0 0 595.276 841.89] /Parent 5502 0 R /Annots [ 5523 0 R 5524 0 R 5525 0 R 5526 0 R 5527 0 R 5528 0 R 5529 0 R 5530 0 R 5531 0 R 5532 0 R 5533 0 R 5534 0 R 5535 0 R 5536 0 R 5537 0 R 5538 0 R 5540 0 R 5541 0 R 5542 0 R 5543 0 R 5544 0 R 5545 0 R 5546 0 R 5547 0 R 5548 0 R 5550 0 R 5551 0 R 5552 0 R 5553 0 R 5554 0 R 5555 0 R 5556 0 R ] >> endobj 5523 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 5524 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 5525 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 5526 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 5527 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 5528 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 5529 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 5530 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 5531 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 5532 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 5533 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 5534 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 5535 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 5536 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 5537 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 5538 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 5540 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 5541 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 5542 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 5543 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 5544 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 5545 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 5546 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 5547 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 5548 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 5550 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 5551 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 5552 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 5553 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 5554 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 5555 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 5556 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 5521 0 obj << /D [5519 0 R /XYZ 90 757.935 null] >> endobj 5522 0 obj << /D [5519 0 R /XYZ 90 716.221 null] >> endobj 5539 0 obj << /D [5519 0 R /XYZ 90 562.556 null] >> endobj 5549 0 obj << /D [5519 0 R /XYZ 90 354.653 null] >> endobj 558 0 obj << /D [5519 0 R /XYZ 90 221.61 null] >> endobj 5518 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5580 0 obj << /Length 2269 /Filter /FlateDecode >> stream xÚµZßoÛ¶}Ï_aì¾ØÀÇß"÷–®i–!I·ÄÅ}èŠÂITÇ€íôÚÎÚü÷ûh’6II[¬(ŠHäÑùÈOâñá'‘†d¤ñ¨5ÒLŒîW'x4‡Öóâz+讂þWÓ“Ÿß0¸ iÉFÓOûË%A‚’ÑôáýX"¢'Á¿ÜoŸ×‹Ý=N**ðøÍbÙØ£›æS³™=nÖ÷¦©f²“šN>L?9›‚»¡ &MèÿŸ¼ÿ€G0ÄßO0bZ¾À1†€z´:ᔹãåÉíÉŸÛΠ½kv‚°áéQ†°‡é!ê&øºù cºv“zýtÿ¼jÖ»Ùnñ´63åˆq\Šˆ»ø?ÑÕÿûõöÝõÅôvBÆÿ¸<½>ûxz}~yf;±¡ûù ¥Çq7©‘¤|Ï}ºÙÌ^&#r¼X?4"Æ_Íi=þô´±íŸ—3Ë´ÍÖóec[÷7ȶ.Ö¶i÷ØØp<G$‡[ ™Ü‡³WµÆD)Ü*â0³ã6Íîy³nlœ»—ô637ò/AXS{£LÇfî7Á-óè*€ïo[8””ÒŒÈtBä—™|·`.Pª@0d—`øîrÁˆB÷ F.jJôƒ ÆÕ[o1X¡\0&b‹Á½ÅãÕ“µ|lVÌOóÍluì¸^Î6¶÷K³˜?î~Ú/©}ÿÁ…pçBD·®PAÄtÐ…˜µ”¸au&팈èÎÌ&²q-P-õЂrè*€·Ÿê„²PZx]#œ $]T’Ó\ˆô.„wé ¬Ф/XZ²kiùîa!!°ÝSŠÄ¡Ó¥å0Ù¨)Q¸´:„„Ôà¬pÊAB9¬+”Á¢ÍÏÝA²šïÂm¬ööE ‹Êôìê³›Ó‰ãé»§/¼t ƒ#;bN­¾ÀÁ®Y}n63XÆm𺱿Æaºw/Q2(ðK“Èíˆ9ë.|p¥a¡3¤µ((|tÀ; !å7>$ðD#é(|L>~BäeƒúÂî±# aª 3áÑÙ‘¤”e›u6 “ö/¸ÏŽpx„p‘d€Ši{˽H·ÏŠdB&4? ä!‡5ãòÝÕÅõôìÚöˆB± <ª•šÓ½XP.ÆËçÕbýô¼õ¨]³Þ.vî"'¶Çâ»…<)áõ€r}…,RÃ|TsÖ¡(À貚BæÈr8tÀÛ+7¡,uXƒMñHÒEã0Ùø)‘SÊÝFÆ$b÷»C<ÀsÅ “áÑùÁ$”Ãâ!°„Ý»ÈæÁc²¡S"·¨Ì …ŠG@ÒÂ.”.[ª®á–bD¥²%]ðöJO( $FÂQˆ‘jŒÃäC'Dß­2µÖR™º`»sz{k[e¡ÂMC…!šX…1í«Ùvkœœ˜^#'¦©[N¨FüPóè—ªêXN ãQNLœ9!ÖžÚÿå|¨þîÑUoËIBYjDÌ/ !ñHR#â0ùø ‘—ìŒHèØqxHti&:?’„²Àˆp¾!›ÉNhüº13ï ú¯-œ¹GçPF3¯¬¤±Úí%MÆOw,j1P ªâº[`=¦ @R}ÿNÇk—OTk9»>ŸþfÛëÒz«¨£z«pÓ¾lÖóÝ£=öµVa÷6¦©§ÖJá'ŸÖZ5ãI­ƒZ«P=µVYæ Éš”Z‰¹oGtg¥5 ü†B+Ã,GG¡Õ`òá"'(kWh½…VÁIa<:;’”²¬Ð =›ɇNˆ…VQ÷ìlLY¡&%¯td×ÞÆw—on¢Ð}»›\Ô”èZuAMäâÊBT¡NPïm°p{hß-V=òì62¸o#i:øþ–Às‘8ÃldpWÙ”›—ÃD¿Ôƒïoº àí…šP;…ÓñHZÎÃbòñ"ï< ¸ÝÈ •¢º4IBYæÐ endstream endobj 5579 0 obj << /Type /Page /Contents 5580 0 R /Resources 5578 0 R /MediaBox [0 0 595.276 841.89] /Parent 5502 0 R /Annots [ 5583 0 R 5584 0 R 5585 0 R 5587 0 R 5588 0 R 5589 0 R 5591 0 R 5592 0 R 5593 0 R 5595 0 R 5596 0 R 5597 0 R 5599 0 R 5600 0 R 5601 0 R 5603 0 R 5604 0 R 5605 0 R 5607 0 R 5608 0 R 5609 0 R 5610 0 R 5612 0 R 5613 0 R 5614 0 R 5616 0 R 5617 0 R 5618 0 R 5619 0 R 5621 0 R 5622 0 R 5623 0 R ] >> endobj 5583 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 5584 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 5585 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 5587 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 5588 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 5589 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 5591 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 5592 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 5593 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 5595 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 5596 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 5597 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 5599 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 5600 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 5601 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 5603 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 5604 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 5605 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 5607 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 5608 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 5609 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 5610 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 5612 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 5613 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 5614 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 5616 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 5617 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 5618 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 5619 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 5621 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 5622 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 5623 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 5581 0 obj << /D [5579 0 R /XYZ 90 757.935 null] >> endobj 562 0 obj << /D [5579 0 R /XYZ 90 733.028 null] >> endobj 5480 0 obj << /D [5579 0 R /XYZ 90 716.221 null] >> endobj 5582 0 obj << /D [5579 0 R /XYZ 90 716.221 null] >> endobj 5481 0 obj << /D [5579 0 R /XYZ 227.044 669.137 null] >> endobj 5586 0 obj << /D [5579 0 R /XYZ 90 652.41 null] >> endobj 5482 0 obj << /D [5579 0 R /XYZ 227.044 607.362 null] >> endobj 5590 0 obj << /D [5579 0 R /XYZ 90 590.635 null] >> endobj 5503 0 obj << /D [5579 0 R /XYZ 227.044 545.588 null] >> endobj 5594 0 obj << /D [5579 0 R /XYZ 90 528.861 null] >> endobj 5504 0 obj << /D [5579 0 R /XYZ 313.928 483.814 null] >> endobj 5598 0 obj << /D [5579 0 R /XYZ 90 467.087 null] >> endobj 5505 0 obj << /D [5579 0 R /XYZ 227.044 422.04 null] >> endobj 5602 0 obj << /D [5579 0 R /XYZ 90 405.313 null] >> endobj 5506 0 obj << /D [5579 0 R /XYZ 243.921 360.266 null] >> endobj 5606 0 obj << /D [5579 0 R /XYZ 90 343.539 null] >> endobj 5507 0 obj << /D [5579 0 R /XYZ 187.194 298.491 null] >> endobj 5611 0 obj << /D [5579 0 R /XYZ 90 281.764 null] >> endobj 5508 0 obj << /D [5579 0 R /XYZ 227.044 236.717 null] >> endobj 5615 0 obj << /D [5579 0 R /XYZ 90 219.99 null] >> endobj 5509 0 obj << /D [5579 0 R /XYZ 187.194 174.943 null] >> endobj 5620 0 obj << /D [5579 0 R /XYZ 90 158.216 null] >> endobj 5510 0 obj << /D [5579 0 R /XYZ 227.044 113.169 null] >> endobj 5578 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5626 0 obj << /Length 2216 /Filter /FlateDecode >> stream xÚµZkoÛ8ýž_!`¿ÈÀšÃ÷£ß’4 SËOËÊ]VÕzDLY­îìbR•D±Ñ—ùGgó]p/M0iCÿ÷èó\܃Ä0bFÁ1†€¦x>â”ùãåÑÕÑvnœÁxßìaÃÓ£ a)vÓCâçø¯ûê7ŒéÊOìçÓ«ëéd~5"åÍÉdê ¶óúá¥{ZH*QHR^³¯×‹73U>­î«åW{ªË‡—µ¿}Z¹›R ß¸37ªÊíï• Âƒ „ Ä™« Rß‹®JâÌc{!ëjûº^U÷.Îí[|oVHV( A8qÙµÖqä¹AxëPJLiÙ‡hé2òþ“Ž®¦²­$ºÏ &?"²ñÿ óç¸\¬î[‰nÅ׬~î23áÑi%e“ { o¶oT›Xçȧ$G46îç/næ6qPif4sæ :- ¢lÍ|l@ •'"!ÚOw¨`ƒ˜R…4 q-{³Ò`ƨ£*&Úå–÷ãòåv±tÇލ€Eô´¸]Vä[è&câƒ1ðÓ¶šc)so)$×RiYŠ ÞR`üŒ¤q¹óX÷÷€ŸpЪýDkù 0~!ûý„YHΔ*ÃO,zÀ{ý$¤Ìö‰7m%?q˜tüˆ¨ñ˜¿ó“}¢Û~B‘¡¹‰pà´Ž6aŽ™0¤1If Á$#ÇDûuCR~’7õŸ$D”ßÇO¼4 ð“=è°ŸxÌ?á'lØONg×ÓÆQh¦£p%­Krg*v¤6{p÷òºÚÚCÑØŠÿ@=Ôo+‚€ÕË[ë!¢m+–l´xg±=ηÞV‹B“º¼XP=à=+»M™ë,°Ü¿–’ØY<&?"òÎ"˜w›ˆgá I˜ÌL4褒˜2Ã\4¸2OæÀCÒÛ4Í ²3ïq(ã8aC¦b·;²6 jMµß/8¬DªÚ¡c¿ð˜dÔ˜è›ýBø`µ_ð–_ða¿øx<¢<‡Óë÷gÞ7Øaß­JD™V%§®ƒ o«åráÏŸÎ×ûÊ6õIÍàþö‰æH)3`$0U!£úƒúÎz\DjxÐh!(ì2‰rðî*Ž(3]„c ÛÑV¯ IƉšúDK_ŸìÝ® 4×<3 :­$¢vÁwd: &:&òK«. 8ñAaÐc.(4¼…ä“È![mÐãÞS ´)3¼FÂBƼ-"öI‡Žˆ¾Ùk”Öã5bØk>M~9»ðÃ3=†z 1~·cÇÿxúj‡«¥;Ý·Q܇ÜßÛ(²ÜöÐÝÖh±—³·«¦ÇVFjO.4ìø­xô8€wm%¢ÌÞö¸ß¢­¤³íq˜tüˆ¨±Ì­‰nGa“›NëhæõPŒ"É 4˜d䘨YBvæ‰mOÞÔwÛž¤‚ˆò»l{¸ÝÏj“Þö ƒÛžóOl{ä°µ\Í..GF”óÉÌ;ŒÈÜý0"C‡aD9‡±ã›—º€±‡Ï‹ÍÆ]]/¶O/nЗ1vÔú:PÆP„¥,cDÔµµ„{»±aúª˜’’3‰ÁÞ‚÷螦E˜]ÂÀë Öf(£SÁ8H*xDã†1·Ê ÷Õ/Y9Ø•/)mÂüâ%1ý]í’ˆÑü•‹µJIDnåÀV. &¿ri‰8T¹$CGDß§riÛ‹¶—ŸF\”³Ç徂‘ÙÝú‹=õ­meãò"ì ;ºë²hßeч»,T¨á. 3q—E¶bÏ´X0üe°32§Åb[‡¼¿ÅPþ g¼­¤§Åb1éøÑ®Å"š‹>Øbz^&tRIL™Ùb!*™„“í»,ú@—…Á‹I~d»,²¯ËÒ\Îï²´B겤¢ÆDß§ËÒö=ìÓù¯ŸšîŠòéëómeÛ&’–/ö/++۞ݮŸª;¯›&p½ß0Fbpoc ‰Z&À´LdßÞ†j/VPŦtà™hÐãÞ¹E1e®+دðµl+‰]Ác’ñc¢fo#½+Øt÷ím$lɰÎÌDƒN+‰(3\b¤¡êN%¡Á$CÇD»u"iïö†+x«äN¾A§D”Ã&ÑÔJ©Éïj®Tè˜èpÕåìòïî6KšoqÎV¯ÏU½™X9®ùHñn³;{oë‚;€¬¶cõ¼Ðí7{:Ôür¥B÷Ù]âªõXž77õÅ(ƒZ L Y¸ž[_=d`:?¨Ñ[^eêÇ×*kæö²~×-P)R°Gí‰Ú³uØNx®»#QßclüÚyÏ./o®®OOÏ®®:>·“ržœ:Á bƒ d½„v¹M”H ô˜–Àû¿¿™^¼ùx 7ëbD4lc?]LÎ.»ökŸ%]Ѻ’à6p)½ìÕn™Pí1-ÕïkÕÓó‹Éôüæd²§³OµB@‰¡Š JWŠp¿ÄÊRKàYgj=¦7ǘ_Ô ƒ_?žÌ.:Š(†Wi©'¿ ˜d 6ª.Rz=¤%÷Ãõôt>™MoNg6±ó³_æ]¡¤Ø³whûÎ’¢ÿ±Å…kç}ó/ðêjOj¤ˆ A"£xó•šAB8×;¯VÖ ÜE`¿³³;CËWïv³»­;à¾L2ï0}ǰ;£Øþ<Ï=Ø[é~îR—XöfNNüG‘FÔÞ¾5&úõí±Zu^„5ƒôüÑK3 endstream endobj 5625 0 obj << /Type /Page /Contents 5626 0 R /Resources 5624 0 R /MediaBox [0 0 595.276 841.89] /Parent 5502 0 R /Annots [ 5629 0 R 5630 0 R 5631 0 R 5632 0 R 5634 0 R 5635 0 R 5636 0 R 5637 0 R 5639 0 R 5640 0 R 5641 0 R 5643 0 R 5644 0 R 5645 0 R 5647 0 R 5648 0 R 5649 0 R 5650 0 R 5652 0 R 5653 0 R 5654 0 R 5656 0 R 5657 0 R 5658 0 R 5660 0 R 5661 0 R 5662 0 R ] >> endobj 5629 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 5630 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 5631 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 5632 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 5634 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 5635 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 5636 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 5637 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 5639 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 5640 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 5641 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 5643 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 5644 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 5645 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 5647 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 5648 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 5649 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 5650 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 5652 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 5653 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 5654 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 5656 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 5657 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 5658 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 5660 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 5661 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 5662 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 5627 0 obj << /D [5625 0 R /XYZ 90 757.935 null] >> endobj 5628 0 obj << /D [5625 0 R /XYZ 90 733.028 null] >> endobj 5511 0 obj << /D [5625 0 R /XYZ 187.194 693.486 null] >> endobj 5633 0 obj << /D [5625 0 R /XYZ 90 676.759 null] >> endobj 5512 0 obj << /D [5625 0 R /XYZ 187.194 631.712 null] >> endobj 5638 0 obj << /D [5625 0 R /XYZ 90 614.984 null] >> endobj 5513 0 obj << /D [5625 0 R /XYZ 227.044 569.937 null] >> endobj 5642 0 obj << /D [5625 0 R /XYZ 90 553.21 null] >> endobj 5514 0 obj << /D [5625 0 R /XYZ 243.921 508.163 null] >> endobj 5646 0 obj << /D [5625 0 R /XYZ 90 491.436 null] >> endobj 5515 0 obj << /D [5625 0 R /XYZ 187.194 446.389 null] >> endobj 5651 0 obj << /D [5625 0 R /XYZ 90 429.662 null] >> endobj 5516 0 obj << /D [5625 0 R /XYZ 243.921 384.615 null] >> endobj 5655 0 obj << /D [5625 0 R /XYZ 90 367.888 null] >> endobj 5517 0 obj << /D [5625 0 R /XYZ 227.044 322.841 null] >> endobj 5659 0 obj << /D [5625 0 R /XYZ 90 306.113 null] >> endobj 566 0 obj << /D [5625 0 R /XYZ 90 244.339 null] >> endobj 5557 0 obj << /D [5625 0 R /XYZ 90 220.125 null] >> endobj 5663 0 obj << /D [5625 0 R /XYZ 90 220.125 null] >> endobj 5558 0 obj << /D [5625 0 R /XYZ 107.713 160.956 null] >> endobj 5559 0 obj << /D [5625 0 R /XYZ 107.713 145.015 null] >> endobj 5560 0 obj << /D [5625 0 R /XYZ 107.713 129.075 null] >> endobj 5561 0 obj << /D [5625 0 R /XYZ 107.713 113.135 null] >> endobj 5562 0 obj << /D [5625 0 R /XYZ 107.713 97.195 null] >> endobj 5624 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5666 0 obj << /Length 2440 /Filter /FlateDecode >> stream xÚµZmSãÈþίPø$'xn^4#Í^%UÀÁe/¬á0[Ijo‹Ò\12'ÉËíýúëÑ´¤Ñ«IªR|°Ý9yšÍ¹¤þåf›Ø«Ûdd3¦ý$]™¥P¨Ðga0û|÷ÓÑÅ]m¡I¡Œé_>}¦Þ@ü鈡#ï®)ÔÞóQÀ^o–G?×:캀õ¡ÝŒ®"o.…ƒ"Œr ^à‚PÕx!ˆ/0£‡^%c\ñqñþnyq{{6ãÒ?ýáþâ_7׋ûåŒùÿþpv}ÕÝ-‰Tè9vú`”& NbÎ$ÑÁ¼4$ŒÀ‹2-¼ñÕýÙíéLIÿü€ùâ®X2"%ƒh‚ˆÈ¿ °ÒŒ°hp%3øfÁçíÅ¢‡UDD€*ÇFˆD ö6¬¡$<8€eZXϯË‹óû³÷‹kpêͲ…Âs 8Â,¨€²H¥.Oi)Ê´¢/áú¾ÎêÄ·}À‚pÖèLI½‘ O¨xQf0ÌÌÂýòæÀž÷Á*Ðå96°„óèmXyH~+Ê b½ü¸8ïS€ƒe®=G{$ ¦Ã·¡d ¼%Êtâjyzyqw{ºgP5 ÀPG}Šô t*ˆ 5á‘®+ °†\îÓU±Ù¥¶nü°[ퟓ´ˆ €cVØ+DîÓ„áó›´€G)«‹Qb¿þB%]íÒï®@ßSœ}÷! ¥#FùSüuƤŸX9w`”³Å>q(hŸOfó€ƒrÇΠÁ¤´¿Îõc€=d#rØÆÃnÿe‹¸ ëgIˆá3¿P*¬ c%òU¼Ø€’¬Li‘ZÀÙH½Ùân=c‘¿Î“ sN$•o3;4 Ì#ZÊ ó ’Õú²3Xú<ÉDʨA Ry‘íW…%$°*ɲ>4d®Û‡‘0ÁQùµVÔ:sN /ªIVR¢BÛ´-,$ ËwÃðR ç (¸¤9IKMå’lc\`‰ÛÅâ 5 ®Éûöf–׸ÎvÏph—¢hþ-/’g{ ‡Z~–xPåÎ~Æé´g3)}b÷‚àìVl:­°½dÉ*.’´ºË:Ч ê_ïSˆá2Wœôk?4T÷$ô)¡í%íì%nÝ”…ÒsG¼ÌY®G»*ݨÜëï€MjÃèæK”™6ÞQ„ä4nØÆ«ÿtq”¤ÐJªAŽºÆZ}‰³ø9)œós7IB™ö:2M ÈÜ‘éÕƒH  úB¡'7voʤˆ¶ów]ÃU¥°<^»\×0ãY&j…ÖE á` >´ð h éœòL%ÓÃÕ: (§B©®K(Ö&7Š*ÜÌeþ’¬6p §ŒZ³hbÐ|¶£º°‹6¤Í•áoºßnçøT’=oR…†Ô& +å¿nŠ'{{—™ÏÀ¬˜"ºÛö{¾Ï²¬ìÓ‡Múˆi+×ËVŠÎÝÇõKì-Sq•5 ”µ±`¾lÒí¦Î6/‰ wg‹&ìØ÷HýÄlí·¢JÛ­MóH'Ámwy½êØG‹có˜î2cðŒRO@Êzºs„Æ)‡2o¤œÛ.´pAZßLãB™®.åtÔÆe)ÇU†‡!±G9s¿Lûp³G9÷¦C¸r¹K8®4ÎÜ.éPQù%áÌ÷’pÈ6»`¨ ’O!y‹|ÿáêÝÙæóÿO¸ ¶Ñ†Ãm¿#4Î6”1ÞøÓª•ÍáIÓ°ôš§T͉‚6o*Êô ¶¨¡1P²õ¼G§v·±Ï1ç´A7z„¦$¢zºHXѹ#k'' Ý#L]¦Ku¶›|5ª»hHÓPîÚ"ÿ³]‡®œ{Íê×x»‚(h/ÿb?vëÒÅö èM2K·^}†¾ zDi²*¬a/¸€N)Þn¿á‰º­ D|¤ùn50¸‰êèK^FÊÿ=ÉLÌF¦Æ¯’—ÂÞ±A7¶»G§ÃŒ0^Í´½Þï-së:ðòH ˆ°Ð?Fmþþ»yðØj*óh8¶*ñ>rµð´A5·¯$’Õ ü×Mžœô3µ¬é^:}À/!‰Båú%”~Zù»üfˆˆ—-7Áwë¦úƋ㒰“%aW"Ž^Á?v~.ÓÈ[¥o¶Ìw‡ÌãwOûÜzFÂP.ZŽ8ì¸3H¬q¶)÷h'ƒ|S޵fXÅ×DŠ7ÆZ#;k(Ò„ŒÙˆÒÜ™ì™ðšÕ¿Ú`*£óû±Ì*¨&ŠȬŽÐhf­dÞ’Y±=o·Œœˆ€MãA™žVú„\pÞÂ󾟔Ÿ¤1 Óåì!7ayí¼tQ~–û ¯¿š„oŸã8Ꭺ&¼~Uò·I‚’jŽ`h²šß”3U›Ê¾ÝÚ+`YoÐxl?XÚÚ™P×U°Ÿ“<T'ý6ècÞïrSQ¤>0VÒsG¼ïÝŽJœÕ½uîØ0È´ QI¯8‰ië-%ƶ qH}b Ó/Øv,>^]ak±®qûY;‚!”>lw#0²Wy¾jKpª+ÃT†“ƒŸ#36øq(h+ê­!ŸIFéøÔ7e¶Ù®Ý61mÈV2Æð²ˆ‹=ÚDÀÔ""Øê+3w„8Å`0o•“çr$ÇNÚÃÜ:m)옣ï,–ûÕ ¢ŠŒî•ÃQ…‡öÚïeíuÊ^µ×Is¸WÇ›ëj·#g^ŽÆ½wô‚„À•¢ñwJ(= ®«²z§´µ¥¼,É£ï–T~ &TÉLƒè(²Ieìø©™ #4~ü(sèø§ìUÇ?iß1Ç*®/véêyɧÎHáÌ3óÃAýÂaÔ-L›¢Õ´[¡Q·T2Ü2iÝ2mκÅ5ÇØ„[ª!ÇW¸W³ú³æ‡„V1³Cõ&·zìFY¯0™¸®M»ÕjŸõ]n~;ÒeÓ>°yê™7œòÿßòŸT¦Ý‚¥ - ª_®¬u³ç“4Éš·ÕÕïfšû{tÆuõËA`?˜~Gù;Aí7N¾–_›2SíýŸçË+pÆû3|”À Œåý[õÃØoß“´ë Dë»ç]Óò endstream endobj 5665 0 obj << /Type /Page /Contents 5666 0 R /Resources 5664 0 R /MediaBox [0 0 595.276 841.89] /Parent 5502 0 R /Annots [ 5669 0 R 5670 0 R 5671 0 R ] >> endobj 5669 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 5670 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 5671 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 5667 0 obj << /D [5665 0 R /XYZ 90 757.935 null] >> endobj 5563 0 obj << /D [5665 0 R /XYZ 107.713 723.065 null] >> endobj 5564 0 obj << /D [5665 0 R /XYZ 107.713 707.125 null] >> endobj 5565 0 obj << /D [5665 0 R /XYZ 107.713 691.185 null] >> endobj 5566 0 obj << /D [5665 0 R /XYZ 107.713 675.245 null] >> endobj 5567 0 obj << /D [5665 0 R /XYZ 107.713 659.304 null] >> endobj 5568 0 obj << /D [5665 0 R /XYZ 107.713 643.364 null] >> endobj 5569 0 obj << /D [5665 0 R /XYZ 107.713 627.424 null] >> endobj 5570 0 obj << /D [5665 0 R /XYZ 107.713 611.484 null] >> endobj 570 0 obj << /D [5665 0 R /XYZ 90 595.698 null] >> endobj 5571 0 obj << /D [5665 0 R /XYZ 90 572.445 null] >> endobj 5668 0 obj << /D [5665 0 R /XYZ 90 572.445 null] >> endobj 5572 0 obj << /D [5665 0 R /XYZ 90 164.194 null] >> endobj 5664 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F40 783 0 R /F42 818 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5674 0 obj << /Length 2988 /Filter /FlateDecode >> stream xÚkoÛFò»…  ˆ6äò $±;Žs½Èí¡—JZYD(Ò%©ºî¯ïÌÎ,’HÝ]‹Vû˜×ÎsigbÿÎ$¶'¡ŠØõ'«Ý…=y€ÕïÎa{ÞÙ{ñê½ §D¸“û>8—Îä~ýÕ „ÏæŽmÛÖÓªÚçi]‰íl.}ÛzŸfŠF_ÔF•3'¶T¾Â¥Ð BË ýÙ·ûW÷ qfÍw$ýÛÅ×oöd ,~¼°…G“'Û@0žì.<éò8»X\ü³ÁAë.¬Ÿ’ÎwÜóâIWØßˆ'LyyzwýokÙ˜S±OF4½½ú4û±~¾ùŒGÜÈ·êm\?´’Rá 6j”jU<äéŸÈ,ΗχŽ"}GD`¢Aì / ÈÔq£|`ˆ/£7Ðó¸6ü®†Qš;†;ùÿ§Å²ûB†²ÏÎç˜q&±; ÂJC´>ê‚4Wo[Íáík]©¬˜Ißz¢é¦à3 Ï÷Ù̱2šdiUÃu®g½+vÅ>_Wl 63Û¹E}OèéIV4j/ê%-}¸ŽmM?þò (½½zs7åcùšÓÛ»W‹«wøß”¡¯þ@+Vžb<»¥Z¯XfIþñfÃH©vÞËïúrÖBón³WÓor­WðÆjÙѨØÐo½MýfŸ­UùË£‹v!4zp?+bû¬Ý1ô¼~|å(ÛXš[èéÄ}.ÍaÆi bsC-dÉê{eT£š 2\±püød¸ìRÓáÒÃǤLvª“ö}KJùÂF¾¤-"çt&cyæ(™E±°mo@LŠBÊ×?B ² íêõ!aÇ–"tå)ÊGØ#ººqìP„t ©È³²‰w&{¼¹‰3¢sÄSï"@1D—.Oo²z[ì°tqBkº@§u"K;,´yg”Gp„¡áJt°Jéò–+ LЖ ‡@–fhNUàZýãÓjJ †Þ#D´¼N“ŒHFÖ|2¯’¢U€ßO2Uªk+WJŽ‹ÆÚ¤†ËM´ªh®…D0ŒD —“ŠV©Ú) (†ë9Ö–«ÂÿSÈ)1D$:íš¼«»„—–ÌjM`V ­û­j‚Š@®WU‚´A`%YŠ|âD+ ~§×¨$(e6õ¬’Æpi%Ãa¸¸VyùŒ1U𠋇/§4Ðëä¹"xðPªå3¦8ƒ²“)c^¦õ}:y 9\n]ï>i‘™Ó®Tt1kNX’àoµ_q¼J*uÂ¡Ä À‹}+Ò0s†™w€N˜y,ÂØmiדò¨êvÔš3 ÅÄSªý‹Ë ©‹2}|Ô&ûàuP¦lts»·PlMM-Ï6EÆMcC§Þb=@ãUVTÍÆ”HwX1¢+Á’›2„Õe}B¾]±îXÕ`|ðÎÈ@’ U%œ?öüÑvSt`µc{ö$¡¯Ë‘ 80 ÈÕOÚÀ=iã—÷öÛnl…E‰…ǺçðŸ™ÿÿÌæNÿL;yè›ü2.ú‘!fzÄFR®vº5ůí4AÍ"ëo¾¼»»ùÜ›,Ž)Á™J­Z0é X\½ëMÇ,U²cEàÇ»c Ëg|ª"a UÛøÀÌÄ𩙇ú­™¨q~ùæ—vtBžµ‚Àâ¡Ò`T*e0ê‰Azyõ¡}¹ºêMNÈøáúOF nu¼½e¶e‡éëÓ×_ŽE”¾‡§þ4P'Po(ßö· ÉÇgFòñ—ã³·ÌÖw•ýžæL„&F·Ý­ÛþÖÕ§Ÿó¡ îâÄß ø±ðý“•« )È üÿÿ¯SôŸ×”½/v•¸›u}O*WeûLf¶îg±´ögþ±âDëÑ¿¶åk—_?¥í8üYã™ÉÎÿz·ø¡íæ-þ‰‹®„¹¸,þx~Pù¡vðïgŽÕó­ø²$ endstream endobj 5673 0 obj << /Type /Page /Contents 5674 0 R /Resources 5672 0 R /MediaBox [0 0 595.276 841.89] /Parent 5502 0 R /Annots [ 5677 0 R 5678 0 R 5679 0 R ] >> endobj 5677 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 5678 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 5679 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 5675 0 obj << /D [5673 0 R /XYZ 90 757.935 null] >> endobj 5676 0 obj << /D [5673 0 R /XYZ 90 733.028 null] >> endobj 5672 0 obj << /Font << /F31 604 0 R /F48 2408 0 R /F14 1084 0 R /F22 597 0 R /F11 1069 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5682 0 obj << /Length 2961 /Filter /FlateDecode >> stream xÚZëoÛ8ÿž¿Â×O2PsŇ^]à€l›v³—¦¹$û¸ë…"+ް²”•äm½ýÍC=,Kî T¤8âÌü8O:|áÂ?¾ˆÜEà,’Þ"Ùž¹‹ ¼}wÆiuË«Þú÷gß½•ð‹|¹¸ÔŸûœy‚/îןñh¹â®ë:_’zWdMÍž–+á¹ÎÛ,OÍè6}L«%œ´HðU ýÀá¿ütÿÓÙÅ}ËœDó¤¬ÿ8ûøÉ]¬AÄŸÎ\&£pñÆ.0ŒÛ3%$ó³»³¶{˜÷ÞÓÎãr¬ž¶, P;ÎCæGbÉ\ßÓ*þ¾]®< þã= ­"¦|¥aÍGå·iS¥/õÇiÕ«´î/ØÉ{û¼¸¿½èÆ·zÌÍû»þÂ]Ÿ½‘m›Ë• ‘âòz,Ýûÿ²Ë?þ{üõ‡§--—0}}“âÏqÄ9‰b&V‹›þÒÍpéüîõùÕ`–âÑâ9ûšæË•ÔÛã¸Ýâò·‹«þøn,e¯I eqAäfb7º=Ó.ϯ“#Õt¬uš)ŒÊb=˜ØÍÿãzîüÇi~wñº}¸~3˜Ñàbög™7D‹C»ý/Ýë_ú¯?\Ý÷†G”ØWt~û4¶öˆC»Ã¿níàâ¼?Ô[}÷VˆÎëWÂøÅJø,TBoÿ„¾J'γ¸Nk3y›º©Ê%w¶/`S çšwì4.ÖH ïØ7é óÝcY™¢ynöØê8Ú)èSé<À—9IP‘(̦ÈþJ‰ÃÃþ0Æ(?b^$àbÌ B%p¡ÚÅm/^XêU\ÇŒ>8‡["8 !üqÏùŠÿ¡¬®–÷@ HQެ9æ3½0b>„=ä ñ7ÍMØkzæ¹+ÊÇ¥ðaW$Yœ›·FÈ&-j8¢¬$Ú’öhž(†× `Wè8}X ذéˆ`“=±«èð‘¥[ÖT>¤.'¶6³G4jk&Oi•2cŽý$f.è61Å$¥¡¬@©„ #øššTÓbòWf_vûrå1áG°?n¬³YSÙ‹€qÕGà éì£uýîqÉQDî$MYH/µI(UúÇ.«Ð¥”Úñyàæ‹qQY‚Á§;Ò†+óxˆk\Î÷fzwiž_²æÉŒÖZ±M•¦ô¡Î8x±Î¶)*VFyZ×/ˆ`½Î6¢¯w m×6Iö”ÂLBA j­DnãæÚ²]Ѱö[Æ|{nÖ×é3$ž¸p˶‡a4£` ¾­aù^&!¡ê„ìªBŸ)u*7YêU|”·<ÈMSiIèÞP’ƒÔdiæùlD‘‘Èãä÷ú Ly¾´Î:‡ï38<8_¬ î%Dv¨`è1‚©RB’8ª‘¬z4£n2¯ë*¨ A+ªšµ+ïúÕ!cî @ <Ây$¥‰Ð‡†»  J°4"åNÄC5NnñTÀ$j4Œ¥‰58 O0ú±®wy¾T k1΢¸¯3qœà9éi\UñžVÊ¢‰³"+68Œ•àEDJLBЏ^Ò¶ø¦Äz7ÂJgWa³¢€/˜á`ëÀçךµ¡Sÿ±3eœ÷w<ä…ÀUô"S¿Â$+ò¬ ÒéjtµïaIzNCu—ùè±Ìó#õ—–¥ñ Ø$É˺}ÛcNìjC•mŠB3›´7î±0:ÞówvÖMÛÑ H;ad¶•B„†1'ÑŒXXVäîp[Ù"÷¦­h›ý³óuJá¦(©ÈQcG…¢Í_‡<Ê„7á D³êå”  ì±4ÚA…ðÆ®'Ácæù’yv*„–ع¯ ‚Ñ\—E:¥§Ä '7«ghROKsBÏY~¤ç,;ҳώ“žy¹é*12öˆ&#£¥ù–ÈØv\CL\æ«y ÉHž!&T¨| ÏÕún@µ¾.ôÍÜLc̯ftÀ¾Ç:Úw¶»¼ÉžuÉ4±yü‰é+Îw´_AY®x…w•>Ӝ蚻èX×fø°·ä™©ÛWè£h¥ûºôïF= ¾Ìš¢®7Á`.¯'­˜û<8a%Ñ´•Í·XIÛG¬Ä‹æ%"š‘D#;Q| v4°Ç€ÃQ/Š/3Z\§Ð~>—V¸³Ö7ûN†¬†ÖŸMQ…°™ë~žÜ7OHÑk¨”¡ÎË;Æf„ùºFOötb›\'ï t°Ûëú%™„EúÀ$ò´Ø4OH,|§‘†º‰£qÛè½4ÅSÚ$ Íun*èåÊx€áš’Ž;Û8©P!(}}÷ó5tퟯïÿusaÞ™ Û@„©Ð]  3ƒ¯¡KÅí ìRý§‰V¦5ÄnÝX«6f°],ee`šP\-ÁmFEÔÒâÛVž›«óë‹Ïç×ï®.¨ùÿ¸ÚÕ«‹ëw÷?Ò‚Ñ6ð"qÜÇIº[—¡Aš§xLu×Kó¦Ÿ{]VàæÏ%ÕËÒûE½¹õ¨` ïe¶?}ÖGüñ“ùÄ´õ@Ü.ëÿ?~¢¯tý„SzHãú²VÖéêÀuRe6ïÅ ý:}ÑàmɰÕoNð6¤‹úút.>(Y¥w¢¾îMÆKó-ñzåay-˜T|^¢É3LäÐå 1çR_gø`ÌñCžš»à®îáu¿àö*mvÛä@·‚¼ §"(TíÝçß´õ.³M='–ö>Åïî =lòòÜŒ¨u4“Ø<Ö)¼ÊÍÐY±·`îñ&¥­±9˜(Ž t0uâV¦-’Zâ1²ƒíèFäùl`¬W"ɾ ‡§ª×çøö6@®Ì”Iïcrë$×?_]‘7<AhAÃß2ñâ q#Òºm©ì¥XkHéZ…‡’)¥fo^z4S7/ÂåLEÆÑoÑà0†Ó×.sl[7=ä;4F㦖FWMÜìHÿÎêÝÎêˆC»øäé‰fhV=¢#¶Ä÷»&Ëm¼Óöæù’ìŒéöÙÙæòn§›ÔÕ˜«çUmi¦55$§afõœãEjv¼lkyI…¥>ÙŒ²F±Û¦U–g˜ê8›¸ylá>ƒ¤uŽh¢9…È? É,;¤ÇÎöšo°@3wTG²Bÿ:¡/ÀŸÓ*ÆŠf á²@ø' èˆ¦¡ šSPÌñ³P̲#(zìäœ}ÔûíCIeDFÁá ³Ës ´XpBÊ¢;Ái \ˆŒ¡:TG4 ÑœjŽŸj–Õc§¨·ƒÛ¹¬{ŽáK¾ÈJˆ.Í$0Dr—9fË,/ƒJ—÷¿ZÏÅo7®-:ºãšÿ@ bÞñ›6w?¬xÿÿŸ[é¿óCÀ7ê§iŸE²ž`¸£šïÒÃýÌþý2‚Î ‰ Šnë¢W®x%]3ƒ|O÷YúOl5mРpù}ÊB&(Q zS~ÝoÒâØß_Œáù/pñ9µ endstream endobj 5681 0 obj << /Type /Page /Contents 5682 0 R /Resources 5680 0 R /MediaBox [0 0 595.276 841.89] /Parent 5688 0 R /Annots [ 5684 0 R 5686 0 R 5687 0 R ] >> endobj 5684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.597 598.425 513.996 609.329] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) >> >> endobj 5686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.046 483.295 273.171 494.199] /Subtype /Link /A << /S /GoTo /D (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) >> >> endobj 5687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.635 223.247 194.796 234.151] /Subtype /Link /A << /S /GoTo /D (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) >> >> endobj 5683 0 obj << /D [5681 0 R /XYZ 90 757.935 null] >> endobj 5573 0 obj << /D [5681 0 R /XYZ 476.377 589.623 null] >> endobj 5685 0 obj << /D [5681 0 R /XYZ 90 573.03 null] >> endobj 5680 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F48 2408 0 R /F14 1084 0 R /F11 1069 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5691 0 obj << /Length 2562 /Filter /FlateDecode >> stream xÚµZ]³Û¶}¿¿B£'j&B €Ÿ~«ÝØq¦‰Ýú¶yp<ŠÂ•8¥H…¤r¯òë³À.HH")»3-XîÁ,v ù‡?|‘ú‹8ŒY*ÃE~xð;è}÷Àit ÃkgüõãÃ_ÞJx‹¥‘\<>™×#ÎBÁÛÏ^ÄxºZsß÷½ç¼=UEײýj-Bß{[” [ÿTOªYñÔSU®»bÅã՗ǾìÁij¡Œ4ôoŸ¿ø‹-LñÇŸÉ4Y ßè „ÒjÐ(|Ä;@öÜ Œ¹ÆrMâ<`©»X:a”êE¡ýîÄdÌ"‘€rãA~èÃ_œ‰À+´ c|úP´í¥ã éŽgy®Ž]Qí°ûy_ƒÇ̤ Òd%ËeòüF«zé•I/ÃGãØÓU^üêû"Ϻ¢&MÏ{ÕØitص­•™³ñ6²lÍÁëBtÙªÖ‚iâåÊ:…íì°)v§¢;ã£æ@±[­ƒ0€YsϾ´QݳR½…?Õ5EŽíc£ô_HÀ¸ó ¹ÉZ+¨-ÃV oW;Mùw¸™Š*/O€¹E.A¤¨\Q´Í¿°ª,0 ¡§/Ëz‡-mÉWœʇËÞ¯¸/õß[Çàè°(&ô—¨7§º£hñ÷©n°°·E õJDÞ³Ú²‘}F>étUäŒOî$+c¦7¹•æú½4 G›É…ût:릳ш¼XU-øæmÜè5P,MB$²dFBpÂdY5“_r–rDfÑdĸhË Ü¯kêÃrp¯ïÞ¤ Ýf;E±Ãñ H ÜÓ¾j_ 1 ÏÙv[Ðv†§®&ÿý«…a“LBÆ Dz‡ÊAhšK’¹Kæ`Ïæ ¥Ó\Öûo¤Òå1Hïñøa?G¡Ÿ° ¹Gá 4M!ÉÜ¥p°§pÐRè._Ÿ;åp˜×‡ƒåa–Å諽q£ÆbX$,Œ‚ÉæŒOÆ0+£m‘“1l©a³p´ .Üã*›7¦ø‰éŸÔ«Ÿðñ—7Ÿ°ñQǶìh*:½eÑbjN<ú¢ B)“ߨvHur@Q›8 ï` 7ÌœðØgN­„cᧃßCR–¾ô~ ç¸Y¾)TH[“$^·/HUqX¤Íc©p|±…Œ ¬4) Z7‚¾©|èö½¤¥·pʺq±U¡9€Æ2Óî*cã®YU4”ÿ…L½å¹Y¢¤8«¬q¹3h*í‡]ë"Ü›¢[~wUY£7_÷’Ùºx7õ¥åÐ]ª–Zd6éç«ýÒl¬ øíœ}Úvª,3;dºu§­Ù¯¬·FŒ1?Y_ŠÌ©²àiùѨ•Ȉê2»ãÚñ[¢\èé—gЇ!*Ø•ðÁíàŸºØbÔ²O§–‚T¦E·'}¸¥ØÑŽ9$ÌOW‘uª/Ñ­ûy€û‡±4Ç=¬]<ë°eêPà1ÇÇkÿÕ}f™t£¹+Ntw_¶Ñê>CŒžÈr¿Ämþ>5È‹Ñ[mIf»±J¿°ÍÎC$nëÞ—:òŽãÞqŽã¾î Ž¢ Ïå@@M¢e£6lE°²/Â2òÐc‘×k=Á–ܼê}0ߺ©¦­Êl˜–Q Ñ &k˜q;õ}}›•LGýa|:꓌f'˜Žú3HCÔŸƒ³Qß{{ªrŠwqêuç£ÙâЄCƒ=üiÞ’È++ç4. åîñrô±AÁD·ô‘›Þíp¯°ÑvYC}&å¸cöܧŎ:¹G?ÒØ{ì™ûƒÛð‡NÉËýИËECèÜ\{¢j••xRMKÝu?Œ <‚ÙƒZ[lÕ•ÀSO¯~ZB„㉷;é4££®„­EGËtP¿üé‡?–VéØñ—¤gí«sËh{ÑJ`¨5ǺÄ-Û$“IDÇ:î£@¼ˆXæÒ$ÅB²ˆ#‘ÑíÉd#8^÷"ÏEY^îNËóè}K2Áµï ÆÃ¸¿ÚfPÓõ6lnªèžŸ°Â«ZÌ÷À¯Ñ¸ ‡Ûãí>£ÛŠ›y àöÞã3G±÷Ö(ˆB¢p迃qD1½ÿ¬ÏßÌz &‘á8̶œÓ¦T·gô ‚W8gôÛ Ä R Iô»à\ø,ˆí¾G” ãI|Ñj××~jÕˆÍB°Ð¾v-“˜ùà—)c>ˆ-%GLSæÚ£™AÀÂйÔât#$˜/ͧ“<9^xáx!~`éí:Õ2 »ÀþÆ}v…ó®)Gœ@‚Ä!!@{•H™´ÏïÆ¬‹—×®;XÉŸ%ᘙј™¥zqPèöð¨7ÁÄÓ+Õ,ã[Ïi7®¶'IpÇбv„ê„õû†Àf<>¿ï+÷Ø5¢«îÛ¨¾TN.®„*PðˆV7V׺ð¿W©€R¯ £,äßêüD×lŠM"ƒÔÑÀ8ép½ w—ºD³ÝPçÚáRgÃøTÓÚ±*ò¾Üf–u1‘&æR>¢Oß—ø8‡À¡¾½<¢²Î¦@¬!S_t'’û]‡Š¬<]å&J¤M} [¼Ìj±Y|${ù#Ä3ñÿ¦ÍÔi߯ÚÏÙAµWµÂq¿ ½s[äö[Ío'ÈY…q‹»¤Úï2–SUóΪ¾$us >ăÀ1í¾GŒ}‹á\˜x1U‰;ã#•8äW¡VfòòŠêì9¬¾Ÿ¤ZÜôéûٱ̪þØãÆ•­©€ˆ›Nš: OZJ"÷ êíœC#34NV¶uYlç­ a3…£$Œãûÿí¿*àç9¿> endobj 5692 0 obj << /D [5690 0 R /XYZ 90 757.935 null] >> endobj 5693 0 obj << /D [5690 0 R /XYZ 90 619.951 null] >> endobj 5694 0 obj << /D [5690 0 R /XYZ 90 574.078 null] >> endobj 5695 0 obj << /D [5690 0 R /XYZ 90 502.347 null] >> endobj 5696 0 obj << /D [5690 0 R /XYZ 90 418.661 null] >> endobj 2102 0 obj << /D [5690 0 R /XYZ 90 368.848 null] >> endobj 5697 0 obj << /D [5690 0 R /XYZ 90 354.278 null] >> endobj 2101 0 obj << /D [5690 0 R /XYZ 90 324.822 null] >> endobj 5698 0 obj << /D [5690 0 R /XYZ 90 310.252 null] >> endobj 5574 0 obj << /D [5690 0 R /XYZ 90 292.927 null] >> endobj 5699 0 obj << /D [5690 0 R /XYZ 90 278.356 null] >> endobj 574 0 obj << /D [5690 0 R /XYZ 90 245.863 null] >> endobj 5575 0 obj << /D [5690 0 R /XYZ 90 223.427 null] >> endobj 5700 0 obj << /D [5690 0 R /XYZ 90 223.427 null] >> endobj 5576 0 obj << /D [5690 0 R /XYZ 371.451 188.297 null] >> endobj 5701 0 obj << /D [5690 0 R /XYZ 90 171.57 null] >> endobj 5689 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R /F8 1129 0 R /F7 1132 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5704 0 obj << /Length 1304 /Filter /FlateDecode >> stream xÚ™Koã6€ïþ:ʳ|H””ãn»‹Ý-Úè!ŠÍ8BõØZr6ù÷¥,ŽÈmÈ!PˆÍHŸ>>ġªXRÑ¤È R‰<9tšœôÑf¢;Þ9ñwûÍ„>‹TR$ûÇëé’‘œ³d¼K%aÕvÇ(¥é·Ãxé›i$OÛÏiú¡iÕòíõ¨Î[V¥ª?̇ !‹”åö~ÿyóÓ~…›[Ë…œÑÿlîîirÔ·øyC‰¨Êä›þN5°JºMÆ…ùÞnn7¿¯×XŽ }Üg7Gw"#e–ç‚Piå9·òŒJ’‰2œ¹¾pžÿW„Q} ÏçZoXƒYF*Z|ä7Û`4=<ÕºQËô¤|íHaYXr ‡—”¨bd Zš0~ÝÐúÌd)gáÁëăn“ÃX« 4z.03~“꾪s=]Î^M©Ï¨Â–k8,¹¤Dà «ˆÐÀÐÒr#Ø^º¦.ãòhúIõc3½úd3A„ W'Ö59Q_„e…1 ;@ c¶GŸŸž¾™@zÓÆÃ~&'ꇰ¬?X@—ªþ4=ù õüÍ‘Žšœ¨!²† ` ³²é|Ó1×8/Ë ŸúANÌc­~(Ðø¹ÀÊø=¨ºóùéé«§pØÏÆÃ~&'ꇰ¬?È(6½ÏOOÖB ýgãa?“õCXÖ‚Ÿdlõ›|~z²– é?û™œ¨²~ü [ËšáÒ{ õd-‘ºÍ‰‡ MNÔaYC †Aa3Nªmuív]»ú¤‹æËÑ÷ÐÉôü­$*;ñ 2äÄ”1ÖªŒ² dPë|m^¶,OUë³”¡"ܱNœžÌþõz½åëšÓÛOú739ƒ™Æ[–ÖÓá)|æóµ¥\ý¬tåß«ãò×Ãë[7ž¤¥cתõÖGÌÕÚL9oïÆ3ø„¤¤àáEЉäÄÆZ 4ƒÏ¯Ÿ–º1Ogå{j =âJ^ xØÒäD-–µÄ€`é™]'Îõ±©}õŒà:¿?4xXÒäD%–•Ä€ éa¹?\Ú¡{ð)RJª<¼ú9ñ°¢É‰*",«ˆAÑF^dð’ÊÃ]èă~óÃX« 4~.÷Ÿ·|^ž½…7—Œ0^ðœxØÒäD-–µÄ€`éaq?ÔýQµµO1ÓÙ… +ÚxXÑäD–UÄ€ èaIÿ»i‡ÓÙ»?䜞#ÝhãaG“uDXÖ‚£„7š¼ïÛ8eDp¤m<,hr¢‚Ë b@t€ðcTº®:Îh[ƒñœäÕRèì¡49«®nô6åH}6ÇM7¿§z]Ñ´j‰o/¦Ë¸Üû†ê›dËËìÿ÷þÞ¼Ã%«Üÿ?HR™ùÿƒ¡Ï6U?¿B…*Jßôõs¿­xz1B¿L‘™-¬º¡üFÐå/Ý„¦”{œcPýùþöÝŸÞ™SIIøZ©]?^^OêÍ#/×ûÙ·Íó/b endstream endobj 5703 0 obj << /Type /Page /Contents 5704 0 R /Resources 5702 0 R /MediaBox [0 0 595.276 841.89] /Parent 5688 0 R >> endobj 5705 0 obj << /D [5703 0 R /XYZ 90 757.935 null] >> endobj 5577 0 obj << /D [5703 0 R /XYZ 90 436.042 null] >> endobj 5706 0 obj << /D [5703 0 R /XYZ 90 421.471 null] >> endobj 1097 0 obj << /D [5703 0 R /XYZ 230.641 175.731 null] >> endobj 5702 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5709 0 obj << /Length 2058 /Filter /FlateDecode >> stream xÚµZmOÜ8þ¾¿bOºY©ë³;/ýF)ôZ!Úƒ­N§Ua×@t!K“l)ÿþƱ8o^Ž‚ÈÛdž™ñ<ž±³dŽáÌc<yˆbŸÏ×·3<¿†»ïfD?]Âã¥õüÍjöDZo¡8ðç««úõ€ NÉ|µùâˆâÅ’`Œ½ûu¹«Ò Ý,–”cï8Í„:;W¢XÈù‚xky7Â>óH/.VfG«^Çý@‚Ÿ}¹Àó ùa†‘Gó{8LjÄñüvƨ¯Ï³Ùùì¯F‡ºïÃý1ÿ8ñG$Åœ©pÀŸâ!¸>uc!¥ ù,®ïòu•nórÄù ædrd¬çµá”¶(ˆùQ£Cb}¥”÷a†W(wb7 a(ÆaðÇ‚bo›n >ÈÚ•Šk-qfÃki7|O¥„×#ôí2Kò¿}ŘfYß qŠBâôßÈ8  $? Ý€cŽÓ¼Ri‘¿RÇõMRè³/JAà]€LˆH¿à|Ì0@Þ†p::hdÒ~i)¨ftÑA5#5uB.÷RTmb¢-]îI»á¬+¡(«"ͯÕù}Zi&Ôá.ѤCxÊ¢ÿí¯ý!¸é …0qè&…–ÙKŠV—ƒ.@C p/)lÐGÂßSi“"ßeÙ$'0¢0éºÜ72N|Š) iÐ÷sp‚RD¹ÿ œhLrB‹<'N?Ÿœ8(õ†Æì¥(Áãê滑‘ÙG K×4%œ€š6 Ì‡>…¢L¢.Þ4´´¹§ÒfC’eGß6D¾„¸}Ö2näˆCß@»Aîð`Á0L Ib­)Ñ>™¸5)‰ç¦ƒX„>y©.‘E…î¥Eö‘©Õ4Í%𦒅¶I6â~"¹°» {4z“ûÔ˜€C¡Óg-âÄ…±e¤ãs—CãMà(e #Ƚ”1¥Èú¬¼L«ÒEÊ€@³?!)ŠäÁEI(òƒ§sÒR0EJ#Òa¥tÔø©—ohXÌm:”,{ý¦–¿êÅßÂsoš¶œ£( _ª 2FkF9y«eö·Õå`® ÐP׬×öÃV)†bôR¨c¨À¤gÓ4·µ´ÛºžJ›ÝWwUAaí>Ü áõÖ˜+4FÆ N!`ý× Eqy‰¤ç®|W»|-9&•Éã`gåFÈdýYõ7Xº»Ó0KÆPe ’¾œFX³ëˆÞ÷~+ª$Í CÞŠr]¤wUº…Õh>4±»Û}žÞÞÕÛäaàÉå+D^­æàúªÙ ‡K^¯ùÖÉ[n(a³m jæI¦^Ú•Zù6φƄ>œ™YéRãþ}x~¦¼ƒÔõJJ?M ¡To¶ëœ jÇáÁ0OÊm&2#®­¯§yjñj+Í‘ûÐD+æX²Ë7š–$ß4;GÕ0“ýF€a>Á¶auCA¼B åÛ¶P¶é/›ÕÈ‹B î¨@Áɲ‡wðé½:¹Mš ʯE»¡%zW5ÀéZü6ú‘£ÎŸö« ¢:Ì?:¬Ijå]¥nÒ¨·›üƒNRõÊ"{T˜-Íú¡)¡µy,²òˆGæA ùÐ~ޏo 0‰clÍc¶&(.¾iO×C=PÕ›îµ&^ØOv0'™ ! ôœðþtutv*ûƒåÅçó#uòñôDn‹ü#ÿ!¨úUæüÞÑ#G4›yEͦ;Ý”Ý=Nðylo“Ńý~#!Üáþg“_ ë6Í“VFîŒvÀ`ÏTTùy®¶×vôs©XiGZ?œËTßU¡y÷ErwW;9&RE_¾ ÒefŒ‚‡ê`»—Ú}âÕ¯ÇuoD¼­ºÐÀrRk°ÿ<8;«ŸCSu :Y˜ŠtÙŒŸœT[’\fb¸I &ñœ‚ ï޵IJ|¨ ÂlN!]Y 6 ?I·,_{ u€ŽàŽ´J´o@§šAù ‰oÔ©Ücx„š°ääÌffw[˜£®h‘¾5Ý6׳°e͉ȯM¶šF¯…»<¨ÚEÀ½WÍG â] ©Â4Ë艮J‡®•™ ‘Æþ¾'nëaÜtNK”DßîzŒxHlCVRTÑ…ë}e¦31粈˜Ü±]–-Íô`J˜)…¨vE>Š¡-_Ó7ä°d¦ØA‚Eú§ g°î-¦©á‚%z\cŠ(m1à“€?ý§ êsg¹Ññ Ö!Ó?]à0`\Í™ïD.Ša`ëö‚k=&LHüÓ×>VW]'®ä$fš‹¦Ò¯¢H–úzdLÿùp-\–?¾ÐZáù ÅÏ< endstream endobj 5708 0 obj << /Type /Page /Contents 5709 0 R /Resources 5707 0 R /MediaBox [0 0 595.276 841.89] /Parent 5688 0 R /Annots [ 5712 0 R 5713 0 R 5714 0 R 5715 0 R 5716 0 R 5717 0 R 5718 0 R ] >> endobj 5712 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 5713 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 5714 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 5715 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 5716 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 5717 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 5718 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 5710 0 obj << /D [5708 0 R /XYZ 90 757.935 null] >> endobj 578 0 obj << /D [5708 0 R /XYZ 90 733.028 null] >> endobj 5711 0 obj << /D [5708 0 R /XYZ 90 691.872 null] >> endobj 582 0 obj << /D [5708 0 R /XYZ 90 426.198 null] >> endobj 586 0 obj << /D [5708 0 R /XYZ 90 357.699 null] >> endobj 5719 0 obj << /D [5708 0 R /XYZ 90 335.388 null] >> endobj 5720 0 obj << /D [5708 0 R /XYZ 90 335.388 null] >> endobj 5721 0 obj << /D [5708 0 R /XYZ 90 141.806 null] >> endobj 5707 0 obj << /Font << /F31 604 0 R /F22 597 0 R /F42 818 0 R /F14 1084 0 R /F48 2408 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5729 0 obj << /Length 1892 /Filter /FlateDecode >> stream xÚÍY[oÛ6~÷¯ðÃä­fy—”¢í–-‚´k CŠ­ÄB)µädù÷;¼É”uqÚ¥ÀP¤a¨<¿Ã#‘)†dãi(B31]ÜLðôzßNˆ}:‡ÇsïùëÓÉó7 F¡X²éé•. ”LO—çDÏæcÜ/ªMåh5›Sƒ7YžšÖ§ô*]ÏH¤ÅŒ ÕaÆáÙÅéûÉáicÞ’L*ãß&çxº’ï'±8šÞC#ÇÓ› §Ì¶óÉÉäÏfÓÏ ¿o}‚°ý ¤ a)š"Ѝ]äÝŒà Ì–fevÉ_ŠMžµ}Ƙæ¹yö œµZáó7<Ú #r £æ/ Àg `ý±}ül6`v±JÖÝ™hŒ³ÀEwŽ´+ôãsà/ÃàX…œÎI£PJh„HR®QïŽO?Ï(^™UœšÆ‡ã£YLƒ¿ÕHÏ€[C[®°~ÐŒ(Ý2’°µ\ZJÊAšÎœ Tõ:»­L»¼šQ\©? ^'Yžs‹kÓq™'ÅW‹LŠ¥iÜ&KÛU¯RƒŸÁ¨u²¨!útO²^'µ*óeffl†®ó>«WfØñÙÑ‘ñ™å?'ÅB¿ÃÎhUŸWΪT… eÁM’ùƒjó .]ßWN©é][7™é1t*†XJó<»Î.õ¹Ò=vº•íx{|fz–é¥ÚÄ Ìx}íf»_e‹•Þ¼uµ3z½¹¼Ì*‹¸*ó¼T»p¯â¦–mŽ…qdo²"©µßT‡òÖ3Ó,/«…â°n6ÃîÔÜIîÒm²®í˜«¤qÚUŠH Lâ©Ä ¢<ê=ê2÷0Ó‡c>•” 8YjeÕ–À6ܤjSvíLQÈhŸá‡í0 Ü“¢DÉaÌÑà¸G8(⢥-bT ËQ8L‡H ÃHFa‹ÐñææRÇ‘·C;‘ßç$…(¢a?ç4è‡Q\~Ùã™E×3‰xœŒt¸´ür+BÒârê¢táܽA+8GqÈFƒÖà ­¦¨9ŸÒz9VÅpÈŽ™ÝîÆˆ]H‚""ÒO̦F•ìZY1ÉóÃoÛdBПÓjêâšë,+‚´'¥‘QIÛ¹±wR8Ï"rI´Hóô¦;ìyŒåN¢-‹Ê.cYn”Ôêa~L‚×YDš$†Y×z žnt]Õ=k‘{¹Ð¦e  é¤eÑJËf/: YݵBÖIÈFØ+" yUÚ°N¿m@³ë‡¶$[ Wyz±É‡¿§.,tºÚ«tGñí¦×e ØSÁ•~Á^Œ3tp8gúêórßcyø íRèS4‡y´Ü·E‹#‹´PyÇa:ÜZ ~á¤E­¸¢'ŒíXã8wtBÇEÇ ;Ìbë0wæ[¤8IÈÆIYL‡TËSp‡Ç`Ë'Õ¸*O‹ëzÕvUš,V»N›  úÅ‘÷›ô›Ã<Òož\µc Ôdi”–ÅthµcŒ@Ú[´>–êrkƒK_Žý  cÔU å±–ª¶Æ4ƒÍ•_*GÏœôf“ìDÕVìÒå¨Ú%ë´ïbe" AE#1® :÷°Ú5ªMÈ·: ȃz: U­v̯ZÑ9 #:%PÒM¿Ê´;$¤«—/ .P2η˜þ‘Já½Ñ¿™_ú¨x…aŒˆRŠqiDÀZ!1]ýü¸—Åülé–¨¡ád˜‚"‰éÿ€¬š§¸Ks¢X«ŸÝt Ñ!)#ídNvî¶]f¯UV)äXªI5’p¦#?.$·ØÁ´E×^‹´›îÎÕ’/ε».^ dm‘ÅhÖö0CY›Âofë‘Ç\wÇÌ6 ºk·%UVAF>©“zcEc­H­zv“öб³¢c0sÔSDäv"u”еg·~Ü\Œ$lƒo=.mp&îm—ÖJ4¸vÓb¶gí[ÐðÚ-fßÚÇì¹µš³k÷Ì»öWÝ%·ÃÒŸ DDè—J|ô-"܈_åp¸÷¾@äþù‰ÓP•Šú—Š'®’$$©(zê——zzÞ[ŠQPë¾2 †Týï¶6ép™¤_‹ý´2‰@°I>^&y˜!ÁU5ƒŒ¿«Lê±<¬½»ún¯ó„eÒ˜wš2i—[O™äSûÏeÁ°/|Ï»4ì0‹yŠ2i””+“vIõ•I>©§-“ T9ßS%m1ƒ^³Ç¼^ÜS rõÑ¡¾òÈ#ô£Õ‘Uuj¡g,÷Á@Íe5nS¹*Éiô©™­„Öºêù²**Dï¹Ãà"ÅóÓŸ-%¤ûŠw÷»7—ƺòèÛ´H×ISð•VqOUzpNø°°ëâæ‰0=`ØüE1±ú¯?U¹Šñ¯ßOŽ@Øß½¶CQ¤>ê[¼½ØÿQþópv^Þ«¯’]÷ü Á:×È endstream endobj 5728 0 obj << /Type /Page /Contents 5729 0 R /Resources 5727 0 R /MediaBox [0 0 595.276 841.89] /Parent 5688 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 << /F31 604 0 R /F48 2408 0 R /F22 597 0 R /F14 1084 0 R /F40 783 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5736 0 obj << /Length 1721 /Filter /FlateDecode >> stream xÚíYMoÛF½ëWðÐÕV›ý^®ƒâ6 ¸Nš¨( Ç(d‰²ˆÊ”KRNòï;Ë]RËOÉA›K EÎÎ>ÎÌ›y¤H€áJ(¤™–wÜÂÙ—â®ÎàòÌ»~>ŸìyçûîE‚[›1Ž"å[t, åH‚¥¢ ayˆŒH+ *ÄEŠ$•ȷ枎TD0xyöxdy1IˆÕwö#·ñ\"öëåÒH"¬ì_/îwYº{Z^ši$7˜1Š„î]$Žá(í¥Dšk»¹ñCÛ¨!Hšã }ÔÕfqi¯žÙ ,BT¨¯x;ÆOú/gÄÜWûÞ "Y$soO^PzàÌŒJ(!ÂÁC„´°é›o=Y¶ølï’ÛMaoÜÕUr§y²3Ô‰WnEÞæ«U)4NœTÖžíPYW&îj·¿1„6Qy¸2±º¾*ã|ý´ &p³:p³\°^:“™gÓé4‘Fó@2‰¶ ÞÅÅ:‰Óü¬L‘bttÛÊft_èABAbYw8D‘p]îaJp¸K\&\Ïû#‹g[ÈPbO›rJÒÂV¾ §ˆp hŒëtÊK‡"Œ—ÖÖÇ©$ÎôûéLÀî½N¡ùˆHW>«Úo:ƒ¤k,œAeö;û€1ëî§Wô`A ýºè¡‹‰ƒA,³© 7fD!ImV_]Ο¿»œR>»°ñûõýs{ðæòbªiø»ù‡JØ-µ$jÄ?é2Ï0QØRÛ¸†%¹=**&>L©Û½ûº[;ºÙûEV$Ë=dy»Èì)ë8uŒMÒ†9øoºq‰.vYŽ(Y©$F)ãÙ QF˜6CUyÓoM½.²Å]\ÄÙ0kzvfO‚_?+¤«ÚÀsÜà äTh`„qÀi4ʦƒÍ¯Â‚)éC«»pº¿»‰³Ó3VƒC^LÑvã ¬²95`Ï 8‰bã œMT#R}yTªmœÞ›f¨âÅrÓÚTˆp8n ºª>¶Úf8jÖÄàûæHļVÕ¬.èðTŽr&m@ÍÚ"0(”èí:lUSÅ®Õl*8„냩UR˜Æ}JÃú¸Iªl$®ÇíóJGN«jÏv¨ª+ר«G¨eÆTᣣ߳ýL*Pòdµ<¶m݇ÇöµÌ0$I*_-Ëcjù<ôS˧+Ûå.ÍëfÚ#r9À$òd‘›ÇÛK–ÑcåùMRä=¾8Pâ_Pç–)ÝAX™ìhsfȦúú‹¤¹hKóó¤øBi^†«¡®! .*bè#3:ó–fO[£sHrSFdr”wžÍï`^#E‘Ü=;S° ¡O U6ÿ„‚ K­ Û ú¤ê²Gc;åÓʲ/} Á)¬# ›Œyä÷Œ†#èlNŒ ë M5 2‰qHΦ©?f{”éÙj•Ź Ⱦ2€T–›ð‘"j˜Ég/¸1éÙÖÊΕéGÓÃ4üÙJ;Dáb~/£PK¢gnW›8‘î·[{ê¾–¹pÚ´u·¥BÁd¹xVÁ@ÿ2€ÀX·}bQúéTÂ"‹›„Ì>1Ôr<ûžÑ`ö+›³_µòfú9ò&gÓÁÔL¿F‚ó&ÓF­êYä‡CøÆGÈà ‡ÃÙœòlUšf/¡ˆa6ŽÈÙt5Ÿ­@Ô@Ùøˆ\ðšIÑ#«keíCuº#WþýCÁ0TQ2:<›¡¡@`((ÅNccÛR7²/ˆ1M`þs_‹)§Å–›EÖU¼á¨£(|¯¾¢¨¦úú¾Èh^d g>º;DŠzÄ–¿H¸ˆxz¤–½UÇ«ª[ïÓþ÷¦Ñ-AXß{C™iĘ3ÜÄŸúÞbZ*X“+¤Táu…¬õÃ!z•4dû Ò—ý¤Uþ*'#À¢ý¼Ã³šIõÚÛÝà|§q¶¨5ÒÎÍÔ¹QjÕ«‚7K×K¸ý ú Ó3†í7Љ“bkó†açÒüÛï/€A¯ÎÝRON§9²ý´ûôù6NÛÑæ…`'<E\Œ: endstream endobj 5735 0 obj << /Type /Page /Contents 5736 0 R /Resources 5734 0 R /MediaBox [0 0 595.276 841.89] /Parent 5688 0 R >> endobj 5737 0 obj << /D [5735 0 R /XYZ 90 757.935 null] >> endobj 5724 0 obj << /D [5735 0 R /XYZ 90 610.109 null] >> endobj 5738 0 obj << /D [5735 0 R /XYZ 90 595.83 null] >> endobj 5725 0 obj << /D [5735 0 R /XYZ 90 340.87 null] >> endobj 5739 0 obj << /D [5735 0 R /XYZ 90 326.591 null] >> endobj 5726 0 obj << /D [5735 0 R /XYZ 90 123.377 null] >> endobj 5740 0 obj << /D [5735 0 R /XYZ 90 109.098 null] >> endobj 5734 0 obj << /Font << /F31 604 0 R /F40 783 0 R /F22 597 0 R /F48 2408 0 R /F14 1084 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5743 0 obj << /Length 2496 /Filter /FlateDecode >> stream xÚ¥›]o·†ïý+öR:,¿?.Y)T¸v +H€´di­ª•%u¥$v~}gÈr†‡ÃŒá‹µ=ïòåyH~Ͳ…?lçèÎ(CœP»ëϯèîþ÷o¯Xx*¹€ÏƒÎ?é¸$Žšâs(·3BÊ­þÝÅ«¿~/ØŽI"¤Þ]|ê©!RñÝÅÍ/Gg7û/Çÿºøû«Ó‹±¯ašX'qéyïÁùΧE°ÐÖJuoquýø|ã-v $\í:ƈSªøûõóËáî–üû/óJ0ň¡v§"T±¡&þÁá6(Γ:Eu—È›é+À´]8kM4ðÉœg ¢¦êçAhh @|:üãðüôåéðy AJb³†š3¹ !¨»D¾„0+Ò»s¹¤*erã9ƒ ©ÚyÂf'Ÿû‡R_špµá†p±Š!¨»D¾Ä0+²ï Ô–z!Ó,w^p4U?Ï)ÂÍçÕÝá™Á(<þS¤ ˆ”Pe*ˆà«q7© ²½³eË."–™Îã5'ˆ^9F„ž¢ß¿l‹^GÖGBŒ~R£ÑI5úÔ‰¾âä£×>çŽÑáÏ£WЍæà£½WÔCŸ±ÈQ8ˆ””!ð—Í^ F”uÍ¡Or<ø é×Xø©/ bæ@°ZL6÷|˜·µiG0ÉqAÓ#‚ÔCP1Ò)bøˆ`s÷—V£›$rAÔT{Aæ‹ ¨™y†ËÄ€àþ¥² */4ÔÖî¤rÄ*»ºÔ]"/,ò"½»(L€ b,7^L€ƒ¦jçHXñÒÁýÝÃV B'Û)LrœBÐô J!5F)Tì<.ˆsÂázsF”Œ*lóX˜äøXš~,Pl,¤¾ØX¨˜y”jùˆ`kFÖÆM+‚DŽ"ˆš*‚ÌAP3ÂhÂ̈`sFZöëØV“G4u©/† bæ(N¸ŽW_ŸÐtðò…t@!Ÿ¸€OAWu—È é /Ò»K½L”XÃrãE:4U;O["Âfôêùîá¶Ê6å6›[åDŽn•£fe«œ9c[嚟A%t¿âåê î8‘¶™D"GIDÍ@Âa$2gŒDÍHpK‰‰o¡-Q¦Ä$ÇA͈ÔQñó `J ☩£ß…¿qzôÛÆƒŸZ«Öƒ”DޤDM¢°ƒ”Ì;H©Ùy‚Ê8¶Ÿ©pNÁ\µž©$rôL%j†3‡©dÎØ™JÍÏ#¡–Ø"‘ßü¿÷÷Û¨0§‰•ÍT9J%jz*ŒaT2gŒJͨ0+‰ ;Û9—t yBùNœÍ|&9Î'hVzMæŒò©øy>fù°í½úãióœIG(—­‹¯DŽ.¾¢Æ›‹,¾2_dñU3ó„!TO¶.ÁW„±v“G4u©/† bæ0AXØø‚ÍKpFá°­mE0ÉqASGúæ ,â—ºƒÑÙ©í–€R ZëúÅW©R‚ÂÆÖ²ìRçãþåj¢¥[¦`¡¡º0×·]èDuõ‚e^dy TÂVïs¢¦nA$—:=ˆ1™¦ÓnH§~ ¤m¼ß‰êê…˼H$ mˆ–¼zÁ5u¿%¹åùøøåTÝ0š„ôJÛxÇÕÕ;—y‘ý†vÙ=ü¡•«_ñDMÝ.’Hîy<‰4µþ)-÷<üöeVà ü¢g¢Pñ Òë€%×?¡éºg„P¹„™X‡P¹ï!Ô¼"„äÖçãã¯75Åœ y\AÊm¹ö‰ÚÊ}L^ܰ[&K$, ð{Ÿ¨¨E0Ÿ©pÐwÅþOJùËóýºtï³è×[O¨g°4« u—È (ò"‡4YÌ’†çÆ¥, šº]Bˆ‡îw}uØœ%¥ƒê3Ý:.9:0¢¦™164ªv„´ Ö&‰­YRA,m'1ÉqA³B"5FIÔì" XÅX5’Øœ*¥ô¦í$&9N"hVH¤Æ(‰š]$›'ˆ—>Ü>¾nLš–ÿÎ6§ÍDŽ&Ψ鳅ÁRgfŒ%Ϫ]äÁ$ »€ëŒrW&4l9T†rBÍ*… îya¹Y¾+°÷¶ŽçÆ‹åö ©Û ÂQÂÂr³¿GóÄýÝC¹;@§‚mž0–0­&¯îyqòH‹ì»ƒ(M޳܏0yxMÝŽê/f4lø\K«Gic«'r´ÕSw¡°VÏŒ±V¯ÚÅVW’p5$ƒ“7ߟý\éÿ~QÜ^iI,LÍBrÂÝ:AÝ%ò¼È¡é ƒ²Ì€™óÇ ©ûE‚Þ£¹¾éþ ÌaÛLrHÐ @ $uFÔü"ÿŽ ¯÷WÅ•”n˜5¹“DÛ:k&rtÖŒšú¬™c³fÕ.à–ÅÅHbëJŠJ”n'1ÉqAS~Ãl$‘£$jv‘LÓš$6¯¤¸ô÷Sí$&9N"hVH¤Æ(‰š]$!$lo"‰{lh¬Ì"œsb¤iE9:‹DM±Î±Y$3Æf‘ª]äÀ(1ŽG¥6‡ÄªÔ¤\‰5¨»D¾4ŸY~‰À¿  ³fÆóXƒ¦n–ÌYb…‰±^î‡ÏÏ·Ë€‚îÃFùJÀAÝ%òe fEú¨e'‡Ÿf27ž4u»°ÕÄZ> ørÿðë²Kû…¦;/~§uTw‰|Qy‘}3/ëý«PFðÜxþ«Ž ©ÚQ #i€|rúöôüüò»c¡Ž^¿¹”ãwW"Ä]¢^žˆÄí_ <·G4U·1vÅ g4óØÏ~^FÍ`mÜøµ•°ƒºKä˸gE"C}¹ä¹ñâ§Lƒ¦j7.¡á´høOþàðýùÛ7…F÷¥¿¼ÖꃺKä…fÏ‹ÄÚTL寋v4U»1|n£Y»Ÿ½}Çû9 øâx‡Í¥’züöJüAÝ%òeü³"‘ø ¨`—Ï㚪Ý?S„©¬ùßý~xöîâÔÇ¿ ^ú µ¿º|Pw‰|ü¬H$xX„2ŸðSãyðASµƒ§‚0—5þ‡ONN?Zœb|÷ _YðƒºKä…Ÿ‰ øáÄ73^ øASµ‹A;ÉÅ©ýÓa¿/žóù·è‚tý˜Ï‹»I]<åK ì#uÅC>i3×Y Ü ØÇmMÓ/<ÿòv6: endstream endobj 5742 0 obj << /Type /Page /Contents 5743 0 R /Resources 5741 0 R /MediaBox [0 0 595.276 841.89] /Parent 5802 0 R /Annots [ 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 5798 0 R 5799 0 R 5800 0 R 5801 0 R ] >> endobj 5746 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.168) >> >> endobj 5747 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 5748 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 5749 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 5750 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 5751 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 5752 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 5753 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.83) >> >> endobj 5754 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 5755 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.38) >> >> endobj 5756 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.37) >> >> endobj 5757 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 5758 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 5759 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 5760 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 5761 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.168) >> >> endobj 5762 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.169) >> >> endobj 5763 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.169) >> >> endobj 5764 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 5765 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 5766 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 5767 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.109) >> >> endobj 5768 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 5769 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 5770 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 5771 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 5772 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.109) >> >> endobj 5773 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.85) >> >> endobj 5774 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.85) >> >> endobj 5775 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.85) >> >> endobj 5776 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 5777 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 5778 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 5779 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 5780 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 5781 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 5782 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.37) >> >> endobj 5783 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 5784 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.35) >> >> endobj 5785 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.137) >> >> endobj 5786 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.139) >> >> endobj 5787 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 5788 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.81) >> >> endobj 5789 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.81) >> >> endobj 5790 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.42) >> >> endobj 5791 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 5792 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 5793 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.48) >> >> endobj 5794 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.48) >> >> endobj 5795 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.48) >> >> endobj 5796 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.48) >> >> endobj 5797 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.48) >> >> endobj 5798 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.48) >> >> endobj 5799 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.48) >> >> endobj 5800 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.48) >> >> endobj 5801 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 5744 0 obj << /D [5742 0 R /XYZ 90 757.935 null] >> endobj 5745 0 obj << /D [5742 0 R /XYZ 90 696.969 null] >> endobj 5741 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5805 0 obj << /Length 2874 /Filter /FlateDecode >> stream xÚ¥\]Sä6}çWô#T­µú°d;o3@R¤XH€lR•MQ¤ifØšt35Ì¿ßk[²®léZë­y Ó÷ô=Ò•¯¤3ˆ‡bÕðU¥+Ö(½Z?ðÕ'øéÂþ¶€_è÷oþþ½‚w±Æ¨ÕÍC÷v#˜–busÿûáÙÅÉéoGÜü¸*y͸6¥ý¹¨UûÓƒÓ›!´%ÖÊ´ÿ:øý¾º‡ðãgª©W_á5g¢iVÏ¥TöõÓÁõÁÏCŒþç ~ûìZ¨é‡—ÒxÁá¥Ô«J*Æî>ézóôøòø·ñ§ªb¼T´ãk±ûdWˆÙ¡ Ÿ²B¶ìe3!.ÅMHüpr{|yyur{sõáH^\/ÔF VÕùÚxxZ‹™Ñ'µ!èZm ÝZFµù騑‡®>ücañŠÕ•Ì–ÅÃÓ²XÌŒ,˜8) A²”f¨¢²œý¶lž”5|5Ù‚ xR‡¡ ˆS‚Pt­ •„Å<*ȯG‚^^Ÿ,”ÅpØNåËâáiY,fFLœ”… ke)kØU,ËÙù¹_V.`]Y¸¬”Ê0QŠl]<<­‹ÅÌ肉“ºt­.²d¢t¹ø„ùéòìâæôj¡"BBǘ¯ˆ‡§±˜E0qR‚®U„C“ZŠ\ÿr||z½pz¨º†>0[ OŠá0´qJ ŠÄP•vx8ú>½¤~]ïÿŹ|)µ§`Ó¤LÉæëÄ‚ Ž4éAÀî„TU±#"¥t@9!j!Y«‚–¬ôƒÝåùÿè{ -ƒ§Uè%OŠà9“$™Z dÍ´?=zØm6 ËAØAgWÀNCIíÄm- Öd)¤¹ZxÉŒ?cy|y\–¿l$3U¶žTÀah ┈ a_Érzú½P S³Êäkáái-,†^â¤]«…6¬¶»åþt|¡eÉêüŠ@ð´3#&NŠ@е"(ØðÛrw¨ü<ÍS”*«:“§E>Ís²Û§Oyak ¦€wœ¦ÅÐlöŒFJλW‡YI¶"ÆãæíÑ‚G C¶ÔÓçœjiBÞq¢C³¹Dy Ó¨—uóåiIUÁ¬€·:äÜÜíÑ‚Gæn2‘*l‚a˜ÞIª=†f³©Š¦bÜž8Àc[ÝEÜ$ÄóȹQíÀBG5ØR›¨ÀJ†¬“D{ Mæ­5ãö âq¿}º‹—Ûé:7¨=º@ðÈ †!ãƒZ VBÃðNÖ£C³¹\+Å„=*D_w›¿"½˜dº’v®ëÑ‚Gú±0d"ÙþØ?àM] l.Y#˜°G-Û‡#©Rw!ª”|þ.¤E½ Á!ãDiOÁÞI¾=†fsù– “öÀçõîþþñ%R²öBßaç×^ÿ#xdpÃñÁÕðЯ«wr-Ðch6—,H,í±ÑëçGVxÊ77ª¸@èÈ ‹<5¹Y'‹S¡É\šð˜SöÌêu÷ïø“µò¸Œ'k¥û²V!uüɪMÈ{²¶&’Í%*`¯eÏ»v›‡d áp™-‚'[LmR-DÀ›j!H6—(°7íe}û¼y»‹M]˜ÿÚCçæn.<2yÉ©dR™w²"õ’ Úߺae)¥bL¦àýÚÁÓ„±9¡Sž¥0¿Fn«ÈÎBiÞ=,óÌVMºŸÆ!ã[Me¥Òlå04‡\k12[yËŠßi™Œ–ûðy&¥AÊ54ßi¹\)“Ò IgõLJ{|õ?éåëñ:F›qÈøuù áëñ:PtN‡±¯'9/LŽYf¯áN‡œ™„ÆëAÑ9=&f˜…3#Ë5â• lãôŠA¹F¼S"tx§ÌBA²\^Âö0935—…„¢³‚Œ¬ïr¿¬Hòlƒ”ïa’^4(›Å I甽Þc³ljä9-¼ „õa’ž”Ó BÑ9AÝbýr÷¼I ñu½ì)#Údú*š4:ŒC¶ìjºjT’Õ$}CÓ9%¹b½½ß¤J6'Q!tÍ4lóœMZÆ!»ë3º[í('…ÃÐt¶¹ÄvŠýë:>êœU¢ s£Þ£ Œz²e—b:ꜙïdÐ;MfÇ[2`̉n F=¶”-² 3:XtàÓ6 Ù’×z:Û`²6"$ a14S¹0Z%b݃ÉQÂz,r•ðð´ȶQ—I%0qR ŠÎ)| Dôa™5'¬«"W O+ŒÄœÀÄI%(:§ò[¬·›åÕaݹJxxZ dÐ æ&N*AÑY%°Ù¢Ubiu8+E¦žT»3ÒJÄ)%H:§„·[€GB..ç¨ÈÃÃÓb “!&NŠAÑ91×Åzût÷¾°ur¶ŠÌÖ Á“­vj¤[§€8Õ:‘tNo¿!ßrXsJXE®žVY6TT'• è¬؆±Þ>?o^’»ðÖ!ô¶ÿOëÇìêè[¤¥¬XÅ›Áq1×RöèÁ#-e²k)§]V»K‚.1 ž´”=†¦s² GÆzûò°Ý=ß=«Õ`;ÏEfƒàÉÛ8D•j°âTƒMÒ955ãøòâìxÙÃ$ÏL1¬Ÿ”½a²[?«ÔúI¹)†õ“¤sB KñÏÓ‹›³Ë‹Î©|¾ì™’gFðšö€qÈM7‚ׄ¢³š`KÀz»Ýݧ„x»û3^& 3BfÞà;4y§>ÙmÍ"Çx ÓUI^á; Mç”@wè D´ýÌ©“¼ëîaNPÐãt#NÝws‚¤sJ  çV‰ôÑîŒYWÄ^ âÚvrF â–Ø+AÑ9%ÐU-(±¸÷Ì»\õJ×ã3J·«^ ŠÎ)î7×Û×ÅÕï%ç… î&Àt >½ ¸¤q«%|­£GXE¿QYöG/º¿ÉÑö$¢Á’ð'÷ß;ÿM›Æ›—Íîîmsw~¸}é¿Þ´ÿåê˦ÿærýÖ¿(û/¢ùŽËïï¿“š¬îUçÎÙîúo~=¾>?‡gí[YÍdÿòÏoýדíû·O›—±ŒíŸå°Éó_úëfÄ endstream endobj 5804 0 obj << /Type /Page /Contents 5805 0 R /Resources 5803 0 R /MediaBox [0 0 595.276 841.89] /Parent 5802 0 R /Annots [ 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 5869 0 R 5870 0 R 5871 0 R 5872 0 R ] >> endobj 5807 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 5808 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 5809 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 5810 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 5811 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 5812 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.50) >> >> endobj 5813 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 5814 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.49) >> >> endobj 5815 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 5816 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 5817 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 5818 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 5819 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.48) >> >> endobj 5820 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.48) >> >> endobj 5821 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.48) >> >> endobj 5822 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.48) >> >> endobj 5823 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.48) >> >> endobj 5824 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.48) >> >> endobj 5825 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.48) >> >> endobj 5826 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.48) >> >> endobj 5827 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.137) >> >> endobj 5828 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.140) >> >> endobj 5829 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 5830 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 5831 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 5832 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 5833 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 5834 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 5835 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 5836 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 5837 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 5838 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 5839 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 5840 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 5841 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 5842 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 5843 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 5844 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 5845 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 5846 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 5847 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.50) >> >> endobj 5848 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 5849 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.49) >> >> endobj 5850 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 5851 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 5852 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 5853 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 5854 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 5855 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 5856 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 5857 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.84) >> >> endobj 5858 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 5859 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.84) >> >> endobj 5860 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.84) >> >> endobj 5861 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.84) >> >> endobj 5862 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 5863 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.38) >> >> endobj 5864 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 5865 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 5866 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.87) >> >> endobj 5867 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.87) >> >> endobj 5868 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 5869 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.85) >> >> endobj 5870 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 5871 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 5872 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 5806 0 obj << /D [5804 0 R /XYZ 90 757.935 null] >> endobj 5803 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5875 0 obj << /Length 2471 /Filter /FlateDecode >> stream xÚ­›]oã6†ïó+|k.?DRì];i‹ƒ.: °]t‹…;iºùÇ3“üû%EÒ:”t޹Ê`.b;oøŠHêïX,¸ÿ'Ž/¬¶Ì)½¸º?á‹ÿé'"ýv彿ÿîâäï?(ÿW̵¸¸îþܦ¥X\l~?=ÿùìûß–\ü´hx˸6¾•ð¹h›ðéÉ÷‡¦“±V&4üñä÷?øbã/à§Δk_ük΄s‹û“Fªôúîäד_mÄÏ•ÿ|êÚµPã‹—²¼x©7º»È«Ç§çí¾»zá5R/VB0§ãoŸv±?ÿ6ì…PŠ5]X¯"^Fø|w“ÀeñªW®iÐ`p³‰ÂtÐ÷¤ œ|ïsLèCï_äó¼Þ›Ö2YÛùƒí{T]ŽHÏq›Ðq«™lrÇŸ7X·¿\=ïw·7S]ׂYÞ.ŒQLºc}OâU¯w¾l°›5ÆŽlaFËÂv I(³€Àû)Õ$ŸÐÿoÎåþù¿KÁO·K¡O_o7cMËœõ¯Sö(ޤ^ù˜Ç Éˆß¯ ã$ iˆHË™ˆì6Û1*žv÷Œ¾þŠ…f9!ªW@>¡l2¸+7†àU~–Æ#QCÚ\1-2„Çýz&íüSAWCrBÖt,¡0Æ Pv‚¶Žy ÂÓí áîöa‚`µ m,3þÊAˆêO@(›ì¦ƒšZ•åJㄨ¡íxì¬Öš§ªîx’ÖÞñ^Žßqà®4zÇ¡1zÇ »pÇýSê6ÝñÏK©O×wØ]~ºšÑ0éË­üJÞÕ+ ŸQ6ÜåÄ"ØtÅQa<5´]¾ë¾Ó­Œ4öëËéÎ*æë«¬<Ö×N¼ꉮ v=Xé|¹æ¶£žF í–{Ê-k­¬ßIZ;¾{9>¾;1¾¡1:¾ ;?¾§™6Žïç«gù2¯ÒkZå[­®õ€­ö²¦«÷ Rï¾HÅG™V2Î{sKýÆp¿³©GÐËqIC#€¾Â, ð5w&#˜]ï7Ê0ÿ@ªFÐËqIC#€¾Â, ~l3‚×ÙE^#¤_™Eíjäèj5t‘Wc«e pΤMö¯OÛ™TÛ2%«!9 !k:ƒPc(;AYÃTÞúºÜ^‡Îúj6 Ó°¦ÅA“ˆ’`ÝpE9à^ƒ–¬ÉgŸn÷sûßp¦«»ŸÅxï;ý`–hßQ£ÐuÙ2NÞýëýç¿}Ûà—©5ѯ©Êù‹†éšo¯zõäÆ4 ý‰ƒå·ïº°D e(ð†™|Ðmðﺾ¾…t’[ ÈQYÓᘘ©¯…3ƃòó@dË™•c ÿÙîv÷Ï7oábZfM=—^ŽsIš8LZ” tF¹~‹ŸTm:ðÓåüç³çï¾}?¯„~gÓŸ/¹„r´„Èš®„h‘¢ðEJÊ,pP’¹|:ЧÙõ´”œ¹ã' ½Ç4a€¾Â,`à-s®Ä0·¦Î2®ª19Š!kH …/‚2óD«o ³ëjaýXÖcèå8†¤¡1@_ a0hÁRÙv&?käýzÿçäyºeÖiÝŽI}´HêOœ¨—MÆ#õñ™™ßZåJç!„¤!ýi™tq Ú¬¯w¯wÛø1Ò vŒd]³B3Õ4ÇHA½òÉc$Ødw¸¢§Ž‘¬¶¥ñÄ1RÐv÷Ï”6ƒØo×KÉO?ß̬-]8±lj‹Ë^V—IBï´ k‰A4a·áЭ€@1¦¸ðèªuÞwºWÜÛµ¢ˆ"²ÇK°Š˜\Êø“tuadSá Ái\ÊÏÖI*ÌÒ+a€™äÙ²á§ß.…§Eunj+¯°÷ Çb5 eÖÑaÙRš+ë|dˆŒ2+(§Œ$•~T *óÿŸCM\ÙƒÀÄAƒ…CQàqeÏ‚0Ë0@f¹Y‡‡í—nÓÞ-.åRkj–ZeDwR[f5™#›ì–Z3æâUª%cˬ¡í2]ŽÈ|ï·wséTå™="`6Ùѱ("ÏìéPv™5GtÀËŽÓLJuç•@›¤Çx(‘v‰L=7—Û=`2{ìÔ% ="’6I*í©Pv™ È 7Û;ˆ—$ LiOUÈCÂx„DR¯€||iƒ&»ç2ßÇ´mJã!‰¤¡í2 Bn¶ÛÝVܺܰD”7lrº¸=Œ "9ìÇe—i€ìnH„r&œÎUÒr” üp…1Fƒ´K4`ˆi VÙ¹dRhWK¦—ãd@ˆ¯ª…1J†²Ëd@¶×‘ 3gLÃTÑHù]-^ŽÓ‘ 1N 1Jƒ²Ë4@Ì×Ñxãó%ÇyµDz9N$„Äø€Æ(Ê.©_$²[oæÒH¹^-^ŽÓQ!1> 1Jƒ²K4`ü×Ñ8^UÍœöU’r” Ìq2…1F†´Ëdú8pæaæpÉÑ_-”^ŽCi"£P(» ånnïï¶(ˆ/ûËõn7Q›Y¦Ü!> endobj 5877 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 5878 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 5879 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.167) >> >> endobj 5880 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 5881 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 5882 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 5883 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 5884 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 5885 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 5886 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 5887 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.35) >> >> endobj 5888 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.86) >> >> endobj 5889 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.86) >> >> endobj 5890 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.86) >> >> endobj 5891 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 5892 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 5893 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.41) >> >> endobj 5894 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.35) >> >> endobj 5895 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.137) >> >> endobj 5896 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.141) >> >> endobj 5897 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.138) >> >> endobj 5898 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 5899 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.81) >> >> endobj 5900 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 5901 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.81) >> >> endobj 5902 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.163) >> >> endobj 5903 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 5904 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 5905 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.39) >> >> endobj 5906 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.137) >> >> endobj 5907 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.139) >> >> endobj 5908 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 5909 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 5910 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.26) >> >> endobj 5911 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 5912 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 5913 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 5914 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 5915 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 5916 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 5917 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 5918 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.25) >> >> endobj 5919 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.25) >> >> endobj 5920 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 5921 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.45) >> >> endobj 5922 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 5923 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 5924 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 5925 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 5926 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.26) >> >> endobj 5927 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 5928 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.25) >> >> endobj 5929 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 5930 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 5931 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.26) >> >> endobj 5876 0 obj << /D [5874 0 R /XYZ 90 757.935 null] >> endobj 5873 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 5934 0 obj << /Length 3406 /Filter /FlateDecode >> stream xÚ¥\ÛR7}ç+Î#T¥5º_òf›ã„ †Ì13q*“¢;L¸8ÇÛóõ³Õ’º¥Ö¥{ üÀÅ«÷êµ´¥½%d…áY¼RB!ÃÄêòv¯>Àw¿Û#þ;øï.úÿ—g{{Íà)d$[½ï— JVgW¿ì®ßüzöÊc°Å~Ÿha¿»·>B{bÁ¤ üçÞ/¿âÕ¼À{1£WŸásŒˆ1«Û=N™ÿüfïíÞ?†îû ¾_zwAXþò”¦/OÂRô/yõù€àý‹Š÷ÿ: b{@|_Þ|èEx”ŠUG2Â=ôéã—»Ûo¦êçH¾R%Ľžýþîƒl¢ ànDgï: h©©ÌX€„JX'¦H‹ |‘Æ "*¾ü÷é~H­]jÇ®ºám3"Êšu"k…ˆòÜŠ»÷»íŸOµA2DÍbtÝéU'"Öªu.ë… ˆ1î¼°iM™'úÁ bj¹!#¼îˆÇÌ$GL\õ¤AgM! qéæäön»{ªX åbFxÝé=àUb⪠:ð@†„=˜™è÷Ü&%j%4”3kƒGw<·a²¯DXç>ÀJã—0g>8L“Ïú ’ÜûðçãõÅn{qS3âãî?å„ T@é’z>!º‹à…„HCöN¨’F«”¸`„Å4é¬\ Åîî¿Ô\ø|ù©ì‚Dœë•` )%f]pè.‚\HCZvfr•1!Î\p˜&u¤]Úîª Ãåö¦–BÑ•Ài)äEw¼˜qHËž§‡¶Lð”wj€Ç´Ù°ÓÊ ô`nNÜ\ß•¥Ä• È9¥Üè‚Ð$`Ÿï¼”„µîÒä 2µX:µtáÔŽàÕ©³]›Ú qmj7é‚XÅ1Æ/è—µÂF¡½ÐùÂfÑ]/¶8d_Øh©°ÙÍBB\(lÓ¦ b%xÌù’*  «x¯Vñ˜ªZOˆkU¼IÄ Œ°vÞ>\üVËl®rNkî"tAj°_˜q®öjfB›)u˜6[PÊ4°ò%U(@V¡^­B1;§µ*”תP‹ª§ß ¯7›ãõI£Û:%Ä~©Cã1 ¯D`Òy/º‹à/ÒýâÅXÆ ›f,fžšá1M>k¦ˆJíjòãÍö©U™ŒäìªÁ«U9`šU9á­UåxÀØ.¼vßöåáÆŸvÔãá·‹Ý®`F›“‰xÞ ‡î"xÁŒ4d?= [ZŒ´")q6=¦IgÝ€ÕÑNÈÈ»‹Û§:cÉÍr'FxÝ ™q"&®:Ñ ³N0ŒS±»ííEÍŠvu`D#¡éÂê¡kÕ!@ÚÕ!¡­U‡›õK$iâƒ;ÞØ=1+¨áH*º4+"x5+¦ q-+ZtàUº·8¿¯ðoŒéç?ìqPïØ×bO©^Q‰¡­1 š|‹î"x±ËCº ~qoRÞÒö޴ɬP®´ïĬà›m»–÷9ЈA‹´^âEw¼¼Ó‰Bö³ƒ·:Ö„˜¸´×é]hÐY(G†±hØÏwÛ‹«sÐ +BÍ‘Ûà¸Ø]È~«L EFé9g¸‹Ð¹1i@û"?T)ÍRÚ©/Ód³¾`;±Ø—߯víùbµfK!jÄŠhƒ°œõã»^È”4dïHaS (è â,S¦IŽ¥!l™`ª”žðÈŒ^î"t.7 Ø«%ù©#€Mi§j=¦Íæ÷D D|k5H.֦Ȁž¯ ÝEðb]ˆCÖFP0wâB]°˜6]Ð %•bW†^½ýþpsþêÅæ0—lS&Ox`F²Gw<‡IÈ^r¾y0€â$%žJö˜6]l«W©äÓ7oÖ'g™j»d0J†gÚªº‹àÙkLC–US ÛX´â‰ê€iÒ ª©Õƒ¦‰}EîöÓ‡|°4ZDÍ ¶Gw<IÈ^vÞ÷hX¢5I‰§ƒí1mº ›ØÉŸöß×?oÖ¯ò±†õŸ :<23ÖÝEð|¬'!+c u…‘OÇÚcštƒh,`[N§¢ÿu@˜ØqüÏu!ϹK7ÿä\žsŸx#¼çiÈZžŠË”8Ës‡iÒí†!N³ñþÉ6¶§…eÍÎFð6<6?¿-¸ÑÅé¬Ïn¢xšŠV Ì Õ“Ÿädî0È1È XK9/pC Ø?«ä²Dðælóâèx½É|á¶çábx¦mL@w<{iȲ5&µÁ:%žH˜&Ý z¼qq}÷ y&•Aßl÷Q‹îzpëþÅ$`Y'³í-ã­»Òäò*ã ïG‡Çë“\©†N˜™<#Õ£»žóOBVÄ@AYNˆ§j=¦MäG@lQªr[Ë%V¶q$ W©í&”4.¬D‹ƒ@(nñ­•¸/÷#òÿÚ0iÐ)—Ý\ àÖm’IÀŠ%Pôûì¨ß\ &W0%º¾2éÜžíË¢,£1+%Ó3Ö4n°ŒÞ´è‚9°_┼g»Câr¹;#¼îŽÇ”ûÀÁ˜¸êN‹.¸ƒ„úÀçz#`Ýb±7¼êMÀ´3'!®yÓ¤óÞh6¤?ª/¶‹Ï¶H*$¹^lѯ[ä13ÅÄU‹ZtÁ"!4¬ÖV>Û nße¹A#¼nÇÌW jу˜;d+ô–Ï6žÕt¹9#¼nŽÇ̘WÍiÑs°‚†.ï1 aVtçÇC÷_l^¼y†CD‹~y[èP¯:03%Ì5‡š|Á!hÿ M::>ŽV¡·Ï˜_öž0™?&üáu¸O¸û@Ì·˜~˰ûŠbhûÏÞÛSÊûûâ§WoaüŽ^úG‘FÔ}úÛW÷ñðþË×Û»©ö¯&ùŒìùv†‹ endstream endobj 5933 0 obj << /Type /Page /Contents 5934 0 R /Resources 5932 0 R /MediaBox [0 0 595.276 841.89] /Parent 5802 0 R /Annots [ 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 6004 0 R 6005 0 R 6006 0 R 6007 0 R ] >> endobj 5936 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 5937 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 5938 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 5939 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 5940 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 5941 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.108) >> >> endobj 5942 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 5943 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.39) >> >> endobj 5944 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 5945 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 5946 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 5947 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 5948 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 5949 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 5950 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.42) >> >> endobj 5951 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.133) >> >> endobj 5952 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 5953 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 5954 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 5955 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 5956 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 5957 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 5958 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 5959 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 5960 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 5961 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.51) >> >> endobj 5962 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 5963 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 5964 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 5965 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.55) >> >> endobj 5966 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 5967 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 5968 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 5969 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 5970 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.53) >> >> endobj 5971 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 5972 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 5973 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 5974 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 5975 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.55) >> >> endobj 5976 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 5977 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 5978 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 5979 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 5980 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 5981 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 5982 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 5983 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 5984 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 5985 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 5986 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 5987 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 5988 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 5989 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 5990 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 5991 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 5992 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 5993 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 5994 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 5995 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 5996 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 5997 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 5998 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 5999 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 6000 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.138) >> >> endobj 6001 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.138) >> >> endobj 6002 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.138) >> >> endobj 6003 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.138) >> >> endobj 6004 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.138) >> >> endobj 6005 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.138) >> >> endobj 6006 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.138) >> >> endobj 6007 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.138) >> >> endobj 5935 0 obj << /D [5933 0 R /XYZ 90 757.935 null] >> endobj 5932 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6010 0 obj << /Length 2993 /Filter /FlateDecode >> stream xÚ­›[S7ÇßùóUÛZÝ/ysâ%Áv“]§²)j c2<ÛøÛïQKê–Z—îÅ)?€‡ë¯óë£[Ÿi²Âð¬ ^)¡abuùᯮáÓÄÿµƒ?wÑß¿=?øû÷ ®BF²ÕùûþrI du~õëáÉ«ïŽßývþÊc°ÐŠýœhi?=8>šöÆ‚IÛðŸ¿þ†WWÐ0bF¯>ÃïcV8eþ÷›ƒ7ÿÚpŸ3ø¼ÔwAXÞyJÓÎS†°}'¿?y{|vvñêõÅÙñ÷?¼½ø×aâðÙië¨Xu„ #ÜŸ/ïÿƒ1}D¿ÿmá:FV 䄸þÙÏ÷×^põ4ˆ»QuvÒ`O•éÌV2Ä ÜØv‚%HZf@FƒˆHÉü|zzñÓë“WçÇg_Dj…èR"ƒ¸ Ä)fxDž5u'KC DyBãÍÉ«?Ÿ>;»xyþökh€?5‹q ê:'™ÙV‰ÔÍ,A@Æ$??~üæÍ×Ð`1µÇ(¯óðš9 ±s•HÃÏ"¡ qê@¤l}]Cq¹¹¹Û(` H(º’D .ç18uÉ Ò&­»Ì}a&<õBðš¶v±JÌ ŽÄÍvWŽ• ®Ô ‹Õ©»H^ˆ5mÒÝòÌ—3“Oƒõš¶VX…C{·ÿoíÆâH:c­º‹äÅ‹'îD–‚5Z¥Æ…`­¦m‚U”Þîþî²,GÖõ Ö©»H^6mÒºSœËû]Bbœë4m»¬THrÝÛ=¬ß•ƒe6A9k/î"u!Ô¤Á>Ò|Ö°o1Û,R§i»…H…@Ò°0O—#•ˆC3A:ªSw‘¼kÚ¤ug<T°SIŒ³`¦iS´ºŠ9¬ï÷›?kôýÝc-µ•á+ÁRzIj[uÉ‹©7Ùßp^JmØË¦Æ…Ô¶š¦eñj:2X¿ß8ÈÀ¡´\3‰(Þ`…´šÝÌyuÉs “&ûé «Ò|F$I ó™Õ4ý€7°8qøùˆàÃõŇŸ¹Ñ`Â5ÅL"y•IÐ8&¦Æ$q®1iùY& V<2Ùì6û'rN€Ë9Œò:¯qt•Cì\åÐð³`÷ˆ8|²¹±¹¹}" ø ›“Å,Fy…×ÌåDì\eÑð³,(,™:b±__=‘¡°Œ/ç0Ê뼦ç@p•Cì\åÐð³0FTâ©ÂfÇÓ˜0 纘I$¯2 š™q’8ט´ü€ S1ÿeÂd÷D’£åCeT×i8ɌȶʢnfQЏñýÇÝåÃöv×8 oöûò™VpÆ1KNDvµÄåóÐÐ\¿¹¢ÅÓ1±eé,І‘žh$´››¯7 l˜8>,žö ÒF ×ÌjÕ]$/†7i»!D)X-tj\×jÚv~Ṵ̂Dpê'~úp±ß¬¯.\øyàÚ–ãe3{uÉóžLšìÏp²Óð×Äx¸×4íàNSÑô;´ë›Ûwë›Z–φ©¦Hµô0É«‡á é»ª†ãÚa¸eg)ÀþAwìþÇñ³ÓŸNÞ60ç;gè ì44Ÿ}þáÕ]$/Ìxi“Ö\ëÒ‰f±Ä7{ÖÓKšf–̰Z;¿ß=ÞÓÇÚ1bl0 c‹Œò:¯é¨‚Ø·† afÀ–Á(= Ø<<1 0^Ž`”×xMAì[CÐ0D„å€à‘Þ? Q ²A$¯"š&‚Ä·‚ efˆqAnkÑ»õá»AÚØýâ—âºHá`n]é’'¢VÜêâª5è¶@ÅILK Óvò "aà¨ýí¾¿\ï¯ Qbd°¤sa:uÉ q¦MöÎDiERã,T§iÛ…`á.3_k¹ûT &2J¬u¤O›A^^ëHêN‹wÕ(•—Ö:ûP½i‚Å 1å’èóûuqûêoƒ—.½³£¼~g#w.ªw66®ÞÙ†Œe#úÝn?”/vëÇíýÔÁ|(V0ëñôÀY:a7*3?F%âX%uèJ½„ÙJ6ìKƒ´ 7¨»Hž»Ošì‡Möè‘IPÁ 01žFê5m;ØWr”°·WÑ–A¶§Ëm>ºà䉸jÕ3Hœ¸‹ÔyÓ{ Ù‘‰)ÁU‰íˆ×´Ý<±„½ýp}·­"™ÉŒP¤^˜‘¼šqÝ»ž‰q-3švÄX»Þî®úÛ^€![õ& ’„åé9NÝEòŒ´É~Â59 ƒL+‰qÃiÚvFT¸Þî$o”߯öGB”ŽÛ ¨*%‡òôÜ0qê.’ÆIÚdêdù@±Å“gÅiÚvITÄÞÞ¿Øoï?Ô Tj“ÌÛˆ^XuêfxÚdŸ…I#©›Eg/i›yqÕw{{³~¨“ÊW lRcÁiƒºY56iÝU~8ÂL4k´AÓv $`ª’þéôOœ,„KçŠQ]*¼¤\¼ ³@ìZ›(Z^³cÑeý‹WÓâ*¢`§%¨} ´`±ânTרÁòáÃ.öaRìZXA¬¤éXÀfUËÀ"Ú:|=n`!#K¹Œê*/éϦ9Šdê™QéM#…k1Äûãñ/'ß¿ª ”¥k ‡iÛ³t-‰äÕµ$hÚkIb\[Kšv Äþ!P)2ùÿÖW' ¬—3åu&^3Ã$6®2iÙ&L#âw8јØÝþÃN:dö›}ãøåõä5ÍÛÖ†PË+!Qš‘ùtDÅáúæã¦=žÂQ©åu@^ÓžzãÚÜÛ´óŒ˜Áˆù§mQÄ}IðvÿLÁLiÄÄbD‘¼Š(hZ9”ØVr¨éøH{Ø÷|à|SRyºb» ™ Þgj‚õ‘ºÈ j°ühÅf,µ-d‰Õ´ÝF‘pnþ‚” 6JbqJŒòzJxM{Ô$ƵQÓ´ <°Fþ»=]|å;y6ý œ˜©‘HÊùãŒSw‘¼°ô¤MöiAò¥‡"mhjœ-=NÓ¶ó¨æ=}ÏáîöfS3,ÀV‰å,Fy…×ô%tYeWY´ì‹¨¶hY$ßS”K¾HŽbËŠ‹Ãé®Uï›6Ù<ÝµŠ‹Ãé®éPD%F@ñðåî©#dQqÌŠFÙoÚäÌiǬhÙQ©ñf»{êèXTh94jÓ&{´Ê¡Qi9´ì<‡¸ÞJrjúoâåL¬^ÝEòƒú´É~Cž§?Ñ©ñ4V¯™±su¸€ ±^löû÷×yÀŠ#a{·¨„Ôͪæ´Éþ½‘ü³¶°7j¨AÓ¶ KˆÐ“€/6»yJsH©øpM;ê î"yÖi“}ÔÙ€Ãp“L¦Æ“¨ƒ¦i7D-¢˜†¨/ïìΧ´é‘}™9Èçfu§î"yaVO›,lw®D¨Ô8›Ö¦m¶…i®&WÓ[Û…‚WÍÄíÕ]$Ï;2i²Ïù3}*ÌSãiÜ^Ó¶ qÃ4BÃ|zòʾ4÷òøåë³#)ÉœH$lùÞ_5“à^ÝEò<Á'MVÜv×Ôxšà^Ó´â&pB`*Ž;~›4œ dà ®›‰Ü«»HžG>i²¹°ï¤¾ÓÀ¤i6Äb:¹ßÉ{£ä°º};ƒ —Î…îÔ]$/„ž6Y Ý ¥ejœÅî4M»¼aˆÓäžûD ‰.àLHÃsyîÄݨ.¤yÒ`-Ëd0O\³ÅÚIà¤ËÏê1¸Wñ~Ú[ìýKöR#ELü޽„Íoì˜þÕKÆ ûFÆúasuÔQowîçù‘¡‡7î?¯/Ü/Üý æL¿aØýöXÄýöÞ>½ºÝ»ÿüûù›SÈÇ“oý¥H#ê~}÷ÅýüîöñËõf7Åhß³÷Œðü;»Š~ endstream endobj 6009 0 obj << /Type /Page /Contents 6010 0 R /Resources 6008 0 R /MediaBox [0 0 595.276 841.89] /Parent 5802 0 R /Annots [ 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 6066 0 R 6067 0 R 6068 0 R 6069 0 R 6070 0 R 6071 0 R 6072 0 R ] >> endobj 6012 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.138) >> >> endobj 6013 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.138) >> >> endobj 6014 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.138) >> >> endobj 6015 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.138) >> >> endobj 6016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 612.316 148.55 623.22] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 600.361 152.435 611.265] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 588.405 152.983 599.309] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 576.45 155.195 587.354] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6020 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.28) >> >> endobj 6021 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.34) >> >> endobj 6022 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.24) >> >> endobj 6023 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.107) >> >> endobj 6024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 480.809 152.157 491.713] /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 456.899 152.157 467.803] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6026 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.109) >> >> endobj 6027 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.110) >> >> endobj 6028 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.108) >> >> endobj 6029 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.108) >> >> endobj 6030 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 6031 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.899 315.429 152.854 326.333] /Subtype /Link /A << /S /GoTo /D (page.55) >> >> endobj 6032 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.868 304.191 192.824 314.378] /Subtype /Link /A << /S /GoTo /D (page.56) >> >> endobj 6033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 279.564 152.983 290.468] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6034 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.88) >> >> endobj 6035 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.87) >> >> endobj 6036 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.87) >> >> endobj 6037 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.87) >> >> endobj 6038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 140.087 152.187 150.991] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 128.131 151.868 139.035] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.018 116.176 152.974 127.08] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6041 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 104.938 151.868 115.125] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6042 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 719.912 368.917 730.816] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6043 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.464 696.002 376.419 706.906] /Subtype /Link /A << /S /GoTo /D (page.12) >> >> endobj 6044 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 672.092 368.917 682.996] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 648.181 370.571 659.085] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 624.988 374.735 635.175] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 6047 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 600.361 371.676 611.265] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6048 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 576.45 365.031 587.354] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6049 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 542.577 370.571 553.481] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6050 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 518.667 368.668 529.571] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6051 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 494.757 363.687 505.661] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.78 471.564 374.735 481.75] /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 [362.78 447.653 374.735 457.84] /Subtype /Link /A << /S /GoTo /D (page.53) >> >> endobj 6054 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 6055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 399.115 368.668 410.019] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 375.205 363.687 386.109] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 352.012 368.349 362.199] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 317.422 368.668 328.326] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 293.511 373.888 304.415] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 269.601 373.888 280.505] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 6061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 245.691 365.031 256.595] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6062 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.41) >> >> endobj 6063 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.42) >> >> endobj 6064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [328.459 186.632 340.414 196.819] /Subtype /Link /A << /S /GoTo /D (page.57) >> >> endobj 6065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.559 173.96 385.514 184.864] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.677 162.004 412.632 172.908] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.198 150.049 367.154 160.953] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.846 138.094 399.801 148.998] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.532 126.856 427.487 137.043] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.951 114.901 456.907 125.088] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.827 102.946 460.782 113.133] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.535 90.991 426.491 101.177] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6011 0 obj << /D [6009 0 R /XYZ 90 757.935 null] >> endobj 6008 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6075 0 obj << /Length 3165 /Filter /FlateDecode >> stream xÚ¥\]sݶ}ׯ¸ÒLˆŸ$óÛŠÇÅne¥I'Íh\YQ5cɪ¤4ö¿ï‚ˆ‰]rØÑƒ®®÷ð€K÷HòЗ< í¡³´=\ݵ‡x÷õ‘Œ¿mà× úý‹‹£¿|¯á(18}¸ø}<ÜIa•<\|üõøÍÛW§¿œüvñÃÁ´½h­ƒ*þ}ÙwþÝ£Ó‹©t$¶ÚùÂÿ9úõ·öðNà‡£Vè¡?ü ¯[!‡ápwd”ޝ?½?úÛT#¼¯áýÚ¹[©—'¯T>yÙÂKeÒ¢uv<ÓO·÷¿?^_3?]iZ1´Ã„ ý/o"âQ'tƒàKúYIOï䂨¶¢ïdI ºEÄT‹fé’f× gú‘îîÃóíý‰iÿ[d%do&øÚ tƒà•A.KŽƒ¬—ƒ (XgÄ‹A–ǬµÂ ÓøÆÁŸædp£åö×Òâß•v¦DÏcÖhÑéU#"ºAðJ;+KF€]½S%ñ¢ KçÐRtý܈Ëëû?îvºGôj»N»1ÔƒEt“n0tÞ¶×½QæÕÉl¿î3nKð4Óm5ÁI#†7¢ ¦ŒàèÀOƒ›ñ]&¦S¢m·û‘á´C4Èä&&ý`è¼ðÓÚÉëËûÏKÜøë?¯žÀ¦JÛ”°¾èÆô¢ÜjÛ èÁ+m³,éÙueSPr(‰m3`X:o,·€5=žžŸ_þxúã»ógÿ±sZ(½ßmžNO‹ˆY¹L019-:ï‡TBé·?]þõÝ›·§ç;i[¡ºíŽd8íHĬ8‚‰IG:pD÷½Ðªpäý›·¯:û¦ÊÅ/ÔEÃ;¢;'ôúFdrÁIG†w¤ ¦áè¼#Έò’yÿÓË—§ïßï›V8Æn÷"Ãi/"fÅ LLzÁÐy/`5_ì=ïô@õšíd8íAÄPÑLLzÀÐy¤ù1 íIï¼6Z#ÜúÖÐäE†Ó^D [-ˆI/:ðB J¸¼+_û&„ê[Ñ©Í& 8iBÂðEAL™ÀÑy\/:7,7³wzaèåv/2œö"bø Q“^0tÞ cD¯Ž°Ý½ïªPð}XŸLÈpÚ„ˆY1“&0tÞÕŠ!>‡ýá3¡íÅ0l7!Ãi"†Ø†I&`bÒ†LC'ZÝ/7É÷y!{+Ú~³Nz‘0ü„(ˆ)/8:ïE§…TÙ‹Ç»¥Nå7µä]ÑÑ ‚/uÎJŽn/Ç\Ëqë° žëŒž.nCI'…ŒÏàW¯?Õö‘ ,AÍ„\Ó€n¼2¦eÉQkeãPÚ•Ä‹1 ž.i5ƒPñþêñáöKõóZ¸ pýãZ7]ý´¤„Ȩ’¶òi­ÇðlI¨î„Šû Õ§ceáŒ[›¾Ý xeú–%G¥¦úy8ÌÈ‚x1}†§KJVÇ=‰¶­þPÙ2VÜä&äšÖÜ tEjQS ©KÚ…Ò€áÙ’R©…Ž{"·—÷¾Ü>Uv=´p}?a×v=ºAðÊ®GY’W (ß¼0ñb×#`xº¤¶•BÁÜÛ»›êµ gæ;aD®k[bFW¥¢‚´R ‹‰‚¶¢Ôcx¶¨´„‰¬w—D6psn]‚®) à&£+J‹‚”Rø¾`-…úækµ‚×è— 74˜`ÙÓÑÊ ÓÇ•À‹j‡öÏ÷Ö1ÛÒR ÍÆ—æ%ëvè΄„“–Jž.©ÍQ¥»K¢wi;@³-'•À\viVê¤:.'• ,WŠ“JwDçÒÎFn J%4›]𗤆PpÕsI©„áé’Ú)«twùðáãÇÛûʰvNÀ±[RRÊd—Šb„ÈÞ Ù+&#•OˆRJ ñª2iµ°(Lµ6kš,ÍKRóV ÓwlB*axº$5Ç”ˆië7àä°- •À\hiV°¾¶ÐNÁ¢Rr©a¹’J”M"gl²vS4*›Ìd•æ%©ëP–MFEO–´¢hRÔª*bû1“²-•ÐlVi^rk—b¥%Jž.ÉE©¤Ú•jZÑÁo[*¡Ù€Ò¼$1ƒ- ,Ÿ‡Jž. E‰$X6À’±z/u¾QnÊC%4Pš—¤o§¶7l*axº$E‘þ¸¿}þZÑ*ÇØö¶TB³Á¤yIJ« !U&•0<] Z{9ÏA=<>ç)·a‹RÃã²ÞšŠ`6¿3+XÿÃO m4›Jž-Ù€²:EÆqé†ÝàFÌãlt#£I7PÀg¹97¹iI78¶ä ì„@à>bg£ MÚ€â=̤À´¤ [²%uŠ\ä¾K$¦q6º‘Ѥ(ÞÃL LKºÁ±E7p\'„wMŠ”ÅÙfBS6àpÏr?I,h)X¶dJéYÊ}nÄ$ÎF72štE{èIQÐ’nplÉ ÖùtOzðçÕSm›ß¯¢X=§ ÎÚB0 ¯,Ë’žÝ,[Eç?ôP%ñb!0<]ò…tÀ‡ç¯{­ˆœ­Vd8mŠõ0V`bÒ Ž.YÒ9Ÿ>ßÔæ>ô^çºÑ „f³:ó’õ¨©6€R Jž.®q>´R©j¿…й _ß’ðèÁ«»¸ä(ØÖ6&:]òVv&“%¹(f”åŽñÚ…f‹Ï¾·ÓN ÍÆæ%GÍ‹%²‘€‚¥—vJ–nR"Oï^ûÈÓ‹m¿{u ?^žŸ~y"ÿ~"ý{gKàÉ£“}ª²bC7½t¡,H˜à×¼½,XçDÇ5Y€2U3~öYÚwçg¯–Ê5̨ÖmÌx%4ºš—$ÄÃMI¹Íx% K7ÉŸ‚^3ñ¿T¦ý ZèáµI°Í®Ly\Žšð€Ñ¦\L÷€`ˆ&©(9ÅPy¼”lü2Yo̱%4,›—$„ÃJ¥ƒ›.—cK–nŸÃlQ{ 7~Só±"9‚›Œ^*. ‚•ß’*Hçr‚cšÄ¢\4ó§Êß§jÿ'ø¶ß˜ÊKh6&7/IÜ·àq|€›—ÊKž.Š-¢yŸo¾¨'Rl‚n‹à¤XÌî %¶ ¦Ä²tq†Ã~ù6M>ŸÔ×hVÂRSœo}‡Ë£¯îpá’ÔÐû )[Wv¸<†§Kn ¸ßlѲӒ˜êÛjI†Ó–   3¤%˜˜´„£K– ð±¤Ië™ÅÌßV‹2œ¶Å‹01iG—,BÑ@jųϛÜè ‚“Þàt!íMALyÃÒEopTp¾ Úéɦœ_ö„ ÞÍK®xÂäü²']òEíjë¦}¶lÊÉe[˜èÚ¼äŠ-LR.ÛÂÑ%[P\­\RítdSÊ,;¿æ%WarfÙŽ.9‚‚^aÙµÓ‰M¹¬ì•š—äoÌ\2+;ÁÑE'P:*,É*ÿh VïÖV×-”áÉ}ß¿ ÿC–_?Èÿƒ,'†Î¤?  ìþ __ß_?~x¾þxÒ(Û¾ß/NuüÇuøáÝÕsxaÂ79|Ûªou~R­”áÕï'Ê~ ?üüòý> endobj 6077 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.912 720.63 151.868 730.816] /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 707.957 184.515 718.861] /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 696.719 146.906 706.906] /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 684.047 179.553 694.951] /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 672.809 161.83 682.996] /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 660.136 151.33 671.04] /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 648.181 183.977 659.085] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 636.226 147.454 647.13] /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 624.271 180.101 635.175] /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 613.033 147.454 623.22] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.146 600.361 180.101 611.265] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6088 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 6089 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.59) >> >> endobj 6090 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.188 565.212 153.143 575.399] /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 541.302 143.858 551.489] /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 517.392 143.858 527.578] /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 493.481 143.858 503.668] /Subtype /Link /A << /S /GoTo /D (page.60) >> >> endobj 6094 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.59) >> >> endobj 6095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 445.661 152.416 455.847] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6096 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.60) >> >> endobj 6097 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.60) >> >> endobj 6098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.903 373.93 143.858 384.116] /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 350.019 143.858 360.206] /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 326.109 143.858 336.296] /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 302.199 143.858 312.385] /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 278.288 143.858 288.475] /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 254.378 143.858 264.565] /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 230.468 143.858 240.654] /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 206.557 143.858 216.744] /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 182.647 143.858 192.834] /Subtype /Link /A << /S /GoTo /D (page.59) >> >> endobj 6107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.555 169.975 132.51 180.878] /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 158.737 145.233 168.923] /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 [134.383 146.064 146.338 156.968] /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 [124.969 134.826 136.924 145.013] /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 [128.854 122.154 140.809 133.058] /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 [142.692 110.916 154.647 121.103] /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 [142.144 98.244 154.099 109.147] /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 [146.01 87.006 157.965 97.192] /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 719.912 375.552 730.816] /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 707.957 370.023 718.861] /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 696.719 376.11 706.906] /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 684.047 387.178 694.951] /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 672.092 364.484 682.996] /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 660.854 363.378 671.04] /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 648.181 374.446 659.085] /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 636.226 379.428 647.13] /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 624.271 351.751 635.175] /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 612.316 370.581 623.22] /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 600.361 362.83 611.265] /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 577.168 360.339 587.354] /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 553.257 360.339 563.444] /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 529.347 360.339 539.534] /Subtype /Link /A << /S /GoTo /D (page.61) >> >> endobj 6129 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.59) >> >> endobj 6130 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.62) >> >> endobj 6131 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.59) >> >> endobj 6132 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 6133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 409.078 373.888 419.982] /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 397.123 342.626 408.027] /Subtype /Link /A << /S /GoTo /D (page.63) >> >> endobj 6135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.771 385.168 387.726 396.071] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.889 373.212 414.844 384.116] /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 361.975 480.677 372.161] /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 350.019 449.265 360.206] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.08 338.064 420.035 348.251] /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 326.109 460.782 336.296] /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 314.154 430.366 324.34] /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 301.481 368.917 312.385] /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 289.526 368.917 300.43] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 265.616 362.551 276.52] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.596 241.706 362.551 252.609] /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 217.795 362.551 228.699] /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 193.885 362.551 204.789] /Subtype /Link /A << /S /GoTo /D (page.64) >> >> endobj 6148 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 6149 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 6150 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.64) >> >> endobj 6151 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.65) >> >> endobj 6076 0 obj << /D [6074 0 R /XYZ 90 757.935 null] >> endobj 6073 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6154 0 obj << /Length 2551 /Filter /FlateDecode >> stream xÚ¥›]o#·†ïý+tiËï\¦Iƒ¤m‚6 ZKq½µdUVv½ÿ¾‡3ä )Í9CLá ËÒk¾sžCòpÈ‘Xqø«ÀWÎ8”Y=ìoøêÞýæF¤O×ðñºøüËû›?ÿUÁ±`Õêþ÷îß­`FŠÕýö—Ûo¿ÿêëŸï~»ÿn¥¹gÜXh%¾/¼ïÞ|}?4Œ²±áÿÞüò_má¾»áL¿ú¯9!¬ö7ZªôúùæÇ›môï+xêÚP×/åxñ‚ÃKiVN*Æ­é®ôùå‘ýûO—+”aBˆAÙÙÅNIñ¯Â8«×…üÚü¢Éhnõ•±6Œ;U_Ä™5¤]Ä-8¦(Ç—ç]—)ÑCXçÁô×ñéáõxÚ_SЖiíW6&Ì,…¤^òk MFwe¯Œ ¨àÒ+ãK ICÚë“ÊuNÿÀœ7ï§(ÊZä—³ñwâu¡ž¿j0ZK=¤5\Ø^EßkH·=è”ì£ßcÑO¦£—ŒƒÔjÁ”›¿W¯ ùDüu“ý\q ®Í»Úø @¯¡íÒ€·2@_é)_6§íD°œé\°½z]È'‚­›ì‚ ×Ár樯‚í5´]V8¦m?î‘`! b”6dVÄÌŽòéÌŠÚ]òÉÌ:WOeÖ¹»,7ÌpÛÏbç÷›Ó Ïl’¶fv”ã™-ܵA3[£™%ì`› ˜1=Öý»‡í™Üx¨ÝÁ¶Îä…ɳ¦c °™¼2ÆfrÊ.2°ÁhìžÏ†ç§Ã4Á4t-‹ëç1ôêu!ŸÀP7Ù r=Õïµ µñD¿Ú.õ{kX´¤¼W¶f|Pã ­‰|®hºq¯˜m¥˜s&gû°Ù/]¾Àb•5TïL`PãzIG@£ W”î @®½¼Û°‚ÓN±ofWp…[ÁeI·~Ø ®²ÅVp”[d`¡°jœ¶»ÓÒ^µ†ûÐÜ F9Þ’f¦#”ÆhO ì"åûˆáå¼YŠAZ&\;†QŽcHzN¬ŒQ „]Ä 4“rÄp|zÃFÄL Ô\2i}k ,äh ̺VÆX $íR T3%šŠ`–6æ¼£9/ÝñœWÆXÎ);ȹrž)㇜¼“ævó¼ì^VY0åªq&,ÔØL˜%ôLXÙb3!é–“nt‡¿%éIÚšôQŽ'½p'’^£I'ìbÒá~J•“þúyjÚ·MgF¹f £Ç4ô´_£»ˆAxfÒZ 0œ?—®·ÌÊv £Ç43½¡4F1v€Aͬ0üqx:/Ä ½dN4c(ä(†¬¡1TÆÊ.bpœ9›ïå\mÞJã™çÍ·€…-YC—¿Ê+¤]š %à÷iK€žó³²mÎ/ÔØœ_Z+ŽÍù•-6ç“n9R¥™M“]–¶vïQŽwïÂèÞ¥1Ú½ »Ø½¥daØàx:lwwÂܾ-+ôRpö8RÒG5šô$¡ }e‹&p"ÆÕˆáíuáãÎ4"(Ô‚,¡T¶Ê-"p†‰<ßÿmaø~ÙæðG5~’Ðþ²EÃ'Übø0Ê<žÚ˜4Íáj4ü$™ ¿´EÃ'ÜbøÒ1™vöïö›ãBÂ0¥u+QH’¥-J€p‹¸bÊgß/‹?ÄjÚþ(Æ¢O :øÒ³Ž]hw7°–€ËÕÐ%Ń@}€4]ãzQûú4yÿî°y{*æJÛ² RñÀî.Ói1 +‹×£úúÒê§WCÊ‚Fxéz !IH/i;¦åq2²BPŠ« ‡ÙYMž._69½BPNBÑ—äavÖÐv)çJG. ÇÍvûtx\˜s UFjÓšôBŽf=kè´WÆXÞI»œx¨#24å½W¶¦}PãY­‰¤®hÎ ¯œr¨‡jØý<>,Í7”5»õ9æ{”ãùNš™|—Æh¾)»œo¨Œ:íÎ%Êñ”îDÎKc4é”]Î:ÔHms<¢3û¨¥F´ƒå8ˆ¤™Q£ (»Â@U5fññ„ma\`vvïsQÈQYCƒ¨Œ1¤]cÅê¼ «Ÿ…]ÂÃlh'1ÊqI3½'8(Q”]&k2§2‰OçÅ$”`η“å8‰¤™!Q£$(»L‚ö2‘(olË©2ÐëàNÓpÇüìC^Y½.䥡n²{(\' 0ãtm|Uz m—8è`XHÛûÍùép§ùíG¢RN<÷©4” ¿Ò^Aë³0zñºP__\Ý`÷ЧšÊÒª¶½D‘4´[Fý‡ó„bwz•o†ãé‚!@—Ò–3nZ8DõºO‚(›Œæ^N‘ðAÔÆ$¢†¶Ë$ঋ§Í»Hbw^HBY&´h&1ÊqI3C¢4FIPv™„ÔLøÄ›|]HBH&U;‰QŽ“Hš¥1J‚²Ë$8gÒ%¶›; óÄãÂú¡¼gJŠÖúQÈÑú‘5ÝFCÀêGeŒÕÒ.áPÎ2•·>l_Þ/]g*«™n'1¨q½d†CáŠb ¼2#™Î½> endobj 6156 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 6157 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 696.002 157.407 706.906] /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 662.129 154.089 673.033] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6159 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 638.219 152.983 649.123] /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 626.263 151.868 637.167] /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 614.308 152.974 625.212] /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 603.07 151.868 613.257] /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 578.443 157.407 589.347] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 554.532 152.435 565.436] /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 542.577 157.407 553.481] /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 518.667 157.407 529.571] /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 494.757 157.407 505.661] /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 470.846 154.089 481.75] /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 446.936 157.407 457.84] /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 423.026 157.407 433.93] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 399.115 152.435 410.019] /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 387.16 157.407 398.064] /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 363.25 154.089 374.154] /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 351.295 157.407 362.199] /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 327.384 157.407 338.288] /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 303.474 157.407 314.378] /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 279.564 157.407 290.468] /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 255.653 152.435 266.557] /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 243.698 154.089 254.602] /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 231.743 157.407 242.647] /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 207.833 154.089 218.737] /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 183.922 154.089 194.826] /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 160.012 154.089 170.916] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6184 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.30) >> >> endobj 6185 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.30) >> >> endobj 6186 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.30) >> >> endobj 6187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 707.957 368.917 718.861] /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 696.002 373.888 706.906] /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 672.092 368.917 682.996] /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 660.136 373.888 671.04] /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 636.226 368.917 647.13] /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 624.271 373.888 635.175] /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 600.361 373.888 611.265] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 576.45 373.888 587.354] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 6195 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.44) >> >> endobj 6196 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 6197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 504.719 370.571 515.623] /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 481.526 360.339 491.713] /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 456.899 360.887 467.803] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 432.988 360.887 443.892] /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 409.078 360.887 419.982] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 385.168 373.888 396.071] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 6203 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.39) >> >> endobj 6204 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 6205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 313.437 360.887 324.34] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 289.526 360.887 300.43] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.942 266.333 368.897 276.52] /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 231.743 369.465 242.647] /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 207.833 376.419 218.737] /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 195.877 369.465 206.781] /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 171.967 368.917 182.871] /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 160.012 373.888 170.916] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 6213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 136.102 370.571 147.005] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 112.909 368.349 123.095] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6215 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.37) >> >> endobj 6155 0 obj << /D [6153 0 R /XYZ 90 757.935 null] >> endobj 6152 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6219 0 obj << /Length 3435 /Filter /FlateDecode >> stream xÚœ[sÞ¶†ïõ+¾Ki&Dq&»ÄqReæLx¸9ÑRå?ùáäoóéó*|¾õìF¨íÃKY?¼TŒ[3=äíýãÍåóôô"0Ò!˜7é«ïn>[ÛÚ2­Ýa ¨é9âç>fà{ðDzóP«£´7ª&@á«Puå¾ ”V€õž Sðߺ·nd²×ü £Þ1Y·˜u ‰9Ç…¢ñÑ0©gã/ϼµŠIßm~¦q÷ ¡3UQÿ¸V €L)ðtùþ¥ö•gjì÷¿àx2Õ5G#…Ñr1rdZ¦¼ýñÕ_ŸÿD„áœËgö© &¡ðDÂ0m÷C‘èàPÔCN“h£B†U˜Ý*åu,2CêÅXpÅŒÈõðÇÓKëÁø°˜îz8Z…¡ë¡Æê’ 10Ö3«Ó¬{÷þñãÕÝK£–ëlwBfv¢…Ñ(r1 Ú°Q¥ üv&ÍéoWOX ŽW¿·!™åÁ(ÅÆÑì"ÑÀ¨‡ŒêÛåA‡žÂèZw‡Ìj1Á¦3ã$tϱ„©³ÅB¢ÃúêùþÚ8Á ö«§å¡Q¡Ÿñ+ÙM$†T öuX>½Îö/?|¸¾ýøÂ"Ða­õ^öÀÑ"(LT±"¨t±" Õxòª­f\¥PÄUàéñ_g‚Ÿ^ súgö`Rºù»öl'zxÃv=ä´4²Z=_ën’?!´Xqm$ã.Åø÷ëÛv†Óã8£ûV#=¼i9YÕ-«ZùZ¸á52´\1«ÃC¦éõþáŸX9s€î—s¤€7Ë™¯Ô…k™õn¬…f#C˳Ò11¦uîñþ¹mV³ÑëÝ3›èà ³õQ]6:Ü@…Y·Þ˜M -WÌ Ë¤°=“u&;'ë…F'k -=:YCYt²¦ÔŠS®™´¢§A)hgƒp´AêZb J%Œ5(”\X™”—Lq W&-M÷G¬¼¥²å8S¦§¼#=¼YÞpÈ)é²UÞñ$£n”wdH¹w ÆAbqØ™ÀU ½î¿¾32Mh›½¡*6ySZ¹îUˆ¼v}ùÎho¾Ï7P'ò …Ñ|r1ß*4?*§ûáQ¢GakíSC»«CC§$=Ôn 2=|ƒÕQÜ©ÖôvU•R,F€;fåÖ¶ÄvD@zˬս8¨t‘Pb!Ò…¥û‚gùø²"£ KhAfè@],„X å¡È!8¾p“Ú1×?ãò “k°9¯Æ&=R.ÏzaîaÎùžÕ¾ «=ÀÑÕª+ƒ­ö•0¶ÚSr1ÝR3¯ò´w¼{ñ´'…d~tÝ¿àxÅgfªx‹U<ÔÅ*ž‹!à"l–àÇ1t„óŒÛî AaÈTºH(±1ŽLˆ9/ž÷„5L˜þ,8‚ÌÐ!€ºX±‚°ùèçþÓ5áiÌt– ÇÞÓ€£§1…!ä*]ì4†TËŸžÉ|ö³³U/hçVàèVª ‹mÕ+al«NÉÅ|‹‘©|ØóÝ9q}sùô©Uòf ëdxbn˜Ú?œÉôðmVC¦ l׺¸€‡u¬R^G!3¤^ˆ‚?2ŸB^?_ß|\‹©09šC˜=´®¶SÅ ¹‘S2,I|¬®…‘>BÅ‹åð³ZP:¸…¾U_ Ù>ùR6PRÔÂk§™¡åx0ë¼iþîÝ›3Áùéϯ޽=µTœí˜`•ޤ›o”w’éàÛ'\ 9M°n› Ï\¼+ƒÂë€d†–ËY®ŸƒS,È$…x˜ÈÊõò^Y$zx£,ê!›GÞj:Ï5µî¦*C«• ,·ÐH¾gœ«¾ûïSwÒ«§µÄlU#o©ûï‚Zù^‚_^Ç-u#£ñ6ÌÎè^F=¼‘ÑzÈ©®Å6¥†…r­…7)M -WÌ‚{õhöê©aV¦ðvÝêš¼f_‰™ THu«_Z®˜WûÁlèñÌf´7³ Žg¨™…Âhf)¹b¼&pyý„•±p®ó%…B“/ ¬‡œÌê–ÙÐñï(†–+fÁ‹ Ñ,RÆZ¸Ý/ãHo–1²}ÈKTÅÙ 7Ê82´\6 ß}f±2Žiè{óbÎ,õ*ÄzH:³Ô›sfI¹bvô,%™}8¶Ë8ôÄ~&÷»®ØaºÙt'§¼Õs)£jÙFÏZ­8 °ÕnvÚ¬a: ¹çt‚@7œVbN53NÕ²>"2´Zqjâ<6ç´]À)™ìÌéB£9ÒDN¡,šSJ­8 »øQåœþï¾]½©•+hgwp´;„êã¶G¶c-¼1›Z®˜U‚NÍf›l™tzF÷Ì&zxÃl=$fÖNg•ðÆlbh¹b6ôÿNΙm×pNCF{3»àxf:‘Y(Œf–’+fùÈܘö?ïïn›el9 ¹ã5Á ·Úõ€Óì¶õ¤d-»všZ-;ÕÞ0/ÆÙi³†Có5ƒû3S|b›“®t6ãœcU-Úš—¬Ú+6 ŸšÚ¬ÞÿBö%ÐXB¡4žÐJK(©VœŽ2ì S`—DÿPȾµÐØZ¥ÄÖšJ[kHµâ4Ä—9;Åû‡Böõ€Æú(ÝršzƒJëHµâT;ƽ-N‰þ¡9]h4§@šÈ)”EsJ©§Ê2‘_>>^]¶«×1†)èžÕDox­‡ÄÌ*tï•ðÆlbh¹bVê°Ã°³Ùf‡½´´3Ú±=gtooÏÁÄöÜùZ¸µ=w~G®˜’I5g¶]Ã9 íÍì‚ã™ê-³9³PÍ,%WÌrÎä˜3{÷kƒ­3ºß,Ezx³Y‚Cbk«ŸÞ.©„ÍRdh¹lV9ÇTþÏoÑ,Ò;-gt¿ Žôðf ‡Ä¶çâ¦n´Á‘¡åŠÙц®Ã³XÓPÐÎÌÍ,TÇ3[ c™%åŠÙ°H•ÉøîŠÚÌe²³ã_h´áÒ­¬¦^ªbí>¥UlÆc­r¥|û¸‚vîãŽîã z»€ã­Æöq¤\1«9›­Æw÷±™ØÇ› ÞŸ‡ýôãSàæ,¼ ‡uÌÙJ6fàHPBŤtÌäk¢éï3ì²{í~>®x£ß¯‡œ|n/©Bg«´®…7 bh¹âUX–'ƒÕ¿¿~{qþîí™2§_¼Ù¸Ö<Î#º|mºÀÃBob5`Û²qÎ+Õ•ã‚PZ³azð|ct¼»£ׂöNÁ ŽOÁ@˜‚¡0:SrÙ¬ô’Ù|cÍ‹kA;W€£‹+To™M g%Œ-®¤\1ëxhMçÌR‹kA;3 p4³PÏl%Œe–”+fÃt6Ú’Ù{ªŒ ÚkvÁq³@½½ÀNf¡0j–’+fcA =›¥Ê8£½e¼àxu¼G¬„Ñ2¦äŠY­™3sfÉ2ÎhofÏ,P'2 …ÑÌRrŬ’amOÇÐÇGô¾ÊO¯Ë&´ã5¡ô_C¶_;œ^šÞÀ­ׄÒ¸„\1+ù$[Ì";v1ºí¸‰£ÙoßD‚!1³f:q¨„[7‘Ó»¶”\1ËC׿çÌb§NS2Ú›ÙÇ3 Ô‰ÌBa4³”\6+üÈx¾:zõó›ó·_}þªÑA)[Y=ó;Ž3=|û«!ÛoxÅ_&»ßJxÝEe†–+Ža<ß§ÿÄ‹®A:|gÁ÷gªHoÎTpHìP&Pñ]S(ܘ©ôô.(%W Љ|‡T #ëP¼æ,øþ:éàÍu‰TؽUÂu(2´\1lE˜7$4Œ­ES:2Þ›áÇ3 ž€È0F3LÉÃÚ3™/•þúú‹7ßÿ´uç½›Ù·™¾•_ ‰¼¢9]ÞˆZxí63´\q«F&óÅÒ§ûgâ’²}wZ€Æî´ tk‹›î«*YìN‹T+N¥a*_,E§è%e».)Œ\RB݆Í|Y‰b—”¤X±)SfN(qIYÈ΄.4šP M$Ê¢ ¥ÔŠS.˜ò)°7WXéŽÂÍè¾ÕHoz…C"×<Áˆ]é6¼Ú=±l5¿i_œ"¥;øöþ~E½Á_ˆ_ÝyÑø/³”'"ìÜ™sÍ@ð )ÒòË~yÝô»õâöQxø«õ,ó£.¿€ÆOÿ)&šøæêöêáòéêÃY؆ñÓ»Ûô÷Å™—§ÿ¹Jÿxw|Jèô—ðŸsù¹âé_’ ‘>š~§ÏÝCúǯ~xs&NÏ¿ÌßÊ“éÃ÷¦¿¿º{þóãÕí:ˆñ×ëåáù?Dµ® endstream endobj 6218 0 obj << /Type /Page /Contents 6219 0 R /Resources 6217 0 R /MediaBox [0 0 595.276 841.89] /Parent 6216 0 R /Annots [ 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 6296 0 R 6297 0 R 6298 0 R 6299 0 R 6300 0 R 6301 0 R 6302 0 R ] >> endobj 6221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 707.957 157.407 718.861] /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 684.047 157.407 694.951] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 6223 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 6224 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.40) >> >> endobj 6225 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.137) >> >> endobj 6226 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.40) >> >> endobj 6227 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 554.532 157.407 565.436] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6228 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 530.622 148.55 541.526] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6229 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 496.749 154.089 507.653] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6230 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 472.839 148.55 483.743] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 460.884 152.187 471.788] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 448.928 152.435 459.832] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 436.973 152.983 447.877] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 425.018 155.753 435.922] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 413.063 154.089 423.967] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 401.108 157.407 412.012] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 6237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 377.197 155.195 388.101] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 353.287 152.435 364.191] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 6239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 341.332 155.195 352.236] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 317.422 144.406 328.326] /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 293.511 144.406 304.415] /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 [132.451 269.601 144.406 280.505] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 245.691 152.435 256.595] /Subtype /Link /A << /S /GoTo /D (page.13) >> >> endobj 6244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 233.735 157.407 244.639] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 6245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 209.825 144.406 220.729] /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 185.915 144.406 196.819] /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 [132.451 162.004 144.406 172.908] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 138.094 148.55 148.998] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 126.139 152.983 137.043] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.799 102.946 173.736 113.133] /Subtype /Link /A << /S /GoTo /D (page.163) >> >> endobj 6251 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 719.912 368.917 730.816] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6252 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.88) >> >> endobj 6253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 672.092 365.031 682.996] /Subtype /Link /A << /S /GoTo /D (page.7) >> >> endobj 6254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [329.007 660.136 340.962 671.04] /Subtype /Link /A << /S /GoTo /D (page.65) >> >> endobj 6255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.74 648.899 366.695 659.085] /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 [351.97 636.943 363.925 647.13] /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.74 624.988 366.695 635.175] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.192 613.033 366.147 623.22] /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 [351.422 601.078 363.377 611.265] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.192 589.123 366.147 599.309] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 577.168 368.349 587.354] /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 [353.624 565.212 365.579 575.399] /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 [356.394 553.257 368.349 563.444] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 540.585 370.013 551.489] /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 [355.288 528.63 367.243 539.534] /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 [358.058 516.674 370.013 527.578] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 505.437 371.129 515.623] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 493.481 368.359 503.668] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 481.526 371.129 491.713] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 469.571 368.349 479.758] /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 [353.624 457.616 365.579 467.803] /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 [356.394 445.661 368.349 455.847] /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 [357.5 433.706 369.455 443.892] /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 [354.73 421.75 366.685 431.937] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 409.795 369.455 419.982] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 397.84 370.571 408.027] /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 [355.846 385.885 367.801 396.071] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6278 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 373.93 370.571 384.116] /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 [358.058 361.975 370.013 372.161] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.288 350.019 367.243 360.206] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.908 338.064 369.863 348.251] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.385 326.109 373.34 336.296] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.618 314.154 420.573 324.34] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6284 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 6285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.846 290.243 367.801 300.43] /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 278.288 370.571 288.475] /Subtype /Link /A << /S /GoTo /D (page.85) >> >> endobj 6287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 265.616 370.571 276.52] /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 [355.846 253.661 367.801 264.565] /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 [358.616 241.706 370.571 252.609] /Subtype /Link /A << /S /GoTo /D (page.84) >> >> endobj 6290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 230.468 368.907 240.654] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6291 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.182 218.512 366.137 228.699] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6292 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 206.557 368.907 216.744] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6293 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.908 194.602 409.863 204.789] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6294 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.466 181.93 370.421 192.834] /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 [355.697 169.975 367.652 180.878] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6296 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.466 158.019 370.421 168.923] /Subtype /Link /A << /S /GoTo /D (page.81) >> >> endobj 6297 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.002 146.781 384.957 156.968] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6298 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 134.109 371.129 145.013] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6299 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 122.154 368.359 133.058] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6300 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 110.199 371.129 121.103] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6301 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 98.961 371.676 109.147] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6302 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 87.006 368.907 97.192] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6220 0 obj << /D [6218 0 R /XYZ 90 757.935 null] >> endobj 6217 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6305 0 obj << /Length 3871 /Filter /FlateDecode >> stream xÚ\ÝrÞ¶½×SèRš1Q‚ "w¶¬¦Ê¨¶#ÉÓ4ãQ¬Ïª:–dËr›äé» °ä–/¬ŸÃ=ßÙA<+¹ßÂ?¹oÛ}£°Jï¸Ýk÷¯á§ßïÉðÛ~Ýß¿¸ØûË_\%ì ö/>N—RèNî_\ýrpòêåñ»Ã_/~ØïÛQ´z€(îçÒ¶î§{Çsè@¬ÕàÙûå×vÿ >À{­PvÜÿ|Ý iíþí^ß©ðõ§½ó½çþç ~žûìZªõ‡ïºåÃ˾ìô¾é”h=}ÒÛÝÃïÝ×gé§•}/:ø¨øÜ/®âŒ0#º!ð5{ұ݊X÷“ðˆ8ŠžÅJ)¤¯Öíý§¯Ýïy­ý€È ©½“:£óJ—€“P•Úµ6bÍèt–+ȬRëYçî1£SŠÞ 3tK¨G7žQ‡,I”²1ñJ«Çðt(v4¢C©Åá ðÀÊŠÎàbAÞr= e©œ  4}>?_>äG-$l03´¢š€n<_M’©fgcâ\5;»A‡b%‹Zs#Wb°‘R¸YÐkê8`Ah !"MezË„"!#Jõ¨2?hCú´¶¢ ¼\QÂÎT”+ÊÑ¡Xe…2¡¤îóÃW OV„n‰õè†À3bã“Øa-žVÅÄ+±ÃÓ¡ØÎ@fúYlvæ…§ö gè–Xn<#6Y (X4DÄ+±ÃÓ¡X©a@Í•ÍãP†­­ì/W–°3•¥ÄÅÊrt(¶UBKŸÛ7¯OeÛü|ôúÕÉÑZ´i…•Ã|Ɇè€n|ý)’“èqE<¶b„§¢†§ ¢µ…å­~øÏû—»C©®ïnv™jXšØå²-áÝxFx²$PÚÄÄ+áÃÓ¡pc$h~•Ó hèåŒÞÐÐ ¯?@² ž1CÛÇĩހáéPï`€vœõîn¿^gÃ3®Gø–`n<#89 6kÁ£Ð£Ž‰W‚=†§CÁZÃC_%‚ßïî¾Ý®UZ˜~¾dC´7½þq@÷Œ^±ZAÙ"ÚTrÀðl(&N£–ß¹Aý,·t5½™Ñ[%öè†À3%ŽC–Æ4 dÌ»ªðáÉP­’ÂŒ>¹oÎ~8>;{ÿâPéƒç/ß¿9´ÝÁó³ç_‰ï܃6“x1/Ñ ¯>O2_ì®sO 'êÃÒÍò¥c7f埼[WÝÑBFñ²ªtCàëO’„,oÕʘ80< ðhºœðŸà¡}ðúìôe¦î°ÚM5^¼Uwn?ÏŒvxRÈn¾dk´{tCà™Ñ‡,öQôFÇÄ«Ñî1<Š6Üçô»]~+ ÄVl%Ý2‰Àó[IrR;d·’ÒÆÄ¹­$`x:T;´¢Õª½¹»Éœ 0Ý.Эãn‡,ˆí¥Ç˜xuDà1<ŠíGØ DlqU6X!ûn¾bCs@7¾þIÈÂV–²Õ1qª9`x:Ô ©†±…÷ðéñ«gÙ]¬R3tk}âÑ gÖ'qÈIl¿Îr+:øüñjâ1<Šíz!ǹÀŸrg]ðäëÕ ÝÍÝxf4Ç!K£Ù=r‡˜x5š=†§C±²’D,7ša/ŽlæÁÍ :;–IÀòP´Ši3CÙax6ÜÂP0su³Ç^ –3RÍЭêztCà™êÆ!'±ëÝTo…ßFÄ«êz OĪqª›ïÛóîÝûçgßg¼c;%ñ[[)n<³—ŠCn^ë^¡õ1ñj3å1<*6ƒPáÅ•/oq<íæ ¶ÎD&pCЙ#‘(`a<êTL»:ñž ÃÞ«ŸïßüÁ¼ŸY²r®ZÐÅ©ŠP—g*ÊZš¨8.”©!'Zó^P7Otiž¢Ÿ =yõòìäèùif³+…Ì|ÕÖf×£Ïlvãù³-ÂyÊ»ÚëN– Uw¶Cx©õæ™5²êŨº·uÓztCà™Û6YÊ}/ Óˆxuëz O‡Já2áÖ—¯ò/aãH [Û[n<³½CΤaëjGg¶·ÃÓ¡Øa&¼Ñrb³ÏX+:½@·§c‡n<;!Ó±0ávÒÄÄ™IÙax:«x̕Ϳ< eÐÚÊ.ðre ;SYJ\¬,G‡baÌaNüÑB¾=ìÛƒç/Þ¾8Î.,Œ–óEÛ+ ‡n<»´ ! 'ð°n00EÄ™µ…Ãðt([u†—X_ÿÕ¶*¿ …„@Þ6t8tCàYG Y¶tH¸,"Θ:†§C¹]+lx…ååfï`-Ôhgð–\n<#7Y0Óõ€Ò]L¼’ë1<ÊmGa-©n~õJÀµÕ]àåêþœÜP]J\¬.GäâûŒIîÍ]þQÔ e–·)ÖC^§­$äôܵ¥C±ˆ8gípGa,еhÃÛ*'¶°ÝZ9C·÷{ÝxvÃGCÄÂvN}LœÙò9 O‡b‚a0W6ÿ( eÐÚÊ.ðre ;SYJ\¬,G‡bXg†÷Q_¯Ùa µbxY,agÄRâ¢XŽņ Šå†q€Öã^ƄƔ¸8Œ9: ´Ý0W–ÆZ[Ù^®,ag*K‰‹•åèPlOªðæé럟¹B+—^\>Rv3––qiùÈÒ¡X©¦Ç2Še6­Üxqc@Ù3bÃÈŒˆK–ŶR(;W–Û ´¶² ¼\YÂÎT–+Ëѱ£}8Ú|¼,®)¬´ˆÜ¾c¸YÐÙ–,߯ã(#ÖX§C ¦¥¿\%CA4ûqT7ˆÆ?íq©ÈŒq¥ÝÑHeJ³m!IÀ|ÍÝ¡±¶ŠmBA φJ—NšßJÑ×µ x(×ËW[ F(—ˆrû BX¦ 6€<æmlš;ÛW¶Ÿ šíICæ}Áj”6lû bx:;·<æl”VBw}Uû b™®8\I¤ýh˜öDpD(4€<æjæÔWµŸ,ÕdúAÒÕdÚO–jrt(véùsw™¹£èíP×~‚`®)$ 8 m×B{^¦ÿ!,Ê$- NgvØjaº¡²ÑlGH²$U‹aäPÃÓ¡XÒbó8Ô ªe©*Ó’†Ü¨+Ó€²–£C±¤äŸÇ¯N.þ–y¢Fxv+UÙ‚‚h¶'$ ™?aT¶…çäÀ¶  †§C¹¤ äÏÏwùÖÂB¥«lAA4Û’†,ÕÖ m4Û‚‚žÅ’æ'6{×bì»ÊÖD³½ iÈ’X@µšm=A OÄÒ†›¿k}êÚMæÊrýiH¾²\»É\Y–®±£\·›D}6SO¹t†Ám¡„]ü âßë¬ôv²ßÖõh šmšHCnnÈsër=ˆáé0+IÆÔ„óÄdTu3,É` ÒÉ`Ú–dpt˜ Ò?°4¬<1U.ÿ%Œí> ™¡6gƒqù/Ùàè0ÄUŸ´ï<-%uþ÷9%œ!= ™7B \Îÿ>§„¥ )¡Îó¹½ç‰É¨rŠ/É`¬ÛiHþnáœâK28:Lñj—ºÖ¹jrSe²^røžÓ…1Y/¹áè07±É:i z∩2(/YaÃiȬ0å%+f…؃K}COÌM•½wÉ ã·MCn䆱÷.¹áèBn{oÚTô´©Î;§…ó¨¦!ù´p–Ø9-,¦eñ¥Æ GO'uNÒ%!Œ¹3 ¹‘ÆKº$„£Ã„P/©ëEzb"ª˜K"Kd2ï!žÁ80—Dpt˜ˆÈyswóÄ[¤Ê§¸$‚±¦!7Á—Dpt!Ô.51=mdÔyüæ„p¦»4$‹p¿9!,&„¸ì|‡Ó3Qå‰[2Á˜ÔÒykçœ Æ·d‚£ÃL/ÚÔ´n¼WÊuô×:áÍZÓÒÓh[—½w÷8ï„C ON3¨í·ûowW™Ó X²JSiƒ `Ö––œ”®ïx Å›àó¡RbB#Ç<Ëóê¾ÒÀ¬/- 8é]ïD €ZÞ‡ž õZö*(í¬û¦Ò‡hÖ’–†,”ÖÕ` p“¡ÔöáþîãýÃíå§µZØœ¹ù: ¢YOZ²PØÖïÖ°8Äðt¨—˜Ð®n;}ð_7–w‡r<¸ÞÝe_ÝA½²•Ž8D³µ4ä¤}½}6€J­x«Aí1<j'ž´Ý—o7—»\­#l¥%ÎcY‡Z®tû1¼1<*%†4X™dž·°ìí‡J/¢YsZ²PS·Þn-ë…C O‡J‰͹u/¯3baÓ}Ѭ9- Y˜ªÂÛ^Î 7¿6féP,q£]ºÿ-7z‘³Ê ·°3æ´4da ‡Òœn~iÍÒ¡XâFË-¢,<½m¥ Ѭ/- YÁ½ëü—¬ 1<ê$F´»ŒN·c·•8D³–´4dIgâŒn¹W8:ÔI> endobj 6307 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 720.63 155.195 730.816] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6308 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.25 708.674 155.205 718.861] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6309 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.48 696.719 152.435 706.906] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6310 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.25 684.764 155.205 694.951] /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 [140.471 672.092 152.426 682.996] /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 [137.701 660.136 149.656 671.04] /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 [140.471 648.181 152.426 659.085] /Subtype /Link /A << /S /GoTo /D (page.83) >> >> endobj 6314 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 636.226 154.089 647.13] /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 [139.365 624.271 151.32 635.175] /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 [142.134 612.316 154.089 623.22] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6317 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.92 601.078 181.875 611.265] /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 [170.199 588.405 182.154 599.309] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6319 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.645 576.45 164.6 587.354] /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 [157.626 564.495 169.581 575.399] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6321 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [184.744 552.54 196.699 563.444] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6322 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.751 540.585 165.706 551.489] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6323 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [214.502 529.347 226.457 539.534] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6324 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.042 517.392 207.997 527.578] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6325 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [216.415 505.437 228.37 515.623] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6326 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [227.932 493.481 239.887 503.668] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6327 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.516 481.526 209.471 491.713] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6328 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 468.854 152.416 479.758] /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 [135.499 456.899 147.454 467.803] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6330 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.146 444.943 180.101 455.847] /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 [149.337 433.706 161.292 443.892] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 6332 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.047 421.033 148.002 431.937] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6333 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 409.078 180.649 419.982] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6334 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 397.123 150.772 408.027] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6335 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.235 385.885 191.19 396.071] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 6336 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.464 373.212 183.419 384.116] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6337 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.047 361.257 148.002 372.161] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6338 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.694 349.302 180.649 360.206] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6339 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 337.347 150.772 348.251] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6340 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.235 326.109 191.19 336.296] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 6341 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.464 313.437 183.419 324.34] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6342 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.171 302.199 232.126 312.385] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6343 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 290.243 145.791 300.43] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 6344 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 277.571 152.984 288.475] /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 [138.259 265.616 150.214 276.52] /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 [141.028 253.661 152.984 264.565] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6347 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.754 242.079 180.71 252.609] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6348 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.163 230.468 149.118 240.654] /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 [134.393 218.512 146.348 228.699] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6350 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.163 206.557 149.118 216.744] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6351 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 194.602 151.33 204.789] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6352 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.605 182.647 148.56 192.834] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6353 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 170.692 151.33 180.878] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6354 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.375 158.019 151.33 168.923] /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 [136.605 146.064 148.56 156.968] /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 [139.375 134.109 151.33 145.013] /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 [141.028 122.154 152.984 133.058] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6358 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 110.199 150.214 121.103] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6359 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 98.244 152.984 109.147] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6360 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.922 87.006 151.878 97.192] /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 [353.634 720.63 365.589 730.816] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6362 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 708.674 368.359 718.861] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6363 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.298 696.719 367.253 706.906] /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 [352.528 684.764 364.483 694.951] /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 [355.298 672.809 367.253 682.996] /Subtype /Link /A << /S /GoTo /D (page.86) >> >> endobj 6366 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 660.854 369.455 671.04] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6367 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.73 648.899 366.685 659.085] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6368 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 636.943 369.455 647.13] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6369 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [379.637 624.988 391.592 635.175] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6370 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.616 612.316 370.571 623.22] /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 [355.846 600.361 367.801 611.265] /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 [358.616 588.405 370.571 599.309] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 6373 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 564.495 360.887 575.399] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6374 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 540.585 360.887 551.489] /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 516.674 360.887 527.578] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6376 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.75) >> >> endobj 6377 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.88) >> >> endobj 6378 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.75) >> >> endobj 6379 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.75) >> >> endobj 6380 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.75) >> >> endobj 6381 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.75) >> >> endobj 6382 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.75) >> >> endobj 6383 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 6384 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 6385 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.75) >> >> endobj 6386 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.74) >> >> endobj 6387 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.584 241.706 349.54 252.609] /Subtype /Link /A << /S /GoTo /D (page.15) >> >> endobj 6388 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.174 230.468 371.129 240.654] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6389 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.543 217.795 376.499 228.699] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6390 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.201 206.557 361.156 216.744] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6391 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.338 194.602 383.293 204.789] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6392 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.442 181.93 379.398 192.834] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6393 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.904 169.975 378.859 180.878] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6394 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 158.737 353.405 168.923] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6395 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 146.064 357.291 156.968] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6396 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.298 134.109 367.253 145.013] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6397 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.142 122.871 350.098 133.058] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6398 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.373 110.916 347.328 121.103] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6399 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.97 98.961 363.926 109.147] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6400 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.18) >> >> endobj 6306 0 obj << /D [6304 0 R /XYZ 90 757.935 null] >> endobj 6303 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6403 0 obj << /Length 2957 /Filter /FlateDecode >> stream xÚ¥œÛr9†ïý}iGPsÇi v†Áf—Ù ÂØaÓíá°O¿©’Ô%u)Uš&¢ÛíÏú+RÊ*›­(üc+GWFâ„Z]\ÑÕ|úäˆÅïðí!ûþƒ³£Ÿþ&ৈÓbuönüq͈âluvùûñÓ_=~}òÇÙ³•¤–P¥¡ÿ9sÌzôøl×tVBû†?ýþ]]Â<;¢D8»ú ï)aέ®$ñýÇ£Ó£ßvm„Ï|^»vÅÄüâ9Ÿ.žQxËÕÊpA¨Vã•Þ¾ÿ@ïí_+œh¾ãF1ÿùæ*/3Ù=W.-Ò3Uɉ²¢”Ý‹11mµ'c„…ŽºÝügË¿UuÄ‚m‘\ 4ÀÃDW-µó@1Fª³8ÒÔŠajçS*ÅùoÑ8Úh†£‘æêx¨…0kS.k á!Ô/ó0¹$V»-ÙaÏ5‹æA+€<—Ü/-¡œQ„ËØ“_6ç7WëyŒRçôŽ]ˆ2ÒC†Ïå÷š#53a”r¥ð~¬‘iË¥hµ Üj›ÊœÓµÔ™&ºÒ›EƒXw ´-Tgý¦V Q1"„Ŷ®o?®ÿ·¾™‡ªTîè…X#=døüöšDºTC/iS ¶\Ša‚¹wï×wç´ºq5¡ËK‘§‡ ¯.Ey“XzŠÙR¸²y¦-—‚å†H¼ýZ¿œ°³4|=;dpeôæÍ!‹-dY i¶ÞÀ´ÅR„L©ƒ¡ß(¾ÜF¬wÁp|ÉÍ”kÆE7F—Ý–\ ” ¢Xðõ{#Јõ:áx ™r#Ð\ ´!»Oå`ߪ\Ú&ÜnîÆ+  °Ïp°ß%ïïÕ–F)ÍJG@jqâzÈðÊÄ-›ôâ¦2qb¥îlÞŽHSÌ[  ÑÒf¼Yo6×Û«¹ªÇ XdµëwbÂq'"3:¡0'r]̉†˜w0#l¶7>ÐÁˆ±ýL8nAdF fA®‹YЋ_AÄ–g#âú^íXB3tiÃè!Ã+®²IdòCÂu֔³ W`šr¾¿©!Ö„Mì‹—ÏNùë7÷_>9=¬Ó¥SÄ1ÓÛéŽvzbÆN—H§ºH§·ÄÀi|ųqÿC+€4Б´ß‰ LjLs(t1'bÞ M U“ëÓ”–P§»-˜pÜ‚È4ÓA¡‹YÐóM˜d™?6 ¥3ÛïÄ„ãND¦=r]̉†˜w‚qÂËJZ@)á¦ß‚ Ç-ˆL3º˜-±˜„µDpÖ“Ú™2M¹:ž a,´ä ¿…ÑDÄB¤ƒ×üôÒÐÒÜÙçvyDš¹ E:¼¡ä-PœÈ¢jöC“_HJT· Æ-‰æ´Ï1P?·D¥Z:Ý¿^lë“@ÃeÚ•`š(×Qƒòð0ÑÕTÖ —Õ ”d¬P­ <ÒÒòÁSIt,‹Ün/Î7—•3…©$wèÒ™/ÐC†WÎ|e“áNÁ|D%u)<;ó¦-5î8ѱ,òa'ƒ3,‹‰Zˆ3ÒC†Ï…÷šDâä@ W ïÇ™¶\ŠÓRbbqäºZÑÊì¨åŠŒ§‡ ¯Ödò&±þï}º•¢Œ¯É4ÅR”Ú+#_N¸:>ÿøg¥J [.ôŽ^Z˜=dxei*›D¢…‰ìo\³õ)0M9˜¥&³µ‘§_=úõ῞?ýåÑ˧ï??l™æR»¼b¥…:ÃÑ¥:1^ÜZd±.t‘åº%æÝ€Aâb‘äöK#üÖ®…û%Hvb3ݵ$©ºÆI!ŒíZšriüSK\¬lo/êÁÊ0R#º¬ŒƒÂ+Á–MzuÎæÁÊ0øsáY°2þ–\ –9Ch,Ó,¤â„væâ G“q®ŽgãBKÇ-9ÛÌ*BmÛH>†áfÝ]^¿==dxuýΛÄ×oP.„kUu`Úr©S ,V}ð|œ¨Î|œáh>Î…9Åòq!Œåã¦\ŠS3ÂbÍ ÏljêÌÇŽæã\¸gH¶….’›b)Êñ–‘éÌljîÌÇŽæãü*ÑÆ\[cù¸%çg©0„ÇâÙ‹ürXfÜß™ì.™e8šÓ<0ºHn‰ùø™ "•ÌÂíùÓ0£ŒgzÓp†£i81ØÍûb áÒßùã#D±ô—!3Ã4×eø_?a +¿eÅ#?Ÿ·ÅÝ1l„ô¤í{B'Á­§föwm3»„rÄ:ÖzB'!M­hBþŒŒ7!¯µþzžkÙy€?nR6×v®eg@C(ÅŸ=XñåÅ¿ϳ “øó{ .X€? 2yÐÐJ&dbüvÂèñ«Iï?zøêÁãíèz„bò£ñLÃ~“õÃÌΑÆ#“%-¹ä ìL¤fñ † µÅT(KÕ+MÕøº`C¤‡ Ÿ_×^“õ3€c«ïÝgÂû6D¦-mPN¥‚ /ù#Ì8\Ÿß½¯ÇcVʺ¼x3&ÑC†Ï¯m¯É`Å,» Èœ³Ryߋȴõ’Ú«¿›óËõöû¶áGu\h8(ÃdT 6«‹÷c=døüâöšôê’Î{ÃÐç¥ð¾‘iË%/¤"&œK6ëw˜ ëõéáàL"W vIƨÅéè!Ã+Ó£lÒ«Wf‡„£ž*ug³#0mµägÄòèÂöîÝæ3æRšÃìJÁ–Ý.>Ïœè!Ã+¢l²^†B—º³ñ0"m1FP“ÜÇb¤ßꑲñW$— ð0Ñ•8‹Ç0çk€÷¹ê,Ì€4µR˜p†îœâ íœâŽNñ\]hlŠÂØoÊÅÁ-á íœÛî¯~gp~Âéñ—G¹„@¨”½£<ÃÑQž˜æ(/t‘QÞKݯèX•éæíçŽôL½1Òsat¨·äR°Â7…Kc=¢½c}Âñ±ž©7Æz.ŒŽõ–\ë4‹›ËÍ'_+ùЦö»·ç›M%§8¾®$ƒ½Éâ=œ]ÉhEƒc^WóH‰Rv–ÑÓV‹FljˆÛKtwóoJùÝö¿~=XŸ0uü½ê†¡ö`´Y‡ž2¼êGÞä¸ë£5C´á¥pÅÏ´å’!°[..oë›í3åîü-¶×Ñ .È×›eÇVÇÃÃDWw:Yƒã©Øàˆ2²P¹¦V2AJxM&ܽùû¡&N”è6aGã&dÁ„L5¡¡•LàØhLqpÅHP닸‡ã‰FÏÆÆ;çªØÉ¸¥màN­efá5#nå8£;}ÈpԈČNp̉B³¢)—¼€cTæÅÁõ#î÷3®ß‹ ǽˆÌ‚¹0êEK.y!-±r›p¡‰]Þ=¥ºI†£u“ÄԋЩ&Rcu“¦\rƒKâD¼üáæâÓö²Q+¸Û|¸ª Pd ÄlŠŒ]Ü_zÈðÊþªl2ÔNæå4+`Ï$JåYí$0m½äe„ò?`ü'Tw›‘ᨉ fÌŒB3£©Í`ÆÆvfœGü/À1e{ GÄŒ7¬¶hÂØ¢Ñ”KN(ÿ›|çÄ¡©„I8ÙHÓíÄ„ãNDfÁ‰\u¢%—œàŽp·sâàDâï¨ ÑïÄ„ãNDfÁ‰\u¢%—œ ŠˆXUÛÞ^Xbu‚Hnz¤žH#2žÃ8v ÍU÷<à6žG… ÖT·£TY¨´öWÆ?áŸ\c.ÿ–g¹û];¢âŽåÉúf½9¿[_ž \ÑãO7áõìÄñã?×á‹_/îÂ^˜û™òŸa¯=~«: ïÞù3ó§MøâŸOŸŸ°ã§âKxxûö{x}ôéÛ÷«°=Èmô7yãföüñq H endstream endobj 6402 0 obj << /Type /Page /Contents 6403 0 R /Resources 6401 0 R /MediaBox [0 0 595.276 841.89] /Parent 6216 0 R /Annots [ 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 6467 0 R 6468 0 R 6469 0 R 6470 0 R ] >> endobj 6405 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.624 719.912 143.579 730.816] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6406 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.18) >> >> endobj 6407 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.817 696.002 150.772 706.906] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6408 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 684.047 135.828 694.951] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6409 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146 672.092 157.955 682.996] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6410 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.209 660.854 134.164 671.04] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6411 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.308 648.181 166.263 659.085] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6412 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 636.943 150.214 647.13] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6413 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.103 624.988 133.058 635.175] /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 613.033 135.828 623.22] /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 [123.873 600.361 135.828 611.265] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6416 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 576.45 144.406 587.354] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6417 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 552.54 144.406 563.444] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6418 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 528.63 144.406 539.534] /Subtype /Link /A << /S /GoTo /D (page.77) >> >> endobj 6419 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.18) >> >> endobj 6420 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 492.764 144.406 503.668] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 6421 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 468.854 144.406 479.758] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6422 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 444.943 144.406 455.847] /Subtype /Link /A << /S /GoTo /D (page.76) >> >> endobj 6423 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 6424 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.77) >> >> endobj 6425 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 385.168 152.983 396.071] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6426 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 361.257 144.406 372.161] /Subtype /Link /A << /S /GoTo /D (page.74) >> >> endobj 6427 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 337.347 144.406 348.251] /Subtype /Link /A << /S /GoTo /D (page.75) >> >> endobj 6428 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 313.437 157.407 324.34] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6429 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [119.987 301.481 131.942 312.385] /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 [116.68 290.243 128.635 300.43] /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 [121.661 278.288 133.616 288.475] /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 [135.24 266.333 147.195 276.52] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6433 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 6434 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 217.795 152.983 228.699] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6435 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 205.84 155.195 216.744] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6436 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 193.885 157.407 204.789] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 6437 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [121.093 181.93 133.048 192.834] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6438 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.68 170.692 128.635 180.878] /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 [121.661 158.737 133.616 168.923] /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 [135.24 146.781 147.195 156.968] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6441 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.74) >> >> endobj 6442 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 98.244 152.983 109.147] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6443 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 707.957 360.887 718.861] /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 684.047 360.887 694.951] /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 660.136 360.887 671.04] /Subtype /Link /A << /S /GoTo /D (page.87) >> >> endobj 6446 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 636.226 360.887 647.13] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6447 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 602.353 369.465 613.257] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6448 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.164) >> >> endobj 6449 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 554.532 373.888 565.436] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6450 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.058 530.622 365.031 541.526] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6451 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 506.712 371.676 517.616] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6452 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 494.757 372.234 505.661] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6453 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 482.801 373.888 493.705] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 6454 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 458.891 371.676 469.795] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6455 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 446.936 372.234 457.84] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6456 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 434.981 373.888 445.885] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 6457 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 411.788 368.349 421.974] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6458 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.713 377.197 368.668 388.101] /Subtype /Link /A << /S /GoTo /D (page.10) >> >> endobj 6459 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 353.287 370.571 364.191] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6460 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 329.377 370.571 340.281] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6461 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 305.466 360.887 316.37] /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 281.556 360.887 292.46] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6463 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 257.646 360.887 268.55] /Subtype /Link /A << /S /GoTo /D (page.82) >> >> endobj 6464 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 233.735 369.465 244.639] /Subtype /Link /A << /S /GoTo /D (page.17) >> >> endobj 6465 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.193 209.825 384.13 220.729] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 6466 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.193 185.915 384.13 196.819] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 6467 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 162.004 360.887 172.908] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6468 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 138.094 360.887 148.998] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6469 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 114.184 360.887 125.088] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6470 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 90.273 373.888 101.177] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 6404 0 obj << /D [6402 0 R /XYZ 90 757.935 null] >> endobj 6401 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6473 0 obj << /Length 3147 /Filter /FlateDecode >> stream xÚ¥\]oÝ6}÷¯¸6qù!Jbßòá)²©7v±º…áµo¼ǽvçß/%q¤¡ÈqµÈCüqîCIIV;éÿ©“»Ö¶Â»»þ|$w·þ§?©ðÛÊÿºB¿uqô·ÿ”pÙ]|>Þ(aµÚ]Üüvüöý›Ó'¿_ü¼«e'¤m|•þçÊéþ§G§Sé@lMÓþóè·ßåîÆ_ÀÏGR×í¾ù¯¥PÎí>ÕÚ„¯ÿ8:?úÇTcü¹ñ?Ï]»U&½x­ã‹×FÈÆùøp-þóbyJYÑ3!¦þ‡Û€ø€8]!x»,Ù“w]B¬­h\/$†§“þKmw­RB)z¹?>?Þ¦z):SzEnW3:¥ öôÎ%¬­m/±.µË¤6Î eíBëåþþ¯Ï©àÎÏ«§Ï¬(è ÁÓËX”4›„Øy”²1ñRtÀðt ÚÓjÐ|u÷ð˜j­k¡}ÇÈ¥[Mà”8*7¨L§±­‡ÎE”KÁÂÖ ]†žŸ½>ýðáòÕ‰±Ç/ß\žŸ¾NôjÙˆÚ—€ÏñŠ]!xr)Ë’ù±ÕÊ£Ðçt†¥›”7FhG ¿<;qúøå‡—?QÇç© V‰Ú(²âBW3:5!.Hxà7†Úo˜uiA€p\“žÓøu$cÁÇLS;ÑÕó‡ÖšzDWžiê¸$ÕÔ%»˜8iêÃÓlã„i£‘ÿë»w—g¿¼}qú!k#…uzúÜÊ`t…àéh/JÃ]{”µ1ñr¼†¥›”ëÖ÷G4à翾~}zž™àÒÚfúÈZŸè Á3}—¤úÜ£Œ‹‰“>1,Ý$ÚŸ êÆÁ*þé°ßgVq#𦛰këøˆ®<³’Ç%‰Ém=Êÿ"âd51<¨•FXUƒÚ»û»T¬éD+Û º"6 +OÙ% ±u'šïRëáÉ‚Tëü1Ù:$•<µ~U°õô‰Å]!xz‹’ƒb.š¥Ú˜x)9`x:ÐÜ:á½~wú>ë—@çÚ º"6 +OÙ% ±~ëñ§Éˆw©u„ðd µiESw0¼‡§ÌLvBÛº6“Gt…à™™—¤f²G©.&N¦òˆáé@¬ío; ËÍe'õô‰õ¹Ü£+ÏÎe\’žË]ccâÌ\î1<hö+dk¦~ÔÏ™uY ‰ këòˆ®<³.Ç%±u¶‰º6&NÖåÃÓX£DÛ$–àÚ/zúÄÚè Á3—¤Ø£üÙ)"NxÄðt YùS™žxÏtp€–vð §;±gxèÎ6&Îvp»Bbe+ºV#±«>QÚÁ3œî`tLcb²ƒ9º ¹vÖßK·“溃ZØÁNv0fÏ<ÿÝSÌÒØÎøi$öDÙãÜY²ñ7^n¯)Ñ‚gÇ%ÅMªØ£'ŠG OŠ[o´œ†÷épOö/@ ûÁÉþÅì™á »kDLíÀ,ˆm¤V#±ÄmBÛM؂ۄ¶§ŸáùÛTrPÛfojçnjµBjý9[ú“¨ýþ+}O¸ º&vDWž—¤:WŠ®S1q"vÄðt Ö4BÕ ‰Í ­¦ÖvM툮<£6.9¨µ©Z’6&NÔŽžÔêZ¨nÚgýH/ÊZº(ÏpzQFìô±*"&eŽÄ*-´QHìÚ± >Qx¬BpòX…/‚>VEÄÔ±Š¥ÍR ÝÎüÀ p€–ð §±3».&&˜£ bM× £›ßqý:0a×wÜ]!xvÇÅ%©eÙ£”Љ3;naéœÜ™¶¦Y¾`Þü©ÑŠJyß,ûfÍø».ëv¦©ÅúÀÕŒÎìÅQAj+ö / ³&;ñá¸z¬uþ%ÓF#ú§£Å>˜¶a@P‚ 3%iIÔ{ ;ak‹_:mÔ®±þ¬k?¡iõ#„x)ò+©Ÿæê ãZH¼˜Ùf†vÚ/ÕÅn 8i`øéS†ptÞÝIÑêºìUÕFšN´M¹?3œö'`VüÁĤ? ]ï_b;•µÑŽº]yó 8mGÀ¬Ø‰I;ºÞ£…›Ÿ/ßomtDû£{Á#Vpd†ÓŽÌŠ#˜˜t„¡ë‘pÎdÞ{m3£ÏHSl‚“f†7#"¦Ìà輪³Bv“?¾%{äÛõ㿤ÔÏ9'üm—qý©ÚµþÜ. +Ϲâ’CÊɤg®ÆclÌœ¼f1,_oE£„šŸÙ bÿ3ÂóÂR3f8mFÀ fÔ’43“f0|½¦z~¾Õ¿'ÝØº¿[m‹»c†ÓÝ0+݉Éî`èz”wk~ tw·Ñ©ü–›0ÃifÅLLšÀÐy:ço~TúbuÉi| hD˜ÀjF&¬FûÛ$?,ëñÁþ&ÁoöeéÁfÓ|‹‚ù»xÓx4lv0<[Ÿvêï/rçyÖ̳pÑe;p‹¼- ò.p»É–-¸ìi–°¿Wjû¤LA¾°Lì-.×ój™Zë1Ö2ù:@pDa>ãPÛõ—›ý‹›ß± u€fnË’ƒL•Ž¥G5lž.@x2:×®_O´=¾ú##V ië²Ø€¹(Û¢ ¥ÔƒTËÅæÂrRWóëbfÊj¿Ì5…I9@³ÑµeÉA§Î­ µtlR0<(Eñ4ø1W·±/SŽ4›V[–¤º´'V³á8Àðt ÅÒî:Ü=fV#¿¶¹e8VÐlLmY’ÚV/x¹T`x:P‹biW77w÷·*#·@e±8@³9µeIJ®G­ÄâÃÓ\L r5-·(7Ëe²jË’+r™dÜ,—£ rq*íák¦iûðš*ÌÚ ¨-K+q¿è(ÃæáÃÓP”H;ìŸ>þÌl:­?ìæá˜M¨- R›ŽYÃÆáóT”Hë¥~;QòøêDËã¯ÙuJöŸ¢` Ù¤Ú²$¡ºÓn,Œ Oª£`Üó™>‘ÛÞu×&âÍFÔ–%©¶õ(ý\"0<ˆq^ìGr*KÄM;Q[–äw .7í@,ˆqÏçúŒÙ¢(Ü<²L6mYred™(Ü<²ˆ¢pϳbÃ0Eáæ‘e²iË’+#ËDáæ‘åè@,J¡eæîßq™Â ÙHÚ²$µÿx”lØ`xº gо¥:/Õ'YŠÂo€fÓhË’„ÎÁš ¿†§ ÷é‹ðÛÃáiÓ㊲˜<®àb[‹‚ùgbð(‚ ‰M+X6°!‰Í1íÔ¦À¢dÕä“tZäÞp¹ªÙ Ž ÜˆsUøáùÿ2)ŠRH“ L*hQ0ŸAšl`2H³ Øgæh÷67Š";“L„fQpeR0Ù Ž-¸±ì<îŸ6õÄaÊl@hÊœ¯¡'EDKÙÀ² sb&Jƒoš‹)4cF“f   ='"ZÒ Ž Ì˜r3!8½É„Œ)4aF“& ¤MšjšLÀ´¤ ˜0ÇgP||[s„ˆL¡3š´enÒ`ùd¦%­àØ‚8:3f­7ÍÈŔـД 8hCψˆ–²ePB&Dηùò/…>ÌhÒ¨IS“˜–ôcP4fÌgoê ȽÚ0£IP†™˜–´cP&ÄÔ·M‡v)ôaF“> øL`Ÿ|À´¤[ðGaÆL÷& çRfBS6àà }‚ˆh)X6°å`¢hû¦æ€¨K¡3štegè#DDKºÁ±(3æÀ·MŠr)´aF“6 Ô ½FD´¤ Ø€‚0!¿Í‡s)ôaF“> Ü ½eD´¤ø€²0ûkª'¾ùƒÖx§]]áµy0_‰ öÔuöáxçt&03ÿe‹n„TÚ‰®Ë>±žUwÛþÆ×ð'Èú£‡rø/5µuY'¬÷ÿŸö÷ûÃÕÓþæÄïåòøËýøÿEŸ9þk?~óËõÓøE=þ§ÜRÿ`äø–J_}êc_ã7ÿ|}þîD¿}>*:¡Ç/ÿý}üÿÍ—çï·ûû¥vx4\ ²ç¿¸ê4é endstream endobj 6472 0 obj << /Type /Page /Contents 6473 0 R /Resources 6471 0 R /MediaBox [0 0 595.276 841.89] /Parent 6216 0 R /Annots [ 6475 0 R 6476 0 R 6477 0 R 6478 0 R 6479 0 R 6480 0 R 6481 0 R 6482 0 R 6483 0 R 6484 0 R 6485 0 R 6486 0 R 6487 0 R 6488 0 R 6489 0 R 6490 0 R 6491 0 R 6492 0 R 6493 0 R 6494 0 R 6495 0 R 6496 0 R 6497 0 R 6498 0 R 6499 0 R 6500 0 R 6501 0 R 6502 0 R 6503 0 R 6504 0 R 6505 0 R 6506 0 R 6507 0 R 6508 0 R 6509 0 R 6510 0 R 6511 0 R 6512 0 R 6513 0 R 6514 0 R 6515 0 R 6516 0 R 6517 0 R 6518 0 R 6519 0 R 6520 0 R 6521 0 R 6522 0 R 6523 0 R 6524 0 R 6525 0 R 6526 0 R 6527 0 R 6528 0 R 6529 0 R 6530 0 R 6531 0 R 6532 0 R 6533 0 R 6534 0 R 6535 0 R 6536 0 R 6537 0 R 6538 0 R 6539 0 R 6540 0 R 6541 0 R 6542 0 R 6543 0 R 6544 0 R 6545 0 R 6546 0 R 6547 0 R 6548 0 R 6549 0 R 6550 0 R 6551 0 R ] >> endobj 6475 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [114.737 719.912 126.692 730.816] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 6476 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.838 707.957 171.793 718.861] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6477 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.956 696.002 198.911 706.906] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6478 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 684.047 155.195 694.951] /Subtype /Link /A << /S /GoTo /D (page.98) >> >> endobj 6479 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [205.466 672.809 217.421 682.996] /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 [250.497 660.854 262.452 671.04] /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 [188.849 648.899 200.804 659.085] /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 636.943 241.551 647.13] /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 624.988 211.135 635.175] /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 612.316 154.627 623.22] /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 600.361 149.666 611.265] /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 588.405 182.313 599.309] /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 577.168 162.956 587.354] /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 564.495 150.214 575.399] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6489 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.906 552.54 182.861 563.444] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6490 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 540.585 152.984 551.489] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6491 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.676 528.63 185.631 539.534] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6492 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [138.259 516.674 150.214 527.578] /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 504.719 182.861 515.623] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6494 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 492.764 152.984 503.668] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6495 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.302 480.809 157.258 491.713] /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 468.854 150.214 479.758] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6497 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.682 456.899 154.637 467.803] /Subtype /Link /A << /S /GoTo /D (page.97) >> >> endobj 6498 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.922 444.943 151.878 455.847] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6499 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.346 432.988 156.301 443.892] /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 421.033 152.984 431.937] /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 409.078 185.631 419.982] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6502 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 397.123 152.984 408.027] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6503 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.97) >> >> endobj 6504 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 361.257 146.617 372.161] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6505 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 337.347 146.617 348.251] /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 313.437 146.617 324.34] /Subtype /Link /A << /S /GoTo /D (page.98) >> >> endobj 6507 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 289.526 146.617 300.43] /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 265.616 146.617 276.52] /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 241.706 146.617 252.609] /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 217.795 146.617 228.699] /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 193.885 146.617 204.789] /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 [147.394 170.692 164.331 180.878] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6513 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 146.781 164.331 156.968] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6514 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 122.154 146.617 133.058] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6515 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.662 98.244 146.617 109.147] /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 719.912 363.099 730.816] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6517 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 696.002 363.099 706.906] /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 [339.796 684.047 351.751 694.951] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6519 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.201 672.809 361.156 682.996] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6520 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.058 660.854 362.013 671.04] /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 [341.45 648.899 353.405 659.085] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6522 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 636.226 357.291 647.13] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6523 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.943 624.988 373.898 635.175] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6524 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.472 612.316 379.428 623.22] /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 600.361 379.428 611.265] /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 [340.354 588.405 352.309 599.309] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6527 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 576.45 368.349 587.354] /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 [361.076 565.212 373.031 575.399] /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 [360.289 552.54 372.244 563.444] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6530 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.943 540.585 373.898 551.489] /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 [360.289 528.63 372.244 539.534] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6532 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.943 516.674 373.898 527.578] /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 [347.547 504.719 359.502 515.623] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6534 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.585 493.481 349.54 503.668] /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 [351.144 468.854 363.099 479.758] /Subtype /Link /A << /S /GoTo /D (page.93) >> >> endobj 6536 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 444.943 363.099 455.847] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6537 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 421.033 363.099 431.937] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6538 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 397.123 363.099 408.027] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6539 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 373.212 363.099 384.116] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6540 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 349.302 363.099 360.206] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6541 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 325.392 363.099 336.296] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6542 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 301.481 363.099 312.385] /Subtype /Link /A << /S /GoTo /D (page.96) >> >> endobj 6543 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 277.571 363.099 288.475] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6544 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 253.661 363.099 264.565] /Subtype /Link /A << /S /GoTo /D (page.97) >> >> endobj 6545 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 229.75 363.099 240.654] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6546 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 205.84 363.099 216.744] /Subtype /Link /A << /S /GoTo /D (page.95) >> >> endobj 6547 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 181.93 363.099 192.834] /Subtype /Link /A << /S /GoTo /D (page.94) >> >> endobj 6548 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 158.019 363.099 168.923] /Subtype /Link /A << /S /GoTo /D (page.92) >> >> endobj 6549 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 134.109 363.099 145.013] /Subtype /Link /A << /S /GoTo /D (page.99) >> >> endobj 6550 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.144 110.199 363.099 121.103] /Subtype /Link /A << /S /GoTo /D (page.97) >> >> endobj 6551 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 86.288 373.888 97.192] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6474 0 obj << /D [6472 0 R /XYZ 90 757.935 null] >> endobj 6471 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6554 0 obj << /Length 3802 /Filter /FlateDecode >> stream xÚ\]oÝ6|÷¯¸6qER_ì[šx‹Ù$k»»Š"H#'] I\;›ºýõ%/y¤CŠ1Fr}=:Ã9$Hjdyhí?y0íaìGatxûá¤=¼·ß~w"Ãoûë†ýþÛ«“üSÛ«„ôáêÝñòAŠ^ÉÃÕüÓé³OÏ<ûùêûC×N¢íÅ}/vßžœ_-¡q¯ø÷“Ÿ~n³mÀ÷'­Ðf:üa?·BsøpÒ)>ÿvryòï%†ÿ^Ûïsmï¥Þ6^©¸ñJ‹vè¼»¹~{÷çݱùÒ‚Th¤¦÷¿þãíÝÍí‡G©Ù ¢ë¦Ãh¡Rú†¸ïoßÀk›½iUÐQw통· û[ΚÈ'Ⲍ²_3p_Òws/~ÝÊ׃Pr< Ó(Ôžú€mðV|î8tÚq+Þ $çÜh÷À䤽P©û5§NÚæ¹ wôtÃà[…IH¯qÛÁZ eÇmÄœª Ì×ú®myIë|ó&3’µ°! ¹7’=¸YÑ™‘ôJå¶7m¥ûˆvÓÉH§íz­;zóf. ÐZ¥+¼,•±ËVµræ¢XÄGjµz\ºõNÝgÔ*ÑOzî©õè†Á3jãÅžµõ]1óF­Ç`>R«FÑ©¥oïÕ]Ym€Öª]áeµŒ=7cI-g.ª|®2É^tŸ­åªü+ªÊ­½ìªëò /Wæ€)öy¨Íœ¹XŸÍBoìÊ¢7l*o³0Td¡°TµY`ðbSœç^aÄ\ÊâsYF1ØõÀ:Å6ú¾ƒ©Ï /g!`vÆBÄ\ÌàsY°vÔ›úÌ‚½gŽS}Vx9 S¬ ! œ¹˜Àç²`õNjBë±°¼ d劅Á‹+N.[]Z±DÌ¥ ä Õ¾oG1~øæÝíïïn¯Ï.¿Í4,àýõ·C7 ž]€ó^ï´a¶û;^#âT®‡`¶ ¶3½0v4ÕžÉþô3ÙÚOª=ý’WnÇŒMãráŽò€n|Û–$¤Wn¶ÊíÎÂ^1o¤{ æ#í“¶_©¬ö/îçëß>eô+ÑÙn¢‹÷ô{tÃàýqÈ£~¹­k¶"w:&ÞÈ?B0©•hÛ|ϳÇ<<ÊmÛ^-Aö²àÑ ƒg²‡,‚±Æ 1sš†€Á|”‡¡=ò:¾_®?3Õ¹Þï&¡í®–.Ú›÷Ý0xfÞÇ!‹£ßîAú>fÞt¿Ç`>Òmy[ã2ׯo uÎÔÞ×ëÐ ƒgõòÅ:§E«‡˜9£×a0éµ÷MÙù“ §ÕÕöb]'pe]gðb]çü¹Ó_´#âB]‡l¤VuBNê6™áåº.¬­ë+¼\×Y[P]çÌÅºŽøH»Töv¿ö´Ýå‘Àµ#{…—G6ãG#›3G6â#½m+Ô¸ö5¨^£]¯ªå‚=ÍÝ0xFs²ØÇJL®jsæfÁ|A³žlÕTk¹Íž¸LbX±û]lÁ Cg{xˆÉ¥lsÜ›.æÍt°Ã`:;B‡ãb'¶âöìg]X9™¼8™y[²ƒÛOÔˆ¹4™!i:Áª6“þ1»6Sj kö—fܬèìÊŒ,j…]jrÖ̺Ìíëéu‹A~0žÙSŽvèȹ·§ôè†Á3{Ê8dñ\‰^÷1ófOé1˜Äv­ðl—¯~|ýøâ»Ë­Z›²Q™ÝѰÍÞ2Gá¼Îa»Æ4b5çܬ0=1‘F5‰~9î¿}}{ûáîý£Üý_Û›Á÷”ztÃà­qÈR¯ºYhï5óF¯Ç`¾$ãÛêœl£Ül©ÓИ7 YÚ?™A¨Abƒù¨gå Â9¡¾ç¯¿=Óýé㧯Ÿ½¸|uþäõ“—//ÎäéÓMT? =JŠ€s@àfEoš”,ô´²Û!-ûˆ6IAÙ¢¿íÄž:$ 8ÊufÔéã‹Çÿ²9¸ÌäÀîÍl1¤({Iðè†Á3YˆC–Ò0¸y3§yÈG‰PFÙj`ЉøÏ™t?]ls ¥½pZìä  ßæ YÊÝ• öºˆ9ÍAÀ@¾%Sk k4^üðüùëW/Ÿ½¸:ÏK—ÝrÙ¾r n:+œºÛ)áÍèvH·è&1Qß_þðäÉùefÄ·>]²£9 ߊNB–TË^ Ã3§ªò-ªûALréíçç/²‹1WA º¿sè†Á³Ë1²tûv§`“‰™s'eƒùHm׉)”UÚ\Ul¨ý©]\yPÈàŃBÞžòAaD\8(„l¤^+aÂC'Rïʲۭ^.øýíVœÚ :»ÝbÁÉX×w1of»å0˜Ž«V˜ðè‹NÇüæ—.¨ÜO3xq?ÍÛÝbú½rÄ\ÚOC>ÒÜN˜¸“ÏT4ÂK[Mw@1.*6]Ý0x~×ÅBs`7USLœÛwM;l!ÒŒ¢ÕÔëVð§›ÏUêÝÆÓÅûêºað¬zLrc1gä; æ#ýSoïzaܾ™‹çÁÊ­;QaèÒ‰ ''*oéDÒ‘ØQ *¦\QÙý“ RùðƒÁ‹?x»ÀȹôðòQìQ†‡iàã?º°òd‰Á‹'K¼-àd)b.,A>ÒÞ™ãƒôœvWúà#@WŸ(@eÉcðbÉãm*—¼ˆ¸Pò e@v·«@|Ìf`ìÖûpè†Á³à!AÙìº-bΤÀa0å@õB·ùQðWIû × ÷µ;tÃàYí<$ÐÞÛmXÄœÑî0˜´K-t¿éÿ…™ïÏBé¢ÊÓU/¯òv”ÏW#âÂ+d#Õ­;óYþ«ö&ìžpam¯ðr³¶ çÌÅ|¦=LFtá ›[S:m#ôd\NlVä†P+[‰íð‹î9ë;'Ì´ qv Ý0ø–< YØ'ê£ÅMÅ̩ҀÁ|­;Iî_OzWÃØPal§¦“?¾2 ^Ì·ÜgÎHiÄ\ÊäKeõh¥t­Î€Æ¼IÈœғ/Èu æ ½¾¾4€O8ªÞXðä§!÷x`ˆ´ñw‰·Ij’Te©_“,îiȽ$Kýš$ÄGIb¦vt†üÀQTåK_|âiȽ_úš ÄG bæôÌóóRåT_óœãiȽ¼§úšÄòÂíêñôÃæRm}I ²‘§!wR‚lëKJ ¥„y×ýéôÃFGw}Mð’§!w–$È»¾¦ñQ*"ûý+uYNÅÛÜ‹†zhÅh7”uvBCGyÒ±+µ]!´výë‚É(±‡ý•ú±<=p"ª,ßk"€ ; ‰ßK"YHwYÛDd¥vö~ÕWZ¼:®“€Gz;ëÜc|ìï& f {Èßs{êÎÝv¦J/7¡¡»: y”Úm¥Žv«­Ü‚ÉH(°r?Ê¥Ù ²ÒºMhh¥NCE÷Û dQv}ŽœÛ„Át$;qngû×=įskº§Ó©îõo{BfmÂ`:’ÊÌÒsñ­=LvCn*ÝÚ„†îé4dAï8_úFfmÂ`:ÒËÌÒsÕ{)n÷g&UéÜ&4ôR§!Ú··ìÉ¢º:· ƒéH;³KÏÕï¥èQû!Wåß&4ôS§!ú·«7W \ßû6a0égöéù«ßLѣݺ˾Ò×Mhè³NC–Æ­üãmÝ„Át”f©žwßLуãØUz» ½ÖiÈBÿÛù¨±µ›0˜.èæîê¹øfŠk\ßw•ænBC»u²Të,JŽÐÝMLGz™£z.¾™B…¸ÎÒ½Ôvd±NCâÚŽÝKm‡t¤w5SÏU¯¦P®²u/•x­“€¸®[÷RÖ©fÖê¹øVÊ2«¼Ýë¨^ë4äΨÖîuT#:Ò»¬gøNŠk^'û*7aë:WèÙѵMÀÞMDD:™éx.¾‰â6hRÖº» ]ÈiÈB¿NíñÏz Ó3a0é]ÆsÕ»(Ëd«ñ:¯³·l?N–t‡Ù[¶:¯³p‘jæ(žwßCq '÷ºÎÚLhh5NC–T[”ÝJ g3a0]ÐÍ]Äsµõ‘Žu¶æe-ŠlÆiH¼E®æe- éH?sÏÐüè u¥¡™ÐÐbœ†,¯¿Œ][!G3a0if^âú©ØÖš—ê ÆiH\Á‘Ÿy©áŽ43GñüUþÇãÄ4¦ÒæLhh;NC–Ö'5(èr& ¦£0Wñ\í€Ô£]úôµ6gBCãq²¤ß­¹ ´9Ó‘~f3ž‹HºíÖ¹œ—;9ò§!ñÙœ—;9¤#½Ìb<µ ’6ÅuÞçeŸ¼ÈiH¼ÏFÖçeŸ é(ÌféEÞezÒ ÉH(ó ß¼™çÿ}|ŸÙ•iÑMc¥]™ÐÐ>œ†,íDÝKvЬ ˜,he†åÛë»ÏÙCqŸ:îXO²}š‘i9 WèÐÁbzqI³wè=¤QFLS6­%•þœüaƒüø'ÒÝÆVþÒaÆnù;¦Çs_'ã;WéÞ|¾žÏìNЮe>úÿ¯œóòÿ×þ‡—o?ûÿOšoZõnýOª•Òzç–DŸnýÿ}rùüLž>û6\*&¡üÇ_þôÿ?ýtÿçûëiÝ_I déùc{Šž endstream endobj 6553 0 obj << /Type /Page /Contents 6554 0 R /Resources 6552 0 R /MediaBox [0 0 595.276 841.89] /Parent 6216 0 R /Annots [ 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 6643 0 R 6644 0 R 6645 0 R 6646 0 R 6647 0 R 6648 0 R 6649 0 R ] >> endobj 6556 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 707.957 157.407 718.861] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6557 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 684.047 152.157 694.951] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6558 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [115.295 672.092 132.232 682.996] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6559 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 660.136 159.071 671.04] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6560 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 648.181 159.071 659.085] /Subtype /Link /A << /S /GoTo /D (page.102) >> >> endobj 6561 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.586 636.226 158.523 647.13] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6562 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.586 624.271 158.523 635.175] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6563 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 600.361 152.157 611.265] /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 [135.22 576.45 152.157 587.354] /Subtype /Link /A << /S /GoTo /D (page.102) >> >> endobj 6565 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 552.54 152.157 563.444] /Subtype /Link /A << /S /GoTo /D (page.101) >> >> endobj 6566 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 528.63 152.157 539.534] /Subtype /Link /A << /S /GoTo /D (page.100) >> >> endobj 6567 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [115.295 516.674 132.232 527.578] /Subtype /Link /A << /S /GoTo /D (page.103) >> >> endobj 6568 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.99 504.719 162.926 515.623] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6569 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 492.764 167.459 503.668] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6570 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.489 481.526 168.426 491.713] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6571 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.056 469.571 171.993 479.758] /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 [147.315 457.616 164.251 467.803] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6573 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.096 444.943 164.032 455.847] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6574 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.99 432.988 162.926 443.892] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6575 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 421.033 167.459 431.937] /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 [147.096 409.078 164.032 419.982] /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 [146.956 397.123 163.893 408.027] /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.654 385.168 164.59 396.071] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6579 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 373.212 167.459 384.116] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6580 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.23 361.257 168.167 372.161] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6581 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.595 349.302 153.532 360.206] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6582 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.733 338.064 180.67 348.251] /Subtype /Link /A << /S /GoTo /D (page.106) >> >> endobj 6583 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [160.396 325.392 177.332 336.296] /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 [180.321 325.392 197.257 336.296] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6585 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [256.375 314.154 273.312 324.34] /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 [251.045 302.199 267.982 312.385] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6587 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.682 290.243 247.618 300.43] /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 [230.144 278.288 247.08 288.475] /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 [199.728 266.333 216.664 276.52] /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 [151.549 254.378 168.485 264.565] /Subtype /Link /A << /S /GoTo /D (page.106) >> >> endobj 6591 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.489 242.423 168.426 252.609] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6592 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.514 230.468 164.45 240.654] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6593 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.956 217.795 163.893 228.699] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6594 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.24 206.557 168.177 216.744] /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 [151.997 193.885 168.934 204.789] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6596 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.654 181.93 164.59 192.834] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6597 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.056 170.692 171.993 180.878] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6598 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.523 158.019 167.459 168.923] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6599 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.24 146.781 168.177 156.968] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6600 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.748 134.109 168.685 145.013] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6601 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.639 122.154 168.575 133.058] /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 [151.23 110.199 168.167 121.103] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6603 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.639 98.244 168.575 109.147] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6604 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 719.912 368.638 730.816] /Subtype /Link /A << /S /GoTo /D (page.106) >> >> endobj 6605 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 696.002 368.638 706.906] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6606 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.627 696.002 388.563 706.906] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6607 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 672.092 368.638 682.996] /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 [351.702 648.181 368.638 659.085] /Subtype /Link /A << /S /GoTo /D (page.107) >> >> endobj 6609 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 624.271 368.638 635.175] /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 600.361 368.638 611.265] /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 576.45 368.638 587.354] /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 552.54 368.638 563.444] /Subtype /Link /A << /S /GoTo /D (page.106) >> >> endobj 6613 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 6614 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 504.719 371.676 515.623] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6615 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.354 492.764 352.309 503.668] /Subtype /Link /A << /S /GoTo /D (page.23) >> >> endobj 6616 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.431 480.809 358.387 491.713] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6617 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.964 469.571 362.92 479.758] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6618 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.989 457.616 358.944 467.803] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6619 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.452 444.943 379.408 455.847] /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 [371.986 432.988 383.941 443.892] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6621 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.952 421.75 384.907 431.937] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6622 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.519 409.795 388.474 419.982] /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 [368.777 397.84 380.733 408.027] /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 [368.558 385.168 380.513 396.071] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6625 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.452 373.212 379.408 384.116] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6626 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.986 361.257 383.941 372.161] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6627 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.558 349.302 380.513 360.206] /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 [368.419 337.347 380.374 348.251] /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 [369.116 325.392 381.071 336.296] /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 [371.986 313.437 383.941 324.34] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6631 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.693 301.481 384.648 312.385] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6632 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.952 290.243 384.907 300.43] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6633 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.977 278.288 380.932 288.475] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6634 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.419 265.616 380.374 276.52] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6635 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.703 254.378 384.658 264.565] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6636 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.46 241.706 385.415 252.609] /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 [369.116 229.75 381.071 240.654] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6638 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.519 218.512 388.474 228.699] /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 [371.986 205.84 383.941 216.744] /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 [372.703 194.602 384.658 204.789] /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 [373.211 181.93 385.166 192.834] /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 [373.101 169.975 385.056 180.878] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6643 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.693 158.019 384.648 168.923] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6644 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.101 146.064 385.056 156.968] /Subtype /Link /A << /S /GoTo /D (page.26) >> >> endobj 6645 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.537 134.826 359.492 145.013] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6646 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 122.871 353.405 133.058] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6647 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.431 110.199 358.387 121.103] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6648 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 98.244 374.446 109.147] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6649 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 86.288 368.349 97.192] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6555 0 obj << /D [6553 0 R /XYZ 90 757.935 null] >> endobj 6552 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6652 0 obj << /Length 3456 /Filter /FlateDecode >> stream xÚ¥\Ùrä6|×Wô£abq„ßæÐ:Æ;‡-ÉëÙ°²Ô{wt¸»mküõ[  €CŠyÉJfŠ8Xj¶¡ðm Ýh¥‰jsusD7á§_1ÿÛ~ÝE¿~qô ¸Š˜^l.~/ïQœm.®8~õöåéû“Ÿ.¾ÞH:ªzˆbÎŒ´?=:½˜B{b%zø÷£~¢›k¸¯(fØü_SÂŒÙÜI.üןŽÎ¾b¸Ÿ øyéÞùÍs>ß<£ð%WÍ¡½ït·Ýþ:aôøò„Óã?¿XÞ6“Š(ækFbû‹ÝG8‹n! »žßÆ"¤½ žùÅ ”L‰Š§ ª#Ì¥íÏ¦Ž·Ÿîrµ‚6zlC¬w3:'OŽRUî1#ƒV ëR©‡ \^ho g¥‡Ï÷ÛBn ¸6L´rëÐ]/ä6 YË-  ¬â,·ƒÓɃ&Ü †a|w(¤– eë ­Ì:l7 ‰ÃUdJNÄ bÊ,­‰Z.}Vw—×E=›pm…½8£‹£€uJ‹”¶ Òbp¶ ³„›‘-z.ø Y©M¸¦%Ù»]œ¬Iä k¦ØAP® X1"„,*.—­‚¼ˆù†lî"x~/‹á=䦪„x©Ücpº ]"t–ìÛB¢{Â=]ÐÊ´Cw¼ê4d-×€’&%Î’í08]Ì5<7œÃמS´ç°]ÇÝEðb!Ç!k³ ¢;¬U²Å t°ÒéŒÿÞ™º¿8çߌ‹$æ<è`3~rØß_Ýïn S“$–J=D±¦ ÝEðÂÔ”†]àyqÉqá•gS“àtà,r`y2¹ð¾äB¿Æ¥ ®µ.D𪠃»×\Àè¬ ½&½F¦óoÏNzz|ÁkÃᯫýÍåáWòká©§‰6j£`Í×›¦ÝEðÂS/ 9®Üûü 9ѤÌK3<å³fH¸…¯Þþû ~À Sëý˜áu?<¦åGÌ\õá³~€æ;?öûÏû»Ÿ÷µ+Ê5ÒÃT;lÕ°Bn®ì<º‹à…ICZvIó –â qV#ƒÒ Ò(Ø&èɆýî ˜ rwµ ¼jCÀà6$Ä50:kŒJ½ ‡ËÃûš ?RÊûÿÙ5ÃÖ®”>QÚTqY²§°1oâÐ]/’†´72”Á©Iy +‹ÁÙüŠR@¨™j`»ÛµJ¥'h[«Ew¼¨5iÙË“(fRâ,ùƒÒÙäÛ™d>ù÷ü¡–üûÝKD!`¸Âs˜—†¦ ÝEðÂÂ) iɵÉÝKy³„”ÌZÀ8LγÛÃ#- ”p½Þ‚^·Àcp bÞšX †>YðÀ«ónÐ=íóª`A¯Z0¨ oÅŒÌZÐKêàïûG×€=Të˜áuÝEðÂÎ' éçÃ[Ø…U|œí|ç Š…$ƒéŠ?loÿ(ŒéâÉ~º¦!Û£»žßÆ"¤“mø8…=œI‰ª=g ¢9'FNi¾º·«øò^ôz‚·µÝEðâ¢6éôªR [Ä1s¡ˆÅXÄ_PÌ(1C¿P\ß0‚(“ÓU áÝEðüF!p‘±ž¬Cʼî18ŸÎŒ}‰3Ò]œqüìùéÙÙ‡ç'B?{ùá›ß={sžyÀ9lµp ¸›ÑÙ-ÖFºq°úŒi—#ÝC0²Iþ  Õª¦ÿ{; Þ½~YO‰Pl ÐÒïÐ]/†¬: 7*eÎ,p”oò@+ÂxÍ‚÷ùè7Ìâýe±ï°Ý Îo# W}Àõ„ö2!Íp‚rɽ ¬ÏÒþæôÍ»³“^ÿ'Ï7åãâ"\ÙÈ·Gw<Ï÷"dM:ÓDž2/µ{ Ê7‰‡í¾ß¿EÚß~÷úõ‡oÞ½z{qz–«Œ ðXö—6Ä{p7£síiÀšt;A3–Ð.•{F6 †p•eýü»/NÏ O8jXØtY+åÝEðBÊÓÕ”ÃÔeTÊœ¥ÜaP¾I9×ð<0azûe·-õp¢z>a[³¹Cw¼0›§!ܾtP®`å™0g³¹Ãà|A.SDHË­OåÊ›pEk&Á]„.LäIÀJ†™¡„)™ò.%{ N$SAÄ0eø·Ûß {NMzÊ&hkÏéÐ]/ì9ÓÕå÷Ò s–`‡Áù¼Z˜2¤‘Øzz)áðŒõ´ÒëÀÝŒ.¤7 X]¦ÁÏã˜6ÕËlùR;C“¾±ÊœðÐ_³Eù'8ìW©NúµüîõéÛÌÑÃ^jÙ¸Uu% Ñ®eÈŠ/b€­—Ж±€Áù‚â¹k ÂÍö¦ V9èu cŒ5q-V†¼Ð¤žac‚’yq·½ßåm BÙãš•­bŒ¶n-VÞ6óJK´S,`pº uê×rBk¥-,N«ÚÅéâJÃUÛ–l°DúÅc B£¶-ºç…œj"W6Œ9,ÚÁ•†su>rù8Û`ýbƒ³s«–“YÍ(LxTêuÍbŒ5p-V“*á̰n±AɂܨCËêÝÖKuU{ØTªH»Ö"`«T‘î°¹T1º 5êÌrR›Åºª=l.W¤_k-Y†ö‡ ÎDG=Z úïke»ª?,”-Ò®•†k•-Ò6—-ÆtFbNg³nýk w†×+7º ¬tcæjíb|D,i=›{çw}òn£~æ/…‚ì§³Öpè.‚FA²r.zEÔg5>Bp6oHÜ…¶8ÿ~‚+¾ál­+3¼îJÔÃV(Á•˜¸æ Æ\‰úÑæãâ'â›ÎÖ2Ãë†D}l¥õ©7$&®‚±C¢†´ìüü ¾øæ³µ¾Ìðº/Q?[i‡â}‰‰k¾`lÁ—¨A =_¼G¡3m¥G¼êQÜìV/¦„¸âÊæ=Š»×°3ø'Xä»ÖÖZ4ÃëEpˆE1qÍ"Œ-Xõ³•ÎèskúµÖ¬jH›­A:Ä–!Ö i“5[°&jJ+å?aجêS›½AZÇ–!Þ j“7[ð&êV«õ?ÁU-l³;HWÙ2dä‡mrcóîÄlùë€Ç—Ժƶɬ×l7ël Æ lÁ˜¹½ÍŸž?~”¬ëq›Í@ÚΖ!«»\gÒä6™±3¦N·ôMÂ,YÕõ6[‚4¢-C6ÆÒö6Y‚±KæÞ7wúþ„ZYÕÿ6{´¤-Câ _¬nòcó^pÃI¯Mþ*âñピh¾Ú“^õ$`ðEoB\ñe žôÑ~Ó>¿†x‚!ʾã]oÈ ¯â1 Cbâš![0DJ2Ìs³½y|ÅpÁ‰i6ÜÌfÌðºƒWLB\3c fpJŒß©'ü…w6ÂÖ6ÚÐêÑ]ÏÙ!Ç¿ªËÑ$ ¤I‰—Z=§ó‡hœãû=Kwuw·».žSÛ£é‘íÃ`:vkÎðâiprÔjò´J¨”8Ë«Ãàt^+3ÀÎÚ«ÝŸ'\_~*èe°•‘º¥×¡»^Л†¬éÓ)q¦×apº wP„ú3ëí§Ãe±fµR²]³ÝEðbÍÆ!Ç¿ú¡¹V@±!%δ: N´jA˜?5)ý}“¶—©Ÿp ¥ÝEðœz²¢Ô.á¨I‰—J=§ Ja0b3þáÚÃa·½¹,¾W†ÅÒ„o¿X¶è.‚ß,Ç!+Šõø *áÍÎùGNôÂãŒû³ž)—…ó} {Á'h+¹ÝEðBrÓcÉægÙ0·r#Sâ,¹ƒÓ±Bîš~»½vù-”-äA« Ý*[‡î"x¡lÓµG à©“geë08]ÐËþ”ê_…iÖú›P­iÖ¡»^˜fÓ•¼J»É)q6Í: Nt20ÅŸ½)Œ_:¾¤¨Öøuè.‚Æo²6~Ý^yü: NtRF„q¶Þ|¨,(zXR5a[&‡î"xáÁ”†,ÿ©©=ZÐýgO&‡Áé¼ZßñäÅÖWP–vsƒTãAlÁh;U°¦@° ŒY—-šƒƒtÜa(BÕ÷ë>îÇÆÏC³û-fâCë‰Ñrú‹ñ#¸¬Œ¯¶·ÛÝåa{}ûz|wëþ¿°¯!þغoÞ]ÜÒýÇÌ—” óÐø§Œ¹¯~±é¸Û¹o¾qþú„¿zî/%áîËŸ?»ÿ_Þ=|þ¸½]Úh?Íß`dÏÿŸE° endstream endobj 6651 0 obj << /Type /Page /Contents 6652 0 R /Resources 6650 0 R /MediaBox [0 0 595.276 841.89] /Parent 6731 0 R /Annots [ 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 6724 0 R 6725 0 R 6726 0 R 6727 0 R 6728 0 R 6729 0 R 6730 0 R ] >> endobj 6654 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.595 720.63 156.55 730.816] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6655 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.916 708.674 142.872 718.861] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6656 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.072 696.002 160.027 706.906] /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 [131.425 684.047 143.38 694.951] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6658 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.614 672.809 143.569 682.996] /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 [134.483 660.854 146.438 671.04] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6660 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.639 648.181 163.594 659.085] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6661 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.19 636.943 147.146 647.13] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6662 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.066 624.271 143.021 635.175] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6663 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 600.361 155.195 611.265] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6664 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 576.45 155.195 587.354] /Subtype /Link /A << /S /GoTo /D (page.22) >> >> endobj 6665 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.799 553.257 173.736 563.444] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 6666 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.799 529.347 173.736 539.534] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 6667 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.40) >> >> endobj 6668 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.40) >> >> endobj 6669 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 456.899 147.205 467.803] /Subtype /Link /A << /S /GoTo /D (page.8) >> >> endobj 6670 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.46 445.661 152.416 455.847] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6671 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.79) >> >> endobj 6672 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.79) >> >> endobj 6673 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.79) >> >> endobj 6674 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.78) >> >> endobj 6675 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.78) >> >> endobj 6676 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 301.481 144.406 312.385] /Subtype /Link /A << /S /GoTo /D (page.78) >> >> endobj 6677 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 267.608 157.407 278.512] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6678 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [113.233 256.371 130.169 266.557] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6679 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.732 243.698 175.668 254.602] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 6680 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.85 231.743 202.786 242.647] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6681 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.371 219.788 157.307 230.692] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6682 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [173.018 207.833 189.955 218.737] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 6683 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [222.981 196.595 239.917 206.781] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6684 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [219.354 184.64 236.291 194.826] /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 [190.124 172.684 207.061 182.871] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6686 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.452 160.729 218.388 170.916] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6687 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [230.871 148.774 247.808 158.961] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6688 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.455 136.819 217.392 147.005] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6689 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.566 124.864 158.503 135.05] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6690 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [174.213 112.191 191.15 123.095] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6691 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.605 100.953 153.541 111.14] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6692 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.252 88.281 186.189 99.185] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 6693 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [368.758 720.63 385.694 730.816] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 6694 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 708.674 379.427 718.861] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6695 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.634 696.002 370.571 706.906] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6696 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.281 684.047 403.218 694.951] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6697 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 672.809 373.34 682.996] /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 [389.051 660.136 405.988 671.04] /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 [353.634 648.899 370.571 659.085] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6700 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [386.281 636.226 403.218 647.13] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6701 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 624.988 373.34 635.175] /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 [389.051 612.316 405.988 623.22] /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 [349.639 589.123 366.576 599.309] /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 [349.639 565.212 366.576 575.399] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6705 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 541.302 366.576 551.489] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6706 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 517.392 366.576 527.578] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 6707 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 493.481 366.576 503.668] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6708 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 469.571 366.576 479.758] /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 445.661 366.576 455.847] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6710 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 421.75 366.576 431.937] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6711 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 397.84 366.576 408.027] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6712 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 373.93 366.576 384.116] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6713 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 350.019 366.576 360.206] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6714 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 326.109 366.576 336.296] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6715 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 302.199 366.576 312.385] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6716 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 278.288 366.576 288.475] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 6717 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 254.378 366.576 264.565] /Subtype /Link /A << /S /GoTo /D (page.113) >> >> endobj 6718 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.639 230.468 366.576 240.654] /Subtype /Link /A << /S /GoTo /D (page.115) >> >> endobj 6719 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.69 217.795 350.645 228.699] /Subtype /Link /A << /S /GoTo /D (page.27) >> >> endobj 6720 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.076 206.557 365.032 216.744] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6721 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.058 194.602 362.013 204.789] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6722 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.759 182.647 361.714 192.834] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6723 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 170.692 353.405 180.878] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6724 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.332 158.737 374.287 168.923] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6725 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 146.064 357.291 156.968] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6726 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.379 134.826 364.334 145.013] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6727 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.585 122.871 349.54 133.058] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6728 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.248 110.916 351.203 121.103] /Subtype /Link /A << /S /GoTo /D (page.28) >> >> endobj 6729 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.809 98.961 377.764 109.147] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6730 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.79 87.006 374.745 97.192] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6653 0 obj << /D [6651 0 R /XYZ 90 757.935 null] >> endobj 6650 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6734 0 obj << /Length 2926 /Filter /FlateDecode >> stream xÚ¥œÛrÛ¶†ïýº´gJlèJÆ­#§>LÓi;ÅVœtÛŠ+)‰ýö{ȹ­ñ…eé7~® ÇE›M(|±‰¦“ZÖD 9¹}Ü£“{x÷ísŸðq>?ºÚûÏ¿Et%&WŸš_¯‘œM®îþÜ?L?ü}õˤ¤ŠPYA+æ}¦¥ywozÕ6팥¨LÃÿîýù7ÜÁü²G‰Ðjò^S´ž<î•\¸×{—{¿µmØ÷¼»vÉDÿâ9ï.žQxÉ夿‚ÐJ6Wúxó¥b~ÿÓöõ²’©D+nÍ«{§¸@Þ^] yß«Iã/hÏX‚ª”¡ñV¨^“·óá2FsÑ~YÞ-˜ÜެIÅ+/Š×Š‹N 7h°‰–õ£ÕÀD®½`­$ëåb­´&LÊ.Øçu4PÎU«ŽÔ¨ $†Š›LÇÊtè‰$y3«ª w‘þÚR”D îT1:mÑŠû¦As‰Ì-KRë[n‡ç9#]- /ý|‰¯"¥îtCZuä‘Ã&SQ‚JªÐ¸§Õäí|¤• \»@çO?%¹ZáP¾zÄ­:’®Aƒ©qD²\{Ùj%Y/¥dDˆÒ…9Kç«ÓÍØNžÎYdÉZlœÌÛœTh"jwCc·Sp³y«ŠÔª $D6i¬¹ŽMi]`Íïî¾,c+£šPZµÚ¡ñȪ $ Ha“‰Û*+ø÷†$«ÉÛ¹h¥†¥¬´p׋åzŸeT§1Ë€º@òø,£BóÄ,SªÐ86Ë€&oçc­a5F…‹uQ5Q°†öÊ¡X­º@òH¬a“©X5©k÷bµš¬ì1dU“ ˜§ÍüãÓjÓlO˜…PÀ R»õ|zPÒ}ò9:ÁÔ6‘R’J‹S‘QHŠp“Í&‰U16Cs„„Ñdý ‰RZ`7‹Õêq}¿ÁH­Æéäi Nc”I Ø9 $ãg€@ÌŠ·@Öü¹O¢K‚ÖDÕ|4‰Nž&á4–D$“$2~@¹D³‘Ø95J%À`4$OñšÔœS@r~H «ÚYì0j”%TŽ'ÑÉÓ$œf`Ôœ“$2~†D©@W!»§Lx¬d£tò4§J 윒ñ3@`!ÆT 䙯w Á8áb<‰Nž&á4£Fàœ$‘ñ3$(…3&±sj¥ˆà£ yˆ× ¤Fàœ’ó ¢®ˆ¨|¬Ë»‡·ëÍêË}Œl'k WS•d¸‡8qÑ©û•êÙV©` À¶Û œ$gfHNÊöv/£sªýôiõO4,aë‰()>ñڢG’7glëÈ.X˜€cïö7‚Œ œ«æÖžž1g±¯ð‘·êtèVÒÄ®R±#ÓTði'=-IåNT úÌ ˜žkNªztøHžŒßk²7?ðMÈ™®(©Ý Äæób3§)·‹‡§Õc¼Àk4^)R8uäñjÒ¸W±í»„2ðí1°š¼›ÛYrØr+f°ú'+EÒáX›3($ÆJ·Ü#K#µªCãÞ‘ÕdíÌ/K¢\×Ú¬o3û‡¤œèûkŸô<ôNcÌU•Jzì›JúŒ™AÀ)Ñ~w ^;êqªˆÖãtò4§É#À¾)3@ÀtM¨h¼zècJªF#@ò$¯É"|rfA-óéÍËÓ"Õ~l>ÎW«ÈhYD5,CaÛh§.<2„M÷RöG Ûb÷F«ÉÚ¦äç÷ÐQ6 þ¢”oÖÿ=`t¿)¼¾Dp°¦xÈDMøðÚ© $à›4¢cGŒÜ0þ‘#FÞÀϹ¹‰€qI„ÛE¯ŸnãA [Œª•ײŒº@òh1 7Ùœ³X5Ë<ÍU.Y]&ù`ç$ŸœŸçƒJ‘=>§ðÆéáä¤Ò»sÉ"DzêäiV¨¶™Ë%ìœd•óó¬P•²ÇjvýîæÝõÙæûW@ëôýÙéôb^®N9–W'OóB¥Ï/ìœä•óó¼P-³Ç˼qsù~z¼#_ÁÉÉ“ŒpQ4Óÿ磬Ÿc„Ë›-£ãóÙåôøæètvþ~—ñÉ4Çòéäi>¨Fšãƒ“|r~ž*z¶|NLAépööìtöÖRêCªFCrµÎ±:y*Ÿf:Zàœ„”óóP!´…d&·«SX @6™iúáj—Trб”:yšª©æ(aç$¥œŸ§„Ф-¥÷fÀ>¼€×7ð£É«ó]Fm_‹©“§1¡‚k®Çaç$¦œŸÃ„K§-¦ËëããéååÝÌ—IG’Aò$\yÍ$Pàœ"“õódºrj æzf'´³›£‹C“>Ç¿Nwég¾”:S'OcBÕÙLÎIL9?©-»F(¹þ6íÂÈU]Ç2êäiF¨›c„“Œr~žQWŸE.ßLo®.g;u4W•K§“§é BoŽvNÒÉù9:¸zkÂ}I%Ë×eìhÕœæi©Úêìðù QH= ÄM6(ÊØ ¡†±30ŽMÞΓŠ(jïý÷.÷çß)OëÛùê.JCè /+¢ä˜ÃRHe´êC!¤m#(Œ&ïÆ5ÕÍ’(·¨zúžˆT‘$^:ªUH‰5l²©+Ð~° ‚þ÷‚µš¼¿ïœíæšïæ |ñ0_Þ?dÍh?¨ 远Q¢‡oN] yäÄ+l²)1ôyÀÊ^i÷¼¬&oçx0­‰;Åq8¾¦X¬Ÿžã,X³ôaª&´œ<œº@ò‹°É&7dŸ¨„ {,¬&oçYÔ’0°˜›ï?LÁd~À)¼f›9`R¯4\a%^¢9uä‘n6i *ñŠJÉCçXI4y?ÏFÈ Û|ý¸ØÌ_ÉChÂåx<ÍÃiT'y`ç$œŸçÁkµ€|Z-þ}%&‰(ËÑ@:yˆÓØ¡I Ø9 $ççPA„ ¬_Ö¯X5#åðRË«:9¬:I~TÅ®[,¸rƒª`DEð(˜º^ôº?¿oþ;€y ŒiüÏ*¢ëÒÿ…nž3Q¼],«ùfqwPpI÷¿.í÷+³ €•LóÃùíÆ¾(í7¦¦ügAíOœÂ¸Ñ¼úd@_Wö‡ß/ÏÌ9ë‘ûU¢·/?¾Øï'_Ÿ_îm•S4ÿ À] Âó? ŒÅÒ endstream endobj 6733 0 obj << /Type /Page /Contents 6734 0 R /Resources 6732 0 R /MediaBox [0 0 595.276 841.89] /Parent 6731 0 R /Annots [ 6736 0 R 6737 0 R 6738 0 R 6739 0 R 6740 0 R 6741 0 R 6742 0 R 6743 0 R 6744 0 R 6745 0 R 6746 0 R 6747 0 R 6748 0 R 6749 0 R 6750 0 R 6751 0 R 6752 0 R 6753 0 R 6754 0 R 6755 0 R 6756 0 R 6757 0 R 6758 0 R 6759 0 R 6760 0 R 6761 0 R 6762 0 R 6763 0 R 6764 0 R 6765 0 R 6766 0 R 6767 0 R 6768 0 R 6769 0 R 6770 0 R 6771 0 R 6772 0 R 6773 0 R 6774 0 R 6775 0 R 6776 0 R 6777 0 R 6778 0 R 6779 0 R 6780 0 R 6781 0 R 6782 0 R 6783 0 R 6784 0 R 6785 0 R 6786 0 R 6787 0 R 6788 0 R 6789 0 R 6790 0 R 6791 0 R 6792 0 R 6793 0 R 6794 0 R 6795 0 R 6796 0 R ] >> endobj 6736 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.586 719.912 153.541 730.816] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6737 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.63 708.674 160.585 718.861] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6738 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.231 696.719 160.186 706.906] /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 [133.835 684.764 145.791 694.951] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6740 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.499 672.809 147.454 682.996] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6741 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.30) >> >> endobj 6742 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 648.899 145.791 659.085] /Subtype /Link /A << /S /GoTo /D (page.30) >> >> endobj 6743 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.066 636.226 143.021 647.13] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6744 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.315 624.988 135.27 635.175] /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.873 612.316 135.828 623.22] /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 [146.01 600.361 157.965 611.265] /Subtype /Link /A << /S /GoTo /D (page.29) >> >> endobj 6747 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.489 589.123 147.444 599.309] /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 [138.817 577.168 150.772 587.354] /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 [133.158 553.257 150.095 563.444] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6750 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 529.347 150.095 539.534] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6751 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 505.437 150.095 515.623] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6752 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 481.526 150.095 491.713] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6753 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 457.616 150.095 467.803] /Subtype /Link /A << /S /GoTo /D (page.116) >> >> endobj 6754 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 433.706 150.095 443.892] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6755 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 409.795 150.095 419.982] /Subtype /Link /A << /S /GoTo /D (page.117) >> >> endobj 6756 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.158 385.885 150.095 396.071] /Subtype /Link /A << /S /GoTo /D (page.114) >> >> endobj 6757 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 361.257 167.648 372.161] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 6758 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.451 337.347 144.406 348.251] /Subtype /Link /A << /S /GoTo /D (page.79) >> >> endobj 6759 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.78) >> >> endobj 6760 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 6761 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 265.616 148.55 276.52] /Subtype /Link /A << /S /GoTo /D (page.6) >> >> endobj 6762 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 253.661 152.983 264.565] /Subtype /Link /A << /S /GoTo /D (page.16) >> >> endobj 6763 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.86) >> >> endobj 6764 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.86) >> >> endobj 6765 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.86) >> >> endobj 6766 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 158.737 151.868 168.923] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 6767 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.231 134.109 147.205 145.013] /Subtype /Link /A << /S /GoTo /D (page.9) >> >> endobj 6768 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 122.154 155.195 133.058] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6769 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.452 98.244 157.407 109.147] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 6770 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.11) >> >> endobj 6771 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.28 684.764 390.217 694.951] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 6772 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.28 660.854 390.217 671.04] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 6773 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 636.943 380.812 647.13] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6774 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 613.033 380.812 623.22] /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 [372.732 589.123 389.669 599.309] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 6776 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 565.212 389.669 575.399] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6777 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 541.302 389.669 551.489] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 6778 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 517.392 389.669 527.578] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 6779 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 493.481 389.669 503.668] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6780 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 469.571 389.669 479.758] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6781 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 445.661 389.669 455.847] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 6782 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 421.75 389.669 431.937] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 6783 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 397.84 389.669 408.027] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6784 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 373.93 389.669 384.116] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 6785 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 350.019 389.669 360.206] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6786 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 326.109 389.669 336.296] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6787 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 302.199 389.669 312.385] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 6788 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.962 277.571 368.917 288.475] /Subtype /Link /A << /S /GoTo /D (page.14) >> >> endobj 6789 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 243.698 368.349 254.602] /Subtype /Link /A << /S /GoTo /D (page.19) >> >> endobj 6790 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.5 231.743 369.455 242.647] /Subtype /Link /A << /S /GoTo /D (page.20) >> >> endobj 6791 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 207.833 373.888 218.737] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 6792 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 183.922 372.234 194.826] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 6793 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 160.012 368.638 170.916] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6794 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 136.102 368.638 147.005] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6795 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 112.191 368.638 123.095] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6796 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.40) >> >> endobj 6735 0 obj << /D [6733 0 R /XYZ 90 757.935 null] >> endobj 6732 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6799 0 obj << /Length 3917 /Filter /FlateDecode >> stream xÚ­\Ûr·}çWì#·Jƒà:üFIk…E*ä²l—ãbé²’•’H†¤,)_ŸÆ˜@Ï„I¹Ê"—}æ4º—í]¶¢ð[YºÒJ+Ôêíçºú¯¾8`á¯ü¹Kþþt{ð—Œ"¶«íûýðžÅÙjûî·ÃãÓç›_Ö¿oZIjU=Xq¯3Û»W6ÛÁt V¢w†ÿuðÛïtõà§J„5«¯ð3%ÌÚÕçÉEøùÓÁÅÁßþu¯×ž]1Q><çùÃsAh¯öùçš©Ãݧ›‡ï·»½H®VcÄ*¹¿ýv{÷ùÉT “’h+W Œù§q¯ß}€óä¹"¸ÑÅ£M :j. V ¥3Ö‰"ã7ôÖ¦r7¬¹:üºfôðõšÓð*âòGéÑÎôª7šð9§l7€KŸdæöaÅhéÐÙ³”³p‰G LÎ#Z.3ÜíÞ·ô}{_‹žHiV}/·³aáÁ݈®„EfÐQ Sº@0×)káÁ¸œÀUBÈàˆ‚›Û‡GfF/,Ú.MÞ̈Á“##neFçüÀ5‘<÷Ãÿ)5˜"²·‹“c„·Ó#`|‚°f‚¤ÌÍAøœ_¨ Š¿Ü½~÷ÈØPVµ86x36"Œ¸ø@iKÀƒÞßíþõ¸XP½&=$÷ÂXHàÍXˆ˜™b™1·bãs~Šh-ý·wÿ¬Ç' J¢µšîx%r“{˜š~ktN\Ñï08õbaD sý¶óö<9òÜèjÄ'÷Ïjï¶O)k%ÞãrÓ JMØ0ý%Kia‹¶xÓ4¢›É x­ÔG¸ÀÒ¨q0qÅk÷ÿôÅÂ5ý‚Š µ Ö.^x³"DÌ>!¨mU„Œ¹U0>çŸrPʪ_%¥¢„šå>ámŸŒ÷‰iú$enúás>†0Q÷Éÿpî¼'lùî*·“(`f²(%n¦Bç| ‚ñºOÜ!d8<.‡('¼_¼ª&ðv¼Ì̪š17ãáß ç[&ßÌîÊßmˆP‹}“À›¾‰˜™ÝgÆÜò Æç|ÓÃ!†Ö}óïÇû¢V.ß…%ð¶OfÎ')sÓ'Ÿó ì{¤-|räVW„ D ½´®$ðf]‰¼®dÄ­º‚Ñ9_0CTØ¥¾xüÚ#hOà,¸86Fx;6ffíɘ›±ð?¸•¤×<^XÔt2ØïH5 gtt—ÀK“>J‚ËfÆ<Õ08_؉sÉf:нÚÝÝ}¾ÿP*îìQú>£8 »^>ÁÄä^±à³Ç8Å)óTqÀà|Q±¦D÷l¢øjwý¥’ß°¬°^cfdt—ÀËǘ˜ÜË.œSE Îsæ‰ìˆÁù¢leˆ¡}”ýöæÖ¥ú÷JIƒszßø¹’æÑ]¯”´Ü¤—\ÎtáÊrâéD{ÎËžŦ‚›¡ãvqØŒî€îxù$“^·(ƒLu:cž œ/*’ëýüó³‹ÍùùÕÓµP‡Gϯž?¿Úž­ÙáéEá®ìþ: ZÀÑ]/jj²ïîŒÔÛœyïƒò Nà *«:aûë«M©–Aêž œÑÐ]/µOL¶´ ¨„.NRæ©ö€AùíŒB=¬À«µå‡GçG/KýœÁD™aðŒþ€îx©b²©_ ëTÆ\è÷”/êgbNTåÿR ‡£…êu5£;€»]ÊÎ ¶TʯËh§¢#4Mh¸Á›ˆ¾¸|züòh-éá‹JØ»“¶”ÃøùÝ%ðRÿÄdË BÚ˜œyê€AùhXyÍ?»Òv~ò¼õ>ÂØ¹ ÷ànDWb>3Ø y {4•Ñï!Ù öR¬W¨tWû¡êŸW|ÐîɲÁÊŒºKà¥&&›U_-TÎ\T}AùGÀŸgEÿøäd\õNÁµUO#†Ás‹žw#º²æe[â{C´¶íT{€`dƒtaa‹ÅÀËÍ˳óu¯}RÛ_Ra†QsUÏ£»^){¹Éf݃pÜ̘‹Âç1(ß œÃÞ(\Õá§gWg'—Ûã³ÓJÁ£°(ÉaØ\Áóè.W ^n²¥Žö¶79óTyÀ |ƒr¦ˆ7ǃòÓ«‹M\埞T ¾ôoFÆÁ3úºKà¥þ‰ÉfÁ7DÂ&6c. ¾Ç |ƒ~*ˆ0ùÌ_B¾¿:;>ÝnÎ+S/Á¸ÆÍM½Gw ¼2õ¹ÉæÔ[")Ë™‹©÷”/J·ŒH‘ÍüÅñé‹Ë“#Èúí/ÕU^‡Í/òÜèêŸD–x¨ßm®ZÂ9P1bm¶ *Ü#(#Pv 8©±ýÜ]tê¬Y):çòÙ³ÍEYú%§D‚;&¢»^<ÅÔdÃ5R¸–3O$G Ê7¨[ à¸ûþn·+Ô X•œŸµ_E0Ö51è¥ê‚VpAÖ!(Yš6a¥­C½°°$Q; ™QÐ]/Ÿbb²q¨—.O•È™§Ó08_T=tsæ×K­J¹¨‡Ì#‘¾®ÔT#|…æûòÜ'jKšÈ¼ºö„ÂJ+ÇsêÑ]¯Lhn²q;%),̰£Í˜‹ õœ/Š{Ó HlÊÊàã%mq£»Û­jƒ ¥ÂÍ—1X_\„ dQgÒ“ûùã·z]2l€.(LÆyy„×+SbÒß.Óji‚å4c®Õ&wÍ…òEµI³W‹Ö&nvüE4Ú‚75‰Õ&ÍÑ–¿ˆÁù¢è¤ïD_ßÞW¦˜ÍÌ›bîxeŠs“ÍJ¥Hß󜹘bÁù¢Ú¤qp¯öÏŠZ×$¶-F4ÚF85ÙTÛ ç¬m1bp¾¨6é]tí»™Û]:·#¼=· ;ã¦9·)ssn1¾ 6í‡ôjÛé ›tØ’-kÊŒh´Krj²™¾°õ†Ö•18_´f:Ñ ¸Z¢-³v¾D;t—À«%:5‰ì ŒÈ˜+%Úap¾(7iöÜ7¤?T÷R ËZM#mýœšlªåÄX޶šF ÎÕ*+µØÞJY5Œ˜ß[9t—À«{«Ôd3¢QÂæÌED{ ÎEKA´¦øžß6‹V„.,Z ¼Y´RvÆm«heÌ­¢…òEµ‚mD¢v¶h…K‹Öo­ä!°¢•27‹ÆE3 ëá8Å;$‹tiðv'ìX§ÌÍ,Æø¢Z nìIµ³YF,ÍâÞÎâä!°,N™›YŒñѶ³vìM¹¿}¸kì´Ä€]²Ó®cy€7vZ"£g‚ÕwZ:g®î´ô _”kÜÛÛãyÓ,Zº°h%ðfÑJÙW­¢•1·ŠÊÕBøSªãù÷âòéÕ³ÍÉæb{|tR^Ó Õ~4sMÐ]/¯é&&[Ç~ [d–OcÚCP¶A5x›*ž©¾|ºùq­åáþÚg›Ê¥!ŽqìÜ¥Gw ¼rG™›lŠ„i“3ê=åäKC¨í“Ÿ[©âˆ…+Uo®TéCT/zü*”1·V*”/Š=ac'Š›ó“£5cìp{¼½|^›p(­†sîÑ]¯Lxn²9ᮤÌÅ„{ Ê7hç’°±e¯ýìôEC·këÑv4—åÝ%ðJ–ç&›º­/ù)s¡Û†µát3 –Íùūͳíy­¸qM˜2عéöè.W¦;7Ù”Í £ë&¯w»–uÔmÄì{QÝ%ðÊv57Ùè±½%ªXÆ<]Üç‹îè%‘ÕÛÒ%j‰K'R-wÉo»$`Z÷hÑ%)sÓ%_t ”ÍAê›wßGüñîn­ÔaÍpà§FB¾¢æßþè.Wö¹É½?TyÓføþj9c.Þðœ/úƒõd¼h{óð’, B%é¼s2ÂÛ ïÚtHÊÜtÆÂ-'ýøÎAìW~\Âp»úùkö˜0 ¼™0Óz×($CÆÜJ”/úÃõ>õ¶Ñ¿ýH·¨ž¶Ü-#¼í–€iŠ·¤ÌM·`|Ñ-v4câTïj…ñýÄ:£6 »^²OLî¿Q£<KM¬V9ñTlÀàta?Á'6\ ÿƒRþ©ÒÓf3Z=¸KÐ%wnp¯”׊‘ÓN• Εrº¿Xrtï¿\¿}øxs]©vj¦ÀsÕΣ»^©v¹É†\ (¨Çqqú÷œ.Ê…” Ÿ>^ï®®oªW;nß±óW;Ý%ðêÕNj²ÆPÂäÄ…ZÁé‚Z÷é .„«‡]—V ¸¹ öè.W¢87Ù c@¹îµ”¸cÁé¢R£ö1¿ÿŒàÃë‡/÷Oê©Ãè|-¦ûNÐ^­Å©ÉÆ´B¨S©râ¢{ NJ1Ó*…IJqk—âš:…Ì)‡îxµJ¥&[;{‡ÖäQëì18_œ`È î€7ççõ¶JàQè\ߊGw ¼Ò¸’›ôjËÅÖM¤wÆ\ìÉ<ç‹jáÌÏÇh˜á«æçÜf™qÌŒì€îxù“^vyVÄd‚åÌSÙƒóEÙB>ÞD;Ù»ë×oj«/œ{-çÈ9ÑÝ%ðŠèÜdc®%û/Xɘ‹k:Áù¢h®ˆ/¤÷ýó/® Â_lÿú¤v5ªe?Œš¹»è.—w“-áÊØgÄSÝ‚² ²™Øïc“¹®¾#î>{ç>¬àsIíÑ]¯$un²™Ô.÷Sæ"©=狊)#Y{ðf[ïÏ’v€/èÏ’Îç#¼ÞŸ•˜l†¶Ýo)2æZ–ÛÜ¡|Aqè™N¦¸úvi˜±ÃzÉ cýعÁVõÚÏËh§ñÖCàX©ª¡@>ô¸ïÈÜ…§;r2›~ƒg‡¿ÓÉÂןô^ì®ww¯vïÖph£‡7×þß­ûÜÅ—ÿåìíƒÿAú˜ýòõ¿qʘÿé½û‚’›;ÿ‹k]³Ãã§a(1„ûß|÷ÿ>¿ùöýÃîzêF÷-žá÷ü웺ï endstream endobj 6798 0 obj << /Type /Page /Contents 6799 0 R /Resources 6797 0 R /MediaBox [0 0 595.276 841.89] /Parent 6731 0 R /Annots [ 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 6877 0 R 6878 0 R 6879 0 R 6880 0 R 6881 0 R 6882 0 R 6883 0 R 6884 0 R ] >> endobj 6801 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.24) >> >> endobj 6802 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 684.047 152.157 694.951] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6803 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.38) >> >> endobj 6804 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.24) >> >> endobj 6805 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 612.316 152.157 623.22] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 6806 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 588.405 155.753 599.309] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6807 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 564.495 152.157 575.399] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6808 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.028 530.622 152.983 541.526] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 6809 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.24 518.667 155.195 529.571] /Subtype /Link /A << /S /GoTo /D (page.21) >> >> endobj 6810 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 494.757 155.753 505.661] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6811 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 470.846 152.157 481.75] /Subtype /Link /A << /S /GoTo /D (page.109) >> >> endobj 6812 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 446.936 152.157 457.84] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6813 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 423.026 155.753 433.93] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6814 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 399.115 152.157 410.019] /Subtype /Link /A << /S /GoTo /D (page.110) >> >> endobj 6815 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 375.205 152.157 386.109] /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 351.295 152.157 362.199] /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 [143.798 327.384 155.753 338.288] /Subtype /Link /A << /S /GoTo /D (page.24) >> >> endobj 6818 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.22 303.474 152.157 314.378] /Subtype /Link /A << /S /GoTo /D (page.108) >> >> endobj 6819 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.949 292.236 133.885 302.423] /Subtype /Link /A << /S /GoTo /D (page.118) >> >> endobj 6820 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [162.049 279.564 178.986 290.468] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 6821 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [189.167 267.608 206.104 278.512] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6822 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.67 255.653 165.606 266.557] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6823 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.317 243.698 198.253 254.602] /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 [258.029 232.46 274.965 242.647] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6825 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.073 220.505 234.009 230.692] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6826 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [220.032 208.55 236.968 218.737] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6827 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.571 196.595 218.507 206.781] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6828 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.147 184.64 254.084 194.826] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6829 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.944 172.684 238.881 182.871] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6830 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.795 160.729 278.731 170.916] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6831 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.838 148.774 269.775 158.961] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6832 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [204.042 136.819 220.978 147.005] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6833 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [229.028 124.864 245.964 135.05] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6834 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [242.517 112.909 259.454 123.095] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6835 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [233.461 100.953 250.398 111.14] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6836 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.337 88.998 254.273 99.185] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6837 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.527 720.63 436.463 730.816] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6838 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.365 708.674 378.302 718.861] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 6839 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.012 696.002 410.949 706.906] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6840 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.404 684.764 373.34 694.951] /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 [389.051 672.092 405.987 682.996] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6842 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [371.348 660.854 388.284 671.04] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6843 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.385 648.899 378.321 659.085] /Subtype /Link /A << /S /GoTo /D (page.130) >> >> endobj 6844 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.032 636.226 410.969 647.13] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6845 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 624.271 376.658 635.175] /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 [360.827 612.316 377.764 623.22] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6847 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 600.361 376.658 611.265] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 6848 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.369 588.405 409.305 599.309] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6849 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.923 576.45 378.86 587.354] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 6850 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 564.495 373.888 575.399] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 6851 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.599 552.54 406.535 563.444] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6852 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 540.585 376.658 551.489] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 6853 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.369 528.63 409.305 539.534] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6854 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.952 517.392 373.888 527.578] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 6855 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.599 504.719 406.535 515.623] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6856 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 492.764 377.764 503.668] /Subtype /Link /A << /S /GoTo /D (page.131) >> >> endobj 6857 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.721 481.526 376.658 491.713] /Subtype /Link /A << /S /GoTo /D (page.125) >> >> endobj 6858 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [429.469 469.571 446.406 479.758] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6859 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.238 457.616 444.174 467.803] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6860 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [392.369 444.943 409.305 455.847] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6861 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [424.478 433.706 441.415 443.892] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6862 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.883 421.75 450.819 431.937] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6863 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.162 409.795 443.098 419.982] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6864 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.798 397.84 430.735 408.027] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6865 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 373.93 370.292 384.116] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 6866 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 350.019 370.292 360.206] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6867 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 326.109 383.024 336.296] /Subtype /Link /A << /S /GoTo /D (page.158) >> >> endobj 6868 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 302.199 383.024 312.385] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6869 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 278.288 370.292 288.475] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 6870 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 254.378 370.292 264.565] /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 [337.016 242.423 348.972 252.609] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6872 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.124 230.468 355.079 240.654] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 6873 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.597 218.512 375.552 228.699] /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 [360.279 206.557 372.234 216.744] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6875 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.999 193.885 358.954 204.789] /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 [353.086 182.647 365.041 192.834] /Subtype /Link /A << /S /GoTo /D (page.31) >> >> endobj 6877 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.941 170.692 360.877 180.878] /Subtype /Link /A << /S /GoTo /D (page.132) >> >> endobj 6878 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.136 158.737 386.073 168.923] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6879 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [381.191 146.064 398.127 156.968] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6880 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [387.925 134.826 404.862 145.013] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6881 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.75 122.871 459.686 133.058] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6882 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.991 110.199 389.928 121.103] /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 [394.052 98.961 410.989 109.147] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6884 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.991 87.006 389.928 97.192] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6800 0 obj << /D [6798 0 R /XYZ 90 757.935 null] >> endobj 6797 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6887 0 obj << /Length 3221 /Filter /FlateDecode >> stream xÚ¥œ_sÛ6Åßý)ô(Í,±Ä?’è›c+®;Žì•”&nG“ÚJÒÙÄé:δùö½ò‚.9ÒäÁ¶|ˆÃûHä‰ù¬„|fÊY­kf¤žÝ>+gàÓ«3î[À¯ ôûÛ³¿”p3•œm߯8ӂ϶¿Î¯W—Ë·‹ß¶?ÍTÙ°RWЊýœ›Ú~z¶Ü¶M{c-+ÛðÿÏ~ý­œ=À ütV2išÙ_ð}ɸ1³ÏgJHÿý§³ÍÙÚ6Üç>O»ærxòBÄ'/$++}8É7›åz½{±z~~¹»¸½]_î¶ëŸŸ¯6‡¢8*ô¬àœíúëþ+ûø¯~q\Ö¬©g59w'g?~úà¿F§éµE'œhÜܨPO-XÃUdÚ#$”@©Œa\§¡l¹[Å¢jj&&¢hµ9N09æ8ä,†Z3¡’îFÌÏ×篎CQI&ÌT­8 Ã)Æh Ó,޼—å¡9“R%y\¿=Ž„4LÖ“Qtê, /ƒ}³4;‹CÔL‰$ŽÍëׯΪœ_y±pÍT5™K§Îrñ’1.Ø7Ë…°³\JÉ4Ory³àåüv}sym`¢ÑS¡ uJŒ@‰|sP(;€¢kà f˜k`Ò9ŽNU³J5Sétê,/£ƒ}³t;KGkV™ˆÎõÍM;Ÿ–#g`­$«åd*:KÅKƨ`ß,ÂÎR‘œÕMDåÕòÕízQéù/ÇÑ€1™F§ÎÒð’1Ø7Kƒ°³4Jë(0Õíns{óz{}»: ‡2š^OÄÔ9A2‚#òÍá ì‡j$üÔñÚm–aiòâæ¸©GÕ‚•åd(: ÅKÆ `ß,ÂÎB©JØtÄP^Ãäîözµ]®‡<ª <ldL5•G§Îòð’1Ø7˃°³¯!ý,•J1AÙ?¾ûýÓž@—(=I'Ï#ñ‡Df‘`ç,ÂÏ"Q%‹öÀ¯6W»›åêjûãiTDôšN¥“ç©xÍ윥BøY*¼b~çàÊŸOϧ]8¥bì®§òèäy^3Æ;gy~ÀCÁ*¿ïwÖåö¤"š’Õb2$Ï š ‘sågT ««h„|Ý?ŸDW‡[ûT <ÄkFn­‘ság(Åšî’ùoYŠ¿‰ æðû g.3°¡žÃX< 5é`4IRÇÎ)RÓ~†(™ñ{kªX¸ )˜­‚|¤X¯.|Xl¯IW¬b–L•&vîë5´_éºW” 3~‹qùòúm¢g«j•c=ëÔ’'z6nÒ[×Uæ°œë*§¡ý|±ÜÔ¬ô î½›XCÂõ E«[D:uä‰Udܤ+× AC)°2Œœ}ë4´_(·Ñ¬ô*.–7éÎõž^:Ö¹Á½“':7n2×¹°¤«El<¸jÚ-ÔZKÆýûý§\ß4%[ñøÁª $Oîp“‡jU9Êp…Dä<ÊNCû…z+θìrñKºouÉš†·Ò‘j½º@ò¡{¯ÉlßjÖ “Lw®ÓÐ~¡ZSÂ?À¹_p=ÿNô°Ò¢=`¼‡­º@òdã&]óÔ&P–?rNl­†ö 5ƒ¯ðO’pÍ;X‘|þúaXz]²Ò˜ö¸‘Ò½º@òá©ôšÌÍÀöú´×vî—î5´_(]h&ý£©Kûºæ|Á9Ÿosw0|ÌøÌ­j:yòÖ?̬¥d䜸…Y íÊæ°JñÉÞ=çGxUòV<>­º@òäÇMææ'½vë9'F¸ÕÐ~¡Þ’ÃåàøBצ^òŸ¯|¾@–8MÕ¶@CêÉ'Õo23ÖíþÁulÜcà%¤[@Цüƒõj¹¶op‡Õ+ÁoÂÁ#Å{qÑ©‡µÇ æJ×5“lãÒaYã¾E¿à‘€E“§#E Ø: ôéØ¼ÃŒ†•œ·Òd‚º@òÁ¹ô›Ì°Q°æ¶›ÆÈ¹WxÐ~mí]¦¤Wz›q–/a11ÝâµTâ$n.[xÅ n Ê+”#.¾nüÆÑe~†…Û…bÝ=RºWH>,¾×d®ü»‚ÇÎýú½†ôk´ _~÷jqX6×°`œ”àñR"X5–«V†RP ž  ŒÚJQŒÇ׺ºÝ]üx¾ºJ\Ù°o¯ª¦=hlp;uä‰á7™à09¨œ#ÜiH¿¶î.Ô•½^¾´·ú6j0K1É«i¥ ¦‚C½sÕòMTTHÉ+(«¶rT–þó‚ÛÔ3¬^+¦kݶ0R¾WH>¬¿×d@e˜æ&vî#ðÒ¯…€’Pz:,]i¦&²œ– HÅÍe‹†±¡è8VÐnmÑ(“勎^xòy¢nØ"Ùþñ‡ŽUîÔ’'j›ÌV¯`sfbçAõNCúµÕ£W¨Þ½ÞLÜÒÜ…ÕÄ YP“ѯ~“¹ª…]‘6dÔ,hH¿¶j”7[½¹Ø¤6oöµßµ×ÒåuäCû^“™Í›4°#"çþJÕkh?_.­mî.’ÕVÚãsAMFØúMæªmJÆKMF悆ö Õ¢ÜÜ×?ïÓ[U©á䚦ÔëÕ’ý{Mf·I˜Ü¸±s¿^¯¡ýB½(t÷zu½MfÎ\ÓAMfðúMf»·:¶VJ:ØK8 ,žYÓ$”`Ë]€ì¸?ÐtøûQv Ê þóQ3µ ÿ¯ßÀs«Ï«ýãþéÝóþaQ]ο<º¯[Dû¶w?ÜÞ?»o”ûÂÍ¥øA–î'Qrî¾{¿zþåÉýýs³àóëþPÖ0á¾ýý»ûzùåïïö}ŒöOHùDxþÁ³Òu endstream endobj 6886 0 obj << /Type /Page /Contents 6887 0 R /Resources 6885 0 R /MediaBox [0 0 595.276 841.89] /Parent 6731 0 R /Annots [ 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 6957 0 R 6958 0 R 6959 0 R 6960 0 R ] >> endobj 6889 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 708.674 153.81 718.861] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6890 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 684.764 153.81 694.951] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6891 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 660.854 153.81 671.04] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6892 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 636.943 153.81 647.13] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6893 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 613.033 153.81 623.22] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 6894 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.124) >> >> endobj 6895 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.124) >> >> endobj 6896 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.124) >> >> endobj 6897 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.124) >> >> endobj 6898 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.124) >> >> endobj 6899 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 6900 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.124) >> >> endobj 6901 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.124) >> >> endobj 6902 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.124) >> >> endobj 6903 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 373.93 164.321 384.116] /Subtype /Link /A << /S /GoTo /D (page.134) >> >> endobj 6904 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 350.019 164.321 360.206] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6905 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 326.109 164.321 336.296] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6906 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 302.199 164.321 312.385] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6907 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.385 278.288 164.321 288.475] /Subtype /Link /A << /S /GoTo /D (page.133) >> >> endobj 6908 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.134) >> >> endobj 6909 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.394 230.468 164.331 240.654] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6910 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [127.469 218.512 144.406 228.699] /Subtype /Link /A << /S /GoTo /D (page.135) >> >> endobj 6911 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 206.557 160.734 216.744] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6912 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 194.602 150.772 204.789] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6913 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.779 182.647 165.716 192.834] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6914 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.047 170.692 152.984 180.878] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6915 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.885 158.737 166.822 168.923] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6916 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.456 146.064 153.392 156.968] /Subtype /Link /A << /S /GoTo /D (page.141) >> >> endobj 6917 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.103 134.109 186.039 145.013] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6918 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [148.929 122.871 165.865 133.058] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6919 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.605 110.916 153.541 121.103] /Subtype /Link /A << /S /GoTo /D (page.139) >> >> endobj 6920 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [252.49 98.961 269.426 109.147] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6921 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [241.421 87.006 258.358 97.192] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6922 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.015 720.63 444.951 730.816] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6923 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.974 708.674 447.91 718.861] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6924 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.781 696.719 480.717 706.906] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6925 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.984 684.764 431.92 694.951] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6926 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [431.671 672.809 448.608 682.996] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6927 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [469.32 660.854 486.256 671.04] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6928 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [453.579 648.899 470.515 659.085] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6929 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.403 636.943 461.34 647.13] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6930 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.279 624.988 465.215 635.175] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6931 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.987 613.033 430.924 623.22] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6932 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.223 601.078 392.16 611.265] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6933 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.165 589.123 381.101 599.309] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6934 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.192 576.45 371.129 587.354] /Subtype /Link /A << /S /GoTo /D (page.140) >> >> endobj 6935 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.232 565.212 387.168 575.399] /Subtype /Link /A << /S /GoTo /D (page.137) >> >> endobj 6936 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.414 553.257 373.35 563.444] /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 [356.404 541.302 373.34 551.489] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6938 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.051 528.63 405.988 539.534] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 6939 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.169 516.674 433.106 527.578] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6940 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.173 505.437 376.11 515.623] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6941 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 481.526 380.812 491.713] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 6942 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 457.616 380.812 467.803] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6943 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.876 433.706 380.812 443.892] /Subtype /Link /A << /S /GoTo /D (page.138) >> >> endobj 6944 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 409.795 370.292 419.982] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 6945 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 385.885 370.292 396.071] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 6946 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.159) >> >> endobj 6947 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.147) >> >> endobj 6948 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 6949 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 6950 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 6951 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 6952 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 6953 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.147) >> >> endobj 6954 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.148) >> >> endobj 6955 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.148) >> >> endobj 6956 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [346.162 134.826 363.099 145.013] /Subtype /Link /A << /S /GoTo /D (page.142) >> >> endobj 6957 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 122.871 377.764 133.058] /Subtype /Link /A << /S /GoTo /D (page.158) >> >> endobj 6958 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 110.916 375.552 121.103] /Subtype /Link /A << /S /GoTo /D (page.150) >> >> endobj 6959 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 98.961 377.764 109.147] /Subtype /Link /A << /S /GoTo /D (page.159) >> >> endobj 6960 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.503 87.006 405.44 97.192] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6888 0 obj << /D [6886 0 R /XYZ 90 757.935 null] >> endobj 6885 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 6963 0 obj << /Length 3339 /Filter /FlateDecode >> stream xÚ¥\Ùr7}×Wð‘ªrc°w#o²ÄØòh %{œJ¥T^ä%cË3²3Nþ~Ðľ]tÂJ•I‘÷ô9@cé{C²Âú?²Rx5Š)&Vo>àÕ{ýé“b¿ô×Côý㛃üÈt+¤$[ݼÛ5— JV7oYŸ^œl^þzólÅñ„°:Êü9QÓüéÁæÆ‡¶Ä‚É9ð~ù¯Þê xv€SÓê»~Qjõù€Sfß:¸>øÉÇ0Ÿ3ýyíÚaåÅS.ž`ý–ŠÕHÂRì®ô_Ç×OO.o/™Xß¿z”_8Å)MéZí¨ç/Þ[Ä6º‡"xq!yÈe¼°Œ‰g)s&Úa@>/œDH¢{{õ²¢Y÷âs `É<tyiÀ¦`†8ÚB¯€dV®T ‘ôóÉåãëûŠ\Ž$}ƒž^ƒ"xEpÒ(ËÁ¥$eÎ%[ Ìç4O#¢±âû/÷w¥à‰¢ùf2èŽ\‹<¸$OÂ5¤5"&ǘ3ê““9 DyÒµW/îo?׆ò˜´èõ­A¼Ò·cqÕÑLÑ$UÊ\ gƒùœhÉU±æ¯¯ÞU:wT+ï¶à! Kþ4`³9ÂL%´EHæÄ ‚ã±Ú›«ãûÛ×fhŒ¤â¾Io†6è!‚Wfè4d³‹’lJ™‹.6Ï«f ±1écýrÑX–(§¾EYšÑC¯.KqH`Y"“L™+ËÒŒù¼h:êé#êêíí«OŸ*ãZÏ2£G÷ÆõÍ[ý€®Žð( Ñ,k|<å­ ðÒyÍrD’O‰fw¨¨nJ0|£þ¦dF¼º)‰C6Ç·>zŒ4e.t Ìçt ½¼©´¯·‡¯/çn[}¬/_#÷­ûÝ>ÎýÐÕn6&ó¹Kå”ñVº}Æ€t^>ghdI··ÏXß7®AÿŒ1£‡^=cÄ![CÝÍ1såŒa¦ˆÏifÚê)éòÍÕåñÓÚæ[]¦É·è‰6è!‚WD§!›÷7G‚Ñ”¹èhƒùœh¢ÐDÉßß|ýðöáöîááó×÷•}ŠDŒJߢ·Q1è!‚Wv*iÈhIK»õâ>¦ÄÅ|Ùœd¬º‘–’oïîÿ\¹¥õÑœs߬wOôÁ+7u²¹#›ÇDÌ\t¶Á€|N9W)2Æ#\¯ÚO7G'Õe[pâ›ô—í=Dð겇l.ÛñI¤ÌŲm0 ŸW=é5^ÒXõÙåÅ“n~.U}>ÒÛפ£Ú¢‡^ªÎB¶nl*Þƒ¤Ì…jƒù¼j} À8éëÆ3½¯¾÷ÔÄ ‡^yn’†l@”Ô;•2÷µÁÀ|N²ÄzáH:ú긹?ÈéÛô×3zˆàÕÃu²9… DRÞÊÑšÀ\^2ŸV2‘|úòìôú¦¹h¹& ­Þ\´â«¨nÎÌ‚”0·-Ï©fúˆÆI¢ÚlΞ]Õ¶(Mõ­z zˆàáiÈfWc½É”¹n00Ÿ®ç½ùl ßlޝ¾~Tu]‰]›Þ\fÐC¯ÌeiÈæ\¦ôì,Sæb.3ÏË&Q–ô÷ÃÝowo¾Uf3Ž$ã¾Eo63è!‚Wf³4ds6Ó÷Â8¥ÌÅlf00Ÿ­§:&}ýbs¶ÝüxHĺvòÐK"õ­zóÙZpM>ZˆàÍG ñUTG¸yl0·-@|^õ¼ŽswÛÍv{ûxwÐ>¹=¾<{~~HÖ¥£‘Hß¾cE¼´ ÙÚœJ}ŠÌˆs dóH=ÚHC¿9n?>$xýüìh«¸½:Tt}´=:/'>¢§–Iñ~ÚË¢‡^^e²á áЧÌù`10Ÿs…c”ŠóÍùåöPŠueûJ%ÂRÙf±`±ƒ—#! ל LXÌ™‹˜¼^:é&W|ñüììöêòôâf£»¾òˆQ½–(ߺwôÁ+7A²%~Ĉë]Kœ˷Ï@$Jž«ÎúíX¿ÞT¤ëãŸÔçÛ®·ÆðЕ%> ØÒÍ’$´¹l ȼjl–ØTöõóããÍuec£Axd¾UoœôÁ+#= ÙëzG>›3£Ý`@>'œ*ФMI}óõãÛ?ÊÙŒ3¤o‡ìLf~hJµÈ…Rº)5¢&\5¥Æ¼M©“*'4Jß«ß^½®H¥z'H=´§Õ ‡^›†4[æ³çj%½¼'Ì…ZƒùœZ1Ñ}ÇþïÝÃ]å)ƒÞTL’xpG¯E¼äÏB½eïêMÈ„EÊœëµOa}ÿs½ PYFwW(FŒÜc2z¶8gчª!sî…²9Ç2£‡^5$Ù:¨h±BïKæŠ!3ä› ¡Xïq§2ç[z"þ‚'xBJ-÷$ÀÛžXL«ÈÃy37=ø´'»ŒUš: )á½|!“^¥¦Å¾Dð¦/Óñ%anùñ;Œz2¦S%g¼× D$A¤ûX>˜àmS,¦gJÌÜ4à›Má Ñô‰¼K)ï7T؈¨\îJ€·]±˜Æ‘Ø»37]øfWôvŒ¥Ï®}Òy?[CL,·%ÀÛ¶XLo°ÄÌM[¾ÙLSc''½×Ý4)ÄûH?Ý´ÇB:kQL›šC˜Ð ˜~}Y8È´3¼†¥>Б²HÚ&¶ƒkrù°bROõ_VOìÀP‰o°q«±‰îj"€zbɬ%E=±Ë{ïåÉ’\oI»26 ×1¤]ƒëý˜œQùk’ÞÏŽ%U«Áv!i°‘2÷Ž´«Vƒ%™ó$ª-Sæû³¨Ð38^æ!§xï PèÌøœ;e¡§M«ïçÌ¢òÈà P®˜‡l,VÞ <28ñ9gÊòH›zßË™eµ„Þ¨¶/Ù™a ZBï Èg©ÔÎéùýlYTvlÊàòõÛÛ”Ý[ >gKYvçRøûY³¨<-X”‹å!{#(O Ö@|Κ²<ͦú÷sfQ9Wp(°ÊCvf¨ž+8ñ9g¢2ª¢`/s–U?ys j¤Ráõ ­l^¢L.+p`0-Ÿl‰çŸäªôîv‡æ:ý©ê֤ĜÍÿÞ¯´í~DnÞ ÿ†œDjä¶@CÌ¿hev¤Oîîï^}»{{8ÿ_ë/÷æõf>kü~gþ¸|óÍ¼áæ…¨0ýaóÅ„˜wï©Xy0Ìk©>Ë>¶MÑ„¨yûúOózòå?ßßÝç&ο#g/0²çÿºÑ^ endstream endobj 6962 0 obj << /Type /Page /Contents 6963 0 R /Resources 6961 0 R /MediaBox [0 0 595.276 841.89] /Parent 6731 0 R /Annots [ 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 7036 0 R 7037 0 R 7038 0 R 7039 0 R 7040 0 R ] >> endobj 6965 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.003 720.63 217.94 730.816] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6966 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.486 708.674 214.423 718.861] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6967 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.611 696.719 210.547 706.906] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6968 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [181.427 684.764 198.363 694.951] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6969 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.928 672.809 213.865 682.996] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6970 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [178.099 660.854 195.036 671.04] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6971 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.698 648.899 216.635 659.085] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6972 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.246 636.943 217.182 647.13] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6973 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.474 624.988 188.41 635.175] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 6974 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.246 613.033 217.182 623.22] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6975 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [201.91 601.078 218.846 611.265] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6976 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.007 589.123 224.943 599.309] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6977 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.814 576.45 217.75 587.354] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6978 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [196.032 565.212 212.968 575.399] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6979 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.744 553.257 217.681 563.444] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 6980 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.063 541.302 209.999 551.489] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6981 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.592 529.347 215.529 539.534] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6982 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [175.329 516.674 192.266 527.578] /Subtype /Link /A << /S /GoTo /D (page.162) >> >> endobj 6983 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.448 504.719 219.384 515.623] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6984 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.545 493.481 225.481 503.668] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6985 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.651 481.526 226.587 491.713] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6986 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.879 469.571 197.815 479.758] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 6987 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.16 456.899 216.096 467.803] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6988 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [198.592 445.661 215.529 455.847] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 6989 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [194.886 433.706 211.823 443.892] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6990 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.546 421.75 230.482 431.937] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6991 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [183.638 409.078 200.575 419.982] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 6992 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [203.424 397.84 220.361 408.027] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6993 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [208.007 385.885 224.943 396.071] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 6994 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.72 373.93 266.657 384.116] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6995 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.854 351.359 145.791 360.206] /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 [225.073 338.064 242.009 348.251] /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 [254.492 326.109 271.429 336.296] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6998 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.621 314.154 234.557 324.34] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 6999 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.076 302.199 241.013 312.385] /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 [142.134 290.243 159.071 300.43] /Subtype /Link /A << /S /GoTo /D (page.158) >> >> endobj 7001 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.134 277.571 159.071 288.475] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 7002 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.576 266.333 158.513 276.52] /Subtype /Link /A << /S /GoTo /D (page.157) >> >> endobj 7003 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.865 254.378 166.802 264.565] /Subtype /Link /A << /S /GoTo /D (page.159) >> >> endobj 7004 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 230.468 166.543 240.654] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 7005 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 206.557 166.543 216.744] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7006 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 182.647 166.543 192.834] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7007 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 158.737 166.543 168.923] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7008 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 134.826 166.543 145.013] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7009 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 110.916 166.543 121.103] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7010 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 87.006 166.543 97.192] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 7011 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 708.674 383.024 718.861] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7012 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 684.764 383.024 694.951] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7013 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 660.854 383.024 671.04] /Subtype /Link /A << /S /GoTo /D (page.162) >> >> endobj 7014 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 636.943 383.024 647.13] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7015 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 613.033 383.024 623.22] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7016 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 589.123 383.024 599.309] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7017 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 565.212 383.024 575.399] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 7018 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 541.302 383.024 551.489] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7019 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 517.392 383.024 527.578] /Subtype /Link /A << /S /GoTo /D (page.147) >> >> endobj 7020 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 493.481 383.024 503.668] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7021 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 469.571 383.024 479.758] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7022 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 445.661 383.024 455.847] /Subtype /Link /A << /S /GoTo /D (page.145) >> >> endobj 7023 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 421.75 383.024 431.937] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7024 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 397.84 383.024 408.027] /Subtype /Link /A << /S /GoTo /D (page.146) >> >> endobj 7025 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 373.93 383.024 384.116] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7026 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 350.019 383.024 360.206] /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 326.109 383.024 336.296] /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 302.199 383.024 312.385] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7029 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 278.288 383.024 288.475] /Subtype /Link /A << /S /GoTo /D (page.148) >> >> endobj 7030 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 254.378 383.024 264.565] /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 230.468 383.024 240.654] /Subtype /Link /A << /S /GoTo /D (page.158) >> >> endobj 7032 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 7033 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 182.647 370.292 192.834] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 7034 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 158.737 370.292 168.923] /Subtype /Link /A << /S /GoTo /D (page.122) >> >> endobj 7035 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.552 146.781 360.488 156.968] /Subtype /Link /A << /S /GoTo /D (page.162) >> >> endobj 7036 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.355 134.826 370.292 145.013] /Subtype /Link /A << /S /GoTo /D (page.163) >> >> endobj 7037 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.211 122.871 366.147 133.058] /Subtype /Link /A << /S /GoTo /D (page.163) >> >> endobj 7038 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.248 110.916 356.185 121.103] /Subtype /Link /A << /S /GoTo /D (page.163) >> >> endobj 7039 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [349.211 98.961 366.147 109.147] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 7040 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.24 86.662 377.176 97.192] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 6964 0 obj << /D [6962 0 R /XYZ 90 757.935 null] >> endobj 6961 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7043 0 obj << /Length 4004 /Filter /FlateDecode >> stream xÚ¥\Ûnä6}÷WøÑF\ñ*)¹b‚E6™ñnH£§Ýãxa·'mÏíï·(²$R*–ˆ æÁût"Y$KU–ç-ü“çC{ÞÙN ÚžïÎÚó[øég2þ¶_7É￾:ûÇ÷>%§Ï¯ÞŽwRX%ϯn~»xùÓ·ßý÷ò«ÏMÛ‹Ö:°â.‡Áÿô컫Ét$¶ÚyÃýöG{~ðãY+ôП„ï[<83JÇïïÏ^Ÿý2Ù?×ðsêÙ­Ôë‡Wj~xÙ·ʞwJ‹ÖÙñI_ÿòêÒµWêåOÿy±|fé”0¶Ÿ>0²ú_œn#âUÂè&¯Ÿaarô–3+殦U9óB/bx>Ô,¥aÐþ ƒöýËŸ¾ûv­·“bh5‚7äFp3£×ì¹Á’ØÞ‰ÞtíRk„°dQª!mpíûãÍá÷¶UÇÃÍZ­5ãCü†Üˆnøú&K‚üÚèœy©8bX>XT®ï„‰>îŸî>«QO4à¬!>üVü¹öîD߻Πe6]ÀM‚^{ 78:@·k×+ÑK“ó.1,w€ÓB ‰®§ÓÃÓíÚ®ÂV ­M­#ftÑ2:Bé¢#RÞ¢#:ï=ÝMž8îÌdxwzX;Á8aLîDµé…ˆnøÚ “žÝóP°¬3╆¥ónV7»áÝÓ—-‰V +«gÂŒ.΄ 3ÁgBÊ[œ ¸À°EÛľh1ØnÀTé‚]rB6\ñ–\ÀÑy¸N8˜w8ÛÕ—Ík­pCµ ftÑ\Ð]ò]ÀÐy-:º k<¡¥èújOÌè¢'"d#2f¼EO0tÞ ¶W³'À _¶ ZÿEÕú`F}!Á]Ñ)oÑ øÀ V ²›|p÷'3 þ¼9]Z{Ay¶ã²3½ã›®ˆè&‡¦Üäè 3¬MVX8fÌ«CSÀ°|Þm;;ãtw|~Ën–@¹Ãµ£!ã¿ÚMwDt“À‰Bn2œ!íú¬nà eμº! ËçÝaàò6¸mµÌôjÂoºIàÄù 7Y:1C¨k•Ë™W+!`x¾xI0ÚÁñZæ’_P Ðê½5ÛºIàÄlÏM–†ö/‡¹Œy5Û†çCÁ ®&ýbŒ¯ß\ªöâ=!¼k…ºéS[WÁ€n8qÌM–„÷~ Ëœyu ž…K%”Žþõ›×?¿zùÓÕ÷×?_½Z‹ Ü£‡é¢#ºIàë‡X˜,ˆVð¬­Ô9óB4bx>ݶBuËÑ~:<¬¶Ÿ?±ÁºIàDËMG±°+gÌ«‘–"˜î{¡•¤g7³×ovÝ9¡+R?1°'ðb`GÌF`ϘKãónqFbêÿ­N[ŸÁª÷È /{$b¶<’2=ÂðyÀ~c×Ëâo9DÁt7õ™áe‡DÌ–CRæ¢C>ïéÄ|U$³ J#rCf73z­27詵Z¹áºA$e]JŒ–+DÝábfwO„AØIzÔˆÛRÐM'dæ&G럔V9ñJhÀðtQ©”p1 JïïŽÄuÆ Ýtë>ÐM'.4¹ÉQìúBcçÐŒx)6bx:Û·¢‹i¥ý 9ªZÊ ¶=ªÝ$prTS“¡0bª3911ªÃÓ¡PØS»˜ÕÚߨŒ”¹5¨H>ÉAÍMŽZ×ÑÈJ»œx5¨ÃÓ¡VëÆ+í¨õp_ Hˆ«ŒH ¼’RjSŒIq)(±t¨ÜÒǸ÷ [òÊ5´Ã„ܾryt“ÀÉ+WjrÕºè÷̉W7®€áéP«Vã» QëãýîÓ‹¢{#rk££g81ƒs“­1I¯fpÌv³t¨U‹cö´ßS¹v#ºÁLЭ è&››,l8P¶Ë‰W0<Šm{1Ä”æþts8ÑûM7+¶O=£éݦ˘©Qìš-µÙø•e‹BåЉ6&T÷§Ççƒ{ø("·c°G7 œŒÁ©ÉÒÆ Ö›œ˜ˆÁÃÓ¡V¸b·=ê»»O…CĬ9C„›{Û3ƒÚgÌÔf £rZjPÚ`C¡Rá ~¸TNMäÀÚNOèíõè&“›š,o®>]”;æX:Ôë¤1å¼ú\X­ƒê&äöÈzt“ÀÉ¡MM–,!3^bhýQ”%C¥f*f¼÷ϟߊ"+7œ^ÜpRríJNF\ÚpX:Ôª;¡bî|ÿþÍáí¥l/vû™¿W­™>°¿÷è&“ùûÔäxv’ÔmYº.'^%4†§CÉ VyÌáïßï豿6!²"û­ ÓÑ81Y^´~#Έ©hìwt–µJ=Þ‰<ÝÍîù°ó‰­·/¨ä9á·Ý$pâP‘›,eMNLäç=†§CÅ­zè&Åož^÷‚ˆÝVv…NªMM–ÕêֿĄZáé¢Ú~€¥òt‡¿Þ߉íÖÀ¦Ý:„ni àfFR3ƒ%¥ðCÆš ›ÿ_òË•748Á²£áf`¤…q‡Ózw‚Ñ®²&ÑlÜÒ$}ù‹pmâJòÃÓ¡Ò¹(î÷¶Õ»[B«O§UõxæJäÇ17k¡N(ˆLL9BX®(3­…»ß="a}ØÊ*¼f‹âéíHûZ*É—à!†gC™Sˆ|÷x¿Þzµí……:#¶™ÀkâÌ}ÎЮÆõ)åRcDpD¨0©ép¢"$šñmn]=!¢Ù ¿¥ÉÂp:@Áo¹‚BÄðt(v®*¤2¨~Ž m°íIëÁÍŒ&'mb°‚ä˜oIY‰9;¦d8.Ô˜Ô&Þ©ðcà:QYÁl‘âÂ`iešñÒÆ•D"†gC™I]$Ȥç­=œHº5oºIàļÍM–æ­OÚœx5o†§C±Iåýã‘DpyòïRëÊ<ÍÖ].MÂQ(ݳežˆáéPmRëùpM¼ÐÖ¿?¶pk`ºIàÄÀæ&ÇÕkk¸v9ñj`†§C©Iù¨—J½˜H«jWgz¦šti² ¶”ekW#„'‹ZÓúUÐJ&ÆuwEø0b7´Ft“À×ô “£Öõñ¨÷K6'^ŠžÕ&U± –LkçoaCeI.¢Ù"٥ɂZØ+ÜĹš\Äðt¨6)̵d¾ØïÔÂ;b·Ôt“À µ¹É’Z@ÁM #^© žÕ&å¾^-•4Ï%p`­«5F4[ý»4Y^µÃÐ³ÅÆˆáéPmRqìÕRiãq Àb+Ævðc;Ãé±ML–Ôʺœ˜[ë6èPmRÀìÕ–rÇ>„v½«¬ F4[Ó¼4YßÎ l 5bx:TœÔQƒb2{ìʯEDìv¤òè&“‘*5YŽT²591©<†§CµIq6¨%3ÈS­ª Ÿã2S«½4YÛ—™Òð9.stQmZjÉ„*Þ [©ü–ŸÀéH•˜,¯ÝnG1±v=†§CµI­ùÃu)ýbÑ:SYëŽh¶ö|i²tx”âKÝÃӡܤÞýáú¸ût÷D/\_P± w,-ŸáôÂML–§²„aFL-\ßåÀÒ¡Ú¤rþáúÝîææŽºÝvNÀ§ë*÷#˜-¤_,ˆí½bËö󡨤pÄî‹W º¢ýé ÄÑ/MòW ®fºƒ°t(5)™©Ä¶J ]WY®h¶|~i²$Pš¯ÖG O‡R“"yúáE)KRW ?åK¸‚ù¥É’Ô°™úü9òst(5)¸~Þ½yQJH×ÕåO¹i®N~i²p¤p€²[–žµ&ñןߔ÷œªrüyÏaÊã—&KZãžÃTãÏ{Gµ¦%ùÿ»)½²ô™£L!|;åÑM'“Q©IúÕ–O4µ°3b"å1< NêúA0õÆR;_éÙWv š­ò_š,‰m…/Efz "„'C©s_Aá0á_„ÉÛØƒ›MÆáÄ ýÞ݇XÝËŒ•ˆÂÂr¡Ê¤-áHm7ÆÂ†ï*;"Ív(,MÒÕ^îâ²؆Äðt¨têŠdþ)zvnM[t1‚‰I›š+ˆ„“ž6&¥\ÍØ€àˆP`ÒPq¤¶Óøb´®—czÕÊõV,MRâq#âZ9¦¥C¥sS¥Ç2œ¹ªú9¦Óc±0XÎ1ÿË´s`†˜cB‘IKÅ‘<2ï)]ÙÎh¶¿bi’þKøV–kç˜^î²tQjÚPq¤O á-u]3ÇôN›ë®Xš,Hï|¸fŽéåK‡R“– Ø=oäñÈIUÙÐh¶Ãbi²$v¶³lCbx:›ôT¯¨qaÕµtLK•ë±Xš,¼hK‘ëèÀÕÊ’¡Ö¤«‚º¡Bøî†Ú~D³ K“…ó‚”åû9ÃӡФ¥‚<0´cáA]3¢ÙÉÒÁ—hvl3bx:šôSÛ©/Á‘•ˆf[+–&KBcäb:9æÈѡФ—â´»9<}~¢ß§;[ÙÊh¶·bi²”ü»r8ûs­ˆáéPmÒPq:<=¿=ýE„àNÀ•¨®™#‚ÙöŠ…ÁR%€¬f›9óE©i?…—úq¬˜/©äé·íjÛ:ÍöY,M– &Ôøkë@ O‡ª“æŠ'2ÉÄÕvu šm´Xš,•6ù£dû:ÃÓ¡Ò¤­âéÝ’:ˆÖ6Wµt ší±Xš,8Ê×J3-ˆáéPjÒUᥖbT¯teS¢Ù>‹¥ÉrŒò¯*¹®Äðt¨6é¬x©tžMëÊÆD³K“ŒÚÁ±ˆáéPmÒTáÕ>öÅCq]OÇt(æš,–&¹C±a{:ÃÓ¡Ú¤­‚¾Öia]mG¢Ù‹¥ÉÒš o<¸ŽŽéÕ K‡J“v ÿf¹œB«ëå˜rh\sÅÒd©&1$g¸^Ž)ÇÃÒ¡Ö¤™âÃ¥´‡ûÝñöžÌŽZ¿STõs šm°Xš,­Úvìaàú9ÃÓEÅIOEüX ÊRUöt ˜m¢È –cTÛs=p ¸¶‹¾'Ò« iâ/ûcÎãßšö—G9¤jÚ‰¢þKam¸¼ýp8N»çÃÍ%\ÄÚ‹Çcøzu9¨‹÷‡ðŸíŸÃ7&|‘ÃW­úJ·áª•2|÷Öê<žÂ~ýæõ?/åÅ˯ãGE/TøöÍçðõÛÇOŸoÇ¥ýŸ›Ž˜¸çÿåï¯ endstream endobj 7042 0 obj << /Type /Page /Contents 7043 0 R /Resources 7041 0 R /MediaBox [0 0 595.276 841.89] /Parent 6731 0 R /Annots [ 7045 0 R 7046 0 R 7047 0 R 7048 0 R 7049 0 R 7050 0 R 7051 0 R 7052 0 R 7053 0 R 7054 0 R 7055 0 R 7056 0 R 7057 0 R 7058 0 R 7059 0 R 7060 0 R 7061 0 R 7062 0 R 7063 0 R 7064 0 R 7065 0 R 7066 0 R 7067 0 R 7068 0 R 7069 0 R 7070 0 R 7071 0 R 7072 0 R 7073 0 R 7074 0 R 7075 0 R 7076 0 R 7077 0 R 7078 0 R 7079 0 R 7080 0 R 7081 0 R 7082 0 R 7083 0 R 7084 0 R 7085 0 R 7086 0 R 7087 0 R 7088 0 R 7089 0 R 7090 0 R 7091 0 R 7092 0 R 7093 0 R 7094 0 R 7095 0 R 7096 0 R 7097 0 R 7098 0 R 7099 0 R 7100 0 R 7101 0 R 7102 0 R 7103 0 R 7104 0 R 7105 0 R 7106 0 R 7107 0 R 7108 0 R 7109 0 R 7110 0 R 7111 0 R 7112 0 R 7113 0 R 7114 0 R 7115 0 R 7116 0 R 7117 0 R 7118 0 R 7119 0 R 7120 0 R 7121 0 R 7122 0 R 7123 0 R 7124 0 R 7125 0 R 7126 0 R 7127 0 R 7128 0 R 7129 0 R 7130 0 R 7131 0 R 7132 0 R 7133 0 R 7134 0 R 7135 0 R 7136 0 R 7137 0 R 7138 0 R 7139 0 R ] >> endobj 7045 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [161.462 720.286 178.398 730.816] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 7046 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.906 708.674 187.843 718.861] /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 [153.203 696.719 170.139 706.906] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 7048 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.130) >> >> endobj 7049 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 7050 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 7051 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.124) >> >> endobj 7052 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 577.168 153.81 587.354] /Subtype /Link /A << /S /GoTo /D (page.124) >> >> endobj 7053 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 553.257 153.81 563.444] /Subtype /Link /A << /S /GoTo /D (page.128) >> >> endobj 7054 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 529.347 153.81 539.534] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7055 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 505.437 153.81 515.623] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 7056 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.606 481.526 166.543 491.713] /Subtype /Link /A << /S /GoTo /D (page.149) >> >> endobj 7057 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 456.899 175.947 467.803] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7058 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.085 444.943 156.022 455.847] /Subtype /Link /A << /S /GoTo /D (page.164) >> >> endobj 7059 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.539 432.988 168.475 443.892] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7060 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.601 421.033 186.537 431.937] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7061 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [193.073 409.795 210.009 419.982] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7062 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [167.588 397.123 184.525 408.027] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7063 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 373.212 175.947 384.116] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7064 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 349.302 175.947 360.206] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7065 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [159.011 325.392 175.947 336.296] /Subtype /Link /A << /S /GoTo /D (page.165) >> >> endobj 7066 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [125.526 313.437 137.482 324.34] /Subtype /Link /A << /S /GoTo /D (page.32) >> >> endobj 7067 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.873 302.199 135.828 312.385] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 7068 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.393 290.243 146.348 300.43] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7069 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [123.315 278.288 135.27 288.475] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7070 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.277 266.333 145.233 276.52] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7071 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [125.527 254.378 137.482 264.565] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7072 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [139.913 242.423 151.868 252.609] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7073 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.489 230.468 147.444 240.654] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7074 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 218.512 155.753 228.699] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 7075 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.373 206.557 146.329 216.744] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7076 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.825 194.602 145.781 204.789] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7077 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.383 181.93 146.338 192.834] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7078 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.576 170.692 145.531 180.878] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7079 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.931 158.019 146.886 168.923] /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 [135.489 146.064 147.444 156.968] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7081 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [149.208 134.826 161.163 145.013] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7082 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.835 122.871 145.79 133.058] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7083 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.695 110.199 156.65 121.103] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7084 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.346 98.961 156.301 109.147] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7085 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.01 86.288 157.965 97.192] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7086 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [341.45 720.63 353.405 730.816] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7087 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.335 707.957 357.291 718.861] /Subtype /Link /A << /S /GoTo /D (page.34) >> >> endobj 7088 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.354 696.719 352.309 706.906] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7089 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.509 684.047 369.465 694.951] /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 [353.086 672.092 365.041 682.996] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7091 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [340.912 660.854 352.867 671.04] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7092 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.124 648.181 355.079 659.085] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7093 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.856 636.226 367.811 647.13] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7094 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 624.271 372.234 635.175] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7095 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.528 613.033 364.484 623.22] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7096 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 601.078 374.446 611.265] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7097 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.126 589.123 381.081 599.309] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7098 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.703 577.168 376.658 587.354] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7099 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.587 565.212 375.542 575.399] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.039 553.257 374.994 563.444] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.597 540.585 375.552 551.489] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.79 529.347 374.745 539.534] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.145 516.674 376.1 527.578] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.703 504.719 376.658 515.623] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [363.049 493.481 375.004 503.668] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7106 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.068 480.809 370.023 491.713] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7107 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [364.155 469.571 376.11 479.758] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7108 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [375.223 456.899 387.178 467.803] /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 [352.528 444.943 364.484 455.847] /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 [351.98 432.988 363.936 443.892] /Subtype /Link /A << /S /GoTo /D (page.43) >> >> endobj 7111 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.086 421.033 365.042 431.937] /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 [355.298 409.795 367.253 419.982] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7113 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.068 397.84 370.023 408.027] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7114 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.08 385.168 372.035 396.071] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7115 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.731 373.212 371.686 384.116] /Subtype /Link /A << /S /GoTo /D (page.39) >> >> endobj 7116 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.422 361.975 363.378 372.161] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7117 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.23 349.302 356.185 360.206] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.385 337.347 373.34 348.251] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [345.336 325.392 357.291 336.296] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7120 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 313.437 374.446 324.34] /Subtype /Link /A << /S /GoTo /D (page.37) >> >> endobj 7121 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.547 302.199 359.502 312.385] /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 [350.317 290.243 362.272 300.43] /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 [358.616 277.571 370.571 288.475] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7124 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.491 265.616 374.446 276.52] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7125 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.796 253.661 351.751 264.565] /Subtype /Link /A << /S /GoTo /D (page.35) >> >> endobj 7126 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [339.248 241.706 351.203 252.609] /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 [340.354 229.75 352.309 240.654] /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 [360.269 217.795 372.224 228.699] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [356.394 205.84 368.349 216.744] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7130 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.076 194.602 373.031 204.789] /Subtype /Link /A << /S /GoTo /D (page.36) >> >> endobj 7131 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.672 181.93 355.627 192.834] /Subtype /Link /A << /S /GoTo /D (page.42) >> >> endobj 7132 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.095 169.975 360.05 180.878] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7133 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.827 158.019 372.782 168.923] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7134 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.837 146.064 372.792 156.968] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7135 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.615 134.109 370.57 145.013] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7136 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [342.566 122.871 354.521 133.058] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7137 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.422 110.199 363.378 121.103] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7138 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.572 98.244 371.527 109.147] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7139 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.13 86.288 372.085 97.192] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7044 0 obj << /D [7042 0 R /XYZ 90 757.935 null] >> endobj 7041 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7142 0 obj << /Length 3746 /Filter /FlateDecode >> stream xÚ¥\[oÜ6}÷¯ð£ T\^DJê›íLÜií±×3Þ¦(ŠA.N q²Ž³m÷×ïGñ"R$?qmh|9úΜË(êÐìÂìp ‡ìÈ äáÛOôðüôü€Ùß6ðë&øýéîà/\E%wïÇË#’³ÃÝ»_Ö›«WÇ¿í~<͸ çÕLè¢2z Xу·èB§= š‘{¾½y’í ÉÀºJ tÉ1Ý@–,ˆxK`t`AÛ øÎXðóÙv{{º?[]¬¶»õÉÅÓÌè8¡´ÚŒ ]4ÃBŒ¼hFÈ[4¡Óf( O^±·§«—Ç]{trÜÒ£³Uꉪð¤…'ºAÕz2¡‹žXÈ’'!oÑ„N{"a- ÆÈsfLX‹ÖW;1¡‹NXÈ’!oÑ „N;Á8á‚…½ãâä˜1v´[ïn_¬žf¥„wÕ†Lè¢!²dHÈ[4¡CDßÁcC®6ç3*ƉèUûÚŒ]2ÃÄxKf`tÚ Õ’6òb{½:Ûݾ~ƒ Œßß=Ky”3BÒqå.hK<Ø.m+tÀ3ûJqÉÑ ™.¾•y]Ìœì- Ê^ðÕMf<|ümt³0uè¥V7è&€gš=.9jU*ÝïQ¤ã]Ìœì Îg·˜xOl¼}ýöó×wÙOm¹ÜÅ5º àÙ>–4bû\'—BÆÌ™N®18Ÿ«zÒÙGú×_?ÞçÄÂRTt¹$Ö ›ž—,Š¥¤ïYÌœˆ5œÏ‰•jþ£ØÇ×÷<£¶e¤U‡.ítÀ3;ˆqI£6³{¢àVÄbæD­Áà|NmÛ’ÞÎbZm®i¡\?!—šÖ ›žiÚ¸dQ,x‡˜9k08Ÿ+8ì.IaÌ }Ì—´tÀ3Zã’Fk:ÃR13'”Áà|N+§d°;/0dórÁ³nh=v©tÀ3ý8.YµÃ¸ƒ1'Mk08Ÿ“K{2ØÝŸÂ ÅÆ½B\¾÷htÀ³÷ž°d±i¡·Ë>fÎÜ{4ç³ZÙÐj·’ Cž…áÉß—´tÀ3Zã’¥vmá×TÅÌ™÷rƒó9­½$ÔîeÁ’sw³>ß›%çE*[oxÐÎ_³ Û¢›ž~ŒYÉR=L>,fžË¶”–R¬ƒ Ãn’Í# ÌÒŠ ¦ÇŽöã[DÖñŠ—–Ýðì[˰dÉ¥ˆ’‘¼’†yf?ãròÃF¢ÿåíæl›ªn9éÛ¡2âÐhFc^Òhof5Ý€gBåóê}4#Ѿ†èw"ìh_l}ݬ¯Š‹8,’âˆË[¿'jàH^Ä!&¯>$ú7·—ûKP{q<ð£Ýúúb½ºÉx ïIÒ—ZrÁ ›žñ!.YrBïÎÃÌ1'±6ƒAù¼SX%1Cÿ`¿½;Vg©p¡€ŠUáÆ-³‚¥ÁÐõà“Ââ3‚‘yùA†Æë?»ÚlWgûÓõ¤_]gæOvýtõ’xƒnxF}\²(_?²˜9Ño0(Ÿ7 Héx^è·€'›ó‹õæl6Wש ú>­ûbUrÈ¡Ñ,ϼda´0È©hvÈaP>ïB ò.èûÀn ·Â3Ý 6»Õ«]êA¯à¡¨õ<°è&€§ÌJçD7>fNfEƒAù¼AXÉ{p­§Á“øzßênqfdfD©C7ª2BåÐh¨i^²8"Z÷;,Ce!(›w!ÈQy¶·gg«mfàz¦iýE ª-º à©êYÉÒhajƒ'ψy.ÛbP>§; hyÝ·s+¸ØŸÞ˜d4þO«Ì0è(,¹jsc&¹æ%KͯwC“cƒòy#‚øXÆ; VzNÌŒI:ýal¥Q`ÐMÏŒ‚¸dqPÒQ3'ÃÀ`P>oCV lØž¼\íwÐ@~î¾È ÛÊìœC£i¶yÉ¢~ý±šžs”Ïë#tn_!}&„5Fß+_x&´è&€§aV²ð˜,`™Ó‹˜xþHh 8›„òæ)ßåžG™ªLZ0Õ›,쑈^ÀòO: NçDÇñÀñÁ?#V.'ð’ZƒnxFn\²ÔÄ=ƒœÅ̉^ƒÁùœÞ uøóÙvØûÓÕÉe:”™"´6÷hÁhqVÐ(NB -ˆ  ¹G‡Aé¼â ü8)^gænÚ¸cú [tÀSɳ’%Í Cô]Ì<×l1(ŸÓ+Í™Û6,  ‘ºh§C£aËyÉÒú…Á2§çh¸ÓaP>¯9NxÍg?œÜœ¯ò˶¶õ×T,ÛôVÏ/Û‚’¥¦†9‰õ}ÌœY¶i Êçe±ÑIöÕí&ÓØ?ÃP]uh4L:/Yjl¡ÌÆhxÕaP>¯:H°ºiÛæ5ÓÙ{èÇÇ)wÍÂìmÑMO?Ƭdaön™Ÿ¾"æ¤ ÎçdyØ™ìýÝý·O™&‡9*Õ%sÍÊÎKŸO(\¡Ðl®Ã |^{Ðõýbµ9ßý‘ݯ Ý5K² º àÙqÉâø†Î ³sÄœÈ6”ÏË‚¿“ìÛËõf·ÊÜÃôV¬pëòÇ&‚ç%KÂe;¾ÙÁȃòyáq Ù¿BÏ7cö6³CßÁJHøK—vè º à™ú¸d©·+-ÙÅÌsõƒòyõA¼9PŸÛ‚`:«*Öfžç%KM®_Â)4bm!(›“<‹Y[ÉW™vf’HÆýK’ º àÉqÉâê”ÂÃ¨Š™“™Á |^tÜö¢7»_®sªÍ °.=î׋Xž{^²xûnaIÇÐü¸Ã |^u"7¢¯×¯Vå¦6WÔ¶´G—zúYŶÚb3—É¼Þ ”> ¾8Ù¬öz“]¿_Él%Á1«KÈ;4šYŸ—,uòN¿>VhFÞaP>/? ÊñÛ«‹õ L¼ã æÊå]4m<8»‡6•+ʆ9 !gfÿL#&/9ˆÞ‡¢oÜIš«Ì½[’VÔph4˜?/Yêí’Â4ÀЃƒòyõÓi/~·º¼^9ù·úB¾Ï«Á]¾ÜãÛLàlŸÊ!½]‡ùCÒLg׌ËKÎLÚ×—¹ùœRUvphôðÁ¼dñÆ 2zô¬ƒ… lNò켃y*yüûË]f'  š¤îЃC£‡æ%KÏbrL ‡çsªƒs^uaÿp D1YyúÁ¡ÑÓó’FuŸª–ãûìôƒÃà|NupÁwï™×‚ð¿ì-œÓqg¤î8„C£Çæ%‹wq9n¤`Ç!åóêƒ ®Í3{ãp›Ð!÷ªŒžO˜,¼½$ š;á08SœHÐjî3[㜠óc ÈÖ¸A£æ%‹o?ô>¨@D8 Îç䇬ÜÜ{V¢òP„C£‡æ%‹Í óÜС‡"ç³™ÇðTBô*` ŠªÚÔ¬€;d§Û¬ê@C£ÿyɽL?d)Ý ƒóY[ÂPø¾à®Ôeð½+X&~^rÁ,ƒï]Aùœ+qß¿QH]QÕ®TÅð'WXü¼dá~à]Abø“+Ÿs%ÈâÏÞ9<§»Tåñ'c|ü¼äRwAòø“1Ÿ3&åÇo%žãKU$ò‰ÈÏK.u$’?ù‚ñ9_2¹üäïLüß#©*žï}ÁâðqÁâKi£¸χ´›qÒ÷Ù>h™Ù'zÚŸvÿò¤^´±!üÃ“Š ]ëþðÍ+[³`:¿»¿{xýx÷îÖ>ôèó½ùw§Ó<ßîÌ7WoÍ­ù‡ ßSþ½ æ;N3_½?æòèóƒùº·ÞÃXŸÚKIO¸ùòÍßæßŸÿúûÃÝ}šäîöü…‰î endstream endobj 7141 0 obj << /Type /Page /Contents 7142 0 R /Resources 7140 0 R /MediaBox [0 0 595.276 841.89] /Parent 7226 0 R /Annots [ 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 7224 0 R 7225 0 R ] >> endobj 7144 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.994 720.63 148.949 730.816] /Subtype /Link /A << /S /GoTo /D (page.38) >> >> endobj 7145 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.981 708.674 162.936 718.861] /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 [128.854 696.719 140.809 706.906] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7147 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.336 684.764 156.291 694.951] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 660.854 153.81 671.04] /Subtype /Link /A << /S /GoTo /D (page.127) >> >> endobj 7149 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 636.943 153.81 647.13] /Subtype /Link /A << /S /GoTo /D (page.123) >> >> endobj 7150 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.874 613.033 153.81 623.22] /Subtype /Link /A << /S /GoTo /D (page.129) >> >> endobj 7151 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.123) >> >> endobj 7152 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.127) >> >> endobj 7153 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.123) >> >> endobj 7154 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.131) >> >> endobj 7155 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 7156 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.122) >> >> endobj 7157 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.122) >> >> endobj 7158 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.122) >> >> endobj 7159 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.122) >> >> endobj 7160 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.122) >> >> endobj 7161 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.122) >> >> endobj 7162 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.122) >> >> endobj 7163 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.157) >> >> endobj 7164 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.787 289.526 147.723 300.43] /Subtype /Link /A << /S /GoTo /D (page.166) >> >> endobj 7165 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [136.595 278.288 153.532 288.475] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 7166 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.941 266.333 151.878 276.52] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 7167 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.47 254.378 157.407 264.565] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 7168 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.489 242.423 152.426 252.609] /Subtype /Link /A << /S /GoTo /D (page.169) >> >> endobj 7169 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.172 230.468 149.108 240.654] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7170 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.798 218.512 160.734 228.699] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 7171 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.518 206.557 147.454 216.744] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7172 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.066 194.602 148.002 204.789] /Subtype /Link /A << /S /GoTo /D (page.168) >> >> endobj 7173 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [182.911 182.647 199.848 192.834] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7174 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.712 158.019 167.648 168.923] /Subtype /Link /A << /S /GoTo /D (page.167) >> >> endobj 7175 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 134.826 173.188 145.013] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7176 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 110.916 173.188 121.103] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 87.006 173.188 97.192] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [352.807 720.63 369.744 730.816] /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 [489.444 708.674 506.381 718.861] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7180 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [441.853 696.719 458.789 706.906] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7181 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.752 684.764 509.688 694.951] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7182 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [496.269 672.809 513.205 682.996] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7183 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.326 660.854 479.263 671.04] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7184 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.79 648.899 480.727 659.085] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7185 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.113 636.943 488.05 647.13] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7186 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [485.908 624.988 502.844 635.175] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7187 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.61 613.033 475.546 623.22] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7188 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.268 601.078 444.204 611.265] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7189 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [469.121 589.123 486.057 599.309] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7190 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.765 577.168 471.701 587.354] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7191 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [460.463 565.212 477.4 575.399] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7192 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [362.89 553.257 379.826 563.444] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7193 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.164 541.302 384.1 551.489] /Subtype /Link /A << /S /GoTo /D (page.176) >> >> endobj 7194 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [365.26 529.347 382.197 539.534] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7195 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.073 517.392 432.01 527.578] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7196 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [403.447 505.437 420.384 515.623] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7197 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.341 493.481 419.278 503.668] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7198 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.248 481.526 444.184 491.713] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7199 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [420.603 469.571 437.539 479.758] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7200 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [397.908 456.899 414.844 467.803] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7201 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.026 444.943 441.962 455.847] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7202 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.132 433.706 443.069 443.892] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7203 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.306 421.75 455.243 431.937] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7204 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.207 409.795 463.143 419.982] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7205 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [413.42 397.84 430.356 408.027] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7206 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.516 385.885 431.452 396.071] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7207 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [418.391 373.93 435.328 384.116] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7208 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.516 361.975 431.452 372.161] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7209 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.126 350.019 474.062 360.206] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7210 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [454.356 338.064 471.293 348.251] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7211 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [434.441 326.109 451.377 336.296] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7212 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [457.693 314.154 474.63 324.34] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.64 302.199 427.577 312.385] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.273 289.526 408.209 300.43] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [389.619 278.288 406.555 288.475] /Subtype /Link /A << /S /GoTo /D (page.178) >> >> endobj 7216 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.248 266.333 436.185 276.52] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7217 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.684 254.378 386.62 264.565] /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 [361.933 242.423 378.869 252.609] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7219 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.356 230.468 383.293 240.654] /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 [372.732 206.557 389.669 216.744] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7221 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 182.647 389.669 192.834] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7222 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 158.737 389.669 168.923] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7223 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 134.826 389.669 145.013] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7224 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 110.916 389.669 121.103] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7225 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 87.006 389.669 97.192] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7143 0 obj << /D [7141 0 R /XYZ 90 757.935 null] >> endobj 7140 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 7229 0 obj << /Length 2721 /Filter /FlateDecode >> stream xÚ¥›ksÛ6†¿ûWè£4Saq'ÐoN£MÝqì4V¶Ýív_\¼Zþxmàq,½…ážÇX$ž ÜÉ‘¨˜µI¼{}v±\\ÃB Âíh{5NÃK†p$¶(ÜÌQŒ!s ¯Og’N_Áów/ÇP–ˆj<–FŽs š>“9£d ~ ¯ˆä4WWÇaŠH=žH#ljÍPSIQ"?G„ ¢X›Èåù1mDY˜lÔh"‰%5D2gŒHɈ¨Ê ’¹XþûÍQHtE´4£‘4rIÐ t›ÌERðsH”"Ú¶¼9ûuq~ )H%Æ#iä8’ B’:£H ~‰`¤2m$ç§‹ëÓ‹WÇu¸Ìðñ`9&h†ºOꌂ)ø90´"¦â9˜«Ëó³—Gƒ‘V˪±`9 &jÀdΘ’€‘FÀ«.˜·§3ÆØtyvy ¸ JÇ£iä8š èL™3ЦàçÐh ûšåâõ›E„óîmOÃÑ£éHØçX=šN#ÇéÍPÃIQ:?GGhÂ$kÑ9{}TWâ’03žH#ljÍ‘Ô%RðsD'\°|C¸ûö¸z: ¥„Wã‘4rIÐx$Š$uF‘ü‰0†ÞBRÿ?¢ßˆJ¡ÕX$‰E5‰ÁdÎ’’ŸC¢%iw›¹]Ð¥ûwÜâE(N¤O¦‘ãd‚f`¼ÍœQ2?GFR’‡º:†7DÉñ,9Î"h< ‰²HQ?Ç‚i6.ÖÝݺ/TXíq¡¢x Ò ž7ên y>NÛ±•0òÃn6µm‡$E3êëUPIt8±^߬׋¿ºñjKª½~ ÜZ;OÄÝÈŠ«ƒ5´ãiàc)s×v´ASv árˉ®²ª½~¿¾Ùüyý_JùzÝÚhb´Þ_8wPÏy÷^ZE"Í)#†åƭЃ¤ì#7”T<¯è»-Úm»QW±Öî/ˆ:¨ç‰¼{­"}wN—„b¥ÈÛ54e¿·6¤Òyo>¯×x…Óz¯ªp¯ž'òž Ï‹Äz6ìX¥rçNè^Sö‹¡+hh,¯ò§Õît}÷]ßè cl¼b¨¾kñ=}”A!ldöPT³yÚEb}T°.%EMÙ.†šdmÜœóµ§k¢a¤‹Ú¡ìÕóDÞÓ€ó"±ì¾¹q§{MÙ.F›äí\rGoÍ &F&?Eu1©]$^³.£”û5e»°6–ŠÂÞÄ/Øž)¶ExÜþ¯w‹  QîF考«æ ž'ò y‘þD¡‹ÁÔ«þ̸ƒÁkÊvÓ„3àôí` T®Ùh Ç4RcCÉ.`pÛK!ý”ø÷êæ‰?Pômž¥Sšze»÷“˜SÏyï$–éÌ»Çrn‚2–åÆ=“˜±lÀ.’€ ¢!±ÚH†0Y'ÑÈqA3@"5FI”ì" X.)Î#‰gþt ÎaM]&ÑÈqA3@"5FI”ì" F‰fžÄgËOÏcÁ­!Zf‘ÈQQS³0‹ÌcQ´ ,¸m: ­âáíOÏý‡K~Žâ•$•g´DÞ³gË‹¬XسgséO&7îìÙ¼¦lAhN*Ëö ¾ÎÞÌ8ú­[L_Qv‰p{0-¡§¯ž'òž©$/²žJëÿj€çιÄkÊ~ L»Æ0›ƒç«2wÅØ¾ÒÈñ¾4åq#3FûJÉ.’`’ت!qè\© ”'ÑÈqA3@"5FI”ì fì##ˆƒ§V¹mš "‘£ ¢¦ "3Æ@í"èIÌ»ýýôðyûauàéjêÅNç3ãvÆ  §ó°µÔýß’Rðe>ƒú°w׿=wéi̦?=‡ÞXÉøƒ K”ò[ˆW«Íj{³[ÝÎÜØ5}ØøÇåÌòéç•qùaçŸHÿÀì÷”/¨Å)Œ™õ³nÿû°õ/~ùáê|Ʀg/Â¥Äÿæ_><û´Ú´9ºŸŸ‡Lðü”¶g endstream endobj 7228 0 obj << /Type /Page /Contents 7229 0 R /Resources 7227 0 R /MediaBox [0 0 595.276 841.89] /Parent 7226 0 R /Annots [ 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 ] >> endobj 7231 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 708.674 173.188 718.861] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7232 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 684.764 173.188 694.951] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7233 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 660.854 173.188 671.04] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7234 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 636.943 173.188 647.13] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7235 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 613.033 173.188 623.22] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7236 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 589.123 173.188 599.309] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7237 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 565.212 173.188 575.399] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7238 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 541.302 173.188 551.489] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7239 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 517.392 173.188 527.578] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7240 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 493.481 173.188 503.668] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7241 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 469.571 173.188 479.758] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7242 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 445.661 173.188 455.847] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7243 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 421.75 173.188 431.937] /Subtype /Link /A << /S /GoTo /D (page.172) >> >> endobj 7244 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 397.84 173.188 408.027] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7245 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 373.93 173.188 384.116] /Subtype /Link /A << /S /GoTo /D (page.178) >> >> endobj 7246 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 350.019 173.188 360.206] /Subtype /Link /A << /S /GoTo /D (page.173) >> >> endobj 7247 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.251 326.109 173.188 336.296] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7248 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.239 314.154 147.175 324.34] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7249 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.704 301.481 185.641 312.385] /Subtype /Link /A << /S /GoTo /D (page.180) >> >> endobj 7250 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [185.87 290.243 202.806 300.43] /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 [177.003 277.571 193.939 288.475] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7252 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [179.234 266.333 196.171 276.52] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7253 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.473 254.378 188.41 264.565] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7254 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.473 242.423 188.41 252.609] /Subtype /Link /A << /S /GoTo /D (page.180) >> >> endobj 7255 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.925 230.468 187.862 240.654] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7256 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.164 206.557 167.1 216.744] /Subtype /Link /A << /S /GoTo /D (page.180) >> >> endobj 7257 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.164 182.647 167.1 192.834] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7258 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.164 158.737 167.1 168.923] /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 [150.164 134.826 167.1 145.013] /Subtype /Link /A << /S /GoTo /D (page.179) >> >> endobj 7260 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.164 110.916 167.1 121.103] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7261 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.164 87.006 167.1 97.192] /Subtype /Link /A << /S /GoTo /D (page.180) >> >> endobj 7262 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.645 708.674 383.582 718.861] /Subtype /Link /A << /S /GoTo /D (page.181) >> >> endobj 7263 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 684.764 389.669 694.951] /Subtype /Link /A << /S /GoTo /D (page.177) >> >> endobj 7264 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.732 660.854 389.669 671.04] /Subtype /Link /A << /S /GoTo /D (page.174) >> >> endobj 7265 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.088 636.943 383.024 647.13] /Subtype /Link /A << /S /GoTo /D (page.159) >> >> endobj 7266 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 612.316 373.888 623.22] /Subtype /Link /A << /S /GoTo /D (page.41) >> >> endobj 7267 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [336.469 601.078 348.424 611.265] /Subtype /Link /A << /S /GoTo /D (page.44) >> >> endobj 7268 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [355.836 588.405 367.791 599.309] /Subtype /Link /A << /S /GoTo /D (page.46) >> >> endobj 7269 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [358.067 577.168 370.023 587.354] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7270 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.342 565.212 366.297 575.399] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7271 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [359.572 553.257 371.527 563.444] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7272 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [354.989 541.302 366.944 551.489] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7273 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [333.161 529.347 345.116 539.534] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.105 517.392 360.06 527.578] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7275 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [338.142 505.437 350.098 515.623] /Subtype /Link /A << /S /GoTo /D (page.45) >> >> endobj 7276 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [350.875 493.481 362.83 503.668] /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 [345.634 481.526 357.59 491.713] /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 [350.317 468.854 362.272 479.758] /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 [357.51 434.981 369.465 445.885] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 7280 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [357.51 401.108 369.465 412.012] /Subtype /Link /A << /S /GoTo /D (page.18) >> >> endobj 7281 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 367.235 360.887 378.139] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7282 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 343.324 360.887 354.228] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7283 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 319.414 360.887 330.318] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7284 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 295.504 360.887 306.408] /Subtype /Link /A << /S /GoTo /D (page.88) >> >> endobj 7285 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [360.279 271.593 372.234 282.497] /Subtype /Link /A << /S /GoTo /D (page.25) >> >> endobj 7286 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.702 247.683 368.638 258.587] /Subtype /Link /A << /S /GoTo /D (page.111) >> >> endobj 7287 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 223.773 360.887 234.677] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7288 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 199.862 360.887 210.766] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7289 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [348.932 175.952 360.887 186.856] /Subtype /Link /A << /S /GoTo /D (page.80) >> >> endobj 7290 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [361.933 152.042 373.888 162.946] /Subtype /Link /A << /S /GoTo /D (page.40) >> >> endobj 7230 0 obj << /D [7228 0 R /XYZ 90 757.935 null] >> endobj 7227 0 obj << /Font << /F31 604 0 R /F22 597 0 R >> /ProcSet [ /PDF /Text ] >> endobj 794 0 obj [590 0 R /Fit] endobj 793 0 obj [590 0 R /Fit] endobj 792 0 obj [590 0 R /Fit] 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 5435 0 obj << /Length1 779 /Length2 1486 /Length3 532 /Length 2059 /Filter /FlateDecode >> stream xÚíRy8”k.%5"ËA=BÉ,Æp ¥f† 38–0¨ÆÌ; 3óN³0–6k”«eÉ™ŽNulI iEYSBj´X‰Î”8E–oètïëüù}ë<ï?ÏýûÝÏý»ßûyL Ý=- 8Ú s…$Æ(' À ˆÏýžê}õF,çû®“ÆfÑ Ü`6,0VH´Õ×:K°•%†î,!=0il4_‡¸ŒïÈã›÷Ú¾ä´ÍÏüëÅÎ÷Üi,®Ð+’ôŸäyŒùË#â³ÄÀD£1r¢üû¶ ün–#—3XÜ``‰³4>Ÿ‰@Ë¥,q8,.H,7ŒBra¡ü³0a>bîVqx€¢Ãm®<_ÁX¢JüP‘óð¯?I$Ââh K<°°Äɧ¢mpÀ‡Þû_DºˆÏ‡¸Âùw$êf²äéB¢#¤0Ý.>ôTybþ>dz­Šfý¬ ñ÷o%”eÙ!‡_Ú­ìàW<ô‚Vª'¨‡² ÕN¾s)F1˜¸ÝrBL}´'*á©z½Š¦ÙÏÙžJ2úpÀN…I]*'7yPº¦ŸWa.ë2ï¿¥XBÂØäé¾KYœÿ¤súã¾°ý-=RåL†Ñ듈@Éur´ãM÷±æÉ‘mðYXz®A; {\cFª[ó¢-ì¹Jþ°„²èqÖ¦©eh31³·É [#õý ïìi»Tߺs¼i×;·ìÆâþÕ‹'¦<}Ǩ'nIq‰Ÿù€ãq[ÆÚbâB¢ZƒÁ!dÚË £ûz3«_h+Í©NZxÍ®.äVÎú¬üo"¾òÈ‚ÉÍ÷§[‚Û//#«ŸÙ4s¤zÈ@az¥zm›ËÛ¢ÏFc»ÝP2®6G€HÊélíÈâ¾7ŽÖ?S¸tÖ†’õž³í œá5)Íkà¨q¼–—›bðBv3~¹±0–BU™]¡ºêRÅÚ‹ÃIûÇ’} ÎO¦žwrðþqá°Ö§Bå=û4Gg>}6-Xî‘¶o-äø0µ¶'Æÿ¬¾jªu´Œ(:ÿxÑxì/nYôÖbTÉKlÕ¦ˆùº“R»¦òú6Ü­jñ275dÔŸª¹ùJ§$×]?o —‰Œ*¥lÐAú¥j:¼I)Ílñóu˸’¬cß§çá?¾~³Ñϸs;¨ºÖ{`÷#ñêMTÊ¿¼7TßÅ…«P“ã*ôýìE4&Í»´ë|ܸkkÍæË5&g–âÍ•÷H˜~H]¦³ <èl]FVÙÈ¥û¼†—ë£J= 0;Jw´èKÔîn).³OnÏšg˜ H;Œ(\¯ñ¾”‘ cÎ,é ÒKÊÝõú*¡ƒºZ”ÍÝ[kn eiº,Ÿ‡ï6ñgœ(½\ÑWMr[2r¡YÞ©YvJ¢–y¸žûØv—#&àI—aágâ´ª½¢J[UÍÆLŠ;çè^šKs˜±Û.‚å*§ëÊ­„/±JZ‰¬pCÄi}}•ì°ä^§Í§ F½“˜ÔôÖùÎTüä¥óûM& ¿ öÌ–jRô*bÂ%ýíE?Ò7G>5ZÄ Sö:¬«B•Á‹.uö9çÀÙý`ÕxUNv1JlÛ>]¸þWEý˜®·ÎN©Ú‹üV Ìjœc×;H/nVv½¦šR÷H3"Aªëðþ² h A6â*„‡l÷å7õEa¯!ÒâßÍ7?Nò¡L‘*÷Ål)þýò¹gÚ>âêJ»º½f=Ô¦Æ>k)=ø!¦¢ö5u)wï¤õ'ô´¾{j¬+µšÎøu9ž÷ú=œ ‘>}R‚þâ¿… ÑøB˜Cã‡!þ ÝtHÕ endstream endobj 5436 0 obj << /Type /Font /Subtype /Type1 /Encoding 7291 0 R /FirstChar 59 /LastChar 121 /Widths 7292 0 R /BaseFont /HHCIGY+CMMI9 /FontDescriptor 5434 0 R >> endobj 5434 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /HHCIGY+CMMI9 /ItalicAngle -14.04 /StemV 74 /XHeight 431 /FontBBox [-29 -250 1075 750] /Flags 4 /CharSet (/comma/x/y) /FontFile 5435 0 R >> endobj 7292 0 obj [286 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 583 506 ] endobj 7291 0 obj << /Type /Encoding /Differences [ 0 /.notdef 59/comma 60/.notdef 120/x/y 122/.notdef] >> endobj 5432 0 obj << /Length1 764 /Length2 1209 /Length3 532 /Length 1768 /Filter /FlateDecode >> stream xÚíR}µÞ•·~Sw 1f ưŸ¼ÓËxO–ÓÌN9g32fk[„”›°©‘—%ÉR)QyÝ«u¥²J+T7ZE¡î¦6ºÛ½Ÿkÿ¼÷¯û¹çüs¾Ïóý=ßç<ßêhé"À·Ãž8&±dÒ™ÀÍ—ÇL:ƒB£¹0$ApÌ’À€Éá0‹4X3ÓÎÅq°åPhÀ Ë$&VLÝÌæšØÀE€/$‰…E¤BA ÎG`‰Œ\PðæNÄ °€Na2áKÀv8Á(Vs~¸˜ìX ¢`"ž4LI“f€´(À1T°b凓³`ÒÉÃÔbqO)ŠúA¢9y2£?°Ae¿ó¸H,•ÀðÅ0-n …¬ùÂD*ZÌr%Šð]°Œ‰÷Da?"áÇ!„ÆÃó8Œ › c›·`àê´q~›ó”?„`’ ™øŸ¢s½ó5ó_5™ $‚Á`’äûé+rÑ(Œ Œ¼¶v"HF!ïYÙ9 ˜Np"é׊Žáò #Ù „8A™[¦ X‰!ÆPX(™£PæïèÂòæà?þ «+ž(·dq€¥µ-9’Á²l[ÆîkäK RE2wȘ>ÕB„ †a>åÁ=œï˜º#¿.­bGéí³ªæJ®1—³ý.4õ\SOé;¬„–ÿèg>Xö¾R¡½rDudÍ®†ñ™_ty¾ú6.ûhïìHBôˆ"©Þ0lJá+¯}›òâ󆺟ތÙ*}yw°³"/üT{áÄ/Nø›º=[öº¤9"ábsAª;ÌS§ï«]Ï¢ò4ŽÆUdؤìÒÈËQèNÙ³#]íÊÆþI¼Qªõ¾T­$wvÛ[ÝCšüÆ5,ÞsÞ3§±3§Ò5>¯ùØÖQí\b 0¢ú³ïGnJ‘vZua’GÔ ý[¾ ¯,êè34»ÈÁò§Q¬Q±§¼ûÊ9¥xU¬;ìêLϰñLN½At°î}³— ¦:ã§fûE¡]„N“r£¨‡7±6ó Þ}KZ@—QL—º!u°×ZY¯~W£u8&ǸÏ"\ðn`èÑÝØXéµeQ«˜.S+Û»²U(ËéÁÅ"cÇ•—õYá[=Î}—ÆN:²T}ÒüÄ%ZWñi—YUã^oëë]Ágbøš 7ñ´µEçXFAËéuκ¼+(¿Ä?×Ô¶·¨è^‘õ£48ùÆ›Ðúû×z㢷Ž"nåÜüöHÂgæ ·SŒ.÷Yžª<ÙÍq+rДûɽRsëMÊx¿Sù}û³5Üßj –œ3?vœêù7ýo¨}ug/Ø#ÉЦòKc!^;ClV™tN8Îö‡NÈžßrd}‰Ûû ŠÏ_ ·øs7•} èÌ¥þ·9Éw”é?Þì–˹ô¬=BùÀ뮓c†·QKTÑ¡z­Î'ÌcU…›BÙĆ¥JÓró‘N dZ•dzƒ&~ï™?Ô2ÞØqWÃëžf[ßÁ¥-%ÝJMóЯɛo?=àXÁ¯®©´©‹Ñ$ë¹â S›(êõ·9CZÂsÎ…Ýþy[œ½ÒF’"Ý“=[¼sLm“? ù¾§¬çC¨M~OÑË­í ¹WÙ¨J˜µü¼i_m’Ru¥Ê&›ªÖmê|dNòÞ—½Ür’I<­‰.y—y‡Jµ­`ü‡åÿÿ|† .‚ˆ”B´«f endstream endobj 5433 0 obj << /Type /Font /Subtype /Type1 /Encoding 7293 0 R /FirstChar 40 /LastChar 41 /Widths 7294 0 R /BaseFont /TQKWPT+CMR9 /FontDescriptor 5431 0 R >> endobj 5431 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /TQKWPT+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-39 -250 1036 750] /Flags 4 /CharSet (/parenleft/parenright) /FontFile 5432 0 R >> endobj 7294 0 obj [400 400 ] endobj 7293 0 obj << /Type /Encoding /Differences [ 0 /.notdef 40/parenleft/parenright 42/.notdef] >> endobj 7295 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/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/asciicircum/underscore/quoteleft/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/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 2407 0 obj << /Length1 1642 /Length2 13516 /Length3 532 /Length 14395 /Filter /FlateDecode >> stream xÚíwePœm“.î.ÁÜÝ‚»»»38 2¸»»»»C‚×ààÁ îïûÝoë;gÿìî¯Sgªfê¹û꾺û¾ú骡$UVc1™%A`FV&^€¢µ½©«‹*È^Ä#Ϩ4·–›ØÞ1N$JJ1g  Øä nò´€æq € ÀÊÃÃD 9z:[[Z4ªZ´ôô ÿ´üå0õü7ä=ÒÅÚÒ@õþà´9ÚÀïÿå@5 ¶,¬í€1%eE)”¢@ èt~oBÙÕÔÎÚ omtpÒ,@λf së¿Zsazçq˜\fÖïa@3 ã_Àèloíâòþ °vX:›8€ßï X;˜Ù¹šÿUÀ»ÝôwAŽÎ wûwìLäv1s¶vÞ³*‹Kþ£N°• ø¯Ü.Öï0dñîi2sý«¥¿±wšwlbíà=Àå2Ì­]íL<ßs¿“9:[ÿ]†«‹µƒå?+`8-MœÍí€..ï4ïÜÝÎ?ûü‡îMí<ÿŽýíõï5Xƒ]€vLH¬lï9ÍÀï¹-­˜ÿ𠀕åvsWÇÃÜ€Î_Í_3Cû^„‰9ÈÁÎ`´@bVßShþk*3ýωü? ñÿˆÀÿ#òþ÷ÄýWþÃKüß}Ÿÿ•ZÒÕÎNÑÄþ}þ±gï‹ÆÄð¾kò€¿–«=à¯}cmöDšØ[Ûyþg±ÿê­üGÑ¢ ;óÅþÁ/â`ù®#+'û?ÌÖ.’Ö@sek°™ÀÂÄîýâþ¶k8˜í¬€ïÿ}·ïA,,ÿ‚©[Y›Ù:ü¥ç?  ƒù¿6ð®Ùßå3Ë«iHêˆÑÿ'›öogå÷‰«{:ÿ;“–ÈüßQ‰Š‚<ÞŒlï¥0²³qxx¸<\¾ÿ—¬ó°þó¬`v¶öè±0±°°ÞÿíûÏ“Á¿ÐH8˜Ìÿ!5°‰ƒùûÔý»á/ØÌÕÙù]ì¿Á{ãÿvþ{þ@ ÒòÈŒ/Ä&#;Ü€—?|ƒÒÖâº/ù+옧Fß&&²PÀPcBg–m—rBÎ_&ݯ꘽<ŠŽ³sõ e±‘êosS¾ D7O ã³|hQô˜3q;nÏKò0 !ÓfºT§·¿,ÔÛq¸@KÐå%uT‹/ê{Ëå“ܾ£S1^Ÿì3¢iÂzÙüúÓÞ2÷GnÐŒkô¾šÖI™Ž(<@•Õ/˜8›Hæ@ŽÚo•øÆ¥èºH)•f'çg‡MRx÷q†ÞCÉ»Së·á³æ•`ûvÚ<¥&€[#Mº_`;V2Þ$Dˆü?Â'³ãomû_›ñZš0-2Ô©\ï w}nA‰¨Oá‘T³ ÙuDÔF³–}‚b>uºrµÛŒÉà•ö‰Ö$”ù^g{ÍWêœ8q[¶†’'þ¦{_h£fÌ ¬Ù3§¿Êä¦Aˆa~qôý#ÃMAÁÜ1´ýU€ÖÍœ)ð̨+0˜É¼€2ìü¨¬n/G:,ò1ÑŒgÙ¼ë§5˜‹‘G<{–ÓÈ;óÂ$øÌûQZ5ól#Á@W5äh¾ÝØ!*ï3±©à祅Á§rôÎérN`„ü6Oé—0EiÕ–³ŠGKÅiƒ_æð;N¢jrÖñÍØ}2ú1²ûÏYÆhÏ„ø:ÙwLί©=&z&™üßF.o„A¸a1H áŽV\‘Žpwç•ÃÅîP4@³8>þ-ÈæzùgYm>Ј”PPüd¥ç¶ZêKxÕ‹˜@lŠ‘á`Ƕ¢ˆZ¼Ÿýz:ûÒØ¥‚¾w¸Õú–ZO: ç:áQ!°ŠÏ’ÛŒ0±, ˜ÅÿΙ‰Í!òòµ‰cÚa†iÆ¥SÈfðŽ+­¼œÄ¢ló›3òäLª[œ´ÒÐ6H ìÐd³¨O‚˜x^ܶß7·–Ê4ëüÎó†UÖïÅÒYÙ|"²5ÚyÔØvYqÃùöiNB§O§'+« “œEÌwv±ô4@þ¡ÜŒ‹ÇVwÔHu‡îÁ€$jêt¶–sˆ¡V‚^x8t…G‰"ÈÞ&äD¯.$§{,(•ÿ_/C1€óé×Ó/šÞ¢0Ö—ViðÁJNcž®eHÕ_*îw°oç³â8t·²R6 pÛ1"Ê]Š?äÒˆ~’Lfö<©2ßǪ\“^¸RÔ³JûÓàK#E#‘_©´üp?äFøÅ%ìHFÐÂÜô³ø¼˜;Kù¹íØeE/„Ÿð¥X®ÁÀ3{Ä–ðòŽòh¥ ¥á¶™ @_XuAü SRj ³Mô,)Úw=ÒûÆ_!´¬‹Ñ'×rÏ7ÄP#G|0ÚT¹–£‚eí·œø¸¿MB_ÏíœF•5(:ŠFsü0-hÍ.ÐÛb±,þðÍàö˜"—ò„Â!‡svÖ«j’ïSÎÓn\ðó~ÀÃ&µyð1"5ùsBtô4ý+'šÝJ— $†QJÀ]“Eç!5 {tÍDÚ¨±ÎXt/¶>íd5À4Â(U¼i~üÞmÚöëb2B@}ò±ªpmÃÅ #Ùµu¯†’}2°`ë°gZaÕ"¥n­·b¤¢B³2ÊšÚme¡ñx+k¯ž´É8ÊÖOóêþnv  ø®IdxÙØ?MÙœîVÐŽÃשq²[ —š¸å¥÷é3Æ'6üÀdßÚ/OÇŸ•,´ñ¦°lÅ [çgé4¯ùÚ•B~Þ uÜnB*¥óö8våIY \ªqÍx |¹ß,–Á>UâÅÚ++v)߃®’;5à µwC$ö.ïm´J*&Ÿ]gôÒñê¨ÿŠãÄf­+jA}QYÚ¢ü{í’¿C ˜E%Edc+`¥Ä46±Âþ~d=$)wI}õQJ6÷4Eå··’¢c¸Hº±e›!ÞñŽÉlÆ“Êâk‰j@›.#%$ùÎóÞ“æþš[á­ÉÄkÞÄðSžL© Còm‘a,7nÐ+Ê2æå|ˆ¦ÀL»œa‘ÞϼÞíæ@Þ^ 8P¥Oi€öÙ g^=uuÅçjÛ[ gn)»£ÓM¹[5Èì‰84ƒø6LØ?¿i¾èä|©Jè·ÖØÒäÍõœ±WKZñGšæ—ÊyÉ-jë#% •ÎX£ëDù²xXðmI(ã(ùhô×"Ê •Ã[¥Y •v™uðÏ™¯‘jJí^(Z„v¬~e+à çåæÂ)<ɤI7j˜-ç_%÷%v±‰»1Í«<&rb0–œ|ƒ ¿)Î~óªŸöøZ µOXi*XGŽ!xgžªj.š¸©y8‡âì[¸ßÔì ÏÜG@ÀôJ-õ°8CaÂ>ĈNLXÉñÐçvu<1ÀÚY=6&N‰hÝ]%ûžÉ«ð£Û£©!›†À\YÔÿÞ£!®2ší6šÏËÐ '>è…4ou8Ï;¡”߯Z!‡®>2œÜãƒ×µ‡1¬Ž =…á[ôŠGJ,.ò¦Oe|»Á Y€Žwÿ}°öãœx£‚¦D q¹á CeOÔË)Á"G¿ƒ¦¿°u„â1ü{ µõ ;¥œì ¹Àðµ z±Xij3*礧^9-•±hãL¡ChÉb”ØHz¿>cÏ&Iðo8e{!^Ó„Úúƒë´Äç›ó7Æ$,ïc,‡` ~f§^Ÿä¢U ¶¯ŸÎÖ·õñEå¬ójç¡wÆþ,D™Uœ0 ¦ev«yp­2Ø¿¾Ø[=*mqT°ø“Û…Ëý€ã%FQ?c˜`¹÷­Ã\ŽYQß›qëJÉ[{ãBvIWËùó™>ÿk'] ãýÎf^Od•øÁnRÄU9H ÕÃú|é1Å_ÔäŸ{Ø@–_´ ÆÕ„j„O Çî«o™ë6Ã1ú'µº6ÓcY6ˆw˜äwÒ†{mì j½<…DÛ±­8³·loê”Ö“œ[rÉÀ³^4ÆêòŒ‡Û³©„ªjª†èW¢Ð`æÐÑ á¼FϛۑLã’$Š|Ê=^ˆ1'¶³ÁQÏóžµ™lËsßHýP0W¹K­;n¡]CzrX¦º±l¬z_¦dá)<°=@YÆë¯$´êž ö4Þ?½y)rÖ\Ы'’¨ 0hŠhôJðæ”§«NùY¦¦”JÃØU±ÿ„é­¡¨ˆ…²«¬×Ô84'y¤BšõQär…‰Ôe9t$Ø£¥ç°=©Žß8M×ßòúëdò¥M/Ìð¿ï—SÒÑ}(µböšªeH•ïq.扅*Ô³ý‘H4ÍeÓ;æO_€ËÔëfÝ{3s§ ¬—¼Õqa˜³/ykã%ãK’e0Eôôe&ƒíäãºm¦jÂÔ£âf«ÙÆä@¶§Ä™'ãî`a#µ¢£UqEƒÎÖŽPáÇm “ŠK£ØFÐéÑ帑̻ù•Þ+Yo¢æO£€öÛØnû‹‡Äã"’ö!c¦‹˜’ð<@uQŽöm`æÓðBñpõ¨!ØÈ~iAÈ«KŸóŒ€ÍBØòÕ d¿Cýµ…Wê€}7¿Çvä'O&KŸÊ±Vøpüf ‡­®cÞ…äú¢né)Ä6… ö: Ñ-þB–e`ãî²SÔ'4̼*Žúw0Hî¶²XIøÀG}ƒ 9#»@bÁ‰HÍ *¹­mžµ#žOéFôé|ëx·©ë¨AÄÚàÕð&qþjH¢óÊí'îºùäÇŠ’ÔÖç æGØàòò¢›„ɱJ>ƒn‘Ï…×@­„ðMÕ\máöiæ»gQÔ!øÎÌdÇ¿Ã({ oFOê–ƒ :œLòèæì$ q´ëÎ$Éþx9ê õÒˆ„vøon>êòáoø²YýW_;%jO“eÛd¾LÒÄÚ}ÎÎJŸ¨Î-1‘Žˆg©ƒ9Ëã"šOú|mUGôÔºãz}šwýýR{Ýsø“ˆ¼<  „Eî‡5X46Ê臉‹ R%%ÇE›ÎôÐ ’2C;@U;EŽ äþ޼ç·®;RÉEjÕ„'TdoVöû&k¥Ý)7.iÊþÝèu“Íx­ŽRã_OAP¿Z–}díƒò£úE>­§Š!*&ržß·¨èšžŸ›Câçð¾‹ôn?™æN¹S é' ÿªbsâ2ýP'jÓö=·™¶Ø¸ù!&ÇPŒÛ*¥ ÝRí³göH©á.eDÀnôD<§í§ ’±¨Bƒ·…*E¬he–Gêj°Ò2ugÉ™o™óGü önò†èƒà}öš‚³©žî½õž^ãPsTÄt¼ÏpŸ.T0—IÙ´©ï…ÂGZ”ˆ$4÷™6IšP.8aÅ]c]òˆÚÌ,ÁÂE@ÝÆCOÊè‹f¨+#c}å«R|Vˆ& ?ú¥“<Î\[âÐ-ké£(.d4¼‹¿ai÷g×+©âó@àL¤¹Æ–ó:J<%®ö改PF+gÉÎà]ç¸÷»2Θ+[ÚW¿Z*ì8ÝPÉ%üÐîç”óx‚]t:8MwcCælíÙ²ºjësŽi7³<™Ø äÅ:ÿ.Má‡ÃjmÀ¬-%~lX‹5ŒÖÏ*¿Æ˜g»y}í¨ç¬½ÿJE©ûë«CˆÒŒ˜iÊ4ŸœI9¿¢5#vÔ”Q¶(¥úþx¹£3cŽ^}çSøSr«`§§›’^àk5ü Á€‚<‹çM§¯®k=ÄD£íÆô½¹otãM3ÊÊe „ÆÛ1¢æÇœ «þFÂt?Ž_ÔÇ¥l=%§’­–µœ\=JF‹—¾G”eïÞ¤šSm¬l6BkáêØkµ¬ädzì=4ÚBRXë!4]VcqER¹]¤$ŸÀÏÚ÷êZXð8†xL¾Eö–yóKˆ—‚HÝÅOŒ¯ .<ýãÇ Ô@äñ^-÷¡‡çCÚ=6îô!O“Á õ6¡ñÏ¥>žXP“ú¨j\™šÞU¡Øm–"35ÙoéÝ·øÇ—þQEèPÑGþÌ Ibõsñª2{ÎûûIl¬éjí1÷=¹Ãvv×™¯P©%,ØG+áM´¿&ûÇï#õM9~^ôÌt2ÿìšÊ7ÕÏèÄPßJB´TÃè4]D`Ä5Ä¿aa sµµPŸ(‘š±$K«nMy`å_.qJIûf-;`ý&{_xñ"¡6±¦ÃŽœHÃЭ®#!@ä2‹+ï`ÊŽß…`¿_Փߨ¦u[ÌÈø TÁ[em<¡"3Ss7Í©Ó@ùVwt8ùgÃÔà DðØK‹ Ah]ƒ®§é€3ߟß$ü‚ë”u÷@Iœ3/iN³ó£~˯3ú ¼ÇP T~åîo ”ˆÈáCª’-Љ?§;¾šKÆoµGˆã÷ÿæÂµÑÔ*»Å›¡c:Àn°àEnîQÀŒoÔhˆ _AIß?ë€Ñ ’:6 {#_(ªzÛZ È#@Óß/Hõ¸Øt1É^ÿ ¶’ÖŒ‚Ÿé§n’u(PUâº`ÍJf‹ ÑSÇ ³x8@xÆ?–#a`ñMr=ðÓº—8€s£K(pòu¤ñÖ­ *¨ÅËØ{t,I}÷^Ûç'Æ\:T¤o (mñ‘çæˆŸ)8õß¶<žÚ3L=|ÙßtŒ?ˆŽ2ÑcÈÍ2±Î6=yÅæòŒq{YÙÆ]üVl´¶ot»ÁõÚ‰ªçúÕã4ù„©ñF7>¶ž>pü ù™hñìçï08ØÝÉœì–W«"æ¤A)ª¢sÉLŒ>‡ dpòÈÈ'öb77Ž_.Õ›¹MÞ øû–“õ IŠ®wC6YUäó;&m­®í©vzð!‚¹•{"ßleœÛÕ¨´JKEïÆÄZ„÷LçÔ¢â×Éjfä´™„2•àÏõÔrW•Ú„Ú¬K¼ó~U‰z–Vè}SeàŸÜ}WZ5×N¦a“z燇ü±÷H`´xKòAh{‘1ûnæ]\Vx-áTé4øÀ·Œ±EnVâÞÝÕ\˜`Ê'ã($:"IãÊÄ(œ¶ “Ô‰–!â+ÑÞ5é·FìxÐ\’.äþ—H4ÿ }9C”ê&”’ÑÑuwwª”mÝ[ò*¶½ÃéŒo 4âͽ§Cr‰q®ÆáÔnEN? ïÏ0×§<â5ðs@ßá ïŸy2s¨Æ¾k±t Ã$öWöä¤áõ ú§¨ºŽËJ&ñiðÙgGíÞLÅU¿ Ç4×áöتU>L»/o·`é=Ò;`÷‡¦7þK| Q_ÚDì,q­E2%îê 9ðuœá¬Ó¸Î1¤ý9|¾×D÷ðì3V|¥>èÐÊ7›tL‚ Ž¡e?ÏQüDõ‰I¨yï­ž7×åõløà$Im Wl^5T©|¡Ì)¢¯‡òuQ¶¶ÐYî!“1Gh3€å‹†±¾±k6¬Sì/øáù*ça­ÆÌ ˆÎÊE'ƒgR_zÞO‡!RÍÇ“uÖÙ߯æ^‰¿Ì,˜•Ö-0ç”4–áTtàs9O«ÓJZfkÞ à„é æl€Ô»æHhráàÊ›0Dö¥‹q°,áñ|ÓÄ&ÛjëÑ&µ£âÕ¾CiF‚É®àÝ0)‰ æ¬F¦i|ÜècévâE2|júÒèß®P§vRe‘u8‚ÝmlÅn÷ñÈ;z¤—ö}ˆã~Ðé.ÏXy£ ž³±Ÿ“—Ã2Zíì?=+nb,œ öRT¶þ!¿\³ ÊP²êù\™JÃW½¨‹8·Tº\c=BQ%tT©O†ay¡šƒu_ÈMƒ7Œ*]$ìsTP …‘ýØQ¿)Œ‡þ)8Üé™ëÎ@³ò\4Kº"¬sÊPÈVPÂsØîÍ® yÌGÿ}Æ:öé×Ò¢%ލ—a®ª¡þ¸ò@N%ØDüÖ©'怳?Yx†‹ð2±žŽéôšžxË~à<È/Ï~ L‰F‰Ac$_Tß`¶ÍœHÌImÛ•’:¼X8ª|Àœ¢ Eäâ¾)ª‘õ¡ î$ÑìuD$ä)#ôîóøçÓmÒƒt{¶¦E+^ÅØlóÏ æoápk”®à—*è™îHÓr¼[%Ù`A$¿¿Ç6Q¦2i·Î‘¤’³$ÝÒ,0íTÕÝ"q÷7âAä啼,¹EÈ=ÊãO;ˆ°ùÖ¦2&^Nª¼¨®®Ô8ÐKK*¶,ÃYÀêq¦Ê TÕJ`¤™Þ}œÝuïBô„ë/(5uŒ7šð¤#@ÂÊi;=&~O{ÃrÐö‹7œ¿¤Öi°×ék_PÇ–4t®âø™‚‡‰ƒ¯DØõ#©ÚòЉîHqˆ} 2»™ ›õUã.Œ2ÊÞÑŠèæ›Ä áš‘*„ÁlàaÕƒ ؈¾âjùûƒNG0€›ŒTSˆKάK8$p×Sü8`Mó1íìB3£ÿZ¬îÃ-HB±w;°s+;á:Z† WßÖÿ>×;qb•|@†0l²Bøág,µ"˜Etœ+MJiwy§Ùñ ׶¯ªí6{ À{4‰\#°î¼ÃÕcgSæa¾gž×ÄØÙç¤ü¡VGÒ´CÉg·E¼å'ü¦þNÙtÔ>Ùã—yDC2uxX´ÂOM½£‰â™êƒLø…\ÓRU¯Äh3HçºtÞ4?°² Õšò‰šæÉý›¸h§?ŸæªòßåxÑ;c•¯„ª œŽ˜´á#ö¹Ø8Yé‚v(79M à”ZGœ[i¨‰QxZ÷Q% å¸ ‰bFb®5û®=ƒÃL+]ŒN<êÃnF'QыԹ,%1¢•ÜýÜ¿ÑBÓ¸c_5vú]QÝ›Žü‘RèŸòbKÕÊŽ 6±¡ Ù6$2"¼¶BXg]MÄñ?ü¤2!¢éÞÁÝ(̳t.ûàK¹c iE“ïÏ|r4'Eƒæ&’ïí«Vm…Ó{‡3ܳÓÕ Í„hšÅȽÉêÈGÈbâTâ–ñ¼‹»ON eX¬¢+P’ì+çõh<_‘Ÿßf˜qÁ}Éoo9¦y¥€ÿ ph‹pà¬àhPÜ_«g»Pñ3ÿÚ¬½— öCüýè/½?Çý:lÓ¼Ã=› Æú¬šº”«`Úd<ž8˜·Œ/’ÉúR|r);Z_}Èîâº7£!3©0¶¬õsë£ïv)ã×6ogÙp0õíNØë®å6“ÕhÕËS‚zš0ŒÂXÏ+ÓŠ‘4_»“÷ö”l$ÿ¤eÿõ)Hv‰$@Ó'G”¯:íE½‡fËùÍ Áœí!´‹O[²‡©û°;á:¢j{Rü3kïë—”´áó˼›€óÊý=ëi¶ÕHì€càf›Àäÿm…ÑnÚ†«¬lU/úàQ .G|^ëMI:VöŸ?QÐ)ço‘J<—GÓš;%n5ÕùZ1ž_ Ìåõàö/v/ã,IYŸüHg˜L {BCðWõÏ!½«-г–0Oq¾Ù}nrUVKˆlmoŒ!®M.GLµ8©S²fŸp¥¤×@í¬>CFÀZ;ñTªj«äÖ”Ñè­§>köÍ¡xÈâ4¥KÜEÙGñÖ|<¹×7µÒMéÔª¾ïÞ… ÃÉÇž Ù hh-§¸ˆ¸ßàU$¶ÒFwãð –cƒàÛw’û[ÉEÝ:ÂU5Å™UÁeu=X¨ Ïlêû'03Gr}ÿñÕ–ÓWYF ‰®‚É®žmjŒ‘³À$‰h_=%ßÄÿu®e8¯ M7Ø3Ñgßï2_@(40ý±Nð§á9ON¡·“~”} bîïô‡lAãü|Å”§ÍÆ(•~Ú9DÜ£ò|]Ò±_s„Úf.ÚU à¯kÁ® °Þ® V>œ#(3¤ò²Š>ì|Ÿöûó§ñéYRybÃæ ]"šu(øÞ²… †{Ù> V»$<#7 ~q8}ùâ·øÙ•¾æTš “ÒÍCÉÅDZâÜ]Ð~wÜt£,>^ðÏHPéÞü.lT—SG@&ZWÝB‹A÷ÀóæXן6Ò}ƒÚ·çcÁšÃÊ+uLLk%ŽiÈT¸³‰{9iÓø«™ÑÊñ--XÝdþª÷‚”‰* Fè0‰Ó~óXæ”­ªëœDøxt'ÁgÈ€"˜ Ú-Ëj]#ïêrv ú±Ý^8hd4}×x/êDŒ&Rc´øPløa€¬; $¼ø®Ìçø†Ïø )ÅùH£jFð¬#Kgµ eXIaÃÛµ¯œX)¼Xlre¿.jR7á†B[<‡Ç¥œlÿP¤XW{éôµ¬{.żݳÉȸ†t&\‰É÷ÁÒyh¸§–†+ií&°sü~ß6—Îß%Ñ3·Õï¸Ðu[?BÚ)È  Z :o¼HBÎê¶Oatöª¥¸\ïWu2XRc–”§$~›ÖA»bÄ”÷ýP‘ ²ÎôYŸÕ·¢ò«Ã ê³Ù¬j_ê|$†°é1·§¬lç~ü9Á¢‹À54ÈCæ7ë7+èòÐPxRc5»¾½{ö¦‚QbyË Á=ò]5¦¹½´JâIN ¦1.ïK#uaÍÔFJH²K/T0ˆéï›çRO÷KâRêy|á¼µeÊ€‡ø>–Ô€Ÿì²ªŸ¡ÛÃE‘„ Ï*DöNØ>9ù³VÊÔÖ´¼UO VhWWÝ Áœ¶>àÖL’ÂóʉîkiëÑŒ Ü*çîFånNözoTº>Ú­¹ô÷râÚsòGSad5b%D¢}ö*[]¨¬²ç†Ððú&©r«,&Ì,(;¶¶NB Ìçˆæ)Ïd™àwW#N Ë5¶5 ¢“‹"ô`Ÿ)§]ƒkVð¶Þÿ­ËÐ+=Uú-((#úKœ«…§Á]{"HÍ×—D™ßL뇯÷ERÃ_óŸûÌWK\àŠ)ª™"R£Ï‹ÿè+Hò©µhÅžÌÏٛЅD.Ñ/z±Âù–H‘)¦UeäÞÆmرÈOÔz²Õ\$ïý”Á˜ÛŒÅºÈêÞãñý—íB`2),ôëñè‰DPS/Ê2u![Sé…“ÙSžü"Aó>LwãAŒR6ÿÄDZmŸðÁÅîtG‰f•RΨ•Þ"¿¾üÒAYÀöež/Mù‘ŽÒýšý‰—R±¯ÆŽéÛ·ÄAÉ×謡$¾^ƒ¢®«|ð]®CÀC›îÙ,â—n ·P†:U-‘êu²,—ä¦/}(6Éìͪusi29 ±¼wä­ò,ŒÍÛ‘ÛX¶',’·wRxezŸmĹŸVÐò‚ßÛ›@ê–öhq“¢ž›œ¿ÍýõóP”?óC LO1?†¢;¦`0¬2XXŠog›Z†›&¸¯¯æ±™?iÖMˆ®¹Åý™’× ~ Þ<%`ÀÌöúEÈ ðx¹=М8uɆ«Ó´–í8‹óm)Û8`Ù‚¤èê~Wè»ÈŠ…‰ç+‰%ÁQ°¸eƵñŤ[Î}}†ÿ3Çèdó[§³¬ïUëŽÌže_ÂY„¿Š¡Å¥¬ÙÚŸ'+d.Õg­ˆYä±HÏšNÿ¡÷Á^C‹ }XÑâ†ß>9˜Ñ!U³_O.¯R™%:j É{T»ÀÍÊv·[ü(–k>]oëïËiŒúl>»Òó½Xs”çZA¼ÊÕ­ ÔͽRÞK#ûÅ$Ò™g´ƒþü-b}fšü o&ê¦Fš½™véÔuzøe\’¿ªPœèL¯–Õ'a(æH;K*;çEI‹°ò(.¬jVÉã_kA¦ÃæˆMGó–ŽqH0¡üÎŦ{w¬önh‚äY;À¶ò1…¹ÉÞ»ö¡¤#³ûHè¹J«ãFXäW‰Ÿîݸð³ætø×ì嘽Š>ð# ¸ [ V å:+XNt@‰èCè¼B ÜÖÕ“XFbùz“š+l‚ÿÂkš@Üá®6‡+/ÍûôÿMG‹pÁ¢¡ßg³˜žqë5^ö/ùŽWo¾Îs×ÝÖÉ’LRnsöÑ#®CCÀŠeà[ƹv.É›ƒ†Z5ÃõNáàEµð‘9¡ „„¼>žž»µ€j»™HQ,O0hzPº¬³Ø™lž.-Šs³ÈQ=¹ *Xqê–<¸¬ë”=&§ê/Ñ1÷6'o&*òYvê¿xýªŸÓÀ™½¥âoUbÉH“ј÷?¶Vt ÊJC<$Œ=YÃn§I7%¾žÂî<—“Kù%-7Ëc¡BEˆÆnwˆs×igéµ·}±©EDÁH[Q¥8¸÷Ñ¡àjîD~Äî¨d]tžà£ÿ–ò±XŒ`N@7‰ð”æÀê8-@[ ™Þ¬#ö IyÚÖ,Ã+;¤`Û×¶5±, ‘©ô’ïÉÁ5׳—ß->§¨¾AÙ‘@ÊÂŽJB«ê}’Q(é%Tí?.ôW>ªa÷ÓA·p†. Ì‹d$Çœ>ñ?ò•»û¾a®]ñG× ³Àúоt²IQ(Àï"ÁîçŒ0]3o@oß©fŠAÉi‰Žzp—ÆŒˆÙ…ƒªÒqžn×[ì©!EÍʽÔÂf¼ÐѨeC™f]‡¾C P×8pʸIVˆœæ® äRœ… v}ãd$ð I%kÍ^¹²bU¨SŸ5UÛ{¾Ÿêÿ^†‚s!ÓžÐ^éG¸ýË ¢¯J1@÷Éë„·ƒz ­'§ÞuL·IÏxæ†$RÄÆmËN¥˜[ë%vªhJ*He/v IΖ`a*Irìà|9òüHç¬ã+«6AB=¬NŸ¦ê\ŠÇÙ¯ƒ”§êq­=:©wƒ_~µ‹F ¦Rý¥{œi¿’„èD ù£Äk÷¼ÕJÉ+~£g‡áå~­á”h°^ô;#/ï~YͰŸ˜NR¶‰›P:pÊx’qüòÁÝq}VåU4" `öwITâÃxï‹t± bæ4U¡„íN-‹¡¦ý@ÛíqÒJYÎé¡ÓÛɧ4c'1Á;ÊޏVBR²vË¢Û8œ0Cç3º5òž)‹•ä˜Á!«Æ¼äÛJaLUDÉÇ&öFî2ÒfI•©Ü>˜}#:âÆERwÑ çÇ8„•y†©Ñ[tåÆŽ×ÅÞ|•RÒ4—Ẍ’cŠÕ ¢Ii•v“ †öî#zC|å·5 (=_ß M꼯Ÿ•ýäÌ‘1*ˆ:nß®7öÈó>s¼ä¡ulë5²V¿dÌÃ2—݄Ͽ2wÆhÏÓJÇjç[9›½!• |¼xøÜrÐLýôª"s™Šzrl¼Qã\·Ëuxè °7|gUÑ>åÆÓîêk˜Ì(–c}(NµË-ó¯B±%Np¦Õ¤œ±Y/ž^s‡#‹Ñ>p‹|ÿõu®ºÔK)ú»Tá+q˜˜pS¥v·ðÜš ü›ÀÈD\ÑEô6ÄM ô¯ïw÷]-|ŠQÌJ!†x³„j¡…^VÆCb&.Óà1©Z÷Œy²½€š‘Ù—èÔ º¼Â;¸Ý4ò[°´¹yH>ZL·¼9nÓùþ`ÿuðuÎË÷Ý>¶Q•s3dnwô7މ"”MÀ熓!çP´Ñ}#¤QZI¡Š±–CEùûœt$]6Êv SN7œ¥¼“|¹Úû‘&èÝ 2»1ª€ò¿)›dÔ=\y{ 9@\~;›ß)ì>¡挒bÁ¤Œ¥¸±ðP^×j3¨„¹±òݸèÚêµ%› 툤C%p:ê¸EÕ…t?gÆ6#sak'v‘a_9…'‹ã`Liƒ0Ÿ´§Ô`Q×”í÷PÁö;á.É_Eñ|>=»L†îN)LŽ`p åž6Q&À¦çðQÂù;Ë 7ÍÉÉ ­îæ• …ÙfÁg¯NÛX¯RˆêÊ ½-y²tc‚Ôäå<}öïçQ}I0…Ëÿ´,ñ!¨»)`óŠ’RI]ÆÏ"0®dÏy\c¦¼%D$}¯ѵ¡{(|K}öù±«“Ûâå³÷Í$ƒU.Íç/¤£gÍoMëVéc®LTmjìf;³u8:ï´ä©8ƒ›9­ß]yê¢Új mBˆ~ É2 ƒe)ìçÊCõZX 9úÅ®]ÊY[~¸üú(è:I»{\ÏûÔ eå‹ñà×åþ½ÏÖâçWÔ×"J€Ÿ£‚¿©µãÑdD±¡…k¼3•åžÝзÝU`žü¨µÀìks¤æu¬ªxº_­—æãØÓ°ŽÎ¢0Úc°Æ6Üb…¾©ŸZÒ©ÏOÒ—2:ÃZù“$óRyhé\|©_Ÿôà ¹qÒfIÔZkÏñÞ请*`õ? ú„ŽºÇá£+¥çLq"å;»ÜªJºÔP¶1#öÙ?ƒ™„NI׾ķS9ãb6ì=H“Lfx ¿ýBå(QpÀ+ ‘ 3~èØ· œNÐØ%>‡ •5È·MD?p´ÿIyÈ‘ðÛMi4æQ¬›þò‹àŒ†Â¦@|4´:™±c~ø"½;¥Ö¿ï»K@ýsOgКDÏhÂ:ì Š¡EÌàOŸ›BE_SêZé¦Zg'Š»Û:S¬ß”Ôz+9þÌé:Ì­#k˜t'ÑóŠ•„Të¦Tæ ¬géCõðu¢Mœv”‘„ûhà&(R$xÖ±x'ËzL™‰ç溿¾Æ£ˆŠ¨°4ýãCt-+U°¸zË5ö¸ê4Qï?Ç„!ÅCÛW?8­TN3c‘–®Ìg‹Ä.™K¸Î%€¡‡Ø-B¥q‰±Ð‡Á³Ô®¯²I²o¨B0z5ˬ·¢ÞǺúøà¯öG V‡« ÞŠtÆ6h)$>Û\ÇS38+W³ÿÈFôwŸ8€žrã/þ~¿rž!±ßùëPYF;Ë932Wt6{¼5àÔÏ^Vw˜Çã¶F½›¶$éçÊægy½¿Êèî±ÅRþ=غMIk„ÍÏ,qÓ 6Ô³Ö]Œ¸“=)ò¸Š|åpd@üä ¨VX5Ë1qfi­é!õÜöùÁIÅÐðô|:€‡œ|Ã'möòýM²½˜4ywk¾†qQæ§È‘Ï÷5ÔXzSdVRÚ Æcb(·Ã>(¨J~BHTVvª™B ð5ÿxMÌš7p(iÄ6Èÿåeš]gÚsÆ4ü´—Žg•á&²:*ŠGRé|I;!Uy(¨âÖEý#¦5íÞ5o%1>=z é§÷}­×¨Ü•äW=lÓNq#Ò5EUîϰã>ªÌúJ‹¥.;?Uné§‚Ž'Œ'’ûÒoVšæ~œâ¿ôº`A?ÄYý(›RZ½p»-óö¶^ø …ùc ê9"¨_ð˜LT ÙÒuhò±¶i]ý‚“Kk nï¦ÁYgvÆ'r"xÄ&]<ä!M£)ãÈÔ½ ý܆NŠ7ÛöãG¬ˆ¬Å MG« d8÷–W7JLž"8ÔÕ1½Æ5n‘:²å»¦ Œcq, RJÛ"óŒðT¸ÿ.Y Ql‰À³ '{Ý*Ü‚= é 'ŠaËÔXX/¶žÖÔg¬ Àü~‘/¹†jþÜÎm‘NÃV6Ö“LÉCQ˜/­W£*±‘øÀ*848ö²_Ô(Ȧt«nðüJVªþ[…ñJ@EW¨æ2ØU–Ú Îܬ§Ex¦9rúŒãjÞÄ‚n±íð1rC¥šëP¨­ƒ:Å—5óø¢>aÓŠMÊ"´ÃÔnw Ô^š[›Szí­À,¨*C4©vþÞú81¸Aw½•!*åüŠï|Â*-òÃÓc)¸ªw*M5%u–Ìä¼9aÆÂöBCNýiÓ_íðFI¾u¿|Öl…^~òAG›ääåœÙ)œ3ó ÀÓÑž®nU'eò#MùEò¾æ>ÜïU YœyRö+Í„•³fõ=GæfL±± p² ÏõE°*¥¶Ù‡[Ìššu"…Ï «UÑ=û:fÁiÿ+ŸãZ'© á ,>¢UÆ'¥OséÛܘŠJr{AŽ—m‰h›A†°$¹¿ÔГ4ðC™œ¬!¹¥!†þR[¹Y;\¦ÎÕÓ,â.Ù}åVu6Õ¨ÅKísR–¬¦ŽŠOoëb!E )ejB_Fñ¯NŸLþhg<ìm,ë¦$€+JÐåã3Æ”»Ù~çôÖÐXóHÜØ“À•^•#à>³Ͻ; ‰ƒÌ gœƒ–%«vÕnøÃP~hÂmø¤ä–#«å'í°~~¨ ¾–ì(ö\öç3j*B“O-ÓöB:(zQ°¤N&)|TßYÃF•7Ðt¹Ã¡]øòdÑõ³ÐllÇ4-‹bFŽ6`vcû™9'öºŒ”ÓfפºÔªh/áßóM™ÜÞ3ª5”s]Ìxkék†Å3ZR¾üP6o¾Û­Üqsh?úé\@Êí™íçyq¿UfeSY‰ú¢áÐ(iïì3Ï2—U¦©áN\ËŠ¶öM”ÙÌ£ùï¢[l€¶àN^÷*ÝBnèâékTîˆÍ„pý¡€ç$N/PÐôÏrÌÆ/ÁÙýýcÉÏ=[ ¾w1²XôùîE› -¡á1Š‹½ÂqGÝá'ªá«¼8×Å~>Ëóƒôÿ þŸ 0³š8ƒAö&ζHÿ  ŸËØ endstream endobj 2408 0 obj << /Type /Font /Subtype /Type1 /Encoding 7295 0 R /FirstChar 2 /LastChar 121 /Widths 7296 0 R /BaseFont /LSUFYC+NimbusRomNo9L-MediItal /FontDescriptor 2406 0 R >> endobj 2406 0 obj << /Ascent 688 /CapHeight 688 /Descent -209 /FontName /LSUFYC+NimbusRomNo9L-MediItal /ItalicAngle -15.3 /StemV 120 /XHeight 462 /FontBBox [-200 -324 996 964] /Flags 4 /CharSet (/fi/comma/period/zero/one/two/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/underscore/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) /FontFile 2407 0 R >> endobj 7296 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 0 250 0 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 0 667 556 611 722 667 889 667 611 0 0 0 0 0 500 0 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 1552 0 obj << /Length1 789 /Length2 1194 /Length3 532 /Length 1763 /Filter /FlateDecode >> stream xÚíRkXg†rO]„*R4èg Zr#!&*W¢@¹)7W’L  *°5¸\쪘‚Ô° Â² (‚ȵ¹I‘V‘ººRaQ‘[A:@m»ôçöWŸyžy¾ó÷œ÷=ï³Íî^v æò5/:â]*-JÄ¥‰Ì6Oˆ $€‡àÈnBŒ Æý~âVR8F nP8F²líoòP8"ü„€¼aß•xY˜+ÌC¢ÃWf9bH€píÐP ,¨tÅ’±œ@¢‘X˜çŽˆ¹| ¢à¥{å­€™·DOöõ²óõwÞþÓ ,%Ý!{K"`@ù½S‰1oDH, ,ZŒ±÷ÝéÏ+Èö¢\!ACa ‘’à°eÃ"ˆ§åÁ±ŽÅ“I¨PŒ•€ˆh±„E¸ÅŸÊ`2„}°KÜo§°·ÆÆ[PY˜Øž²èt`µÃRú_8n´H£â¥-Á¬x‡ ˜}0 sq}Bn\¾gNáI+ ó±&tÃ(ɹ­ªT#íÌårâôÍkHò•={ë‰Áü?i£7mù.ÀÒýÊ!ªüKÖ±ãƒIë;fÒ>xø‘ÿðjWO«³}öÝH‰Ïƒ+šð­ƒnÒךÄJ)ì1Ãv?`í·ý°m¥¾bÍë|;ÆxWDàñþX²Ÿ×ZõŠÕû×S†ZO¨”Ù*SþÈò³¤ Æ{Ìf¼C'Z_ Iª¥ÝôÀ²âz*í ô¨T÷ÎæcUñ®û¬K‚Ã)6<¯Š3n©ííÌ·zí³¥EÐRv-L7ïN;s±ïù‚÷‹ÝùdË<<%@QÑ„Ô_úwvMêB† Üš…u™ò‡=åa³È)›T›«í*©u¯šs’n—«'KsC”>¶o¯åÞý9êWÈÎÉJdzyt­ƒäñì»{=ãÓòSlÚ]ûßÄ*õì%›:>Œ’³¯±Îz´,ŒX5«åžNü7óH39{[|ZDÙ¢#iŠ|ÐáMWÝx §©˜ø$ú»}¿qƒ3©æœ¿©þ†”äNVÙº„S¹Þ*ÊÿøàþßàÑ€+€!‘X‰Âp?iߪO endstream endobj 1553 0 obj << /Type /Font /Subtype /Type1 /Encoding 7297 0 R /FirstChar 59 /LastChar 59 /Widths 7298 0 R /BaseFont /XSAXZH+LASY10 /FontDescriptor 1551 0 R >> endobj 1551 0 obj << /Ascent 0 /CapHeight 0 /Descent 0 /FontName /XSAXZH+LASY10 /ItalicAngle -14.035 /StemV 40 /XHeight 431 /FontBBox [-19 -192 944 683] /Flags 4 /CharSet (/a59) /FontFile 1552 0 R >> endobj 7298 0 obj [1000 ] endobj 7297 0 obj << /Type /Encoding /Differences [ 0 /.notdef 59/a59 60/.notdef] >> endobj 1535 0 obj << /Length1 773 /Length2 1736 /Length3 532 /Length 2307 /Filter /FlateDecode >> stream xÚíT{8TëŽ!ÎØvHJµr‰©˜‹Ë4)Ò£¹$$e̬a˜™5¡™\² ã»Û”ÔT.¹G%v‰R®¹EFÚnmr­(”Êå žžÓþóœ¿ÎsÖZ|ïï÷~ïï]ï·ž¥»ÁÁÙÀ’yƒ»!6ÏcˆÙÈd".Ñh¸®. Rx ˆmEáÛ o Ø2¬€Æm31’>p]€q\†/Ð' H8À’rT  Sx¾ KªA¥0gˆÊyCÀ’ÉœvN`È i†p  1¨<Àôa°á¨KD6pßÊ´@Î÷VÈ šôm"©IÄf H‡£ì!é4Pêå¿aëgñÝL¦=…µ ¿ÔßÚƒ)øbqy  C4Ëþ™ê ~óFiŒ@ÖÏ]"ÂdP-Ù>L0À¢¿Õ»|æÀàQ}:….ÖA6íg'Òø} œ¬‰Î6ÄÍßv±ç@a°yû@ÿ /bÌ,ˆËàhC4#%Jïï+ÏŸfY³©Áö°&¦…Ë¥àh©ÖÄÆ 6 ä _jeȆxÒ-€4˜P€qá §ŠÃ(òBiaÐxÅú1ÆŠ»ÿþ‚»vAü`4`€5‘ÎÃà0Îúo4j — ²y‹_4¤ï˜Îæ ‚| ï@T³?Ñݨ¬0ëÔælyd€æÅõe‘w.šŽv›©<ç7í×}@D"ü9ËϿݓ‡¢ÑMz5îZ†T;£"_ ª•U‘×’ƨ£ÉÖˆ«*–±.Ç v¬ïço{©=ÕT&“4ŒÁ]×x+—Õ.™ó?ÞÐÛ¡t¦ýú<ÜS|ŸtÜ?Ô“ôôË(êH¯Q?˜<µb®C£¢«Å¿Sù">NL†µá{T°iím)7…Ž=­Ïæ²ÍËKòtý¶ƒöÙŸÓq,…²”(wåd*Lnæð[”öIJŽÃ–41ìûçS5{ë^‰NÊÞ_Xê5äû2":×Êd ¨Ñx$zX®­–ïH³ñŸ­µ0žPx,âÈh¯9–zqImðå­î}Í6%x¥÷ïK‘Z¥yoªR«ŒšÏsr½êÀç)9NÂaM‡O‰„ž\“Áγ+¬çzɳÛW†œÕIuú0ÎDMß%*¶)ð³ÝšfÈkTÝ-Í:û6BõþÐ-6﹘9eTŒ y‰ØÄp w1 ¹·?zÔ¥%«œßQwñØ¢´ÆòèT£ðWޏJ±%nWqì2ú‘©ê–ÁKö)Á¯£‡OØ•BrÏ,_ÇÜþÝ. M_½¥£:}¦íîc½ïôÐÝÝ~j¢‚ÝDùkªŒ?’ÄG©{2lg8Ýk•îz(¹ÿ¬ÇT¢¦3á]rÀMràkÖÍüóä]‰ÚIW‹ð§Fù“E™—“[ÒÕ{MÕ‰.v@í ó]Qæ;41þlOœË²i õ¡¹,M+fÚã…UÌÚ;†Õ•*ÈVóÁ!3•¤$Á¥SñÑ"aCuvÜgÃíG±pJF|c¦ŒóõFû(F0>´*›·ó&íÉ`Tóg’,®®ÓWl@9¡q¦è}ÙcØ5ˆãò{!…ð¢Äv„ÅaÏÞRÓƒØZe4º×šz¥õÑí¬2}ŠI~òoýïæP°§Ápãu²k¯˜Õ¦QKñÖ=§•Þi+˜Ñ*ÍU „L¼3N÷lI3¢AJÜÍ#6\þ|Ñ‹HŸ7i8}hϲ곘[b¸Öjœ’»{_ïä ì>qˆTôÜööPU´G½Û~û€ÕéåF'ëÇeÖ“âôªŸ½ìO¢¡ÔY-<Ýò”ìRß³´? ôœèØÝU»´6,ïÀUË9„ÚqÄ:ìÂÄΘÊSÑêô¿Vôݶ×i³m«^õáÕ×SQ Ùù[?×bò …þ½±Þ;ÚCû¼¹K4ß ·¹: ayÁK 7³ÆÅÕ'Žš Î-ìJ˜ 9Š”½šãª•áÆ+Ÿuü’k~ì7­Ó"wá ÛqV]-I’0f:ª1ô6‘}#ÿ÷îW%ÎãnšÓ^î¢PyÇrÅýÉ3XÍlWõ 'ivÓÃpßAsÝ–Ó©«Çè½õg3 n4¬/Ùp>S1J5ÿé ÌšM”g‘n:që¸%eG`R]MlÌÕŠ´&Wùa+$Èç”é<…{­z£OžÄN£ƒ²?g¦™Z+ ;¤¿¹ç‡ï>>!Ê-__¥mÉ.˜%ØéBWÛóûõêýÖß«;É>·ƒú…>‰S‹Ô5%a½¿Ò‹ustÊíÛ¢bHtÒи‹å¡ƒÚFŠw]ªÉšÝ•$‘wÝ|EëŠæËUD¯Þ’óë(û%vÔ˜¾_Ðk'Qùtævíµ%¡a£X¤Æõn|r­õñû–’~ð?ž> ¼³ž·äÍq¿íº”•_îBå·Ú{l8»N¦aˆEº´ŠWwØÆØóœËñY’Øå9UÜ7×Ïy†/¬‚º£*Þ¢î¶ê$¼m¯«œ’Ðÿáÿ¿Àÿ„• R¸<ˆEáúÃÿ 60¾[ endstream endobj 1536 0 obj << /Type /Font /Subtype /Type1 /Encoding 7299 0 R /FirstChar 77 /LastChar 114 /Widths 7300 0 R /BaseFont /REISGI+CMMI7 /FontDescriptor 1534 0 R >> endobj 1534 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /REISGI+CMMI7 /ItalicAngle -14.04 /StemV 81 /XHeight 431 /FontBBox [0 -250 1171 750] /Flags 4 /CharSet (/M/m/r) /FontFile 1535 0 R >> endobj 7300 0 obj [1089 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1014 0 0 0 0 530 ] endobj 7299 0 obj << /Type /Encoding /Differences [ 0 /.notdef 77/M 78/.notdef 109/m 110/.notdef 114/r 115/.notdef] >> endobj 1156 0 obj << /Length1 769 /Length2 714 /Length3 532 /Length 1268 /Filter /FlateDecode >> stream xÚíRkPWÆ 2UP§\¡‘ðJ²)!l¢ „@PZë²{CV7»qÙPbœ‘‡PµE:¤ðéV¸ô&ˆW+3–­Ž šzÕILƒ›j6B yEž¬‘W5—CäL‰H"A8"7_®>œvÖR £q‚ÊRY@5ó$œ”T&óÌã ‹EÍr[—L>ÐÑ Ïñ¨H(ÓFHeqáBÖM¶CÃØÈÜ×oCçYB¸Ÿ!C"•I<\šÿ7"fbH±“ÿ‡Ëèe­#¸\!̃¯¯—Æ"‹ÖWýPr¨`ic÷—.âÙOí-7ûfÌh/¨!ð|­l_ò¢löÀhÃ`ëÎÎy.x%`‘•|æ{ïêíkZù‡[Ë÷7eìÚ";!º¬gÞZ¾×}"È4¾scÚçµÅƒ '˜¡ê2¿à¾‡~…v·}ø˜5¶ÇW{]=SöúΗ÷œ5àÛ/Íù팒»aÝÔ&ëXíé]…÷R÷­«ÞèÓÙá1¬®Xµî‹‚ú eCË]«Ê¿ÆJÊG¿D¥òã,¹=ãâ-U=E>7»Ëî[•AÆÊp/m´p°ñÆèþ$Áæ³QwõŸ¹PWm¼w¼‹([Xzµ£ˆ-ˆµF~êyÏ-Á²*AÖÔódÄ)€->¿É§Æúñ„ÜcÈ'­ik·J·åÖÒ½llâ:Ö¨ 4+ÂK­ž¿ R\Ž/Hj°FÎ0­á[iúg¨»ºž_fïüN÷¸¹­¤ÂÎôûæ¾í“ æÚª'Ú~¼½÷àÖKUc¬æhi²}¡ž?k¸hÎh}¿¦á”sûÎÍˊﶺ€¢vµÛXEQùÂf!®çaiÞqäÙº§ë–¬tïo>T—¾ÍPseçóÈG3;î;ûôÚ|ÃVøÅãÂîs±=Ÿ]ö­héXœ»äš¡Á¹¡ÂK€,ç¿õ›K„‡þÅóW’ê}·]üc×Â$—=÷¢Ïð¨rZÚ W`'SÞЦ>;s©Xáu*Ððîx“kwáÃÚR¥äÞÿÿ Œ„(ÃÒ”ÙÀû€Ñº– endstream endobj 1157 0 obj << /Type /Font /Subtype /Type1 /Encoding 7301 0 R /FirstChar 14 /LastChar 48 /Widths 7302 0 R /BaseFont /YAXGYF+CMSY7 /FontDescriptor 1155 0 R >> endobj 1155 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName /YAXGYF+CMSY7 /ItalicAngle -14.035 /StemV 93 /XHeight 431 /FontBBox [-15 -951 1252 782] /Flags 4 /CharSet (/openbullet/prime) /FontFile 1156 0 R >> endobj 7302 0 obj [585 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 329 ] endobj 7301 0 obj << /Type /Encoding /Differences [ 0 /.notdef 14/openbullet 15/.notdef 48/prime 49/.notdef] >> endobj 1131 0 obj << /Length1 799 /Length2 1702 /Length3 532 /Length 2283 /Filter /FlateDecode >> stream xÚíRy8”kF¶ÆNN©ŒÙ"fÆ ‘%##9d_R1Ë;¼óŽ™w,ÉØuDŽ%¥ú”ã(K]IšDÒ"[R(ûVñ)Ji¡3ôuÎõuþü¾¿¾ë{ŸÞûwßÏýÜ×ý<:šnž[ìh0$ÁLd Ök Ø»x˜Xc JGÇž ’fî # %€µ°ÀvÜ`‡°f–¦–8,J°‡YÑl(8ôí –Eæ€]Ȇ¨d&àBFBÀ0¡•Ì‚@f³ÉÑ(á»"ƒ & ŒÀ(a^c&Œ·ÂJb:ÌF-_&~+`rdÃËÓo Àf‚b0A"ÿâ xÀ„#Ìöc±8À„µÿÞ‘GÅlÁ™[pB¡˜0±ÿ&¤rÙl‰¬›…op•?ý&}6{iïüµu_·g_VàæðSAK±£N¹—Ë¿z3 e3/rF³÷N=–—¿Èºuø zÃú{Žv¿>|–FÆv°1Mo¹=véýŽ…îÕïÕ+NÜJL\|¢¸ùÅÌÒÍÑ7ôÓ: ½¢ÄŸJ<Åø¬Æ¢ªRæ´õç*ø¯×Y)Þ®^èTÚðÉ‹¡ô;¯ )ŠA÷Däl‡ëT¬ wóiÅV¯D§ù¥Z‹"û>O”x $3w}lç<*—<üÑoVãîùxæõdÆ9\Ú}þFß{«I¿$à)NÅ´éÏÒ…mRnfmç Й·Þ§Ü®Ó›ùäнóƒ@êç yJèî¤æ‚—–ž›T,£ÌL0éãûe†Í[ï—K_ÍJ =èrTõT °0¡²¤oê­†›}|•´r¡R{Á”’qc¾mµÀ&!¾ ÙŸzÞaõµèGW¤ÃË›¶×uÔjñ_ðþµ¡Èeê|¯ÊµN8MY¦Ú’Ÿó†5·ä‘ #-—y!ü}16gÝ%fÆÈ£P\{ÒÞ›a¤»ÞÚŽ!8îÆ÷½ÌÛ[}»·yÌãÊ †B;±¢‰D|¥\¶¬heªÏ": ‚±”çcéV:<›{8Õb.8(¥$½7OæínŸ#˜‹ 2ýåÛ¨»_õgË!Yfí ÑeEá ¼Â ÷8X²·Œ×ónHI ´6‹ /4šýЯet`öLÆ›öšóps'ªK»!BÅIªÌ<ho¥¼”3r·E3ºIßÔàþa²-¾¹ãúYÿêŠ69¾ÚŶ­ÇÔQ'òz«ãf§ëzÈSoÂhUª|<õ#RW;'º¶^>ËhèxØ>½ÍCÙ¶ùʸE½ß›zጀ7DÔL³DèþÉö‡¬Ê,2}s2ÍÝ*óüdcj^=qF"ZúÍ g¦ŽI'椲êj¡²B¤]HbC]Þ–¥”ðR÷(‹/7Ž-ŸH¾zÛtOb­G=Šu·tö«BK†’2Õ+!…;Žî4¿Ð,gè#6Ÿ~æÍV :aOØl´¯¢ É}1÷cŒÆ9c±—ú7Æú#xcœ@zˆñÜ©ù^¹*ñ€ØHxAÀòįNvî2¥µdÜAØ7íÕÞÈ,¨œSÞyîš©¬W,´@Y»Z·5¹ÕUÇ/g0„ôª»v<-ŠQíRÊÕÙ]²:§Ë}TDwï”øgCS…¥ø[oÅ9ãÛÁñBå¾ÏSR}›M)#½)œ*geÝj|ãÕz67d88îÀ³½DŽCú•hõ«÷¼JÉIA|ºväª:¾VËõ±»O·0Qù$íSàúÃ6}’š3».ÝSn”aøzÇÔÃâµø·8A=‘.“•š²`¤!6)Ñaø¼¾é§*âàxCøÆ)u|Keg«§³u@?º(Íc½¤‡Õ­ÊÄâÉó‹’ÏÏ]{Ú¯´ýÕŒôÌg›÷j›ô¦˜cÑA §nì½c/é#Á*¯ye=ÒÚˆFLšçT't@2YAïæQumê?ÂÌBËuÕ? òH‘×0UÚùÍëó_ Ÿ…42Ñúp̦Ý*%v;ÝHC13¶/_ÎðèÝ5 ÷øé}_2¦xíÑмœÚؾіšG›®ŒPÊ_OŒŠ|ØU+^€ÖbDÕø]@‡À‹J¿¿ð³æÅ_zëìÌ_#éGdö«3gºóÔ­ç×ÞÛsÜ[?Üÿä /µs‰jÁX@-ç¾þZ¨ñãé#ÎYiàŘb­ ã̧:k˯˜YÔ _ˆ&ì‹X|,9Ùù5êÂMY ´š”nl<~W´Ï°’†ÏÖÝ–œå˘U³ úâºýfÇ_×Õ<ËͼôêN[ˆÖ!Ѻ›ÃÇŸøqЙ„›_U€¯ÇJëž êHçBS6/sDüFïy[WÓ.×/áoª‡NŸ0d˰*ã#ÀôU?D™¾ÈúÚ¹Øõ\”"ºZg›t£.i²{¡MG>8Z½s\õYgºÍóËô4åñà%Ìø¡þoð?a@e€d6‡‘ÙP«&²è endstream endobj 1132 0 obj << /Type /Font /Subtype /Type1 /Encoding 7303 0 R /FirstChar 48 /LastChar 112 /Widths 7304 0 R /BaseFont /SCMCMU+CMR7 /FontDescriptor 1130 0 R >> endobj 1130 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /SCMCMU+CMR7 /ItalicAngle 0 /StemV 79 /XHeight 431 /FontBBox [-27 -250 1122 750] /Flags 4 /CharSet (/zero/one/two/six/p) /FontFile 1131 0 R >> endobj 7304 0 obj [569 569 569 0 0 0 569 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 631 ] endobj 7303 0 obj << /Type /Encoding /Differences [ 0 /.notdef 48/zero/one/two 51/.notdef 54/six 55/.notdef 112/p 113/.notdef] >> endobj 1128 0 obj << /Length1 1020 /Length2 4167 /Length3 532 /Length 4866 /Filter /FlateDecode >> stream xÚíSgTSë¶¥—XèA14¥ ¡w¥7é `ACB@j¤JAªÒÁ€tB/JGÀR¤÷"½Ëž{Ž÷œûó½_o¼=2öœkîùͱÖÚ<ÆBJÖH+˜:Ò -¾–©èE@à""Ê ‚†#T!h˜,,## R‡Y·¬„¸¬„(€¤‚töDÁmíÐ ^¾Ÿ")’# ‡Bœ@º´Ì‘à… @ÆH(†ö¼RB @F?ßpÁ\a(w˜õ  ²†CÑ +˜-Ü ü3’–“ $õmíæügɆr%„ñþŠÉ"„´F:!Ù«†Í|+Y×sΙs?p…¦®r`gU‚XÿóDw^œEvÛëïí+¼ª& ”cDM÷ÜqM)A’RæêÉÓà²kbF´‰.y¡â!ãiã^ ÄØ‡PU Œn"ëÝ貨ÒcÜßgЦƒÖ_3šæg4Z¸¹ŠÍ¡¥)=kí,¾•²5FæÉ¿Rui¦2<-~íŪö°ï; ^-T×}C°¦Þœã”GòÁDîìC1‡vÙÚÃ9"ß_d! "¯RyýXÅÈdÖëÄ>ážôÛð¡‰EgDÞ¹Ïw—œãB=Ëݶä”^F/ðÅW¦¬J§ó͸3o·[É”|s]ðÚ#{e¾Œ¾Õ9šÖvyƒ¥T–Ô öÛ:­F,(aö¨[›SÊQž7Š'ïß5èfD§{òYׄÄçý8’ :qËèM¡q¥R&ÆÖ?Î#/aæÅt3#Àÿô¼7Äô©‹ˆÂ|ö¢žÚE w÷ù:2wA½bI—·—ܬþšLϱ£É½²úÖTKækÊ·¯ãLß©¸7ÌRìˆ*Çd‹ƒÎÝlàEIFÉ)£Ç)º$‹£¡êMl*¨na9A!âH—Œ7·“ãÖˆbsŽaf;“n´ÅC ÄÕ,âê";:šD©ø9ÿM F-Ão÷ÜÈD3EN³*ÜîJW,$ð¿mâ¢HgM:9¾v©ÝyiP»üj³Æç]GO¼VTOl+ m¥3Ìw‰+×b4Čћ IáÊ»0sØâ - z®B¬v~²ži}™höÙGhèö‰ÜTÔ‘ tª¥H:ç€*{Ã{Lôí×Ö†Òê4K IÔYÖe©Çu@W«ãF. ÞÇ$Vr_¢K‰Ÿ×ty¬éu­#Ø©ï,B&9't ÅðíãÍh]°zBAÈù `Á—<.pBDz@aý•ñªñ”}8nt×C«MõÊ5/DŠá¹ÌÚ<} ³™£—lþÞðÆo†šÚÈŒ2gè€Ývl.Фu„,Ó!SH1穳Z›KÂñ=+fJ¯CÍÏW/©_&^q4Iêk{ÛöM¾°Ó™ËÖpdƒ“µi¡ï´ù"µ¯Ñã´¶÷ƒ£¯å£TUöônI\ÂÙÓ¨±ãKŒÇ¢ªJO¢tüÝœo®›$û‹`,¤ÌKöÞH¢c{[·V-gÐ-ä¤Jê˜5¡íPE´‘Éù¼|ÌŸa”MZñCt íjf`=ò†P”¶¤å‚¥‡`Š/Δ]àXgÞ (ÖïH–®¸0h1˜Ÿè^ß]X–Ñ\˜«RyÍ=¤»È§=›‰ð/Õ˜¹.¥øÉcØöìî^ÆK@ÀÈ%R_-6 @ÇÑ5‘ÆžtpÄíµëTîÅ0QZŒÚcn¦®mÒÑu“ìëpÕ†e³°¥¢Á.UÌþ¡`γ¾êdd´)÷4ÖÜq™þúŠ¿=ŽÄ»=|a^óÅ…mª³W™R€òÏCk-“Lš£Mðß:øéR‹oJ~{84Kˆ§½yX!lÌ¡a¹<<ÉÍ*½Û¦ŽÌ ‹7|À&h+Uz€9·w]¬ÐäõÔÒÊÐêÍ îð}Š2ð«BÛyq;‰ry²LÕa“\l~‰£Á Ûʘ1É,@-0e›¼nÂÙ夢OÊÎ C°Xªûšw¹~Áš‡‰?ù Ú¿‘šÙ@ò~Ë?|e¹wy\éìåf6<;º;&åúGÊN¡0¥®.ß½2º•;1úÛì[BzbUÃác¡m üèª/­±uFÚø`%Ê]Ó-ûë3ù <'Mb2¤Þ7Güy–ÞŽùég»Õ÷µe“rR–ÌJ¢©š鉮ÌzšðïÔ@—(â>…œHÅ7ºÝ©lùm„\šãÏ”‚Õ/õŸ{oÓÕ‹\µŸ+ Ôsɤæ+O+V¾°’ë›e™;¤Ý¿]ÞX{$Ñ'[¿Uêá¤J'W¼³d¨ÜØwd?°Õ&;?"êÀm’¶+œÈœ%/RÞ/~ß ”)!íO™º%`Øþér/ÀgF>BUS êðŠ“Þxú+Xûò•—”@‘M£ÓRæ;œo↎—ÓÃe‰/$e§V'éOx?’QLŽ»÷¥Ë$'>›E¦t§=€;è•7&Ö(“kqÄÚ½‡Mˆ¨vŒ¿Öl‘ýŠA( ð´éÂUR—q¾e8GúKaþå"‰Cš‹I›hÈ¥Iú‰«Œ’õÎazyLžÔELô=À«#¯äåýõ l¹R<Üí_>ÇlQ,]7ùäILj®ê(*6ï&íeof}2^ƒ©âî´E‘A’ñO©êô»u¤ÈÝO-/ŒVLçØ0ò꺆ܔ{n|‡€+iô3ûË~‰¸Þ’»VË‘§K)mQú5Qcº<ü“f”⨥Aµr š’Ž3rÒcø©3I„ý ûZº×³a*£³À »æÖŒ‡ãÝê¬|DîŸÛxº+¤4HÖÊ Ñ'¢{S°m»kÈTVEúØ|·iÀµpAŠÐœÓãNÞ³û_ä qéä.RUÄ“]Bâ¯YLwPJ£žY=W 0Üxçñ!†®¦ädÈDÈÙJò -çW,|Q‚iò a©cÕÚû\s!>´1g—üïmrõE–Då)~ÅéY6Ôu ¼£³ÄÞM[·¿ÚúÌ“Ø-q”êQ<þmÂÞ±Ù6öN‚Yb!p¯F‘y 8ʆhÆyŸÅ± ¨g`àìw¦-kw®€™ö²ýøÎ5ÖˆÖ¾–Û•ÛézŽ'œd¤ »\¶ ‹Ì¥ó›û/¬Nƒ«N&Is¤¤›Æ˜ù–ØUË4ö9݃|²“a4¬­X ¡ýXWœžöӆʮjnÌp¿Ñ[¦VÆ| /KÅxîèN»2Œp„?tºH¤$7zx›xó}JkËá ¸è¨£lÞëL¬TCQãÛÄáä2`Ï÷|xÐxžeþ°aóUËÝlí-#{ù4|&ÔóùñCï`iöëéÛ7.ׇbµ„vd[¯#6±UŠ1“KgT¡aÆô7‘¦dÅrÌõ{4EšHK#˜,[Gw(é7„ùê…­¹æ\-Ï´ç§ã¥ªwxq›ë«aöUTŒÅBð•nU*&öK² 0¥A~—ïx&ïÖ$㜷^³ë ?æ¦ð}®P¬a.®Àtzvu·ïÌ˶‹üÁ¦XCÔø±Bç0›k[>¿¼Hà ’ØŽU6ø½&”jÿUýì¤6 È¿§ðlÓØ3 eK®fÑI÷û'«ê>‡Jøˆ^^pÞ9Ç®Ýí–Q]v/ wÑ8Þ} R ŠD>Pkk*2ËjloÖ©Þ—F}ûRˆâÌÕ€Quϲ3tòPÏû$ëaUh4æ p·; t“W…9*‚~qïiK |6,ûšz|×êk¬c(ÝòùIƨå±Ý tè;¥^*ß5ÖZ`¹l–gd^[é7Z&Pý’ròd†Û¤âµÇä—nH—×ò~ahõ!’}4åà7ñ¢C0Pë¸úÈ€*Ñ,UÒ<ÛÜ~WË"Ÿ%:j˜8x›œáÚNɇÍîr#Pö´YK€L]2‚ÏèbT!÷÷çni²Eµ1RU…"2ÏS„†>¿JE~|²’£Aææn!ÿés‰ŽeÊ8e3çúú\íÈÝ&í2ú¾kºá“Š^ÅBä…ÏåÅúfãYº6+Îú¹Z^žª!oÙÄß«ƒ,lX»¾9¢Ùn¿î£¾-¹vªð§c>kíoïðŽñÐôì{y{«;Q)uOɧ¨s^¡g¼˜Î–›êryð•­ EJeó`ˈÔ¢Zöl“q´ýþC{¸÷뮉ç./ 9)§M‡Ô¡P¼…úûÍà!vøÊ‘@¿Eq™dž¯ÉR÷ÉòÓEä~ Å<£½s«7 B‚_huÄŽ®Ü ]6çá[wÿZÐÞî®Êa:á|R¯]:ö´Þ/)dËà.§¹¯ù“µ‘|#öø]H ŽÔùC À° ¦Ù–»Ò2¤LÏט?`aŸ¡ÞÃ7~ÆŒú÷ìº2`$NYH|kKÚü:™KÏÇu´ðk.¡MAïâÞ o{ؽ[´{VU:Ñ’§«ƒÜÖÚ.ª TeÖ& 7êé½ L÷÷}àÃ=™Å>wq…Ú—:xiÓµÖvŽoxí¦'ý4 Foê‹ 6ft®Þ$r…V\tøˆ÷ÛÛ~[<ùØÄY‰3ý÷Kôþ6<’^ïî¹d; ^ÜýüÎÿ;uwÀړα/8e› ã+´O-ôÞf0’?½©i6§cDlâKšOÓka¬°ptÜ`¸k"n¼=ì#p5ÃѤ#çÃ.e‘Œt©Uö%ÐrêÉw™rqšÜfŠÓ¸…Œ£µ×Ò+–U¨Å÷Õâ(‘«àÁé»sW®; ì^3Y²GÓj³" ¦ ™b\ׯ =fN}_´#X6,%JtÔ‰se儯„µK™Ê㡹ŒÂ û~i¥W7ôž‘ã›)ׯ´2i#½¬r:%ñyE¶½æ±â•Ýgœv+¢ŸÒÙt Ö À ߬4Î)T¥ªi*‹sj©~À^Œ|ç›Ù‚¹_ëìøø|iÏQdÇþÇ;X…šxŽ€ˆ£ƒ¢sjÍ¡8Êâ×éC’ù1™ÌCW‚_ø=m ¸íûìíè,UÄÜ铆¥é‡`ñšÇFæa‘ÓT×Ç|;Íüî |KÐ>6c¾å˜/ôË£f½Eîi"ª-ëévÄscà æå­­.qâ~›Õ]G<§cq¡Ìehm׎mi/罚3“0’½ÂRœL”²°i]Z:«lqaQËg„,:—Ny#àî –Z#[é<"ÿà ðÿÿ'  …F:BP€=ïÒ endstream endobj 1129 0 obj << /Type /Font /Subtype /Type1 /Encoding 7305 0 R /FirstChar 7 /LastChar 114 /Widths 7306 0 R /BaseFont /GMCFEG+CMR10 /FontDescriptor 1127 0 R >> endobj 1127 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /GMCFEG+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/Upsilon/parenleft/parenright/plus/zero/one/two/five/eight/nine/equal/bracketleft/bracketright/a/g/r) /FontFile 1128 0 R >> endobj 7306 0 obj [778 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 389 0 778 0 0 0 0 500 500 500 0 0 500 0 0 500 500 0 0 0 778 0 0 0 0 0 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 0 278 0 0 0 500 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 392 ] endobj 7305 0 obj << /Type /Encoding /Differences [ 0 /.notdef 7/Upsilon 8/.notdef 40/parenleft/parenright 42/.notdef 43/plus 44/.notdef 48/zero/one/two 51/.notdef 53/five 54/.notdef 56/eight/nine 58/.notdef 61/equal 62/.notdef 91/bracketleft 92/.notdef 93/bracketright 94/.notdef 97/a 98/.notdef 103/g 104/.notdef 114/r 115/.notdef] >> endobj 1083 0 obj << /Length1 940 /Length2 1886 /Length3 532 /Length 2537 /Filter /FlateDecode >> stream xÚí’y<Ô Ç)EC‡ä˜P¿Bæb\r#Ç0´6æø?s_Œ0<%䪜¥ríl¥¶t­#-•”ulFrm¬†k;L:¬}†j{žöÏçùëy=¿ß?¿ïûûý}¾Ÿ×÷û5Ü‚'˜;QX$ÇbòÍÑ´àâCøÐÌÐÐ… ù‹éJäƒvÚÖ 8 ¨  ¬í0(;¬5Ìpa±c¹5’lw1Y,²œ "™€‘ 2äd" °ÈÈENt:°øy 7¤ `h4@È|€R!& ¹èÈ“Á¬?`Š€ý) ryrSÀv¹I@n‘ÂbÒc Cú²ä½@¹“ÿ†©/Åq:Ý—ÈX”_šÒßòDDýXÁb°| ø°( —ùeé×às> 0¾Ìzò‰tˆìĤÒAÀm‰@Y`?$ ‚<Ä'GD:\â “ò¥ùø–Œ ýðŸ=~f÷º”Ä!&?0– ¨ÏÕK1ús,Ÿ!( …–ÊßO_û¾hæÆ$³(“ `°V‘Ë%ÆÂä$°@€˜P€B¹c$‚ÉâËä£I"X\ØâZQ’1¼Eº0r  ó!¶¼Á'f ‰<ù—#oKVù¶­LÇø~|]P™=‰Ô~:mÙÖÝá.Nb(¨ÁOÇû陼eùq +³n?Ìhb[ιí­âØ”UýÖ¢±¦¿F™â–l2‰œ" •Ée•ûš”шuºÍ®ðƒ6áØ©iÎ8% +ÑÔaušÀæÆ‚uü¼O×IÛ¸·â•-&µ#;½-E”S1{e¸JÿO¶+çßjĔ𼠨Ù£"Ó=<ñN¼\}•Ó”Úò­™7 àmC膼='p: æaáUØãw´j:§÷ÝI1~Ögè2RÄ“‰QúåÔª²ü/Ý+¹adçæÓ|$0ûšwvðͧoléöñº5ëârÇ¡7^$q~™ÖqnÂךj¯Ž«>þj[v[{â/Óq6iÁ¢¢cWß^¾`­Þ‹—P—ÝN£*xTüï¯ 9PÐÐ’6ÜÑ^¾F½?¿GûkaΊú Í ¦5½ºµYô2‡9ti*&Î\D¶>0`|y²ÿ‰˜#·r¿õÿžTþÐL?§ò§Ÿ=ò1©ÑÖc .˜¨{‡|˜5ÁVuËË)³e¤.Z{ç5ö|zþ¦KGéì¥Hژđ˜æ£Ò‰¶¼ëY'Fxg1³ŒÂtÊÉ8eÛ7cy ÉSYñ¾ä‘v7¥MRÁi—ªŠÓ^,[Ï‚@u -¥°É|ÑõЛAkÓÉMÐ÷K>vî¢+2ez|飸ڜÇcCª¡‰ÚšßüáJÒ+Òk³"Tå«yôZX5EÃ`hF9·A¬§ËNRxƒ®vМæ _ >b¿Ã3wT×þ=ÍäÛîîZ¹P¬õšÊõ.É@OrþÌáà%Cçïv+¸¼U6ÙI”ÀîÐÑÊš‰h 4)k½ò@èÕçvöð«-Ú°lבgo±}ûì…%¼/4j±Ñv=¬Xÿ¸õz샻Ǣ¼Å¤ÜŽY‚ð :hÓª\1„YΈHDe4Þl}Ð…¯>ú ÿÖt.pÊ ¼äšG %½¨÷r"¼ï[ï?“ž]_˾iꛫ/³ D^¯¬¾õ MGºSéç¼Dý“fõkiÇ”rXƒQ‰Á¤J81nÿôaiÏMú$yßþÌÖ”zÁà›5Æ®çö›6ž˜[®âxÿr¯3GljÃÂH¹S^€·Ÿ“îÔÃÖ÷ë‘îg7v§´_h²µ§=¤|«çÒœ³av¾ÎÆ̫[]k S<9¸£Ô¨Ý9[BTäÝÕдݳ™³k[(àº/ã±'Àà|ÙØ#{éX)ýkË{ãW ÅAÙáû–¼xÉî+Œ Ï´N>?·N¡ª‰ælÉNYÅÝ;T«`•ƒöHóºxF UŒJºD‚ÖåL»×¹%­›÷bbhp½¥< :Ÿz@‘Æiö{uªoTÅüùx·[XK—ÒKLñ8<./w®Tór²ŽÐu«%9âær×Ð.ÖÚ6v©¸·5^ý3¸Àå‰{à1½‡%˜+Cqæï/;ñRÒ/=%”§yJ"“ƒ¸z~Ã43«B2çpg¾Ë+ÿh²¤Xx”p9i[xÖ4Qâ¶_š†gÕ¿öEtv8i;Aá9óÖðA–Ý¥¼e½O|Ásã啲Žï‚âÍÜõ«™PŒê£Œv¦â­s¬=pïͱ¡…\iÿý“q¨SUWkÆ7¯àqnû´<[½Kíç«‘Ê:‹ †Q:vZõõ*í³mZÂN‚0ÔÒšÒ«u†ô*ôDy®ÃôÍJŽxSg͵§©f¦YFd–zúŒ}+£Æt$Z¼Šì¤›í²Ö½7Û0Ã{‹µ©%¿*FéÆÈ\5†jsqÊí•Ç3º¦{‘OƒÞÿš^¡ÖGŨ»rÖ¹˜…'Gö°{„ ß«í†v‡“8½ÚÅ}„™]&O‹.¢þÃöÿ 2$rù,‘Kƒý¦8% endstream endobj 1084 0 obj << /Type /Font /Subtype /Type1 /Encoding 7307 0 R /FirstChar 0 /LastChar 112 /Widths 7308 0 R /BaseFont /OPSMVO+CMSY10 /FontDescriptor 1082 0 R >> endobj 1082 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName /OPSMVO+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 /FontBBox [-29 -960 1116 775] /Flags 4 /CharSet (/minus/multiply/asteriskmath/plusminus/lessequal/arrowleft/arrowright/arrowboth/bar/radical) /FontFile 1083 0 R >> endobj 7308 0 obj [778 0 778 500 0 0 778 0 0 0 0 0 0 0 0 0 0 0 0 0 778 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 833 ] endobj 7307 0 obj << /Type /Encoding /Differences [ 0 /minus 1/.notdef 2/multiply/asteriskmath 4/.notdef 6/plusminus 7/.notdef 20/lessequal 21/.notdef 32/arrowleft/arrowright 34/.notdef 36/arrowboth 37/.notdef 106/bar 107/.notdef 112/radical 113/.notdef] >> endobj 1068 0 obj << /Length1 1345 /Length2 8469 /Length3 532 /Length 9306 /Filter /FlateDecode >> stream xÚí”UX\Ûº¦qî.…[p‡àîOp)(¬pw în ÜIp‡àÜÝ!xð®µö9;«÷¹ì¾ê§«næûË7¾ù1&-¥š‹¸¹½)PÆìÂÂÁÊ!TV–ç`@žÙÙ‘ii%€&.Vö`)  €C@€ àj àä°ó òp òð!Ó$í<¬,A.IÆ¿Šøâv@'+30@ÙÄ´ƒh˜™Ø4ìͬ€.ž¬q[[€ú_Îu 3ÐÉ hΊÌÁ0·2s˜-­ÀÈly’[Øøþ6wuøï”ÐÉb Àð·MFĤ¹=ØÖ`´@fS±‡¬„xù¿aë?Åe\mmULìþ’ÿ{Rÿ#obgeëù_öv®.@'€²½9Ð üŸ¥:À™Sš[¹ÚýgVÞÅÄÖÊLli °pp³²sÿ+nå,cå4W³r1,LlÇ`óÿt™ßß>Ø4$dtt˜ÿkkÿNª™X]4=€ö?Õ3dž ÉÉÊ ÇÎÊÎÎ)„üÿûÉà?“›Ù›[-œ<¼''OdÈ!‚À›`6z€Çl¬`{H 2_€…½ò_û Ùz6[É_áE8l¦@—¸læ@ÛFxl@g+[{0ÇŸ ?€ ²µÿ(ã„hؙۚšÿ#ét°úƒ¼6'ý¿™‹’ýÉó@4 ÇÞüOHÀffog÷G“Òd tvþ€¬ëlkâ ú¼“å_ r$þã°Iþ›ø =²ˆ À&ÿ‡ ¦ÿijÒ‚ØQý7ñC¬¨ý!Ȫꢩñ‡ CÕüC/:òÖºÿ&ˆæÇ?ô×ëÿ™9;$iþ„¨‚þãVÿ@ˆsë DÊîB(øˆý?"åü„XtûÇ‘ôzü!½žãÿ¼öÞ,\œNö¿óCæËîû¿š¹:9Á.| ×ë¿Ù r#@ ò✽™PˆuÚ÷ÐR?é‚É2xFgÒŒâÑŽO B¬ÇkBØ?'4ä—XŸ°¬­Ê1SO+ÙÌ-x6ˆ¾‹û xk°}ZÀ@ÃeÌËÔ@<7;Ö7„Ìùуa÷9b‘bÇ¡‘ù|‰úfÝ­¾Zéƒ/Ÿè4®t~îùÊÏÆlc%Ýœz7Ù §U)¨}°?òp"k_`¿X4H Ÿyƒó²HÔ³:m³‚–!•£ ;›!üô†ÑÃbs ™#ˆbQ÷‹€‚† )ïOíÜ ±0e†®Hs“¢òÒö£À6eê´|oªœŽ¼Ö-IY¶Y)‰­°l4°¦çc§¸;l§æ}¶MÍ$§p2‡Cc ­ºñý3í%M ܵÁããÚÝkQç¹™7%aŒ3–¨ó1ã(;üLøåPÒ¾‹¸¨ÜŠXÔ»qÑMŸæßÊ]Ùܹ’pêENäCÁ{»´Ü·Ê™ëšõ¥= >ôßmæÿ:êëŒÊâ4”‘Ô[3nÓœg¬øÖU …Sg0Ð$#S@Ó„d¿°-A@)‚C*„‡)®¿£ Å.vO{ÄŸ€Ú}°yîÉÊy?O? íN¤j 4žó’ùÁï“ØÄ²žh2yóŸÁv(V{NòWÔ áÓ§™kú°¼O³)/U, µó¼x“R&Pó‹6×§ýZ¼©ß"Ç)PÍ èÃÄøƒÖh¸âÂ3^í1ߘÕéƒh[gØ ¼SuïíÆÙ¦jÄ#¤où2-R¬^Xäç~1ÏMa„,ˆ²¹°-@ä í•ê÷r» 늂%Ý4ª·Þ/ËXÚ°Øn/Är¥Ö­¤é$ªîñSðCœÌ© Öº=rÙe¯qá¼,qtf1]Àà©Í™xþâ3û†[<ó‡ìH1Ùª4Ç LëUÕ‘hk«˜ò¨zû4èüdÄQÕ¤ã¨ÛŸ"Y%º³ªü ‘ƒôyíY˜„_š`µ§ê¯Ë“o¨oN~–sÅÔc.+UaqyEÄ.fÙË ˆ ¹Jý?ú5rŒõF§ËyÉ‚ ®„9·’çÀƒí“­- ëå"}lÊÜŒ²Y˜ÓOc!:÷€ö!¾L§Ý-8¬MÀ]5¹>ªµt#<ÑoºíþFœîëg ÕŠï N0Sî{wešSpDÃHa!€F.Åhf'¥†áÙƒ…®9==ž_–’™¡šv~þ]kÇ–±¨ÖDé!Ê¸*þMàÖÅ—£Ãµ·‚ðSݘºró©Z0ò°Á§¨‘ëÁÜ[ SÉm_çi£=íçè%‘¡wz\ëõU÷³5¡û‹ULJ'‡6£Cò„lùÞ"§OQDkçöákæà4ËY aú*&“nëKƒÒ›_ÑJדœƒÚf‡T…t÷›Ç­51ÊËŽ‡LZ©AÜÑ>‡‚ùN”ÛHA¦'e£¤k‰=#°KeüJ¯Í=1d‡¢­ƒoðßš½iÔ~” ÷1r‹“<œÀYoŒ½Ko,)Gj¯¤?G5ÅNÊ<¨ÿµ<ÎðC~Ûs&RÆKá’¯42ÒúðDOÝÓ˲ÿ9›~Åd˜hË®¿bg4¾R±Ymó©dƒø\ñn¦ø;G&ï–åÒÖ's\ØfÑÙŒx²{ŒkFä*Îù1ú¹âœ8Çc[ÝÎBÙùÞÍ>©á$g¯6.;º°Q<—bsZþïZR„¶¦Â–®ÑÛãRâÕ¿iÎf6‚MóÁçTFØ¥¢­/š°Måî¸4ýNy5 –¸e²Û,Eb…Ož²7 Û9u[•èÎÞ!fÑMopû¾—+–íjº>·ñ‰>S£PL…C=Õgr9PŽùhg§)#ly2èb³aœÈ”Áéö«?ä2¾Œê¬¥ VYË]/LP[PP)p¹šâ»gÓ(;ŸïŸú:í'ì€ÎÐVæé?“n:…¢¼?(7ð‚BkPt¸ª vjæG"èbäñ ˜iœå"ñ 6Ài}²h’æ-ƒù1¼}m>ždD¥!,ro©÷aÊßÖS/2ÖbG iîd[ón꿲APõwÜĺ7F¯FÚÉÆX–D`D (Ü~®9ƒ)ó.EMåÅPMOï{‰ÒÀÇºæŠØE“½C ‰º©VJ¬oƒZ™;ª^S “ êqx¤Jw¿Ë‡ilœ«Ý¼ñªVsV„ê[ÛË~oh°ÊEz¶L¬s>fK”ا$ÒÉå8ƺ:1Úº¯‹5×§U6øÌšccìfÏ­Mˆã‚ŠÛƒPf#ØÁª¯åcѾ߰/oï…„1ë;(RJÃH¿iÈãׯ2ÿÀcF‰´ó–5 üO¦¿³¥s`dñݩǢ–_nw‡'}ûÜoü¹7T‡LˆT„!U~l‚0Qø½ ø2ví<§ŒzÿS²EûíCžþa—#€*}}þ”0*æê9Û^çáç~›[ö—gŽ['ŽÏ`aÖMõ•8­í‡‡­±)åi[žÆ>­Ã$5hhF£”njF±ø”F“ßÜG̽1¬1 áH31„>œXºùm>QŽ‚Ý?¹ÒçÈÙ$u(ܧŸãl† ×_Æ]%Q78™½¬w ¶]Öe@¦ pÅ=£˜¯=2q¹òF]¯æâQ]##l–È Ôbš•µ;UB Ø2mŠ ì7üoÎNíï48I\‚¥ãêI´#u?tV­Y—I+ÓA©Šô°Ï'ôT›t]}b5ÞÞ¬Œ³z ¨ò̾í·áÔPÆÑ‘:¸°^~?`Çr?Õ {kó“à×~@V¬•O°AsF9G0ça@ ?ãà ãŠõ{W#k] §Â ÕaOÿõÃ0õ°ÿ.ïRBV, R Ï ^ߌC\#ývß%Þø&ç²ûv°t¯Èj÷nUŸuQVÿYì]/%ñÕ{çÕ"õzø^éñcKÇ_{_.©,rÞ“ìåãoXÐA塦 cmüpLš†#©Œžh‘a2^X ÝeÈ]`mñaákŒjç¿3K[±ÛåWÅèZ܆ݗ#ÜÞGb®¹ ûÍå'–)²}“Öó*µw¦¤2îÁ5¾à ´&|È9ó?_mXtGgŽêgK´¶R†îÜýý¤ÍmU“$ÁïpŠ*“`~œ”tY}}dPb¦ º¢q…<Š_¤Cx]}¾6aÖõ&ÇÌlÆî@¥‘ºš¤‚C6?'Æ{…—÷cûe¥à{ê `÷ÑEKÒ‹!>ntn†Wxì;Ï­Û/Íô"'| ®š=†€“+in¾×³÷³9÷õÆÑIÄS­C‹²7aeï±¼%XÓ±œ‰ñkãíKõ#F£i#p¼_bX9…Ñ´„ç²ìÔ^©e艳G0q’Ù·sƒÑÊŠj¦dìpÞÚÁ,©#Ömvî}¥ÑEy×¥…ñ!Õ*ÜÊÈwL8Ð+^0góž÷7IRþ"çEJ•r¯€…bà‹¢x iØo0sº/²_Ò¶ç>çáÄË­o?™®Ên£Õ¥w­ïæ6"-tŠÇ‚%µ)P‘­u…³©®(‹Êç¾@“™)׳vZ9ïiï(”çS ï¦ÅÂ[ÿTœ˜9u׿ºçàÆ›XxÇáǯ­©/Ï5:tH±iRÙ(ï¯Úè‡ã­ü‰·G núÇñA’Üš©üB` â™Eîa}¢åŸ}ƒ#g²®"ÃåònŒú’¯öcJÑuÚ¹ÂÈÎaªf®¼ ÒJÞZÒ&«SèÁÂû ˜¼fŸ6–è)W¯{r¶Š…S‰_ X𔓺>øí9¹òÓ$€^P›ŒE¤.RovR?àr£¶Ãè*u?óé´–$ïóÞè•„ãL¿/Îh%¤ÍÁ¸%ÿìºëûœ[ÐL«YÉäoHGšy´aÑð©U7êì½Ì–Ê:«‘;EB zi\ætï V”k‚XÅd¦I¤mÆ* ô¶V-4¤ZWÐÏC!5–òfÄ™Ú.RŽ„]yÇZ‰rƒž-©«\Ĥ³3@žR5GaŽ¡tá*@ñ™¾bêßz1I ¦z¸qFô©R펒Œl²rôë»ãžS\ô7á‹lïTòÙ]#1—Æú¶ö© ÷ æŠÂ‰tçaèŽõ‹Žhc„wáñçŸvÉ’z0öw ÝÊ<^LGÑçÈõ®«}ÃŒfo—*À¬Î oí6q¤©Ë0—˜ÌYŠÂ>õ¿×´OLGeønÅ6É]P¾¥2ì1®Q„Òú ÏòާGôÈj?¡“™rÔü'™¨•ý¢û÷$ÿ¤”  = ívÞäÒãÞ¨whÇWWD½§}Há#9ô…= Ô3Œ¸mHØ‘ëÉü~aÄXýM[î r¯OZ+½LC7‘u,Wí¨g*„±¼l¿6²°"7-{«w ªj»ò<¢äÊ3“[?¬´VuŸ²R #}ÏJâ1è${S9Åe‚ú½E}o-> }.ðÚ4«Í6xû‚4 ”¯ðUL.“P)Þî§«$˜²®/]¹ :A¦Í 'öE…ø:½ð÷o-Gõ/ß4€}Ëï•aÙÖš^oàäUæ÷^¿e‰f%ˆ:”ìÕ5}”rã¿T5†Ï¬9‹–Ì7Sö6E}´Êª•Î¥|4)|l{ÉÝ —¬ÃHr ¸£L̈qº©û+%iI/×LÒ’5 ´N2MÚßVÀóãOÐI؈¢Syp­êx"ƒ&µC§»aŒ’-úé«àɸ½Éá£Ç(+†züáu2$¸ ?ÚVvÿÞ„ñs‰U…r@þA´u”¡“—L—r´._êêÔ®pôe3ÞEZ2hùWUÉg‡ènâ Ž”ßãµÃ»¤Àulò]žª* É—¢fQ$l2ü ¤8[¸Ñ]8Í RFíëÖóIçâz©oȈ'p(2·ìos§º\ ›ª%(¬Ýxæ#B;é«íM_–ŽNhoA$s}”;&k"%Îô«h‘ûV ² õƒ±üZf¯pÜ¿ÒÉ×í ìîï·‰ù?‰î6‚%ƒ˜¿ÉŸüšw-2ñí|åIݪ(+.Æ1õãbË$PyòRõµÄõpÃM ¡3r]¸¿áøì›Ê»+…ŽŒ„iò¾¿‹=зO¬Ô.¹l8:Õõy”ÅBWë©®ðŸÓøæÿõ-ñ¯¨üê&õÄÈ|¼älLÔkãµ uÒ‡³™¡6.aÖDFd2jeó÷&¨ŽXh…H?‹@gG2Öìéþú˜݉QA=h¥úõ{„ºx’Û?bç³Ú}u÷>ßz]t–¿ûY%¤ Gõ™ÕÅÜQñÁæ2·Z¹³XÊ2sJñ“BÝâ^±M~]ŠEì-OI?˜ çQ@ñp¿îÕÚ¬ÅÌáÎrÄ8»ÎÓäS_BlªL†¼æ}„ðôÛS ]wå™;…qò7­ƒlµ%Û€é}Gü G[‰Û AúQÄ÷Š®ø'*¤îeH‰\•ä2|6‚9é¶P`“Ç(û_3åyáCÖ?"ý(Ÿç,‚©àˆ×‚ÎIØmø¨ŸRȉ‹{ÄayÛ^·ÀèEmgG¥|O\•ß/ðøõ¢ê•ƒ™(Y :\\Eš(^ÄÉMwyþÝv^»?‘cÑC‹Û°t¨Ýo!Á^Ï‘ÔÄû{Sé bj–| ”RfúZXZkHŠ‹T<'pÀðT¾Ènd/Ø ±ü*†•G¹ Ýß„ºF`s Ú¶€ÿE™\Ò6f§}„̆Ÿ3Ã/¯O‚á™~èØý(=â$vÀtG?rdáÚW™ÐSÀ¹4 m¶Îà^S£MÞS¬síd—Ӄ׳~îåiØè³ä»ä¯dtfƒ¡š3áã}‚oNë8j×+ oŸû|Ç.=F#Ì='§ g¦íFðùñë†fý©³Hé½z³ý<•>Ùýïz<:³ôúÒv9º2O$y*Å«\jëµ¹ÛÎ…ûíIe=CDÉŸs…D {ið#­ôzô¤u“î(²€Íå1â'P¬Nª‡Hkl1´¥ÏŒ‚ÍÈ+n´nQ<û?÷ˆìûdì³L)ØØf_ß?ÈõÞÀ†ëš¨çÅS/·Ê½d„Þxc%=¥ù3FZÁCÉl±Zìòåכ߽R:þ$´º[¤qœÅ÷Ñð«™.\®» )²dr-‹uû*ƘéÒèâ+øb§ÅW¯LT 8Õ…ÑúzßÓùM,–Ð Q¤näêdÝ“wP÷m œa_ë¡Å•Ûè¤w’j ‹]Ç\‡H(nÕ!¥nöŸ6²<áÒk|sxŠ;%ÔHœ¥±Ù%­ÄÎxcýX@ß‚+u8C¤­gؼtA,m)+¯KW¼¼Ö'2ª‰7S#æhH_5Ls .»;?x†Ï´{wJЇYyÓÁzs7F¯l £k®‘Cµmúì#ûf *`ð~8BN¡¸B¨ã" Çë}ÿP?ÿ†Vý§ÑEcR-¯Kq'½áü»\1óŽUä‰jÃGÏû`~­åØóêF÷'lßh’›rוò®}ÅŸ‰Æb|Cß àÔÌi,<$ýŸÆñdö±ñÌ9…DxDÖ±'ëDÓ·&‚2­™­L2¦èÐ4næ–”3¹\\zhÊ"K=ˆÂ:ý³GÅ´VÓYkr±²†ª[Ëà‰°ÄjF£ß ½²®ðÀ¯,óœÚ$ñù1ʦ8r8ѵָDz™Îµ[uâ jLº6 öסùße}Íf¯!+™y‡dÅu@Ç£±Ž„üTìÏÀ¾ïc»¢Ü9A-Îæc¥²ì—‡eÁ±î¨»jN¿¾Õ*HUªaÆ €ûù“I‰;N¿(ŽëÁSE©Qëo|ùI:võÛÙq?!ǶÐ._²îŽÚ¨©©‡@C6pjÝÅ)8dªÁà%[ñ|HZŸ°2¡9g¤ØeÉ=åý-übiê'+S:j8h$Dâç)w ôõ’“GF›üŠ•RÚ;7Ýnáíd*–›l Â”¡o‘f›Ùiùô È„{†˜kp6íqó@OÿùˆÄ)Eä]Oì&X81oR Rê ÇOIâ—1³K+)K½¦‹NT<íèF$‹ÒW0³äŽz‰•wÝŸñSZŠªnßPô‡õû¤Ñ Ñcè¦e¸Øñ5çûˆ.6h úö]×w¹°ìú€ã¼õÙ¯Œ®õÀÛ‹î@% èµC_Ûc®ß·Ivà'†¤é×2±·(ÌÓäN#…*º£^üŠ]y¨n;äW­lȧž],Ôð,’Ë”9 yëù¶u˜C&|Ëu–r¬Q[õ‡4.›£áTøZB04_¾t¼ }£Äû‡8Kÿ¬w|œšœÒPVUõ)ÆCh»Zk%ÒÚ%Ã_¾ä»YpªTX9|1+"ÒSˆ;©ݤHö~ú5wjô„3¼ëÇ6A—òR:M8YJçô$oN*lº¶PÅ|öVÝχsÒêJN™çÛ—L’P4õô‰:í¸Ý3CW híŸqèôƅܯro1æò¾‹«á­>tXÙy“dÀˆz®Ým»”,TÉIüÏ€NX(;7b]4‚J{Õ±kœ¡›WøUõ•LfF®SÍNÁÄÆKÐ9õÈ×…ºVPv›S‰P[¡ùæ+ïÕf—%¹"ÈZ~¼·.£çq™loq+’…2}IN×rfä‡á‰yÑ)„RCHøT) ã]2«2¶q)_ûѶF~Èq"ãŬ*úÞ(¢¨³lvš-™)]Œ0×r33:~CÑ÷Õ‡´ÜyY¯X¯ji”OS=ØñWÇÄ5œ‰j6ëЉêKåÕi™{g©!Ü´A"ðX§zü&0äîtž© Ëaäuu©Ž1PøØÛT#ÒóÃFÁ¦~´F 0â!Õ}Ù’W#ÐÃCÌ1µø6¤ y§÷+XNµð X€zesŠ]t¶ ?k+¶ z–©Œ*eV´Ð@¹ ‰!#Ü|>ë×ÈQi¯;GýÕokâã!£´0ƒ©¼¬~æÍLm6V—5¹u}–G ßÕßصìd#:‘Öó—îäÆMÎ9†è cN’á|jˆõ\3`«©ß¸ÿ!74âp½PVü©ƒaZŒX>\5·Ê ¹ö]”Š­ã×ü}Ë.èšUGx¿^çÔ]¡ó•"°(…»’ý^õ3ê ~hOÕ©¾†¶AåeèWrŸ/‰9Û y凭ÌxÉ£ Ñ9Ö€xåša Šo„U… =Á!üÜÅ&:|LßDZÂ`¬ÿ¿á9ÌÅÞñø3ô9ÃþS‹f¤ÔÝÙƒàP}-î@Ý6w‚)LêíÆC¥®…剴æY¸°* †öŽ]ÖÛ"°œô•˜5¸ šõ¹räÊ=j¶ôÅó·ìÑQ$VŸ ’Òobï§Õý¼eìÀŽ„†y±Ñæq¯#¹º™™ýqL›©™gµ÷g>lÏ%P©":o&›œÄÔE ØGˆ+Kãæ;oÂá´66ò‘¼"¡TÂY¡*;J¯{Á+,¯u@-“HÎÑËydrvKÑ?UF5N)÷ ÜÖVÀ,Jo—"œ3œ¾q2Ó°ÒQoS¸›™×®ÄDì˜Þ­Ý*=âj¡óÊ9Ðû¹xÙ&ƒ¤ðÐÆaíi ÒõÓ¾eJ…½#ª/bHc@êER^ ÂH°¤DÙ7î«€gÞ‚ˆÕÚ™¶.Jïo§A&¡þ,‰ƒíi?úíí!‘ÀX#Ì“®oI”œþÍØw³wÃ&Gé…q<­:úð\«Å_Ìê/ZཟnÒßZÎ]P3žö¯·.:“ΡF6©‡.#h FU$Fký®àõ.ÅÜüWê+Ï{Ø¥Ó Í葸ðVøã›„X#íÔAÛŒ ‹«7Ô4ôÒžC \m-_3i0> §S>™º¼™¬ž*ŒGZ}›¢{_~:p +^A.‹£KœpȸO,þ‹·@¯®ë€°šìÂî×%WôºkJ±ж†/ÉÑf>uã^ qíuË+ éøÖVüÉV;qƒgóÆ$ å¨Ôø6m,Ë í~’ÔLVªXz¡› hÅv¿w¬]¨±åq%G % ¯ÓaÐÇì¤÷ÑW3‡@x€Qa6•;­xw ?y;»’‘i:³G'ÔúÆ…ŒÛ¾âGæž‹(R}x®GCuׯƒPxxßJKäopK1j<ŠŽ2sâÃ.× eza“ç/1ÿÖ|»/ˆëm“S¾êbÂ+äâ`z¹f"•š w#€6ø;vñEæt[è–ZNÕò¦õ”³:¿K•å„AbŠ¿4tûáæ¥*¾Z@"&Ù§³u¸Þ}žWZÏ•íÆ-î‡ÕÕ,×°û–¢šå‡Â>6j·q_Zqë"e¾åC¯jo*…}¯ð¤½G8ÙO©ö‰AÓ"=p~¦^ õe¹½•$ÈǼó²Pà–e}¶?#äÎ ¶¢œçª:~µ+†‘'w€#‹Ìå>ïù¾Ã½Sv¥lÓ7à ízýþh(ƒ‘õŒZöƒ|\€‰ºz'y²k:;ë<~J+ Ðxêi§JÂÞ,Tûìšé >9c@øÈsãçmvçÊ­ð¥ž\iýÒ«ÌzGEƒžI–àS×ÕÛìÏÂØŸB$s¼€óƒÝgC£ûI!Ïâ—j%ÙP员“Õî'Õ™%ÚM5<¼c9¢¾·'ë™´k âøµ‡Î§/0ÒÊnúŒï¦„0v‘˦-X©ÚÔÖ:àT¦I >»UÓ¦ö=I#{¼+Árï)Í¥cóß4]I¤BÜÈçBIÙ¹>BiTÃChqÑi{½ ]cš°E£¥ÚG«•h@%3\à ïµ§X>® 4lD·Eªn%HF‡ÙV_º%. }SÑò÷Üš~=Ú‚ò j¿Æg£ecÿ y}´‘7ÌœÄ åÒÿÒ•™DfÂ¥Û}Ôn¨~§Çq˜tÓ¥ͼå'³ØÎè`Í¿—g´: [Å«þÖé!¿>BA )£Úî·HÄ•£ô£ññ4¿ªÕo·Çò£HSüÝÙ*)’í ý®‰Pɱ ãôê‡}¢=›äÚ–^ˆ´nFFz“—K©HXÏ9'&‰2ë‹Q6™ïî¶´~ vÁÂvÀä©ä¯J]$S\89Ѫê,õ> endobj 1067 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /SBFJWW+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 /FontBBox [-32 -250 1048 750] /Flags 4 /CharSet (/alpha/beta/delta/epsilon1/theta/lambda/pi/rho/phi/period/comma/less/slash/greater/C/G/I/K/L/O/P/R/S/T/W/X/Z/c/d/h/i/j/m/n/o/s/v/x/y) /FontFile 1068 0 R >> endobj 7310 0 obj [640 566 0 444 406 0 0 469 0 0 583 0 0 0 570 517 0 0 0 596 0 0 0 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 778 500 778 0 0 0 0 715 0 0 0 786 0 440 0 849 681 0 0 763 642 0 759 613 584 0 0 944 828 0 683 0 0 0 0 0 0 0 0 433 520 0 0 0 576 345 412 0 0 878 600 485 0 0 0 469 0 0 485 0 572 490 ] endobj 7309 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/alpha/beta 13/.notdef 14/delta/epsilon1 16/.notdef 18/theta 19/.notdef 21/lambda 22/.notdef 25/pi/rho 27/.notdef 30/phi 31/.notdef 58/period/comma/less/slash/greater 63/.notdef 67/C 68/.notdef 71/G 72/.notdef 73/I 74/.notdef 75/K/L 77/.notdef 79/O/P 81/.notdef 82/R/S/T 85/.notdef 87/W/X 89/.notdef 90/Z 91/.notdef 99/c/d 101/.notdef 104/h/i/j 107/.notdef 109/m/n/o 112/.notdef 115/s 116/.notdef 118/v 119/.notdef 120/x/y 122/.notdef] >> endobj 817 0 obj << /Length1 1647 /Length2 14772 /Length3 532 /Length 15632 /Filter /FlateDecode >> stream xÚíyep\Û®¦™™9mff¦ØŽ™™¡ÍÌ3Û133CÌÌÌ̳cæ˜=>ç¾ûîÔ™?óÞ¯©éªîÚKŸôIZÒRïÝMN¬ L/lbg·³u¦gf`âÈYع8)ÙÙÈÙqËÐ+Í\$ ­Ÿ;9¹¨#ÐÐÙÂÎö«¡3 4|XXÌÜÜÜpäQ;{G 3sg•ª’:5--Ý¿$©Œ<þ‰|Z:Y˜Ù(>/\Övö6@[çOŠÿkCe àl˜ZX¢ò š’r* 9U€Ðèø™„‚‹‘µ…1@ÆÂh뤘Ú9¬ÿ±ÛÙšXü•šÃ'—°Ààd4¶ø4ºíÿ‚èö@G '§Ïk€…ÀÌÑÐÖùsœí¶ÆÖ.&ð)7µû; {G»O ›Oì“LÁÎÉÙÉØÑÂÞðéUá«ø?ât67tþË·“Å' °3ýÔ4±3vù+¥¿±OšOÔÙÐÂÖ à twþË—`bádomèñéû“ÌÞÑâï0\œ,lÍþÀhfèhb trú¤ùäþkwþ•'àÊÞÐÞÞÚãok»¿µþ3 g' µ)3˧OcçOßf¶pŒõ‹¤­©€™érûb®@Ç¿7ˆê¯ž¡þ ÂÐÄÎÖÚ`4…c”³sþt  ú¿«2Ã_‘ÿJüßRàÿ–òþ׊ûï5úŸñõ<ÿ;µ¸‹µµœ¡ÍgücÎ>¡-àsÖd kCGÀ_ÇÂø15´±°öø?ÿ»¶:ðQÿç¿Ãÿp!lköY!zfvöˆ-œÄ-Ü& ÎÆæSCëÏÍû[®jkt´¶°~ùïýý4bbú7LÅÜÂØÊö¯j°ÿÚšü{Ÿuû;FMaMQe Úÿôý[Yá³+œU<ì€ÿð¤.kgòŸ‹¿¨DDìÜ^ôÌÜzN¦ÏÃøy¹Yؼÿ7nÿ&bþ×ZÖÐÙÑ ÍÄÀÄÄ øüüçû_+Ý£³5¶3ù«” mM>[ï?ÁÆ.ŽŽŸÿ{|fþÏõ߇tí.ÙóY¦f¤9×`ç M|Õîëa ¶/©W)Ì÷«¶ëöM ûÅ]aðú3˜¡aŠç½ÕcñÄþm_Šæ`¤Ëš²;x‘GàMJÝ›ºIÑÎI{À¨W‚˜vªþÃërAfB‹ƒIí`gBQI¯øŠpªÕæòµ©k¾Ùƒ=’qJ] fJZMÁÉ)EÂñŸÊÑá¡ÁîkÈÞ}|ÚìXr^WDŠH?‡l|A-Õ ¯htY™ÆŠ©ùô!ö5¢4¶ÞÔ’§ÖsªR½ô_ÄÛ+'í¼Ò2ûº€pR¯EØwÙ0XÚ‹:ŽÊR¯œ‡ÓÃÖÄb¸û¥ï"jnÔ:l¶ C´D7 ¿¼ËW©¶›ÙT¯ânÉ`ÎM˜Z±Íyn<Á"0mm½låüÝøVè×ïT=ù¦ïF4ª=ÿ\ž[犈Z% ˆ+4zÐëå?…ŸÚ¤Z@)ˆLÞiajþj‰\Ó˜Z’øæ7 c#êèT¦@ǦvpéÌŽdË{"™|ªùZ4ý逷Ÿ¥ò–‹×c­ã˜Ñ ]9L}\4:ÏŠ€=(ÇÿÂFöÐ'H‘²á¬Fî°T'KèWK9ô!5 aÕÎI‚þ«"ñªÏC\ƒËaα[ðtœå¬{Ô^<Ûæøëžé\îÏlˆ4ŸˆÏj•;'#œý(Ú.Q0ÞË#–vÔÚ$¨åx6³PkójaèˈÙkû8#pSn©¬|ó—WTæ=ß^÷Ó”ÞºÜ{§ªÕåžîD9 µ“ìcÉ¥Ê7íN~¤l–pQ'¾NvÚ^m¨í©ä4‘¸a¤ê Pd|²4ý–^5ÂÇvÏ’Í÷$ÉŸÍDá""9[ÂéTñ{È`.òslSõƒé4=VžûH1[ƒš-l®AÜ.°¡~ô*J߉àõIèç^ü¼À]NþàÔ""ºª>Ǹ ~­Þ‰8ÓÐÅËò»ÃqØ,Ô¿$ª gÆIõ:•ÍfÓ¡Î9Ôû¦ÜɹB²'ý«“ wŽè:Mó8E(fYœK£\Ùß%} ëns«6ßýÝ “¦2÷Î’,²Ii¸ßÌBtrÀ¸CUä±±X-SsF}šæÇ­G‡`S„¡„凯*þ›ñl[‹µ|s„ÈŒDù1¸?ÖÆRÔÆ£Vp°®HTïš§¯::n_M¤UB¿‰0M°ÊPú]ïjd!M–A]µzÛªÉCuÆ,ÿ¨à× ÈîØ?;=:IRc4 Äj.µÃár4ˆŽÒ¶Y¥WXIÌÝd^¦%íCRËÆ6Iè\œijT°¸;Õfl]îé¤ ([¹\©Å÷º?¦ÊfUå<=€!êߟ£á0ÍÆùà¾êõºÐHAÞ]SD“’îõsd¥°ëñ²ôóçpSµ´0ûÈ)<ɽ/…2‰_Ë#2u¼ÑZJæÇQŒuž+ Ãu÷¶­.gƒÉš‘ÅK¨ûš=ü¢u&4‡-¨:ã±à¿zõyoÇƲ„‰Œ! …Û¡QR* à-í¬ÔëõÖµƒc¼!Q±¿¤|Hæd›¸XIëãÖ!jOWPR¥'Ôc¥U²è¤Ï ®=œãý:;,äñ¤Þõ瓪À©aÀÕ %÷>øb>ЇÌõF>þGhÔâuåÕ ¸Ø&ok†-úªTtæJgïÞ#ª5°êN`ÖõZäò <Ëb>È$eBkBSï›ôU‰ ±6¯I}œúÞ܈Ã2½u%&rƒy•Jà¼ËŒs”|Ô2ÒEà2¥À\Õ»ë“Å}×J»+ pCáÖ´èÑ‘Zl®ˆjœ6ƒ§E´”³|`·‘iâqT«efºî?î(º…¹J€¡ðL,Sù5í¼SÙ¶R906ƒBg[öA.@(à16Ú9n‰4~ò¨!ˆÛó·YÚ%RË"å±Y»£²¯“2m·ŒöV*” cq/ Š áà)[˜±ni¯ÁMLŹ«=ìÁ“åžAhš›€dG8á›ás%‡Å§Xw?ÿ͇ú©“S,Zž‰zçnH„ÄXþv•'À[ü&'o‡!vfôK¡ºCÚ.‚|çWü½íGn\´äô¯¥¤,EŒ}ä‹g÷‡ËÔÌ?•Ð'×=9 ÑÈ™?›-G+w[ý%²|ÏwÕóU¢ýíÚ^ïOËÙÀÄ~¨±gæR×qØ)¬g^¬îO~7¿åM—–±ÕÊ迹ÕõØiõuÊ-°SÙ@B„¿@äé3\-ʶ–Q8ÇŠ1½H¸ò¤@ZäÊ¡xñ0OsGíÀ$Y]àWZJëîÎl4ç§¼SˇFéRŸ½z,óù.Œ×\Ó‰ODÓ$:AÉX =Îøã ~Q2/Ë)œÔ±‚"%|³˜ uàˆÿF ’„¹mÙ‡Ï+k –ýÇ‘ýk•çžyß[Ð6xÜÃrÒŸµËTýÍ4o³ˆÛ• <ÑS™zhãïݘNGk0î6.;ùÜ«{"ÏÃð=Ëy¦ßÓªÓH0Kžï­…`n¹>™2äKߟÉ~”î¥f·ÅžåÆI2¬SÐjÚ¸þDôàä×¢c-ìz99‡LHS>‘9þÄ1éÁ]#?L £_›¤Š•Ë<.¯¶ÕL8'9JGn80éÁb—7¤Ý¹XÕšƒ}¾cEØXgðyº&ðÉ{?&‚¿ÅÂBŠfôz tóœ…I7ê耙ÑÝ”-n.›Ô¿õ•ÝØ82 j¼@ÿvs1ÕŽorß_ŒÁ]æWÉ‘¼BLÿµ‰ÖE•=5˜]ãåM伌Óð| n¤©Ë'Ÿ¶š?XûñYA¾ØÞB+IÞ¯=¶Iüçá5q¡.5Òb yuññ6pœ5jÞadß|Ë>K–.ÐÉíGBÕ¸?®s réòþk·6› ¨(-D,¸]ø÷sÏW:Ycl‚ý“êßý€=0˜ÙÜŠžä>_ŠPš¿û‡ÅÚj›–#¿›bŸƒQŠØh£+q{ J£òÐhCÛ× LwáÙ4 Ç͹  ¹SÞ)e‡ ©ÿ‚ÖL›†ï>­S6Ô„¥¯J¦õ剷Q K_ѧyåêˆ%ZQéô©¼\ô}¹ND6ü<Òq 4A•o†Ekª‹õU[’§å\Šdãæ**œ¦ZØWaÁ&j.ð².|ý†AI—“S· í'R¡\¸Æ :}ý^¿'¤%ߦ\7t+®°²b\³+’« ª•ÞbµÆdBbzŠæû²DÙë‰óAEJk?ù;ó2ǹøeU©Ü;ækfPÑÅ,»ªÍx"|1²É ÷ ÚÑ£žÀÇÔƒéc¬0¨AÍ\Æ Ìhü{”`…Z­ÌOÁ3± ²(®"6h;È}N¿;ß~v¤¢!|Å10§í›Ý6y Ýô¤áÔTqÜŸ±­6ÃË–‰7ç.žµÓ¼4Ó#»âtqÒ>‡6F=Á¢3¦`›W¡§RØ5Èi>Eº52>ÊÜÛâgâ?-Ú#€ Œ¸çú|#ñ8._„&ÔŸqò¯„[ç677F·ÂîZ‡Èx¼t (’uÊ+©ÿ7’ôþüdî” ˆý–tmRöb‰ôµ£_üÔw2 ¶„V« ¦áiýÕˆõ‡ã“ýÆkŽh‘{"¼º]|z¥$dW#!ì ¬™¶iÒ+æPTfW._Ò­$ÎGëè3yZ×SËi¾€5cê¹ÎŒ 1×gþ:9d\ÞcÖ`ùÄ 3™‹”à ÓÀw Ý3+WjnZ°©³ÒñòFÛ2þr€¶T… m %å´ï+ëù˜»ñôÈ1+TvsÁ}Þ¢H»¥0·®¬SÖ®ñ¦`Dc˜ NÀuXµ“¦0Ÿ+DÅÓkÛƒ†oIú,Hj˜-‘\Nè•MÄ{›%fg(^#è|"}ƒAl“÷êC-$ÞÝF‰*ÜÈì1¯û„š¾“è]ùh:ø£´~Ÿñ{W¿é!ް™f]Áa¥äÜy&ËM`óˆc…ëhž n1ÁcЗæàÁL¶TT“ÃÜßnÚz#5ZñÛ‘ÌÇ;DÝ$ §µÁø¢ßð·¢ÌTµ\.WeA¹û=¥;.tûim$¥êbDªäJ<ÑÂqå;Â.~°a²´» Ê<`|}ÛÊU0 ¨Œ‘«»¶[5ì3ÝBOwymæI¿>ª¶,Édú¼m–rn›$ôVDë¶à0ñXâ)=âðH%ÿ¨zƒ§`ºVg¡Ì¬ß{~Îà‡ˆ5 ïS-#tÚ| !Ü4²5?®\÷ýuÀ€´¢-Tx”ék ä5.ÌDŸ2phä$ù=dˆ£æ3r}5¬+K‘v{ q§mQ×¢/vº³DxwŽ—M I“Ôp¨0ú¢ðãkátS̪ N~›°æ÷A>y@{¬¤81Ú³ÇV5IÓ§æfQ]á¶òå¶…äöL­ìs—MïF<½Ý¬¥²ï?3Qa‰+L/ÈÌmk–½{…“„¯ Ó&ïšÆ]±´Õmc±ÔO‘ÿmȬí-J ý`µ™9rzrâÙgÇ4#mŠ‚ï]rUD«ï•û><´HW©€F–Åã7òÜåó†¹hÉqFD£iîF€/-Lº­¥¯GèãUïѺñ_똮;€!Ÿ[süÞd->ê—òå!˜7AHÞ̘¶†r@ßXY7¥½,oÕÔ™$^Nê%’Ä0Åžo†ù±NÍ÷SýHª.,Jìq£žy6g* Æ¡RÑ3–[Ê¥¯h]ãÇÀˆ·ŠhdÕþr+ÍI?”^K±ì·a«Z¦Ÿ­oj„…'¥Z9Ñy‡GSlE(t ­B¸È¨£Êý# ‘Ž[…Á 68€oع)Χ8¸#¡í½¸ºLRJ¦ƒ7érH|õ’1õéæ2å6(Dø û]"_¹Î6°«ü~“µ~=c¶7™1ºn{jqí–»w¹nÞbB¨õ;%Çt|³)G£Æ’=Æi¤yÊm„]é /—pA˜ »¤f¤çZx |ãÉË@úý:ãy»ßôr‰tW‚á{êvZZ4¨X;8ó ø‚W ißö"ÏÖ®}Ã_–E6q’CFä«<;²œéÃ5‰gp¢ùoœ®5‹ ÃÇR«¯ac¢ílŠèed±1çŠu©1Ðø\¼,“Œ¸üßgçÎõ$ªk¯]1Äæ§°$¾’_•5}{‚2õ¢–RìZ8!ΦçŠ÷¾&—šÎŒe—N›—3®§Ã–Žƒ„«½ LqÏ9]Qœ²!~Yä%wB0ü†7‡ÙîÒ®>â7k¿âqË£Çc·Œt¨"#ag€!œ’Iˆw"Ämðùθ÷Û[’ žn@W¿³›²'/ŒœWDŒ’êYC1µk]ÃxÜ61zG8¡q¥˜({=Vtñ…Î×WÙqÖÃãMhik1R2'ïlÚá½µyåÄ 2ú†æÅáÌfòÿ‡ò\£‹—zɽ$Ò¥~{ VŽ™FJßš°†vâº)X–º§ç•n`]„'§N}lâWŠ[»gaͽ6dHÜ ;’l‘aPW²›VsÛÍ®wÎÑceßÅ9• úz^OÅ’™mk=<ÙLÜc›T³UfãZ¹mÞ®0'œ³ž2tT·¬Ùλµ¹eÎ#ñÝå.?;XS_Ë£-|6Bz®þpÅÎãD³µ÷«Ú¢_¡Öý¹¹ ý9ìk ‚nÖî'Ê*Â#×ÚK^ó>Y«È%03¾A¥ŠïùÑ,kDL¯¢us>‡|¾°üsYó~¾À^¯ 3Q¿¥åyôÈ8¨j› ÿÇUè[Ödj¹—lN±ü®\¿Ë!¤Ô0ø–ò—›Vº(Àœ®åç—¦Qà·©xx'¡šD)ÈH%,ŒÛƒh ^+>ÉiâRCÄ.¦áÙà Ö_‰€Â`m’ɰ‰ŠÒ#WX÷)Í‹R(~ˆéeÌÐ}aÎ Þup›‰þjñæsÅX¾s,Ï 5/ÄÊqxäÇ&•¸“)üÒ¶Ê!”P’ã9BdÔl*#ò|#Ó}›ûăÙ?†¨ª/î›Bó“oð:vÑÉN$ùÍê@ñIÛ’¶íÉÑ£ñÉØ(9§…®¦]>!ü#7‘pûÁðá¸`E¬^\NºŽÌá¨u~Ý$Ìñ@k¾®¬|'re9K›ýì…|;“áhDó ÜòPØ‚6ìcÑ€°¸=«þ—K:0‰v/¸ƒ¸!€wÔº<Ëmù·ƒCvŠÐ(Î.Üø©ÊmÌ:AmõA[¸=¢J~ö‚ò'6Èô/(êßU¤/"kŒÒ‚‰1¯˜@ÍS†…LB¢Då†íàL^9UCªB$û=ÈJþX´ÚFèô Õ”ÁÈv(ÄÀϺܒ"€Õ®48µ›ÆŒ­wÉRŠXõ„´[>ñdô¹hÔ†Spp>U±/,èCöP§x´âÏ¥2$^Ü;¼(…:çêg²>`Z‹1 þû©¾Qo¤¿ gÏLýK! N ýÁ>`Ù‰!ãý(çêÿ‰_œd”ö¦P›þiÔö‡I#§!ž“s/WO× 4ÛùÍg8/EL’©dˆr…\}lNõ2œRü!Å;‚wJtý=f†½•8=£ VÀ&+ú§¨2ïƒñtÅï0LJ¼g§Âr!øS<íÉï…J¥ûŽÙLÁ‹&S®\84EÌøÂJp9kDÂp…<Èœ,•‰ …/"¤±‚ßä‘«£<å8˜Ì¥ÍÔ¿˜·ÓÝ…½Ù7ÕÍz'S²ÂðF?–Å»­™1œÕ·¡…'yŘ |É_€á}é,pF•/Y>¸4æª1Ù<ÝYÅËÛ7)Ö_¡Î )÷„|%(Fø]6ȇ=åùÃÁrä\â횎èëùíÈ®´u)z’Ÿ*£¤G;›óãnÛØÁ%Ù‘-÷S Àœ îy<:½YJ‘o¿)¥«FzšÐ±"1¹ÍODóԴмzƯØJ{Ôã(¿0e)„ÈY¤6`ØðзW]'W)µLjȸåã3^”ëÉά¤Y ׌ÊÔÈn¥®Þ0#i~³ueÏ1¹‘ØbÌxWÛœE…Àröî:á]N“/>°F¯ëi‚G¾añ(GG¸@øÁ Ñq%åJ™údqûî. Ꙧnin{ñ\înÐΆÀ†%eE$ÈøŸë¦Åñ dÖÿL^AʯðïÉtÀe:¦ý¤qæÿ64J/’.ÇNsL,vˆO©Vœªë6oµ_®Â2dû•}Òio–?J!ýˆ,k¢ NôO{’ó½ñÑÊ ù(a7©9¥ÆÚ7¡»øqKˆƒ{Ô©'ˆ _ºÞâZö&ÁŸ79b Žö¥‘¤·T¨•rá™l<®û²*©üÝ1üýº¦95o¡FðJ NQ3Œ­T€GÙÑ2J›SÜ&»°¾_Á’ªéû];l\‘µ3ñ} ›€Ë©üó¯ehMŽXR)ú{pa™AC§cå¾XÂV)Ñ—}sÕÚC3=Ñnj­zzöAH»€ó'£ )HþHߺÁ–oAˆJ¼T59Y,†ÜÆ’h¡˜é´£ ÙQnK•¸€¼°ÉxviŒã ÏÈÙ?´±ò<÷áÛE7%Ñ.¡ÚKÎpšDçļa2tb9"! " Ó&šÍVfK.‘Þ£×$Ï×,âŒýÌ©Ì÷¾žÛmÆ·êo,_6Ì'—“E¨ª<µÊ`^ í|³Áaµ#§µ'"¢ØÀ"ß+9¢Á—z£oÞÏ„g!îîX\¿J䜽baÕÄWª¦“ SÃÈ®Xo4Ös¼nˆ( [uU€±ZŠã|ØsÄ}PÛ×ã4E×AÑ£_d%*à¥Hÿ`b>ÐßäQŬ$€Uæ “9AÌ;™W`©lü¡ì£¼?Õ/«Ál1€ú+a&†›LNõ§É‡ J„øKÿceÿ¶î3=SŠ 0æ×» XD’?»ö¬Ù«‘ °Æ!œõçi·§9C »6G&iƼËö•ê‘Oz°‹¬z ¬EW7ˆøoròq;Ï”óQBÎ|×®eƒú&½±²#¼œ3>ê¸ê= -ÂnÒ}pU‘RÙ$ñq|øìA00S2em–º• ¢cy?úèð¨ï¨Õ4`0ÓÉÃ2«gl ­ŽåÜÕr¤èÙš8"ñ¤UïÀA)Þ;*Yzg+püz !Œ- –kaie=} é·¼ì& I»"†þ*°×áÜ¡=“$}½δdpÖŠEßý6ó}0ì!ÉVíöá¡û+}Ô¯ÿø§D’S¥nNAϯ0J8Öt²%Œ•Æ,•Ý,íb¯ƒ E‰#E&œÜdÑ•Ÿ_×,¦¤RŸ”«B+S˜‡ãåžsšñkCÊ©n-j~&½ÜÁº¾X”Zª]qõ³T1cád¡H"ÓÍ™éëÈØ¡ú|iR矒õ,ò«6¶“àŒ§¸vé±Vï‚*ˆë">âç츕ü9 ß2‘°—X^€m¡Ô«”N.æN>¹®ïî»àGm2§}ø3ÃÔÒ çš¿Sôw_ɨü‰ÀþH¢õÓ£ÿ¨uPÓ5ÍHÚºž ¸,?íÏ.›„O—ƒ}l*×!úó¶D’neùuýsâáùªJ ¿ö>ÊSjô½jIªÒ¸él™ïpâ ß ÒLk>÷oZ»ï\¿Åx~7›Å$և˟ؤAJ²évÒ>{lŪ‰ÑµïaÆËA BýZÚRé´³{×LýΜ–s?<™P&z±a)FW4‚­rUIXY¢‰;³<Ðuáðm+ÝÇËÔ–™ ¶­K“>šÅ5ˆVe³yo¡lŸÄ ³Xôk ÎPù™íˆ˜&LÚÞÎBØâå^>SŽýHÍD,ÚM4´¹c߯\ƒº§ÞkʧgRøsYT­€w*»ä!ÕØlŸ'“ZÈ.à–¼ÌôôÎÈ›€õ*ì¦{w6Œ¯èOˆ‰3·nôƒ/mæ´{;T{áÖƒ• w!ÊÙÞS𠸊ˆIØÂ/¡$‡£eaFCé~wÉ*&ˆ¶ðY;:-VÌíï¦3Mñïß3/V‹ä ¾ç©€©¹y75Ð ˆ‰_±§¨»ƒ LÀ?Ì÷FÚž³Üõ‘Æ£Ðuç7µÓ•: nADwˆþQfÐ.U3ªuÁ7ÂÔs?´ öô–c—ªƒXØ ¢5ê¿o§q³Ö;Q¿ )Þ;5¤…Z6àŠÝùÀ×R €û¾'Ùo›>ç¯<\IBÁˆr[Ë9W°8cfã…¨J±¼È13ÒÉ z ʆs_!¡C¢*ÞО² ;óÛÞmVî©ÑJ>Èí?•2€L£úG…Žt¯Àìq”¿ä«»;0RõzÇ[rw¥¯Áo¾£Q>üVõðg¨ó§Xzih|¹zŠgšEyóVBgu“;³ZªÊŽ: SGKn²ƒž“žÁÞžw¢›O`ePxòynF l¬"À8SÄ®®4ÊÌ݈ÇÖssÐh›4Æ6JXBS¡¹¢UÝç‰ë3ôV+"NóµVŽLöå6ç:µrƒË’>ðsqø^+X Ã}$‚`¨´crÝi_ôD…¾*ÿ‚ÔnÚîòX©ÕVã½üötÄ‚R ~&Ñcëʇ³¯OÛä&á¨qFxd¶Ãk~¥¹ÚGÝ·ðTß(W¯{,Ð¥=–€*£ÀõÏD)e’>®Fqøñ€W;-" Xp†›fÖú窲mPÜ›FþŽ„«·øR%c7WO+[2Påq¸Ùo$„•”¸¤¸†> Z:³é™\ÿƒ¢‘§°nx™mZ:tc×(½-ëˆËáàñJk~V‰†¸Ä|'Ã×òd^NìõÚ]¼ùÔðA&§a—Ý“6£ô^“Éq‹0îìØ=qc[ƒÐ‚ÐÍufýòé \œ9¹<ĺ8ºÄWp°µh¸(ÝÛX£¸KõÐãÿKYÇÐý¡Ï€Sô憰 6|² s'f»¹Qi†^œãyÙÖ ÊG#`O°ÒVÔÒ„öh ÷pòEŒõy+Úž‚uYí%œù`Qñ¤9dS'A™iJjKkŽâE,,,í>£:ÊPõ•b™DHq\TÖ+n䈉õ{ˆI,¥<²=’½”ÎF²5‰åVù®²BÉx¡õîýiWÍÓ ò²Ç@mCf}u¹'ˆ›gœ…­×jNì# h E¥^ 0pC짆lpçc²¤¤:¤4Ak='db¶cyŠ’(Nx9 kØLÎcß"k z[¸Ä®k¾w3JžÅv*’Ñ“C…£8t}NfxPâZJœO„m ððõØ•ÕB‡ÕÒiO‚­ëõëq²saˆ‰„Ù¯ëÂoé¬fN¿ÞBk2_ð[1ñöä|$!åJífnÒ1‘]Ní¹‡j#î†uÿ äÇ“sÛýù<Ù†víE•·I=‹àÅù–’,B<ÊpuÖÀuÀ]“¢€J¦t|íöзðS8jºNö\o~Y´_ BÓ!íö»Óóã=M à\ß0ï®õ‹PSòlŸÒ¹ÎÔ2ÓTõY™Ãb«ŒÈø¸³N­µÆ 9À=È5ÈM‚˜Ö H³¿ÑfßK!·Ÿ!ÝÎe[µ»eA`æÏ] Fâݶ²±örEêèsãUþpYƒ¾|‹ÍÁdUrh…Ô%23p]Ì¡”§õpª¯PgãZˆ›ˆ‹ú©ëvæ­7inÁBÈïAÜ|µøÇÆí¦»h™‚ã¦-Éýv%R¶¦<±ŸOû·[•7ªpÇs:dªÏ[¶FG¼mvÿ”¸ÃRñHH¿0ž ?Vè?s¸ú.B¾'zÂ6à*ƒ‚ R‘[|Û´¼q¢{RNÉV"svZS^z+·¶aˆ\çLШ§36¹‚Õ/¾’¸TfiñŠ"}#“_Ëu™l»øœ6QŒëægðàŒ 6æÃF Œoi'^å~l¯>Êk%"”¿ ¾G Ã…|èÁQ[¡äsUÑ5W ÈÄáf =.T ôdö–$wŸÆÅq:Œ¹oΚzZß.… ä:Âmæ‹°YËë›þXc7öá…ªT]ög&8?ª—p¦…ö Ô`عÒÊ-²(è4d¬Rn•«_Û0ã/B°V”Mãù^03ÒsÏPè8} ¿g·òh~‰ïü‘ÓHƸ¸CªiDívrï2ªš õãR!°«ñRtÿgn.K'ÔOÔï±;®–LhÅŒw^ Üæ¦ÐÎ쉊?»Ôo„*þH¦“›É—ëM庚ÓXµ<Öq­tz¥Í•7x[œ®C7ã«Ãáv‰û ­OlRÕKÐú8Ž2c|QDadÜY…½4â;Û>öâ-<ÊŽx¸N@v9¦p¯FVi7G2زï÷ãkÇfYçpAÇ.ëKla¡&”FSü›(Òùåd jOÁ—ø_’®6ê\Zt‹mß ñ–ün¥éè=;ÿ8úW=ò±r®4¼T—ö\–îîÖê>zØ SL—AtÁiT î-É2èd™"óLdéË rQ08ø¦Ï,¿ì$ѧtxp Š2j¬ß¤¼>êo!©ã5Œä¼$K²Ì’‰ÐñŸ½^Z¾In;7wjûLZZp?IEL Z_+/bïÞü5‚V—ÇÖà˜™=$³?š»<[såŸúãrÅW³Ñ¼¥mó–ä/ò›Ýû’@ö”C%ÉΣäÍ0'Qã‰o¡í¨Ñ?ýv^+ìmU5ú…Ûvì²Gw\BAl¢¥óT;G¿(à±ùÑ”Ô÷y°‹Ø¶Î`Ë «…g¿sE(ºUĬm =„ ®ßh]Iç`¯Ö™ãªbÑ Wv…õÜÉN(MpÞܦé¡dé‡dè­ÒÞ£ —‡¼ñÓuN—'bRF©%C¡U…‡ÍQãPË{ ¹ÖlwTÇ0x_&Dx€ƒ0£Rv'wDØc ) ½ivZ0š2àô?òuŒÝýB꛸Jî»EiÝЧ”oÄvè£ÁüÛØ©ª/kob ©ˆÝ'qu,™»NT­¶+½Ñ¹Xî·ën`loûÕZ¢ÂßKZÍàUâî"à &”æb`Èצ¦§à‡!OU3*|(¾jèMk—ÝO7a *õvyQ tWé58…˜bèƒà[8þW+†¶°E®Œ.dÕ¹„­µ©Áõl4–z3V¤W{ò¿Zú…BùÀj¸Žo¡Is*DwY[`N(ˆ÷ñ(ÿtðÛNÛ·†+kÀàGT66ò6%ÍY‰e}>Ç]xÝRñfñúCRÅ©‹²­Å|]®”[ º0îI¿HFW×Þ¾€ÀTú¬ÀÓJ¡¥SÃG Ô~¹ë…ÍM<â<íYè÷²Ò™”) ¡@b¬tŘ*Vë4gw|kzí¶¢¹…7Y®“Íü ÁCênWf^¨É»çybâÜ1S<Èëv*Š%Z Çݵ˜Ô¾òA\¯™à"J?ùyjX¦™§ˆ’ú=<*¶¯…ý­.·] iWqôJ¢3Ïí;¸v m1ÆÐWl99÷€7Ÿš‹ûP²îÒ›·³ý?ÁvÈ̃$²à(]T*ç1¿É{ÏŸºOwÁDrÉX6æ©<'‚\›i‹0ÄcRû6’‰±[çJz¥¬ür×A]M7ßMÞXï5‘íoÔq#>x+qôÊöÁ=°K«R#à•3¢7“YðÐŽ!'»7­¹ÊO÷áFú-—¼ NÌ‘—ý ‡´NvﶬôÁðFRM ÌÚ‹Bwú¦ÃxÉ#`Uk…×RuÙÎ@g÷às0ËY™´‚±mþl.cÁG?Ö¬âx¬¦ÈPogë³ÜÈÒ^1å§ ýäW4,OÇØ{´ÈNúåhÎ¥\î I2¬¯÷]èÛÌúW²þ¢3*c«±ôþlÁ„®nhuj GxBFÇ’UNÛÂðl!ăül«×¤5‡ºŒ~gÈŒü°Žñ^Æú¼aêz"äIÙIØó¥š4uõ§B‚3b¶×[½Æc™í*À"ܰúQEϹêXÈî§é@˜°íþí©¹hj~4Íþúw;Ÿ€1k?‹pÅÌ›¬¦=›‡ÚÄ—â24Q ñºxÝ—T0:!Hõ .+_¡ìù~DµÑ 1ûÛ@HJ|•Y”Ü:]ãó¯ç½Ü Ò¥ T ­u›Šrçû²¦K y޳<œFåo‰tK¦@:CtoÔvúñ/”ë ]wTÒ”Ö@±ßG(K3ÄÉá#FxrVˆÒÿüé-I"Eÿvi/s#$(—«³ÎN»täβÜÍ5M,VËÉœÀÇ…OÈCœ Û–ÅùÄAwió}$€ÖFöÏ€^pÔÇåôy¾¡Ÿ©¨ÝÔª¼ ™J×G‚2¶/ÐIGÚC_ò¥ÿî&Lï4éçÛ:%ÏWotJ{c·¶ªÓ¶èå}ÓþÁ¶¹ï1DÕåþJ/Ô¯·þ³°Ú›éiФIÝoàz’ßÑg1|!§PÒJøÌ T³-¿ ªäo(.ÒÌl4Ó’‰5qÔësÆn5C‘ïqÏ»ñjÖ ¾Á½vëžnM¶•šÑ6Ói–væNççU‚ÝsÛÛ⨄#C†K½&1õ{¤,Fâ¢Zi¸P©EÌLµÉzïW˜V÷qßû÷¥òN`[§”q…8\€ÕMÇ!%Õr5%G»Œ6/æiZÌ®§ ºEÔä`•=$vB7:××Ra®zÎ[Œ¢b’rÝãtnGÍe0¥†" c†)š„0è?ýyW~ ßõ5¤¦´;· 'ã7 ºo…h!’|¨°+¸«7aËD迸v6ë-ÚÍN¬rE‚|{×—pòì'Ù:x cÁ®êßGeBUç*ìà§hpªsÆî ·‰Y”y‹5’Þê6°ºaî̃Xz¥„A]2~6× SÙ˜ zâÀyxåFO™&Ý<¤¼–*EŒâÇùáºàB¥l…í<»7f.ãG/›„Ù@.‚Ü…ÏWçF+PRúðæ‡N=O:Æ/ŽÏ[—f*Ñ¥’œ’szKkEP õ\N/(ŽÓ rGœâwè7QÙn¢ØÜÜ*KîËj¢†žíqÉËŰîIùÜ™=Ê…í§$ü¿@a³l@´l›Ó¦@H—Óâ¤Bï°ê?^¯¢ëÛ3ôT[ô¶ §+èoÂõ¡O| TÑ•Æ;Öf÷Ü@ݼŠÉ0¢žÝøC¯´”1äÔÛÛ“ ¢fÝ.|Äcñ¾Î û‚ÿ`œáËlwZ'/_ÉѦe!àži]‰íªpr»—M؉ò1ÄMM×éÔ˜Õbƒücå+}ߊ6;ÁÓ:ñ<•üµ+Ûåu)˜øÃ n,YhÊwpï½Öü çkžyÿúáÇ0bʪQZh1­qj¥Ê³ÙY‚GãS™¼áx¼Š!b5hP’ ŸF§Éé6™ABÔ^„SÆ*]òVØxŽøbç÷êŸo+®¶bî¿xš¬á¯ãÊæÐj;ÆžõÇRñrÊGÒ1¨!g¦6R›ã:„¬ÕTPèä¼TøÚwRÃCÔD`TEÞôÄèé†Ýr(&#:^~Y|A&ã‚ÿ+^h#äõÈÒ+fœ‘û:Fbè£óÇ:TÑQöÆ8¢ú«dý¯ãK¦X2ÕÊÅÜ…×ft/G?Jö7ÿ†ý?ßì'H9÷¿ŒŠißãjôlãˆÜÓô诿%«WcÀ€>ävÔ~ÇChF˜:{.˃XŠ·˜P•ÉŽþÕÂê±AͪUïûQól#2;~Vóˆ…·ž Ï”k¦G0$—°XÁÞÖ`ˆxNÌ\†*c˜÷:¢œ0ˆ[Œƒ‹d!»2y˜ê\ë¸H°Áøu5!l9Q"Òë¥ýׯòÛm—l«ŸH€Åváó9ñ¦®ÎKWi‘TÚ©œp±oþƒAÀ}f˜MM˜\ó;J"®¿Ï|ÏŸi«ÅøÒÞc[¼DºñÛJõ|wµ”—š„A©ñÃß•ìlÒZlað—Ðîn÷; ö?¦+ vÑ9{0éñÀØ’¸z†‚x“uk˜:LXÃ4´qK}í[ž@îŸ{LÿÅÜÿ'ø‚ÀØhèèlgcèh÷?Á9.9 endstream endobj 818 0 obj << /Type /Font /Subtype /Type1 /Encoding 7295 0 R /FirstChar 2 /LastChar 122 /Widths 7311 0 R /BaseFont /YAYCSG+NimbusRomNo9L-ReguItal /FontDescriptor 816 0 R >> endobj 816 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /YAYCSG+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/slash/two/four/six/colon/A/B/C/D/E/F/G/H/I/J/K/L/M/N/P/R/S/T/U/V/W/Y/underscore/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) /FontFile 817 0 R >> endobj 7311 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 333 0 0 250 333 250 278 0 0 500 0 500 0 500 0 0 0 333 0 0 0 0 0 0 611 611 667 722 611 611 722 722 333 444 667 556 833 667 0 611 0 611 500 556 722 611 833 0 556 0 0 0 0 0 500 0 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 782 0 obj << /Length1 1612 /Length2 18797 /Length3 532 /Length 19706 /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ù¿$ý+uuQiY šÿÜ©ÿ²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À‹0I&uÍ?Hnê´H—MN (Òh—}çsß­—´ÉGg£ÀT#+®2óÇmÞgâàû°D:m_å¤!y>$žµuß9üvV ”ü!…3™àûÀ1÷®úgÙ==§¥½ƒ{J­ ê]åó é_ á¦?µ‹Æð’³Dx(˜O|ó¤¬;E¬âuõÄ õ/QGB£7›&YͪÿùúÎépþrî šD^²CG¾º~„ Œq=H}²p'B“ºY#÷@{ÑôþnG™U >Öþ~JØŽ3–$¼7ÿ\EàøËQµúc gä‡ê4P²ÙŽ÷‰ú4Š9ŠÍè!M :ùb§³`/óN§´I±’X›JEÕèÜå€=Œ¥© EÎ6$¢Å#¼µZî—‡zîó_Õâpìä„7’…;ù1mF³|Åö™þsäIa4Ouƒ5LòØ´—˜ë:‚x÷˜û`Ÿ{Ä9Qóf«Üß±çüä‚8¥g&UcÀ­ñÒ…2Ó9³­·Éï£ïý±‘\u|ýÅv08Þä9H«ÞEê0Ÿ ©Y$€4ïžÖÐI¦Uvôýž­óÝ£ML±TE³o› ã÷*„hÍq*{\LÛ8i)wK(¶ù'^ŸjõAQaÉ5³vîã.W ‡Â¿ÛOµû²<¼®¼½ÿ--¸,L²7d‰2—ÌÅjôáSgÖs‚ã‹ÉxŒÎ0íÂß`¾v¶O·Æ+ÕâqMá%ç[¦v6²`_Êë˜me‚á¸H†^ªÙ°ÕHves_WžäZE‚ÀnMbŸRj“’øT³–mÍu“`ü’‡ƒ 9]]ûN^¶ ð», ÿRi¢@Ù(£5[Ï{¨(ú„¬¥•²˜[µ“±J¾×ò‚Ä0&¶öâ ˜sz3f±·gÓ0,A^û§¤vš¹Y%/pÇ ôgr³¾Å~œ^6wD*£*LÖ1 ½ wP×èÔ²¦AX?¹¿–üç4>3'áöGCoÊ×z=…\[HdvQ Ûì‡XILØuò/q£+—–ÿèWø–-F° ØÖ}¶vÀŘÖlÀjþ§'‡ßÍçngè蜭ò¡ ³¹J9¶ö]†y+åõq¬¤SLï„¥ðÀdbëï áu¦N»"9˜+Œ®e<ãõýX:µ[B½®½ÓèÚ Q nªC[©)øÍ˜fˬÇÓNu÷ @Då{ò8»|Æ|‡÷WÊ……·Ñ\k²¿úåα$k¹a ­´¬ô„x`«GNn¿ƒ¹ ³ôÁÝÁöÎìf‰¿à¹Š÷­Ç$ÒNZ£6$÷]$5"•Gr&õ,Ç$¥m\ ¥.†DUn"ÃÛºÙŠAc'GµOA¨Ñ™Í¢z_Y£UÇþMŸ±~ðÒš³±!û!KïO%ÀN”®2rc¦oºð”¤ª—ᨩÁfᰅቱ¢Å1ùee M´”kULj_Æu·À®ÇÒˆtM{òº£J£wgÛÆ8”|­2ïŒS‘cöèO×L~£¦…Ѭ)‡Jc|ÐŒ¦jÐøÐ,2J³Ym~§[K‚_ÈvšŽÀÿêr'Ah„þNÞã‹ÃÛÜdtè\æ4á®>[AˆP°RbÖ CYŒY=f%Á™†¿do½5©Œ^70?]úÙ#$ÿ¹m8,¾…}Ÿ’™Kbîo2«!ü”=­XûÉþÂ9òjWZšös@FmiŒ¾#—öÂcoÍ^"÷¡õVȹ…þ”Sã+ià±]ƒ_J^â·ñ9H(Ú›è‰ôײô=ë—÷+)fÈeß’6¼xÆ•#ÛÃ_Oa‚–b :eõóúA²¸ÎlêÎÛJqfâ°Â›Jsÿ”"¼L^ÁŸB¿,¦´Ò œ‹ŠnÙ­d«²¹JNw@D~»¨Ò6¥‡“NâÝ+m?-'¸)üô»˜.©Õý†äwpá¶¶„ΘËžHp÷<–èWªÏKV2‚PŸt½`•…Ú/ýÆGÃ&\qØe`øZÞ·‚dEÖÃýB¿èRVX ¯á~¶¼IþÞ¶E­èóýÈÌá‘H;×'Dዒʶéô‰Qò1Á»­¥iy~ øl/…'f¿2n1+žPSx°A„®µ]EÁõSà•C=yyœ’Ê-šðÞ#cEÙ\›. =‚œR¹l²MÖf/²ãgЖ{3&ôûùÖ×:FÝÒ„“3w¨D)VÞGì·ñ¹H×¥ƒrÈ/Kq‰þºÿÐí[—VýBGç,#{ãj  „;U@ñsQõW!(ßú+Ìø ·íí,ÌŸbz)êÓ´+LS“Ê« 4[G´Û$¿[!A›õI4ÅB>ö^ñtá"{ÙÔøìŒH~ø(‡)ƒ§¡eá(>×èüEÄã sº<þíÞ[½û­ww¬Ý^„ù™ñAË?ÃAoœaY¹—ÖJcØ»„*¤çöˆç6•E«‚;°l¤ôÑ´)E¯ÜÞî¤Ñvl|­G4ð‘ÁPR„ ßÜàee×£.!¼ß +g÷¹é³ä*FÏ9>ùñ-÷¾-ÐËÒ&1/E`¨ŠhÛÙsIÊT(¶º'^þóuÜÙ•£PÞ‡RÕCÚš¹ m]`vÚ;e¢çñ ßÀ£îžò ^0z®Î¹ðöF£û{Í}=ßÍ×ÖVšZû䌅FÊ–³«¹¾ZC‹£n?w]O_tü2â¶1Åê9¿{(ÆËñ»èkÌÅx(ã&ÏJ­äíZV_NÖ¾DÉÆ"AwoDÍs0ë´ç¾TÏtÉ;‡áìø¬ç4ðïL·üÙdîT%Ķj=J¤j°{‚û–8O›¨Yh»ŠKg;Ý¡9ÕZúü‚ò½C/ÿi£S9³ê.åhÄpbŒ‹þ,ɬ繾a€`/Qé%üMã5l•±x>bNà9ê¡©Uj‰jGdé@]›É’ ÓTî &m ÄøÉ/Ö0ëĸßH|rô¯èÑ¿½ºj-h€N ÄÀ|+!îrÈzéý‘¦äØgßcÛÉŸ±Íñ$‡%!ÝL–?ÏznTÄѯ_€òRQˆTtìl o\>w Ï\´ˆ‹ÖÑø‡U]αjÒ`ª¨ÝXkx¼Ó7ª'÷Z†Æ ÑM2ü@úúEænëO?Umækì£ÙŠSÛBéa.;ƒ,Hë®Ìæë|,˜ ½À¢Ó™(ðQZÍe¼»Xïæ%†oÕN¤[Á^AÌ©&y~Å%߬Læ„Î&9|É8ŠpwŒã¿ÅP²–³QÃòš’8‘q8^2·¶‘8l1ULAÆ¿´¹fIÈE’- X–u"<‡•£³• nwJÁ¦ÿé©w™Õø¥Y,]^ÚsÃ’—¾_ŸàߪD‚T 0û-Wì¦ÏÓ£ Àz# uÖŠ|ì—ЪŠ^ayð>ŽÃÙÄlé#%£7®‘KN‡K>ˆÜ´,5´Ý¹¡âØúxâäÙ|“}¸³) õ@"©,Ó ’®˜¼»óŒu”†¾3‡½^вh >Ñ-î[EŒÝo²©˜ç/ÚtjŠçoLEGüœþݽ»Nç_cÇÿ6(›—ǘɘtðÆ9-$ïzk©ð­ùk)‡K,Ü/ápŸšDþŒ%úÖg’1,›º¡´–lô Åšáh”6ÖñîånãU¯o-}Du£;VAiÐGFXöqÀŽŠ¥q¥9õƆà6๱Β˜ñV÷µ‰›\!ôRc<(l[ešµÀÞäͽ¬$ˆ„>MuàªûO¾Âh^ƒ[_>u}>g•×@ü•!­ ÜæšÌÍ(èÍ®‘õÁw7êW­l? M¼¼&¹8GÊ2cû?¥F<ÂôŠxJÙÍcÅ(Ó…%ÛœÐQôhxQy¨IÌ¥ÿ¥ëÿüŸ\|Üœáþ¾Îpïëÿýp=. endstream endobj 783 0 obj << /Type /Font /Subtype /Type1 /Encoding 7295 0 R /FirstChar 33 /LastChar 125 /Widths 7312 0 R /BaseFont /WEKMPX+NimbusMonL-Regu /FontDescriptor 781 0 R >> endobj 781 0 obj << /Ascent 625 /CapHeight 558 /Descent -147 /FontName /WEKMPX+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/exclam/quotedbl/numbersign/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/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/underscore/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) /FontFile 782 0 R >> endobj 7312 0 obj [600 600 600 0 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 0 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 0 600 0 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 603 0 obj << /Length1 1626 /Length2 17582 /Length3 532 /Length 18510 /Filter /FlateDecode >> stream xÚ¬·eTœíÒ&ŠC°à.»ÜÝ‚»[ã4Ö¸»·Á îîîîÜ%Hp?y÷ž™oÖ>sþÌù~ôZÏ]zU]UµVS‘)«1‰š;˜¥@`&6fV>€¢µ½©«‹ªƒ½¢¯ÓW ¹5à¯ü "•¸3Ðlí’0ùZ@s€Ð ÀÎ`ãååE¤ˆ;8z:[[Z´ªZt Œÿ%ùÇ`êù?5=]¬-Aê¿n@;G{ ü7Äÿµ£[Öv@€¸’²Ž¬¢4€VZQ MìÊ®¦vÖfk3 ÈH°ppØýû0s™[ÿSš óßX¢.€‹#ÐÌú¯ÐÃ èøŠàt¶·vqùû °vX:›€À{vXƒÌì\ÍÿðWnáð/@ŽÎ-ìÿêþSvp»˜9[;‚³*KHý'ØÊüOnë¿j€ƒÅ_Ks3×Jú—îo˜¿Z°‰5Èz€ÿÉe ˜[»8Ú™xþÍý7˜£³õ¿`¸ºXƒ,ÿ #Àhiâlntqùæoìºó_uþ·êMí<ÿåíð/«ÿ…Áì´³`Fdcÿ›Ó ü7·¥5‘åŸY‘Y8ØXÿ-7wuüŸ:7 ó¿DûÏÌÐýabî²ó˜-YÀShÿïXfþï#ù¿âÿ‚ÿ[èýÿGîrô¿-ñÿß}þÏÐR®vvŠ&öàß7ð÷Ș€ï @ðÏ¡qµÿ¹˜Ø[Ûyþ9ý§µðßhÅìÌÿS' 6ùÛQå_ZX™Yÿ-´v‘²öš+[ƒÍ¬&vûõ/¹Èèlg þåõ_-0±±²þ‡NÝÊÚÌô_þ­‚Ìÿþ_ªþžEAZJCR–áÿp\ÿe¨üwÀꞎ±ýR¾:˜ÿ¯Ç?aÄÄ<ÞLl\<&N¶¿»÷/«ïÿ!忱ý×û« ØÙÚ ÷·nV¶Uÿ?~ÿõ2ø0’ 3óÆF l2ÿ;iÿKðÚÌÕÙù/ÁÿZþ¿UÿÏ÷¿fôš!®.9˜ñ‡Ø¤g~×àæ MHèõõ°A…:׫æT9tû§Gló–¿V‡27Lñ½·z.ž:¾íËÑŒôàØÑt§/òˆ|)èzóÑ7¨Û¹‚X ‹Q¾ŸiÅx_.(lÁèr±jìL¨¨þ|…#žjçpF¸|   pËÀ¢¼wDõ3K«‹Ãî@k€À¨)8=£N:~¸§쾆íÝ'dÈŽûDÅïƒBà”M(¬«Qî‹Î^‰ŠiäNŽ}ê×|ê&: µÓžjrTsìZuG_-6,T&q0Ö`éŽ(ˆqà]‘V'û‚Jci|{G2Œ! Þáðm:ƒEÖ&Á9P¸Áä-ÞŒÕVÒN­Ôãóí§fÎébŒIl$hN±”„Å•¤SÄäï"òÁÃèªÝ,LÝnñ³8‹Ô  ½J4¼»‰‰!Ýs …ûÁŒ¯¾¾*$o²•.ÚËÓÑ_‰ôf±c¶˜Ì­W;Aöi¦ç7_‰hŒ¬ãQQ0ª3ɮմµÄN¾‡#]~˜}š JmYí³ž‡Ê•[rb£³oŠ&ÃS†¾!°´Û¿Ö¿}d“Ž|KŽú)¯MEÇë1ŒœÝ“R¬Úý‹³¡++))d–pÂágÉÀ¾wSV-ìGño›“ ¢ÜzãÙ¢>ÅÏíCÚèE“pT@)u ¾gÉ@¿ @hbRlvu¬L;oixÒ°¤4wˆwQ-™uï¶™w– ›a×Í@âV,º6q'ûeãÁÝ/œõÙ·H8i`uPYZT‡†"–|ð)7ô‹d$ 7(±ƒF¤—ñmñÔ’=–=OÏÊ&?Ìï}þt‘¤¹¨÷ %Tãºæ<}˜Ö¬Þm^„¶ÉR[ž¬¶¶ùcÜü~F§œ/¥.:Y\f´¤S¸•áÇöë 9ß*°VÈ~$ 2t²¼Gm:iJXYÃ_õ«ÏXæ¶ÞGJZåÝì{2JlßX—•žüÍ.š^ä³Ýpx³7exjß-s}÷$ºNóº“le$;bD>Å„Yôo*?˜øöÊbåkgÏôÈ~òqÃÕ&2dWí¹UípGùå’u]]ÌÎÌx„Ñ“åL!ZÔ3æ±ÌW—l_YßÓ•{“/ƒ eß²Œi ¦j"4íA,L¼zŒgæÏ"åïd±þÓâÖ ]•&øS¡*F†k{“2ü¹74âGy‘ŽQWãmuô#¸`>ηyFx¤ 7»¤Ë‰%QáŸñhç ~ýôÜ{>â,ðÚ)*öàÒ×eŒ¢1GÐv­Àdœ¦ÃQ&»÷6[dæ‰ÆÅ`Á>ØâÅO4þÞƒ_Îæ…°Jû¼]NÍ­*q<¦ÓUû¢wÈ~·=ÿ*±`_ûÅIøOokk£Oõì›æ¢Q“+’‰" T¡a¹-z -䫦ÿsNÃÞ¦œC^À³ •fz«¸®êLu®ÙÄmY໡·RÚWï~^ɤÁf¬Y"»ò¦…ô –wŒ] 5k¬¹ùÛ6Öô,…Àz÷á·Õ^¢±$É!XSé ÈCÌ1ºá;|èa_ÄM/»ôĈ0d^ðFËü“‘Ç]{Ý‚ot Cå':~¦?/”BŒã–õk'j›w¶}~." Œ9%çÄ«çφ®Tl¼»íÉÅÄ]MLhÄú_Ï,ƒ‰ Âá‚t¬¯_·ʽ¨ ž¦w T3]”Ù~# ß •ìŽÃÓh¤ÑJÄ50@KÌWúA|"£W烾Ò6‘wŸA§¢ezÔgëÒk&—$ w±Gã»ó›¹kªJÉ%¿&Ÿ6/ˆ]¢Õ”ª®™5k¾Š.X•°Q5ã+(ûu$lØ¢y Ví‹|_aU7̶yN ûu*t5‚”¯—öÝîD–sŠéè<Ýd4˜¥¾ÊLÓ˜—m³ÏôR]»Eô[bîöûPvÞ°27|Z«½%û$³tGÐD²¯‚¯;SŽäE¿B˜³ÂQþÔô«þ´ÌgÀíÕ$0Ì‘|øuŽ ^¿VÈm‹ ♆4±·û hæ n¯³ªF«—Æ•ÈJ‡Óf¦£QäÃÀ‚u@¦Þ0“APwPËEž”ÉÑ´ÿn_¶Jø(þ&.nÿ‡64‰ 7¤¢‰øWWd³´¶Kt&wËmãב‡Ùpˆs?ÿÙ¸\žCñMý·`sÖ‡O½Žú»\?¥Ý¬»ÉïhÖÈ9{±š .ñ0èïv G‘RVªåe¶Ù B' ¾Ô&sIΊk\®õŸå‰²x[A7<Áîø†³Øù1m²µ²v„ÙÇtCÝ{úæßÖiöyÿÖñr+†ëþªð]8ª  6#* åŠ&ùåeÙš&û™ÅÓðïF¯8“ ¡3‰‹¶rÍÅ$ß²A¯al |TV½ÝÖöÝ4Ò‡†ø×B¥RT¯­H{+™_ ±]?Íš'7ëȾ3Lï©C!cä²ÚF㯠üB£¤ÒHóÇðL“õ  ‰ܯU ½¾YÜr½ Ï3ÌW¼<…eh6¦'3² *ô$’E§Q?f¥Ïn`AÊêÊàºöýЀE\BtÀÀW ì1&%`G· •_FseRU{4C(–H(m7-*nŒŸÅ¯,ÕÔ-F¹,ƒ}á±;á.T(NÕO~β,t†æ»û¸CM_a¦]ç¥ï=tJj#B*å D‘9Ũ}!ÐV>iÆÍ&â¯^zW{´˜B{gôØçlXô)¨‰ìyÿÔJÆ–¢XI&œü@Ãëi_›åö.j›5ÜC"(FdÅÄï$7Á74‚ÔyíQbÕ*G"eç¿(¸½ÖÒíëœrÚ)Pë÷ÐK›YwŒëÕ¢.‹ÿá,ìv§þ0Û#Mt@WÇq„Äyk«c „¡Ç®ã«Q]›,m];ˆ6n{úÅÞ[àTDj>9°í ®и÷GœT!¹$è ¿§pp#Óóî×ܤúÑ’Öu‰c¥&=3"AÙÜÃà8ÁäíÔpQïÉ]Ñ«>µhÂK€aÈ÷•Âi<¨&‡´å»ÜÅ@4H‘“69m|æ4$9 S¿€šZÃCB}—ZzKb‚~Ø5ÿ‡ö•Ç-bZ¬Íj;;§YëyaçžIìÛbxŒEþ;Ÿ‡m|y•àÊMÅLÍX$êájÿËg³åÔ™ üaÁÔ’'!ÿ±#ñõ”ïV7 ò- Õ‘cµÏ<YZš&f¯S}Ø^¯q+ÍÂöC`³æ´õ«ÁÙyiAnmYB™ñT¼?…ŽÚ.yo¹ÿ Ë—W½×A®ôa/wñåGxú*ñ'² ªrÝô÷@¨8£¥ž†¡?6ãO &¸j²cÁϹòŸ3ú‚ #C‹¾oÐ:-ʼÉ_ªN‡Þi1 ÔÜíÝ"јüii§æ²1ÐŽV‡¤}ž—ζˆß^‚±êg›K• tþ¤úø§y?.¬Ê_€œ_êóêc´%¨hÒ‹òaO†¿ 1=É‘Ê>å””(8Âþvìž Žü,v†ø7«–)ʾf¦Ò͆ªµ¾÷r,E2TW¿eÉ=>º¹òIõv®íòÀ!ƒE¬£êa&êÑï’½Å6c3Ö£&±º[ǶDuÆA/Ùê‘€KSÇS˜²ù̱ëCKÇ(…hÉì±”½ì8‡4v}U'Ûëq;ócL2"¢¸¡¿†<ÖCªÝ |ôè@Ùu˜Þùä§&Šl»¤X¦iØ•Ld´Ï4âÄ–Ÿ“c—µ¨#-+UKá ­±_5 ûÕgøx_ˆûª{”/œm~?9êïÁ@= TäVN,pÄz.|Ù¨hϪ@ù»N»ë“÷;q—ðÄ™Ÿ›õb:°?S#ŒwÔçZ]RÿÈbéƒÔ œ^§»^J3Þo¸¸‡FBÉD©lןÄ'†¶9À¾•³K“ÙÇ¥ž­äW+ìU3ymp"Í…S?«^dDø^V*cD'Vòåì¬LéŒòK¤÷Œr#f š#;ÜéÖ™¹óŒÓ<¾Òúbæ|Þ+>!èpÜ@Ó ;Ç\m‡ü½b¬5’žvu³äÑÙõ€ÙÔwÖ§ôÛJä tî=Ý”¦ü•-JxêAPpDqP|2S}±$ŒoG¿°oQTú©Õ¯%ÌïµéŒKBݸK“l"7Z»‡7´DXVÁ1–á±½ÖÞ³îš-Xi¦ŽÄxAçÒ–¯©öyŒËgÐÎñøZʾò!QþóÃ+îYãj¼Þ~ uªÚo"¿M~%z=2}C+Wî;þÌ9â†}Û5€švˤi&2ÀØ”e•/ee«¬bšœÓ5Ê”²iǨÖ ;óóy¿ :»i»·.‰ø²šLL õ»®ÛÝÂhR8.ë£ðïŒU”;2,mÿt[¤9­ót´z6æ{}ÉÆé¿UÕ<ëG5ü§˜U¯™$¨½à²Ö ŠT4)j »#@|³ƒ%¹òäò´×ýœ³Þ,DfRt"ÐçÐØær`>¡xæ{¼ÿì¸hµ”óUÎâÖ-ÞºàÑ]ë òNR±°^Tá®mŸIÊÊ4)kœº¨ŠÝî±ÒHÖKí»ãeݬ@èÆë}§š@‹n²\ЧÄå87ÎáΧ^œlÞ˜{@ªÍÑd\WŒŠ´Sµ›¼9ƒú²ÁS’ž[Åî·¹XãË)m!ñúD.=ùþO_ò±y”J  <UU B¤ÖvøÑ“zåôßEÍY:¡ÛU÷‹›úQ#hœž“fá^Žv@(Æ Žt&™–àòŠéýqDZ*·Mn\æoM#Ðɸ²'/í²†[¾uEÛaÿJÍÑR’Ô“¨e‡Çrkå©üá×T*§‚áùŽ8Ö¯åšWÎLóÚsE˜´tè×þtlÊòX(ó÷/Ü>;–RkÜýŠÌZ²«ÆÜ#|ÎH/°¸\ú{ÔR_ÜÐNsêô¹¢b|œÅñmWq×|º¶6[ï”íÛ?·„TÞO#‡b¿|úÈTå“åP† :m{àïmhS£Õ1¨ê™åî¿ ¼Ú10 ¦ùÚViÆ™KîÉîô[“YÊ\x‡ïð3¥JS&ŠOò¾,JU¸îŒ[Ô”eÏ#¼´9ý²šHè4õc[Ú?Y—‰5›¹¦*{yôý±PÇ<‹™tf:„c}`üÓcþDZu ‰v¦wƒ~áº|¢®‰«ÃáºrBÕòº_}(!,M¶¸F>|y’AS`§‚¾ñÒíÇ¿6‰I¥ø*? ‰+ßrû„>Ñ#ðÄ'Žf·õë»zú4$Ñi=[aŒõ îw=ö-ƒƒñИ;Ç"Ú8™O_µ‰Ãˆ£x9Qܶ©³– -„ÈÌòÙµöWg®sxØNß¼'÷Ùk^¸ÏEsMü·e™Çü´Ò£îúÞ-k]œ~›Kç'?)´k¼›øÓHp£ˆßí¶^¨Û|9ùò·ýnÔGÍfƒ¬ ÃÅ/Ùݨ ñ¹aÌ=*eÞ¢RƒÛ…œq‡Æˆ”ï^¥æÃÆÚ~ï%­„rÁ?áMY³«çôPL\-[ºÂò*H}açxO²Ú‹MèôaÅwR—VWì)d¿JÓhÚ&ˆéÒ{|•:ÚãZå· >¸<§jÖ(ÅX•nÔàPÄ©¡åôWÏãü¢Ä~TìãNMå¯ð¢h2Œ”÷C5E©Žrfq±,¦Æ ;c6+3UyÀ ïgÒ(ãÙOsî$ôòäÌÃ×È$ù6Ê9NÖ 7›ŸFÇÓV©ÊŠ­žÛ¡wo”Fgï¿2k1%Ä?žðF`I7îä¨TûP³p¯o¤¿Y¥1.9>’›ó€æY}¬Îb°ê /ì<¶^t Z³?xkµ|BûÖé7nª"\÷Bd‘ü m& ´…ØW¾ìÇ}1P©Ü627™ôšô@X˜P§íœwvúáÍfj¼¶ÓôMSç ºd)3 I‡W¸¿LÆAÓ!‹"OçkB-n`0¶d0{Ò@fÝ*æˆOôzÕÛØ«ÁÒØþÃÌ6G¼ûWK÷ÃJFÈk]E_OÓÂòV%)’M®Êøô¼iÝ=ƒ¡^H­±óïê5‘f—aSpß|Öî<Ö±>´‘6ZBÛ£qõ¡+Øæuž¹•_<× ¡@Cýþëï›õg3d0áÑŒCþ!N[w2^­+ÒÃj½Ál™kÂH¶£ŒX­I@Ž~#‚C,`„:?[kZv DZ[ía ”¤‚è¨SøràÂ900µkTFÈQ…øSÔeI‰²Å!›”:Ð >¬nÕâ‹`rýÞÈÔº´!7Úá…Vˆ€brÒ D¿!Gú¾潞*D{p9]+€kÔ>2´Iþšm.¾¶ì@|Z#‚¼Ÿqµ„‘Yoªæ½FL@qBØP±¼÷ì$Ó׺~e'¾änÏë°¶3zM“l~´þ)Ttðn"pn’?âüÄ™j*T“…IâF-ê{Ê:tõBsOJxÙgÄ ž9ßjoCCd›mòänÔCÂZÐU<„°ÊÁ#ªÌŸ˜†Ä[‚OÒ&)ß²O`°3üÉý¬¹ªëinŽY/¹NÍëÏ€?è‡]úæjßæÔòU:ÞÓV0ŰְÖ%GšWØ#ÝóïV—x0K“óžŽßÔ×pšÞ7W¹9”œaÁ|úÖ”9H3§€£‚ôŸ¿nVM­÷wqdãEú'@trƒ75øcÔãP¸Ž-ýðÛ‡­f픟íÇWìx‚4Ù‘sT6&MŒò'd òP#Fà¡‹<’a;EÐ7‚}åZHIúéU—Ñ Ûé¾8i…PÀÆ?o¡~€FnH'[r8”Æ~©ñ³IÌŽ¥÷Ú´Dÿ‚µ"7–½9q:§Æž‡ sa¡mªŸ²Åóïƒ?QûBaÙ˜síMñZ0Ó£C"ˆjN’ˆãáñåÓÙö´—¹ò%þNUBÄ–]ýØ¢ ¥y’L#Ó…U™qØ*´H͘-4¨À‰€Õ^áHú_p™„|Åwo$~x¡¬¨uÐ¥7J½, @ÞéÑÿc:®÷Ùb`ßk~Ã@á©rKè§øVšMÖø÷@¸ˆ*¿pr µ \I<ôBžíc=Ùõôk¹åéŧˆ‡¦Ç*SKÖ#ç t=GȾczQÚ-x†Æ²&‰2 IVã¯îV°é[•ø­Q—.Êݵ’\qk‰êÒ0¼¯iõÌîbóÞן§œ:ÂqmÓ$F/'©I¡.ˆ²¬—$B.ì‰#p#È@s}Óe‘¿|aŸèžG&ú®úÜAm«ä½Ü‹UHqS«Ê1ùÀw©å³ÚÓã Ší÷‘øUøF!0“,6%H¿HÚff㮩ˆé2ÓI§x•æuàó*z‹4MA4^Da¤b š¿’cWʫ߂}8øÙ y æ‡Ý ¿¤(x|¢ÿ¼ô O®«g–wÃZzv<6)y\òþN£WIòõ¸ÉT<ŽC¨_+vDs‡‚èE`àhvìÆü'L×Õå ê{ð—[ýnÇååkãÓê'©G(OÊüùª ‚&wòR³›"d°}uMÆú-•â}ùX°¥„u°U¶2%ìPZ6ÎëZsÏó™8Ÿ¡-º •‘AWÚ/imè ï'8×€‹‚ ;Ó§ Gí3ýöJØ[„Ö!ïT¿¡”TÄ È-d޲Cʅ律ëáüâDÕü_ %j£‚èFœ›_×ö‰DwcÏð¥îº°?0}Û1¾+IÊÚ¡ùwU5úê*Ó‰¨t&XPð£Ëø„§‘áCƒ<"ÃÈùå=;‘,ý®5{®4 §`=Uà•Q ‘L¦@!ɲ5Ú+òÆK`] ;hŽPD$,€Î¼B{Òù­]×ø8T¦¨á%A´ìùî¶Š`7銪gÓ†BšÇk’‘-§˜Ë?æ0<þèÆûÉæ5?õ#—r&Vy¨°–#ŒßBÂä"úŽb1°²×©4àªQ¸Æ«1I_ô±ø¦q UÀ3Jš®KÒN~LÄ; ÓÒ@¿p{¿ (ÚÛ;Ľ! 6–tPŠó–åü›N­°"ÿÓi}A t¿R]}Y7lêJnÃî= "윊X®~Zù¼àΨ£2‡uO(ªZ¡S#éiÝñ= †æåêïèÑÐ䯥.yÖH=¬é8ähX‘¨!”÷vÓd_Ê#‘EKîóHq4ò az'Ãû½š¦¾tû™`g‰¡ä|¤PIB¤ ˆg˜Iti}p2=w—LO3yÄì6„fOÒDóy·UŠQ="^l“q¶bÁ·¸Œ]ÍàiÖŽ‘R3Á(z'ñmþYáĬÚFˆáPãâÛÉWã¿Ò毨. ¥žaªæÜí§€Èwõ4|Üù 6FM´â—xæ­";uÔOIäpî)q|y5?…æbËTñV±LÓˆÏö{¢f*&ù¼¥Tò[€½>eéÎ=‹Qýc’ÑD6罡dêÅ5 ÇúÖÌ w>™#Ÿ­¶¯ÄÍgÌô[i&欑‹[o 4Ç1ª¹R˜*MÍžµ ­>ù*Åy¥K;›†‘¢@™1äC]§IP²îÞYÞ&ªqõ}=_û’° ío‹·ªÄׂv¬££_…®yïètƒÌ„Š!~¤I|Û„CðçêÓnR߯٧ÒRì?Ö G o·À]ÝNF-¨Rû|Oºê>Öëy—l PnË?¥ÛŒ¡ñqöGùY!ì´!Œ/Ò ÄËd§ši›½à/Ssòg;h.¸Î]œ’»`V†É 7ïd:gƒ=ñößQÐT½4³Í™ùÑ®u7_Íî‹J0¬›[$áOò¡Oþ\𘗥æ `9÷ÇòJqEâ>ýfjÙª6^KX?Ä‘"9— åpÛ±=ÒÝæ'ôãp¡¦¡ÉãNZQsHŸ>œü¸,9oA¸Ï‡ÚUPçéˆö“2¯ãó[ß‹P ƒ`•»N³ë V{TýSÜFÇ¾Ž±4ŸuV­^daµ±|ã¬Ýز55¤FIiÐ4JJWBJº…FQo¥&C•³n? ‚ 6´M ^¬3ÉÕÕ¬ªí.—pD:ÕJâÈ›‰TG1Š”)éyù»ŠÅÛB§<”Ì„ØLž/.7Ö”tú0 õ&N«±¦ž7ýeý8îºÂ€(€k@Á­³øÒ's8]ÍHeçb™EÌ*kîžd;„®n¡§€®qUîÞÜ»$ñ!Ð6^Ù6¤ì9rEïPøÏÓhzЉ´@[ßPS³~áÒ‰}ë ~fž6oàéÐë– ¶à-*ˆ³“L2D‡*Çžú ºyøR¬Öˆ™ùÒµl(tÜ‹î‰Ñö¨¥±äœ­«§­Væ^ E8Ü ó!F|ÛäS·iªi?·™Mº=´+1D˜r [Ÿ”Y{À_`S‡ƒÉæNæûÝŒö¯ë¹½ÔBˆ\­mTt¶‹â‚n ðR‡6éÕÿ¬ýPœì€ ¤ýI™©õ2úCÒ Ê€(¼øpß•cÝzÚvË¿:oTÈÇŽä‹¿:‰¨£Âç(«Qý¾cÇÚ|ì¹yY¶kåc!ÑhÕì$õoªƒ¶«¨X5~LŽW!EÅbAR,Óì ô'«±~õB¬`²»1Œ­Ä›²4Ìié?2¾N2—´Tólm—5ýc"£æºØÀ*Ïù%ѣׇÛf°Í½Ša[ÕL ZàO@Îê1Ý”]ªáψ j²Ò½(áíÿ%’iKÐ{@˜HÚÒ ¦ Ù+ð¬hL¨•çhZÑ0(ÊO<»øGPξ G<ü†ͱR°ùóËØÉŸ·çC_v¶ò»eù'¬ÁÐ,¸jßÏëâT¢¨t¾YuS±<(¢g§¡ m×cŠÔ¼æþÙx-M9Ë ’Öx½¹pd+Ζé‘™hùÓ³6}°@‘P ЋM¦YÝTBZIE8.á§<ì¼píuŠr÷¾Æ¯îê‰ÌÙ³šrK†ù|Ò|ÄIki“/ h†|qÌJ>Ûª÷C^Ø"!ʪ|Ó—£jH)“U½æžøÞ–ë26îÎ:^usœ3nz Éß­î…i jby!k‘;‰WÑN²ãmІƱ BÛ4Å;îý©7qØROd’¬WE]Ÿ|üÅÁŽNlûÐOJCù®½}H€ WÅsÍ'hw‰˜íÝ9— ã¼»'…‹¦}ÎZCÁ))mó¹„^yÆ„@¯Áüú\ZŠÓ[¼H\ýÐð! ·x%›•æ“«õ އÛto=þ²©½^ÎÚ5­‰˜ªRÄiÜûkà)_D”‚yqšÏ×O“qS÷[üAóBºâ—’žì_Ž$qû/Zö* ÖP}“Üsê‰ú!‰?Ýî›xr\FFrô“ö]ß¿\ªœm 5V×ã‘þ~¼b÷™–òÂN/qû×d¸2 °4sÍ–\Õ­5ôØ*™i‰®qïæd**†žiƒšPi9N¿Ÿ2ÍmƒuMcÍ šyNÈVÄÓ"ßTßlS-û6z ¡õˆÝ~aõìÁ¸lK ÙC^š48È"º£G8ÝšSÍϽ¶Ñ¥ç.<ºÌG|h€rŸNf3J±IŒÏ£ØzX¼ÿtªßzIc7÷ƒ–Ù«•-H*`é£P ¼Ë*¡÷A,_M…&Ù«SøE~€Û´õ jqZÇ'›ö'-JgçªIx8ñ¿µÀ߸+Ô’LùˆÏ@•Ù7êÌp[ˆåÆJ…D]y½=u¢Û­÷ü`B6\IŒ†ÐÁlÙ®RkÉ/êúÒñV¥å»ºëT7Mnï·’B¾õ¾fo¡ÎUƒ_CA*D¼£¿“=I ûQãÑØv;©ýÅÐð­ß9ãh\XÎSKê~µ<[¥9ŸoÜΟ€ìŸˆ/drØs7_oQÈî7F³î„“°çÃÀöÝÑ~Ø›)Wˆâª{è\±Âeû©·ðÁÇQ9ÿÒ…%¼tL*øJœÏ{† Rÿ0§jìšbuP¿0]Ô®Ù×eASI˜§û%²‰½U_bàM_)KÉ#@3)¶.¸D.Á>ˆƒòî÷<;ò¹§¶Ku7_€žH&èóK¨ö@BŸ±Mä•äN_"³å¼$ª$‹l–ƒö'ÛŸd§f2fô©±Ó—%0ÛF¡¹è·!v’ÂXø£ ‹Ìrs1§úë¨-47•"¼˜œúJ¥¤1­r±Yi¯kÅš„?òä3w,Þšœ¾Ñ®u*´_½cÓ„$W<ÖÅIœf÷5Ï1¢D.N~0ñmÞe3Ç÷P›gÆÙd‰Ò~‘䣭½À\¢Ä wÚ “”,7ÈXËÃ$åL<áIÜi“¸ýno©q*[ýÂôv¡ŒÌ¨{-æ”f;¤ÖíøÄµÕr¬ºöù¨#>ÁÖ¤÷Ø»¸•rk¹Ü‘{Êkû‹‰ª.EÎÓ¥Î&@ϱŠOÚŽ®$J”*Ç%¢úÅö'±Yº… wŸS˜ N§÷{VJÎ.·D´§³¢Wí%°Ž©i†n¹kr‰¦= h/46Þ|àØúÞ$ìnMZÆýŠ÷“>)ˆl$ûî-_nØá‡c¶JÓ,#áFv¢ÈKÜWóV¿/8sam´¹æ†3ŠÀj„ù÷°Rþ§¯»Èé9< vÆè0è“‹¸ÊôHÌ8l5ňn$Ÿ=1wX+IA|ÁdÜ‘k¯diµ6Xž…‰e6ÕÑÌa~Q[Yü %¶.˜…úíðžÅ“7BZ× )p–ðQ)ÁóªAEs…î¦;I9ÁÛöy„õ®`—B#Q?NÂê¶k~N÷ŠÏâHJ2‚‰Qs3Lw’|‘$B†ºjd!—£Ä"YŽ³Êæß ·´õså{¼oußhRá9SÚÜÃb£‘öÖ1±äI5áWæ¤=LJ¾,ÆçÇî•æCÐÚYsf#u‰ø=ƒ¼Í †£S×ê%Ù>`¿(wõ¡©ý>‹ Ÿ¯rÏ“|Á®‡š=ôùí_'\¼hIk‘ªï/»Qüºv å1v…}Ù­(æê¦ Ð"pH³ñ*#Ú7l!¸\HÂa!÷bq•4BëP¦tÂíí‚«wéI ÂxqE4Ùöåç%uƒÝßœ.“²z²Ý/Xˆ†k‡j¹_lT“'è‹§Ù˜êHðkù`0ÀĔ#B‹Ÿ0¹P*k/NÙÙIHÏ÷A稥æ™U¡ûÀü…lwè†h_Õm‰}fÛ:Þ‹·§19(kÆ1Î{ƒØ=NÓ_‘«ÓÍß“ùYƆÉí+‹J/ŸBHá‘Sb`æZ>SóÔ´ÿh•¿d$¶ŒbŒ± s?â)}Ú‰JPö†äå÷Uz-[o½Ð«á1ß1zÝ 1}T"Êý}_X$Ž/Ë®®J(•õ©„Ò¹òR |RN*‘Q±°é¼9ÍTVŒ±ûkóÇ¡L9 ]5Üv=ÿ„è–Èû‡TF0ùÄ÷.2Æ­· ^È_í”8:í±ƒ=ÛŸyH"ÓF³¤>§øfy~z†þjKq‡‚{LÕ|‘åøÞé×÷þºzÂQÜÐëK1@\3™”¨†IåÝ+o×ÏH¦»A/ÏX“÷dDsYGŽ!0å&΃»úg€p g=g+6"—ZÁÆë¾xn¹É9'Šÿáë¦ë*¢Ô«EÞ‡µ#Z îmÒ ¨(îÐj%mVôô>\î¼Ý‹c] }ù]I›?õ`€ë¤ïØÇÛ™sø›äX‰H1Ý|϶Ýh*jRU;ZI†ѸÉQšðây1ô|Ç–îå¬õc AÄ:¡µ&Ñù5ë!–/AÜØlšï×f¤Ÿª¯9nãv£ Á 2Eb¤VÈÊ4_$åH{½‡)U˜OÔËþ±7 ‰‚N¤å¾’ ¶öí?Ó4î¾¢ —ØxX6í…PRŸ­¦J|"0ãLj½9ú #øJ*ŸÍ=y,OlØ…3B8ºwŠgûÛ< {g»eãKã÷‰éz\h5†lGÌî¨×,&¡No •ú—Õ,‡2Â%RB¬Žº Ü>êMvn;ÄæËf!b¬–^/”ÆÓ‚зºûÔôw µì•3ï͉j³týJÚ«­B$dÛï ³û¹6ãÜ…j¤Á5£®'†•&Ú'³„c‚ uÏ:xõ,œ_Vب– ¦åvÚ¢'Hëê>·«š AK( |•[[â-¼÷|ýá«Þn$ ùS„9¡ÙBj}âÜå(ZÅØš¬¬÷M>'= 'j¦…:®W$0™À ˜hˆÏóíHa6ëm)ñW"íkÁurx—t [Œú5áØC±v§â'3I‘¡°ÆÀñÇÌÊŒ V<9:?q>›ºú`¢Øž¢‚,è¶ÅÛ¢ -b¸ÁZ—œÇ¸orÄßü Q| x¢C~O¬$žDWØ,Zg{+¯x¿Jî`³Q9qØ·ç{NoFÂŽ*NÒNÓÔ$ò$=#" wLðÐæ òÍlüs'HÍ· ß“…R2Ø-C™rãáÞuñ”†»ÀœE¾2&úíÆCéÖîô”cv¤¬ä³õKè•B/ ‰:bt3%Jéjk“fîÀÞ 9)Ÿ'Ro…íZ‚°´©”7{e‰Ÿf'¶,üóÝû=>÷Œœj—lZt÷÷Òé9&µ. ÙF‰AtÎ Q`?vd‡cEÄzáKꇆ[[LÉÞ‰gÕ²ÆCõ½x\ïW<-óÍ~÷JBÃVPâägÒÙl|Óð›å*ù^ˆöjå<››Ú2T¯ç Æ ïMh:Í­‘È#.rzºNØâM\_jíÞM‡|t|Ó`$QˆT¾–Ô#ÕÐ:ÞPÊ¥iÏ•ï\"mDG5ÛùêE ¿‡þ'¨§1pcze²ð('OÏ+a`^ظ¡IÍUêéfòè“ÙofΩ@ï%:(´Ï8—¹F¼ÍÒe¿©‹g#è¿gÜJͧ–SìÑpbÍ3£ákÒõòúÖœŸLh•ý8? « ±úΡï±nãÒ̯o¥l– %_ÒT0ÞÁ qÑhmñÏÔ/ïóJ^é’h1œ¾­ã“x èºÉANpß üutã5Sì!9„%ˆD¹Ü _ÂZ£Lß\€3åÇ“øQ0(“zÁ!¶BXÙUX¿ýtUcñ ]mD2Þ’\Z™-$¶[¨ÉzOï´|#ZL¢2…X‰Êˆ=Ž×AÌczŠa™Õöc$fG!µxVL½9gŠ~€_ƒ»Èµ·U§«N³«w™:UX4¬ëÀá£ÙâZÉÕJ.ùÇÔ9M#|S¯8ÛêüÜÉO¦ Ñy)(ºm-/›W@´,dê³Àaò•s‚Tõ¬(Á÷Rú!I]åõÆk[`a°¿=Œg°ÏË P ¦(¯ÝªV£Ø·V?ì5:OW“àô µfÙÉ W¦,ÓνwÊÃç0#1ÌÏ3‹?kñ䇃šæÃT_2éÉ'GDcØWõœ5ª‡à#g,ŠÍó¢Iu¡ÎgælŒ×tÐÝÜP ’©H©óŒž+ÔøÑÈ)ø±§ìÂf±”ÍSó•(hˆ!ã$)Ÿ˜^1`àÕI…fHUóÌó3+˜%¡¼Â[CÙƒG\z`;‘£úF¤Ðw¼˜êº— ‹x£SwÕ¡ÃRÉ´Ý’º’±¯+#M»G`dLÜ9Þ<PŬù¨«|ÞÏŠÓ¡Í„d¦‰‹p·¸·ÝÈ$ÕVIô¨ ¡óTp'X`s{ÜëK²pv¨hžIqNO[õ©<)âZÔ' N{]ßgwÁâÑOèy8[CJÐÖwŽ-þã6 YK´BU:€ÇßAa†à~h§‡û-Dìvÿ0ÊôYþ Š=³al-yÙ’Íýrk|W; Ñ ¡÷ÝéñÂ!¥=KÝ~ùµözwÁƒ×Tà`Ru¢Ë’§eP5K-âà.ÇÂVêåI—ϹèñƒÊ{!­ÂödñÉ–PsƆRQpÓ~ý ‰4€7I¢†ÜlöÅ4µK‰O0ûaÃ$¼ìÅž ÛSFÕJ¨×pS¡B§æÎ@AÞ`Í•A!&kDÖ§¨è¾‘0 É„²=œ^À.Q”×2ðŠ3µõÉÜÖ©¡oÂÉGyŒúy½d=šQ"|ó‹3‘²9u®…ÏX mä<ŒÊ8×gL/¢.†$÷2 ø-3žÎºžîä¼etyBe)éSÝUÛÿµXÔ±ÍÐà›µ—óäÜ/4*„Ú)=UÞaŽ"Ùw´Ïó¼RU Gè?Œ;\3 99 B„N Ç}±w[vú,xµo%"ÆëîÄ·y ‰œˆEªÐ”´ˆ×«2Q*=WïבD×ã  $ûÊ4—mfVlù›ù~ñÓ^Ž·å.'#2‚¤QkmÓv3ðlý•"þõ ¹Å‘`äf²­Û}÷i3­Úº.ÄzY"‰æ„´A™E‰Ò¯Ú÷{uõýñ øåb¨¹ç^|ól\C'_me‘N-ÙÓÆ<¾C&2Á0ÙŒN0Ä«ØÕ @¨“;CZ£ÿRþíD38*ÌLäÄ,ŶÊeÇžÝZ7E–à@$`>; /A`ƒwhžs¿9ú”#ܪ§°,õ}ÝÇe¤é9ÿ^¬”Þ-²³l{ ¯¾±^m1âú°ÖTïùðËá´¨=»Ùi³ýúÓÒXF'a-Ê×ÞZƒ|dH;ZŠê}ÚRÇ—CNöûÅ.,ôHZd̯ê«dÈõ4/Ýâ㌂G) G×”Hiò¾D­ ü鎇 –Ï@á ½°[»ueúˆ´H-ÖÀç¬ßP‡™ëTŠÕB]À kG:$2èÊþ†ôQ¿b·qæÚ óEYf«w|¹3ÉaNjc¢èþPv±Ëu­ˆsWvñüH4ŒS‹Eû0Ïq©ÉMÆ?iÖþ¨ˆÜB{‹OÃX§Û­±¥ðƒùcÈÀ—7˜Ì?¡BD–ó!ð Ý^˜E]œ3VC9~bI0¶S}¿19I¹OãCw#®ô5Ýfâ“¶½³Ö“ä €E9_¶œMK»ÑÛBF kû[‹@îrŒÒÆC¶ ÏÛγοáâXוÀ-ð;ÑP¼hè‰à¢Î­SA‚E[%²©¿ÃÐgĪp¾Í™öSKÑKE^SÓÜè&½1Yœr¾J…^,â&*À~@-hXÓfaÃ1öïn°ÃÝ+ ì÷‹SW—o]'}-œ©__ư†×;ÑË>T&ìzSôó)÷ÿ´­Zi;2=El›ÚDˆlTBטz‘O¹ŒïH<`“S­Wÿ‰Ðui39®"“˜íA50q ÁròútnLÏ6ï9xxmý÷_tC¸i`ì;Âg«Âî¥ìáWs—Tÿ7ü¶À|ßøÁÓzæ"ïwõÉŸå•J >Í„ôß±8Êê=~¬d‹Ò¢`ó*jîË<ºÔfj”- 阰)–ÚVÆ=t«ÔRu­ÌwdÊAŒ•¶I]˾¿Ì;ž†ªƒ©_¾Ñ°“ÜÕ­ÝTÐu4ñü–hït<†î (I—*†…u÷gŠÆ>"ƒ1·sÞiÃOëöωé.U1)¾pŒ¤:pçµ.¸<“¬‘¿Ö×)”täj¶‡-ÛæÅä40üѯn—4ë'Ü |„ ²•Œ½´ ‹¨GjZ}C‘lÝÏõNî¼ k–NÄÆð¿Iö¿öN~BÔ´”|Ž7WœBÆÿ6©R‰~t7ó¥Ã!žé£WðíëôµñÕbºì3@…> ¦"Q™jÿÌ]Ù™2ËåLÁ©(ÅìƒíûXP"˜C¤U§~æ}”-Ê,xã\»ÏSšgŒXö“Ø4Dµ]çèsŽGsW¾º²K…wb,¨èSqŸ2L®Z, äÔÐuÃUH½:ÏK}Uw, û~,ã¹^"éER2ÆTý**²’×}êk‚á(7eÁS¦íƒã+€÷|jçæµ°=P燷Ü*s‘ø¢¯HòR­a‚ÐŲ‚fê‰Ó~iF`íAÅbŠQÕ­s¶Öœ¼LÊ(å—¡ y˜³%¢fž•|èlÞ>ŠÄ†z›OXÒåºï×ÅO4±ŠèÚÙxºµ›±¼û[Hç4Ô‹ÑøÝû?y [I½^'Ïà´eëÉšõõMãåy©«yÆÑeûe {5\Ï*ã –²·ímÅŒ±,e_Ÿtǹâøñ?ö]ÿŸöêóŸ à¸ZqF¥fU¬–e”®%¾Üšöƹô3 çxò’$m|€$ËNµ8cêrλ”Î×ùv˜IM¹U/n¢án¹Æ²ü€ÇL}Y¤p5 àV%j‹‹Ûæ*@W"»oÑ…§!€„šÇ~Þz*.a!šÝo(YC†<­!)^6Íœïw\víQZd"E ±©ì^þgÐB]T¬;ŒH}<ÉFÕø#úh¯£à¸ë´ÑñkÈK{)=‡/ p@ü­šŸ^Ñ»]Ž’ÅÍÞê 5‹ÎÛ[ÈÔƒ ê•ïà™ÜZ4Xj‘"Éיغ ¸kIh'vJ}­ª½²Í[æ/VC¶<ëɳR‰À‰««·?úþ4=S€ å…ìî\È|ÿUvÂk­²5“ 9Ñð¼åõãxN.ln¸/¨SÍ}zrF¡±ÖÕï©3ÃGä›vØ·\L·ýMåCõ•-Òu8×2Ý€¼FŠet¥0î‰KÄI“'à‚•#ri#™E”jÒšZ79èÐWf—(U¦ð<’!\ a/Kvmt˜e!&r3è|ekçɃîáîÀã<9K«­[r‰`šÁšŸôñÿcã7´ÂE¯´$V ‘ÎŽ“'¾õtUÆñ=ù&¾±<ʨBhú›ïîS¿„KRŸ¤™UÌ+5 Þ=‡ØB•¡•³Êò=Þ‹ÅimG¥ÚÊ«û§.5˜\Æy§Së|Ë[xÒp÷]& SˆR¬ÿzÖØ²V4LúíîyB†Ë ¤´kà§¡µ8®X‘a‚åŠl£µÓYñ¸–·ýPùy>C—Ĺˆž뜭öÙi;eœÓ†­sÜûÏô?@×›~ñò/z®#˜ÞõÛ›¸×YXÒÀOÕì,§YBÅZüÀŸ:qÙz›ŸˆºÛ ¶/¬ìå’Õê÷tÚ®%­ùGqdΨ»õ Í(ý‘ÝÅÚÖ–¯”»´S-7÷1ØÃÞQàòðÔHö£OÖl8jWûŦ@MJ%Ï5gêÝÖHb§«c}ù¦áxÏØ,%¥¬êW>>Ú ¢5þ‚»'ÆÜP¸±oNÍ`- zÎhÆ.ìÛß¼žiWÒª øÉÿ³@}nœŒIݘjÕ¤ˆ}øL'{Fû¾«~­$hp¡Üq{&œTPx‡vJ¶Ôò.vöô$]²W¤Z‚|õ›Ãˆ LñNŽ{…d‚Mº©?™Pðå²ìL4Â×cueðþZv'H“Y¨«¶ˆRq(’š¾ŽlS©Šÿmö•…ikr؃ùNv»}BâroÔBtžåòQý@‹7•ÌF@OT8/ã[3RÐ{wätKÀøØ†·fW«Ü>¿Ò÷lO ÷? Åõtž®¨)l•“ÌuDÑw U’ר-Ô;ÂÖÕæP–çŠÃÀ’ŠZÒG¸bGã5ÓhL§)Uaój£†Ë0 euÏ•Ã ÈÆÄ£ˆÞwåÇ–Ž¯‘o÷Ó)Lï6[+9mœ;Z.šIûþö’¶TK:fq¨ÚÉh­G¨WÁ˾Ùr7Ouï°?þ:Tl1Ùn9ßÇèpf''9–¢óÕò}X@Wu#ÖÜJié~_›„™¢Qi¸GWu/>¸íOß°qdQüŽyÂ8^3üZC%Ì.‚Ê„[ë²û'ö,‹É²pÞv¥ã¢õæ#ט“펹Ìô¬¦ú‡ËÌqU…d*Ì£^÷€&û"P?0Öáh#´„¯^.<™´û&H}c<r×Ó蟵 ;$JL?\ Ï¢â¸aaÌqWáöA(ir»*ÏSì`Z, -qû¡xI*sôÔ>ž?jÞAÓö¶:ü‹n3Ç@4·-_ \;шD_OŒŠí:ß:ÒüÇþÛ››w´€œÈGc·)°nTâèœÜÓ¬›OMµ˜›ÿ M»X*HÅLJ.†­âaÆ„x– ÃðWxÁXºˆÉ nFª*‚ˆ|Öx%+V’|Çï*NŒUr☹˜# ¡é8>¢ˆ[ôº‹Ü´‹xÅ~vz+vUì[.*f€ »Ú‹*ë§#£.‹‚«]Á!î¿»^Hxº§X¸4|¶?QzÖÁÖC`ÿe¼ÿþ'Ï oçáØ`ç¼ÿvÂä endstream endobj 604 0 obj << /Type /Font /Subtype /Type1 /Encoding 7295 0 R /FirstChar 2 /LastChar 233 /Widths 7313 0 R /BaseFont /LGFUEI+NimbusRomNo9L-Medi /FontDescriptor 602 0 R >> endobj 602 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /LGFUEI+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/fl/numbersign/ampersand/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/equal/question/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/bracketright/underscore/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/endash/eacute) /FontFile 603 0 R >> endobj 7313 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 833 333 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 0 0 570 0 500 0 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 0 333 0 500 0 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 ] endobj 596 0 obj << /Length1 1630 /Length2 20187 /Length3 532 /Length 21090 /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þŒrßääehÿ ö_† Á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úÿÚ-«µ(E"Ò‚ÔÂÐÝ Ò= )2tJw‡C48‚t·€4’Ò CƒtKwçй÷Íy‚sw¾³`Ý­ïÿë†Þêd©É‹‰Ùu Å¥h#Îv)¯ç½Õ[²øÆ#UÊ]ÂP^w½ä•Jõë·SÒ}ù¼sJÇtôg ­•$)‘•BÄ$N Ç¿ì©ÖÍgdԇϣH!_=‡ÖabAÈ/xe©qV×Ù{à;H1òï[‘p%L£%l æ*¥oUɃ9§©SÈèÃÝ:Ó` $FY²çú½hhîý{¾¤CV9ëÆH>Ø2”¤É>ÅŪیÅÀ[>í\G¶6Œ¹³îo-¤™½ûªá&ÊcqiÓ »äyÒà·4…òÊÚÏÁÌR­öçºxªRÓ™Z …í%¦Yð°"ÌT0’‰¨$ÜÚ¸ë™n´¹©ÌÒO™šzð”÷ÑÓuïÕ¡«Œ‹ µDÛ˜xøüÎCââýƒkŒÒÈgâ×ÅYûÎŽW^ðÍñ` Î:ö í$‹„*–¿Øá’X^Ê–{?T¶ щ -ì^²:w%ÐamQë…7¥_De]3?‚u„/§‘ ŠMÎ}è™op4OO25^k«½™­áT\°¼ áo?1çYGJ†½ýå\¶æÆT; q9µ;X%óuZ~½ÍàϧwÓõж½Ï°²O.¾Ô¼çÜT¹k°L¿…è\„®)â*g86ùhbÄ’< ×D¤ˆá™?îŸ{W¹˜ü^1OnÛ‘ˆâ`Îié¥Þ7-•1öáhýž³^zÿ3âT{…?\É)ºFnªìÙùu6±^%ÜÕ5zZØÔH&E°Ôš;ê ð6Ϭ¡Àî¶Ÿ&3\³ªs·¯$¡Ç$èóAHW<±×êåìîdz…i¬Sò7—ÞµÏð~˜°%$_9Ú ›úzFÉ8¸NüwÇ$Nï3õ«Ín¯#°ƒ þŠ’$ø«mÙ~×>“3h²|Ï É]»- pºœÎ|´o[1O¨sùµ¨ØÒy°Erc4°Ày»¨-¯Œ¥Âªs÷5&¯ª[ Éã£ã¼Á÷<ÜþÕû)ä ³=öµº‘q‡ž„ϯ“ïGï0{&âV6ÁÈ9ôê«ræÏ¿t:eÖu®gaaÓ´Û Ôi >éùÙ€Tºugƒì_ˆ+gC¦Äƒ¶“ò=×<ÝJš¼›|ØW£¡~ÚUvÿ”±I’ú€µZ®¤R»Mºíø—(/°mú\ŒÀ%^æ<£B‚©^âP”EËå06¥°¯e茴`’2¦7¢êlÆGUë¾±iÔò¼ZUÍóE`J Wį !W¤‚ܑܩ 5!½òÎM¿wO¥¡96Öw’„pÑ{ÇY }\éDøŠØ¯åö\xÑɸߪ‹_…Ã%—èÌÁ«„È’¸8U‰ÇŽ/ñZß;u©=¤³yqÇD3¶[lƒ"Ezþ‘_´Þ¡È|ÔÕþº5-oýÆY¦§r&"4|ñ#7“úÖYÝ”Þ$Vd%vý j „¼ \Z°/ÿ]˜0&üYèç&Ò^\õSK›×QÅ3°Sš™MŽ[zRðõ/¥Omì–"j”ƒnÐÈèKdœ9†ÆÉEᲚØ,ô¦à.!-¦&sÖLÃöãWÃúO ì ¯qDØÐåvˆÝ{b—èâYºNçÊ^Gð¹c-‘@‡Åи™ÆÐMtÕ'CÄ<+Õxqát½ÉÜd_öý"ε¢¶º ñ¨¹5\aŠI0&^ÔóÆÜ`¬Šö¶üœì„ŸË£ÀÎ0’ѨÑ|€‡B™|ÝÖÔÃè¾ÍŠ.Ù æˆ~ qµ>¾$Ëòi>‹Ü kË~5æÞ5RT­…ðz²Öì}²ˆ4ò3•]hÝ0M÷0WFšÐ|¬Ó$@¡®µU¤íu×#ÅåÎt=Y¶s´¨é“9µhŸô [žF×¶’ÖHû ¡®”í¬î¦bc>Ž 6A§eYm-…æ¹-z¬sñŬbfB:aEG0yäu¢ê€Áíz94,õPͳm“6Moüfͦ¹&ºG«÷jƒ|2…ö*ÏÎ{W):†Zºýø$Ÿ0Î úd°Q¸ÂKàÂÕò³ª ýªOãžçáew®ƒÚÊñÊ0ûVpô]3ä’ ø…@}(AZeŒ£†Èã.(ŸB‚ i¦ ×£°À1ý–ÌrWÓÇ©<{lß . `Ÿ~úºZ±föƒÈ¬i/¨N½8]7EdsaëŸVe'ÐND-±?uEàM§öIi?l˜n…vEG{{ŒPTÔûã j—þ¼Çà^Ìûï/19e}ë »Ólì+ÐÒ~ªúrBk)¹{j@"ÜçûÃöR×"îmÀPÁÑ^xNØË‹·¼¶3ÚÇ# )¼ô zR$ -€7GÀ:4ŠùŸ®‡’¡:5ŸÂÌf?Yzƒ%‘ëàÀÊhJZr]Vf¾s¥iÌ :Y-$'%0±q`?5Œ0ÍÒuw\VFåyŽ4s¼ ²SÒqLDç“$ì[Lc‚æt§®¨|êK±/¿=&zC`T*)X°úëD Pqšû 3—¾4>¦u1*#Z?T—aûÙ Ră-îº"5oÙl·û,âG×_‹ê?¾uôa4Y’/¿ö Ø´â÷ üáÁQJ£˜2¾É,{ŽRfçÿ6ðvüu¯˜¶Á]áöUujŽx› šŒ90 •}¨b="1ÁJ–å•ö®ë nþ~½TTÔøvÅÓ†1ÁUw€ÑÉ&¾Ä¤aöoÒ_&éÝÁP3·œ.wŠŽíö³ZA­Ì»½d±ê Ì#Šfè:û£Vú•Ó‡ s¹o {´nôÍà•“XbÄXîÔu¿Wr³jJ’i7ÿBúÏøz%ã7tÆHí/ïZ?¨)º% ùÖb)ÑûÌËáƒòEögDŽ™ÆÄW˜ŽÀVµzÂÏSˆGjsiÎz]? ~gŠ,¼jU|[̾y_DW+ç#5²õ˜bé¢ +¢¤_S4P*ÑúŸÆ!%êsžxO³nvßq°Ï:›Gž k—1%>I·v¢ÎWaZŒíàåR,€©®Þib|ù¥ë®²W.-˜3ØUŸ]lßHÒr³þ & Á~€Ó‚wJÐôÛ´†?÷œÞN¸ ´4$P«Û©©Hþ‚fÎáž´RäèÜ`W„òV—ÿî?õ1'm ›YhþÑw¹ ƒ ôk1óz7;Pw¨Å¿S»4`Ž¢ ®—rÊH™<Œ³`N?ñ®n+°„†²M'H9»„ËeRÿpBEHË?¢ÒðM¿ØäÈxøWJ>ÕÕ|@i…Éžý ÊN§Ã½ìLJö6Û•oP N)ÝUøH÷6;=)!(ö$.GèÇßÝû´«Y{ʽy-ƒ†!}?52¡¿Yw¹Ò]’û^Ûí“>ZïÑ·¯eFÃfôç'9sÈT`è@ÝäÞì‰åF>¦5;œ\¬à|¢OÆ_ã™ôûº€Ï_8Yvãþú8C¯ñ©m^UJª‹f<ÖÆ)*ççÆQÇHÎ>2îÿ®¡§¨Mºúî¶XžŽ°'jç§Þôlzl–ð}ÁuÀ/>Á>$fiÚ¾Ä:/9ìêHCôgŽßi3&¾KoÒŠK/b˜ƒ½|‘k|Ôˆé±NLÉÍ™W²7{™F¦qgˆ­‚;ßå§Hê5i±ñù¶ä“çq›YÛM–éLÑo©èÿ´·Õd-›¥ˆÂÜÒ*ÁŸT Z8ÎÌQûÊê=ÔYNŒyª§ Á‘UŽCÙúDzïIU°…`Œo~D 4ýO¥Ý<7EhäõKÛÊ^I  ö¥pQÅc—xcPŒöOV¯Bõz}ù/W}…A„P1iWÀ1üdôÌý áäæ*©&^½éˆ½CßK½ùIÈÁ ÀþõûV.´²å˜Òþ’ÝÆ5|gµ…U·WûÉéMã™Ë„Ó=Î"’2>K¡•½ä¢D zÀpà;tº È&5ÜÞ7jœ(õoÛPCj­Îh¢'çZWIŒ¬¡EŽÍœ>7VÚÔ3)öL¾{6ÿi²VÊ‹ð) ë—ϧ¡ZåWegWê©å Zü§ü¾(Œè¢n—Î+ŽÈkÍ}°]`hSJ8DUPÚ%˜7–ï¨GQ¼Uðé/×':™yË]-yuØKÎñ&¶¢”ÕÀ†Æ;絤‰e1ü÷±`-•iÚxÖ„8æàÃËî6>¦˜MT N ®^nG]Fá¶i]#›ù\œ+ððcsÇð >JIºn(³u´ö²ÉCÝ­šë(ú§ñƒßc&سäÕmùdâ\ä‰ÜkòY4™•$ñ k߬ ¶”N~èÝÖ¢içƒà†+à] 5 ¥7‘q(ÿÆCõö‘›ck']GÒÅ$.e´Œ­ÍÒü8¼#°j›[¦Ïîõ#„1 m9°äú“ç¼GÝAÕTa€Q‰êeÆü2,hŠÝö޹±Ãq½ßÆßØÿËPvP§sD±ø5´Ÿ†á>Sg®Ñe+r;×sõ~ú„Ô´XŸM”#aÁ„8R‰è´‡‚T}½~ÄÕê‘:Ñ“ÃÁA´Ÿ,ŸBµ7awfËÚðÙ×ÕÍLàiw£Ñ7Œìužëî$ÿ¨ù'‹h,ðöÒFJ|_`Ñýƒn·°T>lÌÍŒjß F%Æf©ÃyáægèžQØ^ÖÚB0ΕÙ2ñžW"/$™ûöG›ÉNµô­HŸmy¢¾Ã ÷V¯iSjÕœDènLyÉS#Õ÷µ>–Ý!*ËìÜ\;w[ûIÄQànA¼…B·N§!ˆ+#¡P8Q)ØèÓà [‹gÒC0•ðùCÕÛ¤˜hŽmØùÈhYúý)ë\ ™(ÁŠj,¯@Átᙣ= låqÁießwsÿ¤ á-àÊß`ªSÞ —¡3[Ö¹vT‹ M”°^˜üd³2Õ[~5Ù:F&ŸÔ×›MAÉ®|4t&Q0ÊÒ‡Ž"Ô.Ù˃xP»ë5VÃÓТœ°ý."1›ùد±Î]Í"Òpë<ŠAÒ±ç+dɽ€Šrå:,£eçÃÂ%Oø\U‹Â¾‘6¬5ÓÅŽ¯«•ûïÿœÿüŸX8Z™¹C]œÌÜpþnwíŸ endstream endobj 597 0 obj << /Type /Font /Subtype /Type1 /Encoding 7295 0 R /FirstChar 2 /LastChar 233 /Widths 7314 0 R /BaseFont /NEPNOL+NimbusRomNo9L-Regu /FontDescriptor 595 0 R >> endobj 595 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /NEPNOL+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/exclam/quotedbl/numbersign/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/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/bracketright/underscore/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/braceright/quotedblright/bullet/emdash/eacute) /FontFile 596 0 R >> endobj 7314 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 408 500 0 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 564 0 444 0 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 0 333 0 500 0 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 0 480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 350 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 ] endobj 598 0 obj << /Type /Pages /Count 6 /Parent 7315 0 R /Kids [590 0 R 600 0 R 640 0 R 680 0 R 720 0 R 760 0 R] >> endobj 853 0 obj << /Type /Pages /Count 6 /Parent 7315 0 R /Kids [796 0 R 875 0 R 973 0 R 1042 0 R 1110 0 R 1148 0 R] >> endobj 1195 0 obj << /Type /Pages /Count 6 /Parent 7315 0 R /Kids [1165 0 R 1210 0 R 1218 0 R 1245 0 R 1269 0 R 1315 0 R] >> endobj 1349 0 obj << /Type /Pages /Count 6 /Parent 7315 0 R /Kids [1332 0 R 1351 0 R 1402 0 R 1422 0 R 1432 0 R 1448 0 R] >> endobj 1500 0 obj << /Type /Pages /Count 6 /Parent 7315 0 R /Kids [1474 0 R 1517 0 R 1540 0 R 1559 0 R 1651 0 R 1669 0 R] >> endobj 1702 0 obj << /Type /Pages /Count 6 /Parent 7315 0 R /Kids [1686 0 R 1704 0 R 1739 0 R 1785 0 R 1808 0 R 1831 0 R] >> endobj 1892 0 obj << /Type /Pages /Count 6 /Parent 7316 0 R /Kids [1853 0 R 1924 0 R 2032 0 R 2064 0 R 2079 0 R 2104 0 R] >> endobj 2155 0 obj << /Type /Pages /Count 6 /Parent 7316 0 R /Kids [2139 0 R 2158 0 R 2171 0 R 2187 0 R 2216 0 R 2229 0 R] >> endobj 2269 0 obj << /Type /Pages /Count 6 /Parent 7316 0 R /Kids [2247 0 R 2282 0 R 2304 0 R 2338 0 R 2385 0 R 2410 0 R] >> endobj 2441 0 obj << /Type /Pages /Count 6 /Parent 7316 0 R /Kids [2431 0 R 2443 0 R 2455 0 R 2491 0 R 2512 0 R 2530 0 R] >> endobj 2572 0 obj << /Type /Pages /Count 6 /Parent 7316 0 R /Kids [2548 0 R 2574 0 R 2605 0 R 2662 0 R 2689 0 R 2711 0 R] >> endobj 2751 0 obj << /Type /Pages /Count 6 /Parent 7316 0 R /Kids [2731 0 R 2753 0 R 2780 0 R 2791 0 R 2799 0 R 2851 0 R] >> endobj 2930 0 obj << /Type /Pages /Count 6 /Parent 7317 0 R /Kids [2898 0 R 2949 0 R 2997 0 R 3045 0 R 3093 0 R 3127 0 R] >> endobj 3231 0 obj << /Type /Pages /Count 6 /Parent 7317 0 R /Kids [3215 0 R 3233 0 R 3255 0 R 3278 0 R 3292 0 R 3313 0 R] >> endobj 3360 0 obj << /Type /Pages /Count 6 /Parent 7317 0 R /Kids [3337 0 R 3362 0 R 3386 0 R 3410 0 R 3434 0 R 3457 0 R] >> endobj 3504 0 obj << /Type /Pages /Count 6 /Parent 7317 0 R /Kids [3481 0 R 3506 0 R 3529 0 R 3553 0 R 3607 0 R 3646 0 R] >> endobj 3675 0 obj << /Type /Pages /Count 6 /Parent 7317 0 R /Kids [3655 0 R 3677 0 R 3692 0 R 3709 0 R 3719 0 R 3726 0 R] >> endobj 3739 0 obj << /Type /Pages /Count 6 /Parent 7317 0 R /Kids [3733 0 R 3741 0 R 3750 0 R 3768 0 R 3775 0 R 3785 0 R] >> endobj 3845 0 obj << /Type /Pages /Count 6 /Parent 7318 0 R /Kids [3825 0 R 3864 0 R 3893 0 R 3914 0 R 3938 0 R 3954 0 R] >> endobj 3983 0 obj << /Type /Pages /Count 6 /Parent 7318 0 R /Kids [3973 0 R 3985 0 R 4006 0 R 4064 0 R 4096 0 R 4119 0 R] >> endobj 4164 0 obj << /Type /Pages /Count 6 /Parent 7318 0 R /Kids [4141 0 R 4166 0 R 4183 0 R 4196 0 R 4243 0 R 4309 0 R] >> endobj 4377 0 obj << /Type /Pages /Count 6 /Parent 7318 0 R /Kids [4351 0 R 4379 0 R 4407 0 R 4416 0 R 4440 0 R 4450 0 R] >> endobj 4492 0 obj << /Type /Pages /Count 6 /Parent 7318 0 R /Kids [4477 0 R 4494 0 R 4503 0 R 4513 0 R 4526 0 R 4556 0 R] >> endobj 4579 0 obj << /Type /Pages /Count 6 /Parent 7318 0 R /Kids [4571 0 R 4581 0 R 4657 0 R 4692 0 R 4724 0 R 4744 0 R] >> endobj 4779 0 obj << /Type /Pages /Count 6 /Parent 7319 0 R /Kids [4761 0 R 4781 0 R 4794 0 R 4850 0 R 4904 0 R 4949 0 R] >> endobj 5040 0 obj << /Type /Pages /Count 6 /Parent 7319 0 R /Kids [4998 0 R 5042 0 R 5074 0 R 5097 0 R 5110 0 R 5134 0 R] >> endobj 5170 0 obj << /Type /Pages /Count 6 /Parent 7319 0 R /Kids [5148 0 R 5172 0 R 5199 0 R 5207 0 R 5220 0 R 5233 0 R] >> endobj 5286 0 obj << /Type /Pages /Count 6 /Parent 7319 0 R /Kids [5259 0 R 5288 0 R 5307 0 R 5317 0 R 5330 0 R 5340 0 R] >> endobj 5386 0 obj << /Type /Pages /Count 6 /Parent 7319 0 R /Kids [5360 0 R 5391 0 R 5414 0 R 5447 0 R 5462 0 R 5470 0 R] >> endobj 5502 0 obj << /Type /Pages /Count 6 /Parent 7319 0 R /Kids [5484 0 R 5519 0 R 5579 0 R 5625 0 R 5665 0 R 5673 0 R] >> endobj 5688 0 obj << /Type /Pages /Count 6 /Parent 7320 0 R /Kids [5681 0 R 5690 0 R 5703 0 R 5708 0 R 5728 0 R 5735 0 R] >> endobj 5802 0 obj << /Type /Pages /Count 6 /Parent 7320 0 R /Kids [5742 0 R 5804 0 R 5874 0 R 5933 0 R 6009 0 R 6074 0 R] >> endobj 6216 0 obj << /Type /Pages /Count 6 /Parent 7320 0 R /Kids [6153 0 R 6218 0 R 6304 0 R 6402 0 R 6472 0 R 6553 0 R] >> endobj 6731 0 obj << /Type /Pages /Count 6 /Parent 7320 0 R /Kids [6651 0 R 6733 0 R 6798 0 R 6886 0 R 6962 0 R 7042 0 R] >> endobj 7226 0 obj << /Type /Pages /Count 2 /Parent 7320 0 R /Kids [7141 0 R 7228 0 R] >> endobj 7315 0 obj << /Type /Pages /Count 36 /Parent 7321 0 R /Kids [598 0 R 853 0 R 1195 0 R 1349 0 R 1500 0 R 1702 0 R] >> endobj 7316 0 obj << /Type /Pages /Count 36 /Parent 7321 0 R /Kids [1892 0 R 2155 0 R 2269 0 R 2441 0 R 2572 0 R 2751 0 R] >> endobj 7317 0 obj << /Type /Pages /Count 36 /Parent 7321 0 R /Kids [2930 0 R 3231 0 R 3360 0 R 3504 0 R 3675 0 R 3739 0 R] >> endobj 7318 0 obj << /Type /Pages /Count 36 /Parent 7321 0 R /Kids [3845 0 R 3983 0 R 4164 0 R 4377 0 R 4492 0 R 4579 0 R] >> endobj 7319 0 obj << /Type /Pages /Count 36 /Parent 7321 0 R /Kids [4779 0 R 5040 0 R 5170 0 R 5286 0 R 5386 0 R 5502 0 R] >> endobj 7320 0 obj << /Type /Pages /Count 26 /Parent 7321 0 R /Kids [5688 0 R 5802 0 R 6216 0 R 6731 0 R 7226 0 R] >> endobj 7321 0 obj << /Type /Pages /Count 206 /Kids [7315 0 R 7316 0 R 7317 0 R 7318 0 R 7319 0 R 7320 0 R] >> endobj 7322 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 7322 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 7322 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 7322 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 7322 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 7322 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 7322 0 R /Next 19 0 R /First 11 0 R /Last 15 0 R /Count -2 >> endobj 7323 0 obj << /Names [(Doc-Start) 594 0 R (Item.1) 2524 0 R (Item.10) 2539 0 R (Item.11) 2540 0 R (Item.12) 2541 0 R (Item.13) 2542 0 R (Item.14) 5158 0 R (Item.15) 5160 0 R (Item.16) 5161 0 R (Item.17) 5162 0 R (Item.18) 5164 0 R (Item.19) 5166 0 R (Item.2) 2525 0 R (Item.20) 5169 0 R (Item.21) 5175 0 R (Item.22) 5230 0 R (Item.23) 5240 0 R (Item.24) 5242 0 R (Item.25) 5248 0 R (Item.26) 5693 0 R (Item.27) 5694 0 R (Item.28) 5695 0 R (Item.29) 5696 0 R (Item.3) 2526 0 R (Item.4) 2528 0 R (Item.5) 2533 0 R (Item.6) 2534 0 R (Item.7) 2535 0 R (Item.8) 2537 0 R (Item.9) 2538 0 R (cel_8h) 1032 0 R (cel_8h_0474e3e2d6c39249acbe58cedd573e84) 854 0 R (cel_8h_055ad88aa219a0207e221d62e03d2e23) 2331 0 R (cel_8h_1fe1b137ade45ea28e61f44d4708fb77) 2379 0 R (cel_8h_1fe7f134670262eb54b6049c0275a27b) 2382 0 R (cel_8h_2ac33dbe3aa2efff60543213b0a691f5) 855 0 R (cel_8h_2fe5a30084717036a54e7f0a920da105) 857 0 R (cel_8h_39bb7bf8e545c200191d51884ecfb89b) 2380 0 R (cel_8h_6661c05703158b0808038b7d551f1ea1) 2383 0 R (cel_8h_9e188b582ee4eb815466e86bb684fc82) 856 0 R (cel_8h_b0f67d1727750616f71c7bfcb3a037b6) 1145 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31) 2332 0 R (cel_8h_b20292954fb236dafb2cd78aee121c3133a743bdcdd17bae9c6961234ed6b642) 2335 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31367cf89b74764f9462bfa50c2eb50fb6) 2336 0 R (cel_8h_b20292954fb236dafb2cd78aee121c3144042efc5a9894182447dfcbcd24e1d4) 2377 0 R (cel_8h_b20292954fb236dafb2cd78aee121c314ca7a593593157772f3788801138dd12) 2333 0 R (cel_8h_b20292954fb236dafb2cd78aee121c317fa1e5cb9c23e5f138638dad3f938e1e) 2334 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31ac8beaf37d754d1a7a7aab5307a2140b) 2378 0 R (cel_8h_b20292954fb236dafb2cd78aee121c31cb1dec1ea393b198b93a26425ee901a2) 2376 0 R (cel_8h_c398f2bea2deac6d86c10a7b3efca966) 859 0 R (cel_8h_db2e4565f61a9de5fe278d9035850dc3) 2381 0 R (cel_8h_f72e24d2f169c3c343c55c880a74050f) 858 0 R (deprecated) 798 0 R (deprecated__deprecated000001) 799 0 R (deprecated__deprecated000002) 802 0 R (deprecated__deprecated000003) 805 0 R (deprecated__deprecated000004) 808 0 R (deprecated__deprecated000005) 811 0 R (deprecated__deprecated000006) 814 0 R (deprecated__deprecated000007) 819 0 R (deprecated__deprecated000008) 822 0 R (deprecated__deprecated000009) 825 0 R (deprecated__deprecated000010) 828 0 R (deprecated__deprecated000011) 831 0 R (deprecated__deprecated000012) 834 0 R (deprecated__deprecated000013) 837 0 R (deprecated__deprecated000014) 840 0 R (deprecated__deprecated000015) 843 0 R (deprecated__deprecated000016) 846 0 R (deprecated__deprecated000017) 849 0 R (deprecated__deprecated000018) 852 0 R (deprecated__deprecated000019) 879 0 R (deprecated__deprecated000020) 882 0 R (deprecated__deprecated000021) 885 0 R (deprecated__deprecated000022) 888 0 R (deprecated__deprecated000023) 891 0 R (deprecated__deprecated000024) 894 0 R (deprecated__deprecated000025) 897 0 R (deprecated__deprecated000026) 900 0 R (deprecated__deprecated000027) 903 0 R (deprecated__deprecated000028) 906 0 R (deprecated__deprecated000029) 909 0 R (deprecated__deprecated000030) 912 0 R (deprecated__deprecated000031) 915 0 R (deprecated__deprecated000032) 918 0 R (deprecated__deprecated000033) 921 0 R (deprecated__deprecated000034) 924 0 R (deprecated__deprecated000035) 927 0 R (deprecated__deprecated000036) 930 0 R (deprecated__deprecated000037) 933 0 R (deprecated__deprecated000038) 936 0 R (deprecated__deprecated000039) 939 0 R (deprecated__deprecated000040) 942 0 R (diagnostics) 789 0 R (fitshdr_8h) 1033 0 R (fitshdr_8h_23868c17c44dc94add97438092d3058c) 2486 0 R (fitshdr_8h_42bdf2e2f36d1dee9e06732c75a8ff89) 2481 0 R (fitshdr_8h_5077485c3de4b7bca55698eb66110a76) 2482 0 R (fitshdr_8h_6400ad537ecfd565fb39a574831edf41) 2483 0 R (fitshdr_8h_705c7c2c9700367e0e8b82d5033e6fa3) 860 0 R (fitshdr_8h_8393f26f643097bb78326a85b4e2e7a4) 2485 0 R (fitshdr_8h_88ab82d73e5c2607f0a40af8917fffe1) 1199 0 R (fitshdr_8h_9361fbafbbbba777da623fc3b9e96d2e) 2484 0 R (fitshdr_8h_d966ed3fefd26c9546ec078171e3940b) 2488 0 R (fitshdr_8h_e6ae55940dfdf1155736df656d83a7cd) 2487 0 R (fitshdr_8h_ebb4607327b6db35b468517328f67878) 1208 0 R (fortran) 793 0 R (getwcstab_8h) 1034 0 R (getwcstab_8h_96c804d78d44901bc5d497b30e47b7ad) 2557 0 R (index) 767 0 R (index_contents) 768 0 R (index_copyright) 780 0 R (intro) 784 0 R (lin_8h) 1035 0 R (lin_8h_5490027e9699680dfefe370c28691243) 2659 0 R (lin_8h_58c2822debf5b36daa18fe8711d724f2) 863 0 R (lin_8h_5c01c0991c8d0c4437581a7c1453b09a) 1329 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f) 2650 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f2544660be2086b8225623e8a7b534dfb) 2651 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f28004da63d882a7df754d49047ea7f2d) 2653 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1f84e4dcf5e518ba3dce985ef7c9687513) 2652 0 R (lin_8h_6690044d47c6784a4cc0ccf6f52bfc1fd2248fa36c9d85c91187179ae95207e8) 2654 0 R (lin_8h_7232df93295216e063c438671652c2b4) 868 0 R (lin_8h_7bdf034bd750df1e518db9feeebf7a79) 862 0 R (lin_8h_7ddea28768d99f01c6be1c71a4d8fe58) 1330 0 R (lin_8h_8970e09d61fde987211f8e64061e1fa1) 865 0 R (lin_8h_946005b038f5c584691630b5d39369e3) 2657 0 R (lin_8h_a6d3f59059c532b0217f570f2b4f50df) 864 0 R (lin_8h_a78f202b20674909aab523018106546e) 866 0 R (lin_8h_b8fc0ef6b34eb3327b13a00de78232b1) 2655 0 R (lin_8h_cb8c02645d7cc3d42e3db6ebf74de192) 867 0 R (lin_8h_cc7d26efba3ca08d36047253a9315dcc) 2660 0 R (lin_8h_e4947608476c198ad27759d1e562d655) 2658 0 R (lin_8h_ef9ead7c6ea6ab08f3ba3fc6a1c30303) 2656 0 R (lin_8h_fce62bec193631f6e6b58c5b786cd660) 2603 0 R (lin_8h_ffec8a2c0650ebd2168d7772b2ecec19) 861 0 R (log_8h) 1036 0 R (log_8h_239e115e583af4e67e60de4a4f95f09e) 2777 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36) 2771 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3605b7fdbe8fcf799db114f90f04083273) 2776 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c361f9859b85143e5ddc55744beff6d433c) 2772 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c3685932a7f3c52c3090c1a1c5e82ed1c22) 2775 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36a1df3b688a38178c3bb75225c8921259) 2773 0 R (log_8h_3ca7c9ed3cef9e053e1f32b60a0d0c36fd604876bd42694c1a04cdae2be719e6) 2774 0 R (log_8h_8b8e0a071c9539f4be52eaf789f385ea) 2789 0 R (log_8h_c80fd753e48873cdbd9a332609de150a) 2778 0 R (memory) 788 0 R (overview) 786 0 R (page.1) 593 0 R (page.10) 1220 0 R (page.100) 3752 0 R (page.101) 3770 0 R (page.102) 3777 0 R (page.103) 3787 0 R (page.104) 3827 0 R (page.105) 3866 0 R (page.106) 3895 0 R (page.107) 3916 0 R (page.108) 3940 0 R (page.109) 3956 0 R (page.11) 1247 0 R (page.110) 3975 0 R (page.111) 3987 0 R (page.112) 4008 0 R (page.113) 4066 0 R (page.114) 4098 0 R (page.115) 4121 0 R (page.116) 4143 0 R (page.117) 4168 0 R (page.118) 4185 0 R (page.119) 4198 0 R (page.12) 1271 0 R (page.120) 4245 0 R (page.121) 4311 0 R (page.122) 4353 0 R (page.123) 4381 0 R (page.124) 4409 0 R (page.125) 4418 0 R (page.126) 4442 0 R (page.127) 4452 0 R (page.128) 4479 0 R (page.129) 4496 0 R (page.13) 1317 0 R (page.130) 4505 0 R (page.131) 4515 0 R (page.132) 4528 0 R (page.133) 4558 0 R (page.134) 4573 0 R (page.135) 4583 0 R (page.136) 4659 0 R (page.137) 4694 0 R (page.138) 4726 0 R (page.139) 4746 0 R (page.14) 1334 0 R (page.140) 4763 0 R (page.141) 4783 0 R (page.142) 4796 0 R (page.143) 4852 0 R (page.144) 4906 0 R (page.145) 4951 0 R (page.146) 5000 0 R (page.147) 5044 0 R (page.148) 5076 0 R (page.149) 5099 0 R (page.15) 1353 0 R (page.150) 5112 0 R (page.151) 5136 0 R (page.152) 5150 0 R (page.153) 5174 0 R (page.154) 5201 0 R (page.155) 5209 0 R (page.156) 5222 0 R (page.157) 5235 0 R (page.158) 5261 0 R (page.159) 5290 0 R (page.16) 1404 0 R (page.160) 5309 0 R (page.161) 5319 0 R (page.162) 5332 0 R (page.163) 5342 0 R (page.164) 5362 0 R (page.165) 5393 0 R (page.166) 5416 0 R (page.167) 5449 0 R (page.168) 5464 0 R (page.169) 5472 0 R (page.17) 1424 0 R (page.170) 5486 0 R (page.171) 5521 0 R (page.172) 5581 0 R (page.173) 5627 0 R (page.174) 5667 0 R (page.175) 5675 0 R (page.176) 5683 0 R (page.177) 5692 0 R (page.178) 5705 0 R (page.179) 5710 0 R (page.18) 1434 0 R (page.180) 5730 0 R (page.181) 5737 0 R (page.182) 5744 0 R (page.183) 5806 0 R (page.184) 5876 0 R (page.185) 5935 0 R (page.186) 6011 0 R (page.187) 6076 0 R (page.188) 6155 0 R (page.189) 6220 0 R (page.19) 1450 0 R (page.190) 6306 0 R (page.191) 6404 0 R (page.192) 6474 0 R (page.193) 6555 0 R (page.194) 6653 0 R (page.195) 6735 0 R (page.196) 6800 0 R (page.197) 6888 0 R (page.198) 6964 0 R (page.199) 7044 0 R (page.2) 642 0 R (page.20) 1476 0 R (page.200) 7143 0 R (page.201) 7230 0 R (page.21) 1519 0 R (page.22) 1542 0 R (page.23) 1561 0 R (page.24) 1653 0 R (page.25) 1671 0 R (page.26) 1688 0 R (page.27) 1706 0 R (page.28) 1741 0 R (page.29) 1787 0 R (page.3) 682 0 R (page.30) 1810 0 R (page.31) 1833 0 R (page.32) 1855 0 R (page.33) 1926 0 R (page.34) 2034 0 R (page.35) 2066 0 R (page.36) 2081 0 R (page.37) 2106 0 R (page.38) 2141 0 R (page.39) 2160 0 R (page.4) 722 0 R (page.40) 2173 0 R (page.41) 2189 0 R (page.42) 2218 0 R (page.43) 2231 0 R (page.44) 2249 0 R (page.45) 2284 0 R (page.46) 2306 0 R (page.47) 2340 0 R (page.48) 2387 0 R (page.49) 2412 0 R (page.5) 1044 0 R (page.50) 2433 0 R (page.51) 2445 0 R (page.52) 2457 0 R (page.53) 2493 0 R (page.54) 2514 0 R (page.55) 2532 0 R (page.56) 2550 0 R (page.57) 2576 0 R (page.58) 2607 0 R (page.59) 2664 0 R (page.6) 1112 0 R (page.60) 2691 0 R (page.61) 2713 0 R (page.62) 2733 0 R (page.63) 2755 0 R (page.64) 2782 0 R (page.65) 2793 0 R (page.66) 2801 0 R (page.67) 2853 0 R (page.68) 2900 0 R (page.69) 2951 0 R (page.7) 1150 0 R (page.70) 2999 0 R (page.71) 3047 0 R (page.72) 3095 0 R (page.73) 3129 0 R (page.74) 3217 0 R (page.75) 3235 0 R (page.76) 3257 0 R (page.77) 3280 0 R (page.78) 3294 0 R (page.79) 3315 0 R (page.8) 1167 0 R (page.80) 3339 0 R (page.81) 3364 0 R (page.82) 3388 0 R (page.83) 3412 0 R (page.84) 3436 0 R (page.85) 3459 0 R (page.86) 3483 0 R (page.87) 3508 0 R (page.88) 3531 0 R (page.89) 3555 0 R (page.9) 1212 0 R (page.90) 3609 0 R (page.91) 3648 0 R (page.92) 3657 0 R (page.93) 3679 0 R (page.94) 3694 0 R (page.95) 3711 0 R (page.96) 3721 0 R (page.97) 3728 0 R (page.98) 3735 0 R (page.99) 3743 0 R (paragraph.5.1.2.1) 1113 0 R (paragraph.5.1.2.10) 1160 0 R (paragraph.5.1.2.11) 1162 0 R (paragraph.5.1.2.2) 1126 0 R (paragraph.5.1.2.3) 1133 0 R (paragraph.5.1.2.4) 1134 0 R (paragraph.5.1.2.5) 1138 0 R (paragraph.5.1.2.6) 1152 0 R (paragraph.5.1.2.7) 1154 0 R (paragraph.5.1.2.8) 1158 0 R (paragraph.5.1.2.9) 1159 0 R (paragraph.5.10.2.1) 1756 0 R (paragraph.5.10.2.10) 1812 0 R (paragraph.5.10.2.11) 1814 0 R (paragraph.5.10.2.12) 1817 0 R (paragraph.5.10.2.13) 1820 0 R (paragraph.5.10.2.14) 1823 0 R (paragraph.5.10.2.15) 1825 0 R (paragraph.5.10.2.16) 1826 0 R (paragraph.5.10.2.17) 1827 0 R (paragraph.5.10.2.18) 1828 0 R (paragraph.5.10.2.19) 1829 0 R (paragraph.5.10.2.2) 1766 0 R (paragraph.5.10.2.20) 1834 0 R (paragraph.5.10.2.21) 1835 0 R (paragraph.5.10.2.22) 1836 0 R (paragraph.5.10.2.23) 1837 0 R (paragraph.5.10.2.24) 1838 0 R (paragraph.5.10.2.3) 1788 0 R (paragraph.5.10.2.4) 1792 0 R (paragraph.5.10.2.5) 1796 0 R (paragraph.5.10.2.6) 1798 0 R (paragraph.5.10.2.7) 1801 0 R (paragraph.5.10.2.8) 1803 0 R (paragraph.5.10.2.9) 1811 0 R (paragraph.5.11.2.1) 1846 0 R (paragraph.5.11.2.2) 1848 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 (paragraph.5.12.2.1) 2041 0 R (paragraph.5.12.2.10) 2093 0 R (paragraph.5.12.2.11) 2098 0 R (paragraph.5.12.2.12) 2099 0 R (paragraph.5.12.2.13) 2100 0 R (paragraph.5.12.2.14) 2108 0 R (paragraph.5.12.2.15) 2113 0 R (paragraph.5.12.2.16) 2120 0 R (paragraph.5.12.2.17) 2122 0 R (paragraph.5.12.2.18) 2127 0 R (paragraph.5.12.2.19) 2133 0 R (paragraph.5.12.2.2) 2071 0 R (paragraph.5.12.2.20) 2134 0 R (paragraph.5.12.2.21) 2135 0 R (paragraph.5.12.2.22) 2152 0 R (paragraph.5.12.2.23) 2154 0 R (paragraph.5.12.2.24) 2161 0 R (paragraph.5.12.2.25) 2162 0 R (paragraph.5.12.2.26) 2163 0 R (paragraph.5.12.2.27) 2164 0 R (paragraph.5.12.2.28) 2165 0 R (paragraph.5.12.2.29) 2166 0 R (paragraph.5.12.2.3) 2074 0 R (paragraph.5.12.2.30) 2167 0 R (paragraph.5.12.2.31) 2168 0 R (paragraph.5.12.2.32) 2169 0 R (paragraph.5.12.2.33) 2174 0 R (paragraph.5.12.2.34) 2175 0 R (paragraph.5.12.2.35) 2176 0 R (paragraph.5.12.2.36) 2177 0 R (paragraph.5.12.2.37) 2178 0 R (paragraph.5.12.2.38) 2179 0 R (paragraph.5.12.2.39) 2180 0 R (paragraph.5.12.2.4) 2075 0 R (paragraph.5.12.2.40) 2181 0 R (paragraph.5.12.2.41) 2182 0 R (paragraph.5.12.2.42) 2183 0 R (paragraph.5.12.2.43) 2184 0 R (paragraph.5.12.2.44) 2190 0 R (paragraph.5.12.2.45) 2192 0 R (paragraph.5.12.2.46) 2197 0 R (paragraph.5.12.2.47) 2201 0 R (paragraph.5.12.2.48) 2202 0 R (paragraph.5.12.2.49) 2203 0 R (paragraph.5.12.2.5) 2076 0 R (paragraph.5.12.2.50) 2204 0 R (paragraph.5.12.2.51) 2205 0 R (paragraph.5.12.2.52) 2209 0 R (paragraph.5.12.2.53) 2219 0 R (paragraph.5.12.2.54) 2221 0 R (paragraph.5.12.2.55) 2222 0 R (paragraph.5.12.2.56) 2224 0 R (paragraph.5.12.2.57) 2226 0 R (paragraph.5.12.2.58) 2232 0 R (paragraph.5.12.2.59) 2234 0 R (paragraph.5.12.2.6) 2077 0 R (paragraph.5.12.2.60) 2235 0 R (paragraph.5.12.2.61) 2236 0 R (paragraph.5.12.2.62) 2237 0 R (paragraph.5.12.2.63) 2238 0 R (paragraph.5.12.2.64) 2239 0 R (paragraph.5.12.2.65) 2240 0 R (paragraph.5.12.2.66) 2241 0 R (paragraph.5.12.2.67) 2242 0 R (paragraph.5.12.2.68) 2243 0 R (paragraph.5.12.2.69) 2244 0 R (paragraph.5.12.2.7) 2082 0 R (paragraph.5.12.2.70) 2245 0 R (paragraph.5.12.2.71) 2250 0 R (paragraph.5.12.2.72) 2251 0 R (paragraph.5.12.2.73) 2252 0 R (paragraph.5.12.2.74) 2253 0 R (paragraph.5.12.2.75) 2254 0 R (paragraph.5.12.2.76) 2255 0 R (paragraph.5.12.2.77) 2256 0 R (paragraph.5.12.2.8) 2091 0 R (paragraph.5.12.2.9) 2092 0 R (paragraph.5.13.2.1) 2294 0 R (paragraph.5.13.2.10) 2307 0 R (paragraph.5.13.2.11) 2308 0 R (paragraph.5.13.2.2) 2295 0 R (paragraph.5.13.2.3) 2296 0 R (paragraph.5.13.2.4) 2297 0 R (paragraph.5.13.2.5) 2298 0 R (paragraph.5.13.2.6) 2299 0 R (paragraph.5.13.2.7) 2300 0 R (paragraph.5.13.2.8) 2301 0 R (paragraph.5.13.2.9) 2302 0 R (paragraph.5.2.2.1) 1188 0 R (paragraph.5.2.2.10) 1235 0 R (paragraph.5.2.2.11) 1238 0 R (paragraph.5.2.2.12) 1241 0 R (paragraph.5.2.2.13) 1248 0 R (paragraph.5.2.2.14) 1255 0 R (paragraph.5.2.2.15) 1256 0 R (paragraph.5.2.2.2) 1191 0 R (paragraph.5.2.2.3) 1193 0 R (paragraph.5.2.2.4) 1213 0 R (paragraph.5.2.2.5) 1214 0 R (paragraph.5.2.2.6) 1224 0 R (paragraph.5.2.2.7) 1225 0 R (paragraph.5.2.2.8) 1229 0 R (paragraph.5.2.2.9) 1232 0 R (paragraph.5.3.2.1) 1265 0 R (paragraph.5.3.2.2) 1272 0 R (paragraph.5.3.2.3) 1273 0 R (paragraph.5.4.2.1) 1318 0 R (paragraph.5.4.2.10) 1341 0 R (paragraph.5.4.2.11) 1343 0 R (paragraph.5.4.2.12) 1344 0 R (paragraph.5.4.2.13) 1345 0 R (paragraph.5.4.2.14) 1346 0 R (paragraph.5.4.2.15) 1347 0 R (paragraph.5.4.2.16) 1348 0 R (paragraph.5.4.2.17) 1354 0 R (paragraph.5.4.2.18) 1355 0 R (paragraph.5.4.2.2) 1325 0 R (paragraph.5.4.2.3) 1327 0 R (paragraph.5.4.2.4) 1328 0 R (paragraph.5.4.2.5) 1335 0 R (paragraph.5.4.2.6) 1336 0 R (paragraph.5.4.2.7) 1337 0 R (paragraph.5.4.2.8) 1339 0 R (paragraph.5.4.2.9) 1340 0 R (paragraph.5.5.2.1) 1405 0 R (paragraph.5.5.2.10) 1427 0 R (paragraph.5.5.2.11) 1428 0 R (paragraph.5.5.2.12) 1429 0 R (paragraph.5.5.2.13) 1430 0 R (paragraph.5.5.2.14) 1435 0 R (paragraph.5.5.2.15) 1436 0 R (paragraph.5.5.2.16) 1437 0 R (paragraph.5.5.2.17) 1438 0 R (paragraph.5.5.2.18) 1439 0 R (paragraph.5.5.2.19) 1441 0 R (paragraph.5.5.2.2) 1413 0 R (paragraph.5.5.2.20) 1442 0 R (paragraph.5.5.2.21) 1443 0 R (paragraph.5.5.2.22) 1444 0 R (paragraph.5.5.2.23) 1445 0 R (paragraph.5.5.2.24) 1446 0 R (paragraph.5.5.2.3) 1414 0 R (paragraph.5.5.2.4) 1415 0 R (paragraph.5.5.2.5) 1416 0 R (paragraph.5.5.2.6) 1417 0 R (paragraph.5.5.2.7) 1419 0 R (paragraph.5.5.2.8) 1425 0 R (paragraph.5.5.2.9) 1426 0 R (paragraph.5.6.2.1) 1458 0 R (paragraph.5.6.2.2) 1460 0 R (paragraph.5.6.2.3) 1462 0 R (paragraph.5.7.2.1) 1477 0 R (paragraph.5.7.2.2) 1478 0 R (paragraph.5.7.2.3) 1479 0 R (paragraph.5.8.2.1) 1499 0 R (paragraph.5.8.2.10) 1545 0 R (paragraph.5.8.2.11) 1546 0 R (paragraph.5.8.2.12) 1548 0 R (paragraph.5.8.2.13) 1549 0 R (paragraph.5.8.2.14) 1550 0 R (paragraph.5.8.2.15) 1555 0 R (paragraph.5.8.2.16) 1556 0 R (paragraph.5.8.2.2) 1528 0 R (paragraph.5.8.2.3) 1529 0 R (paragraph.5.8.2.4) 1530 0 R (paragraph.5.8.2.5) 1531 0 R (paragraph.5.8.2.6) 1532 0 R (paragraph.5.8.2.7) 1533 0 R (paragraph.5.8.2.8) 1543 0 R (paragraph.5.8.2.9) 1544 0 R (paragraph.5.9.2.1) 1655 0 R (paragraph.5.9.2.10) 1666 0 R (paragraph.5.9.2.11) 1672 0 R (paragraph.5.9.2.12) 1673 0 R (paragraph.5.9.2.13) 1674 0 R (paragraph.5.9.2.14) 1675 0 R (paragraph.5.9.2.15) 1676 0 R (paragraph.5.9.2.16) 1677 0 R (paragraph.5.9.2.17) 1678 0 R (paragraph.5.9.2.18) 1679 0 R (paragraph.5.9.2.19) 1680 0 R (paragraph.5.9.2.2) 1656 0 R (paragraph.5.9.2.20) 1681 0 R (paragraph.5.9.2.21) 1682 0 R (paragraph.5.9.2.22) 1683 0 R (paragraph.5.9.2.23) 1684 0 R (paragraph.5.9.2.24) 1689 0 R (paragraph.5.9.2.25) 1690 0 R (paragraph.5.9.2.26) 1691 0 R (paragraph.5.9.2.27) 1692 0 R (paragraph.5.9.2.28) 1693 0 R (paragraph.5.9.2.29) 1694 0 R (paragraph.5.9.2.3) 1657 0 R (paragraph.5.9.2.30) 1695 0 R (paragraph.5.9.2.31) 1696 0 R (paragraph.5.9.2.32) 1697 0 R (paragraph.5.9.2.33) 1698 0 R (paragraph.5.9.2.34) 1699 0 R (paragraph.5.9.2.35) 1700 0 R (paragraph.5.9.2.36) 1701 0 R (paragraph.5.9.2.37) 1707 0 R (paragraph.5.9.2.38) 1708 0 R (paragraph.5.9.2.39) 1709 0 R (paragraph.5.9.2.4) 1658 0 R (paragraph.5.9.2.40) 1710 0 R (paragraph.5.9.2.41) 1711 0 R (paragraph.5.9.2.42) 1712 0 R (paragraph.5.9.2.43) 1714 0 R (paragraph.5.9.2.5) 1661 0 R (paragraph.5.9.2.6) 1662 0 R (paragraph.5.9.2.7) 1663 0 R (paragraph.5.9.2.8) 1664 0 R (paragraph.5.9.2.9) 1665 0 R (paragraph.6.1.2.1) 2388 0 R (paragraph.6.1.2.2) 2390 0 R (paragraph.6.1.2.3) 2393 0 R (paragraph.6.1.2.4) 2396 0 R (paragraph.6.1.2.5) 2399 0 R (paragraph.6.1.2.6) 2402 0 R (paragraph.6.1.3.1) 2405 0 R (paragraph.6.1.4.1) 2413 0 R (paragraph.6.1.4.2) 2417 0 R (paragraph.6.1.4.3) 2420 0 R (paragraph.6.1.4.4) 2424 0 R (paragraph.6.1.4.5) 2437 0 R (paragraph.6.1.4.6) 2446 0 R (paragraph.6.1.5.1) 2450 0 R (paragraph.6.10.2.1) 4090 0 R (paragraph.6.10.2.2) 4092 0 R (paragraph.6.10.2.3) 4099 0 R (paragraph.6.10.2.4) 4102 0 R (paragraph.6.10.2.5) 4105 0 R (paragraph.6.10.2.6) 4108 0 R (paragraph.6.10.2.7) 4111 0 R (paragraph.6.10.2.8) 4114 0 R (paragraph.6.10.3.1) 4117 0 R (paragraph.6.10.4.1) 4122 0 R (paragraph.6.10.4.2) 4135 0 R (paragraph.6.10.4.3) 4144 0 R (paragraph.6.10.4.4) 4153 0 R (paragraph.6.10.4.5) 4160 0 R (paragraph.6.10.4.6) 4169 0 R (paragraph.6.10.4.7) 4177 0 R (paragraph.6.10.4.8) 4181 0 R (paragraph.6.10.5.1) 4189 0 R (paragraph.6.11.2.1) 4357 0 R (paragraph.6.11.2.10) 4382 0 R (paragraph.6.11.2.11) 4385 0 R (paragraph.6.11.2.12) 4388 0 R (paragraph.6.11.2.13) 4391 0 R (paragraph.6.11.2.14) 4394 0 R (paragraph.6.11.2.15) 4397 0 R (paragraph.6.11.2.16) 4400 0 R (paragraph.6.11.2.17) 4403 0 R (paragraph.6.11.2.2) 4359 0 R (paragraph.6.11.2.3) 4361 0 R (paragraph.6.11.2.4) 4363 0 R (paragraph.6.11.2.5) 4365 0 R (paragraph.6.11.2.6) 4367 0 R (paragraph.6.11.2.7) 4369 0 R (paragraph.6.11.2.8) 4371 0 R (paragraph.6.11.2.9) 4374 0 R (paragraph.6.11.3.1) 4410 0 R (paragraph.6.11.4.1) 4411 0 R (paragraph.6.11.4.10) 4500 0 R (paragraph.6.11.4.11) 4508 0 R (paragraph.6.11.4.12) 4518 0 R (paragraph.6.11.4.2) 4413 0 R (paragraph.6.11.4.3) 4419 0 R (paragraph.6.11.4.4) 4430 0 R (paragraph.6.11.4.5) 4453 0 R (paragraph.6.11.4.6) 4461 0 R (paragraph.6.11.4.7) 4465 0 R (paragraph.6.11.4.8) 4480 0 R (paragraph.6.11.4.9) 4491 0 R (paragraph.6.11.5.1) 4531 0 R (paragraph.6.12.2.1) 4560 0 R (paragraph.6.12.2.2) 4561 0 R (paragraph.6.12.2.3) 4562 0 R (paragraph.6.12.3.1) 4565 0 R (paragraph.6.12.3.2) 4567 0 R (paragraph.6.12.3.3) 4574 0 R (paragraph.6.12.3.4) 4578 0 R (paragraph.6.13.2.1) 4705 0 R (paragraph.6.13.2.2) 4708 0 R (paragraph.6.13.2.3) 4711 0 R (paragraph.6.13.2.4) 4714 0 R (paragraph.6.13.2.5) 4717 0 R (paragraph.6.13.2.6) 4720 0 R (paragraph.6.13.2.7) 4727 0 R (paragraph.6.13.2.8) 4729 0 R (paragraph.6.13.3.1) 4732 0 R (paragraph.6.13.4.1) 4733 0 R (paragraph.6.13.4.2) 4734 0 R (paragraph.6.13.4.3) 4747 0 R (paragraph.6.13.4.4) 4749 0 R (paragraph.6.13.4.5) 4764 0 R (paragraph.6.13.4.6) 4768 0 R (paragraph.6.13.4.7) 4776 0 R (paragraph.6.13.4.8) 4789 0 R (paragraph.6.13.5.1) 4797 0 R (paragraph.6.14.2.1) 4985 0 R (paragraph.6.14.2.10) 5025 0 R (paragraph.6.14.2.11) 5029 0 R (paragraph.6.14.2.12) 5033 0 R (paragraph.6.14.2.13) 5037 0 R (paragraph.6.14.2.14) 5046 0 R (paragraph.6.14.2.15) 5050 0 R (paragraph.6.14.2.16) 5054 0 R (paragraph.6.14.2.17) 5058 0 R (paragraph.6.14.2.18) 5060 0 R (paragraph.6.14.2.19) 5062 0 R (paragraph.6.14.2.2) 4989 0 R (paragraph.6.14.2.20) 5064 0 R (paragraph.6.14.2.21) 5067 0 R (paragraph.6.14.2.22) 5070 0 R (paragraph.6.14.2.23) 5077 0 R (paragraph.6.14.2.24) 5080 0 R (paragraph.6.14.2.25) 5083 0 R (paragraph.6.14.2.26) 5086 0 R (paragraph.6.14.2.27) 5089 0 R (paragraph.6.14.2.28) 5092 0 R (paragraph.6.14.2.3) 4993 0 R (paragraph.6.14.2.4) 5001 0 R (paragraph.6.14.2.5) 5005 0 R (paragraph.6.14.2.6) 5009 0 R (paragraph.6.14.2.7) 5013 0 R (paragraph.6.14.2.8) 5017 0 R (paragraph.6.14.2.9) 5021 0 R (paragraph.6.14.3.1) 5095 0 R (paragraph.6.14.4.1) 5100 0 R (paragraph.6.14.4.2) 5122 0 R (paragraph.6.14.4.3) 5251 0 R (paragraph.6.14.4.4) 5276 0 R (paragraph.6.14.4.5) 5291 0 R (paragraph.6.14.4.6) 5299 0 R (paragraph.6.14.4.7) 5310 0 R (paragraph.6.14.5.1) 5338 0 R (paragraph.6.16.2.1) 5352 0 R (paragraph.6.16.2.2) 5363 0 R (paragraph.6.16.2.3) 5364 0 R (paragraph.6.16.2.4) 5365 0 R (paragraph.6.16.2.5) 5367 0 R (paragraph.6.16.2.6) 5369 0 R (paragraph.6.16.2.7) 5370 0 R (paragraph.6.17.2.1) 5394 0 R (paragraph.6.17.3.1) 5395 0 R (paragraph.6.17.3.2) 5405 0 R (paragraph.6.17.3.3) 5417 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 (paragraph.6.18.3.4) 5467 0 R (paragraph.6.18.3.5) 5468 0 R (paragraph.6.18.3.6) 5473 0 R (paragraph.6.18.3.7) 5474 0 R (paragraph.6.18.3.8) 5475 0 R (paragraph.6.19.2.1) 5582 0 R (paragraph.6.19.2.10) 5620 0 R (paragraph.6.19.2.11) 5628 0 R (paragraph.6.19.2.12) 5633 0 R (paragraph.6.19.2.13) 5638 0 R (paragraph.6.19.2.14) 5642 0 R (paragraph.6.19.2.15) 5646 0 R (paragraph.6.19.2.16) 5651 0 R (paragraph.6.19.2.17) 5655 0 R (paragraph.6.19.2.18) 5659 0 R (paragraph.6.19.2.2) 5586 0 R (paragraph.6.19.2.3) 5590 0 R (paragraph.6.19.2.4) 5594 0 R (paragraph.6.19.2.5) 5598 0 R (paragraph.6.19.2.6) 5602 0 R (paragraph.6.19.2.7) 5606 0 R (paragraph.6.19.2.8) 5611 0 R (paragraph.6.19.2.9) 5615 0 R (paragraph.6.19.3.1) 5663 0 R (paragraph.6.19.4.1) 5668 0 R (paragraph.6.19.4.2) 5676 0 R (paragraph.6.19.4.3) 5685 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 (paragraph.6.19.5.1) 5700 0 R (paragraph.6.19.5.2) 5701 0 R (paragraph.6.19.5.3) 5706 0 R (paragraph.6.2.2.1) 2494 0 R (paragraph.6.2.2.2) 2496 0 R (paragraph.6.2.2.3) 2498 0 R (paragraph.6.2.2.4) 2500 0 R (paragraph.6.2.2.5) 2502 0 R (paragraph.6.2.2.6) 2504 0 R (paragraph.6.2.2.7) 2506 0 R (paragraph.6.2.2.8) 2507 0 R (paragraph.6.2.3.1) 2508 0 R (paragraph.6.2.4.1) 2515 0 R (paragraph.6.2.5.1) 2544 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 (paragraph.6.20.2.5) 5738 0 R (paragraph.6.20.2.6) 5739 0 R (paragraph.6.20.2.7) 5740 0 R (paragraph.6.3.2.1) 2558 0 R (paragraph.6.4.2.1) 2668 0 R (paragraph.6.4.2.2) 2670 0 R (paragraph.6.4.2.3) 2673 0 R (paragraph.6.4.2.4) 2676 0 R (paragraph.6.4.2.5) 2679 0 R (paragraph.6.4.2.6) 2682 0 R (paragraph.6.4.2.7) 2685 0 R (paragraph.6.4.2.8) 2692 0 R (paragraph.6.4.3.1) 2695 0 R (paragraph.6.4.4.1) 2696 0 R (paragraph.6.4.4.2) 2706 0 R (paragraph.6.4.4.3) 2718 0 R (paragraph.6.4.4.4) 2726 0 R (paragraph.6.4.4.5) 2734 0 R (paragraph.6.4.4.6) 2746 0 R (paragraph.6.4.4.7) 2750 0 R (paragraph.6.4.4.8) 2759 0 R (paragraph.6.4.5.1) 2760 0 R (paragraph.6.5.2.1) 2787 0 R (paragraph.6.5.3.1) 2788 0 R (paragraph.6.5.3.2) 2794 0 R (paragraph.6.5.4.1) 2795 0 R (paragraph.6.6.2.1) 3228 0 R (paragraph.6.6.2.2) 3229 0 R (paragraph.6.6.2.3) 3230 0 R (paragraph.6.6.2.4) 3236 0 R (paragraph.6.6.2.5) 3238 0 R (paragraph.6.6.2.6) 3241 0 R (paragraph.6.6.2.7) 3244 0 R (paragraph.6.6.2.8) 3247 0 R (paragraph.6.6.2.9) 3250 0 R (paragraph.6.6.3.1) 3253 0 R (paragraph.6.6.4.1) 3258 0 R (paragraph.6.6.4.10) 3305 0 R (paragraph.6.6.4.11) 3308 0 R (paragraph.6.6.4.12) 3310 0 R (paragraph.6.6.4.13) 3316 0 R (paragraph.6.6.4.14) 3319 0 R (paragraph.6.6.4.15) 3321 0 R (paragraph.6.6.4.16) 3323 0 R (paragraph.6.6.4.17) 3326 0 R (paragraph.6.6.4.18) 3328 0 R (paragraph.6.6.4.19) 3330 0 R (paragraph.6.6.4.2) 3262 0 R (paragraph.6.6.4.20) 3333 0 R (paragraph.6.6.4.21) 3335 0 R (paragraph.6.6.4.22) 3341 0 R (paragraph.6.6.4.23) 3344 0 R (paragraph.6.6.4.24) 3346 0 R (paragraph.6.6.4.25) 3348 0 R (paragraph.6.6.4.26) 3351 0 R (paragraph.6.6.4.27) 3353 0 R (paragraph.6.6.4.28) 3355 0 R (paragraph.6.6.4.29) 3358 0 R (paragraph.6.6.4.3) 3265 0 R (paragraph.6.6.4.30) 3365 0 R (paragraph.6.6.4.31) 3367 0 R (paragraph.6.6.4.32) 3370 0 R (paragraph.6.6.4.33) 3372 0 R (paragraph.6.6.4.34) 3374 0 R (paragraph.6.6.4.35) 3377 0 R (paragraph.6.6.4.36) 3379 0 R (paragraph.6.6.4.37) 3381 0 R (paragraph.6.6.4.38) 3384 0 R (paragraph.6.6.4.39) 3390 0 R (paragraph.6.6.4.4) 3269 0 R (paragraph.6.6.4.40) 3392 0 R (paragraph.6.6.4.41) 3395 0 R (paragraph.6.6.4.42) 3397 0 R (paragraph.6.6.4.43) 3399 0 R (paragraph.6.6.4.44) 3402 0 R (paragraph.6.6.4.45) 3404 0 R (paragraph.6.6.4.46) 3406 0 R (paragraph.6.6.4.47) 3413 0 R (paragraph.6.6.4.48) 3415 0 R (paragraph.6.6.4.49) 3417 0 R (paragraph.6.6.4.5) 3284 0 R (paragraph.6.6.4.50) 3420 0 R (paragraph.6.6.4.51) 3422 0 R (paragraph.6.6.4.52) 3424 0 R (paragraph.6.6.4.53) 3427 0 R (paragraph.6.6.4.54) 3429 0 R (paragraph.6.6.4.55) 3431 0 R (paragraph.6.6.4.56) 3438 0 R (paragraph.6.6.4.57) 3440 0 R (paragraph.6.6.4.58) 3442 0 R (paragraph.6.6.4.59) 3445 0 R (paragraph.6.6.4.6) 3289 0 R (paragraph.6.6.4.60) 3447 0 R (paragraph.6.6.4.61) 3449 0 R (paragraph.6.6.4.62) 3452 0 R (paragraph.6.6.4.63) 3454 0 R (paragraph.6.6.4.64) 3460 0 R (paragraph.6.6.4.65) 3463 0 R (paragraph.6.6.4.66) 3465 0 R (paragraph.6.6.4.67) 3467 0 R (paragraph.6.6.4.68) 3470 0 R (paragraph.6.6.4.69) 3472 0 R (paragraph.6.6.4.7) 3298 0 R (paragraph.6.6.4.70) 3474 0 R (paragraph.6.6.4.71) 3477 0 R (paragraph.6.6.4.72) 3479 0 R (paragraph.6.6.4.73) 3485 0 R (paragraph.6.6.4.74) 3488 0 R (paragraph.6.6.4.75) 3490 0 R (paragraph.6.6.4.76) 3492 0 R (paragraph.6.6.4.77) 3495 0 R (paragraph.6.6.4.78) 3497 0 R (paragraph.6.6.4.79) 3499 0 R (paragraph.6.6.4.8) 3301 0 R (paragraph.6.6.4.80) 3502 0 R (paragraph.6.6.4.81) 3509 0 R (paragraph.6.6.4.82) 3511 0 R (paragraph.6.6.4.83) 3514 0 R (paragraph.6.6.4.84) 3516 0 R (paragraph.6.6.4.85) 3518 0 R (paragraph.6.6.4.86) 3521 0 R (paragraph.6.6.4.87) 3523 0 R (paragraph.6.6.4.9) 3303 0 R (paragraph.6.6.5.1) 3525 0 R (paragraph.6.6.5.10) 3546 0 R (paragraph.6.6.5.11) 3547 0 R (paragraph.6.6.5.12) 3549 0 R (paragraph.6.6.5.2) 3526 0 R (paragraph.6.6.5.3) 3532 0 R (paragraph.6.6.5.4) 3534 0 R (paragraph.6.6.5.5) 3536 0 R (paragraph.6.6.5.6) 3538 0 R (paragraph.6.6.5.7) 3540 0 R (paragraph.6.6.5.8) 3542 0 R (paragraph.6.6.5.9) 3544 0 R (paragraph.6.7.2.1) 3658 0 R (paragraph.6.7.2.2) 3660 0 R (paragraph.6.7.2.3) 3663 0 R (paragraph.6.7.2.4) 3666 0 R (paragraph.6.7.2.5) 3669 0 R (paragraph.6.7.2.6) 3672 0 R (paragraph.6.7.3.1) 3680 0 R (paragraph.6.7.4.1) 3681 0 R (paragraph.6.7.4.10) 3736 0 R (paragraph.6.7.4.11) 3738 0 R (paragraph.6.7.4.12) 3744 0 R (paragraph.6.7.4.13) 3745 0 R (paragraph.6.7.4.14) 3746 0 R (paragraph.6.7.4.15) 3747 0 R (paragraph.6.7.4.2) 3685 0 R (paragraph.6.7.4.3) 3688 0 R (paragraph.6.7.4.4) 3696 0 R (paragraph.6.7.4.5) 3704 0 R (paragraph.6.7.4.6) 3712 0 R (paragraph.6.7.4.7) 3716 0 R (paragraph.6.7.4.8) 3722 0 R (paragraph.6.7.4.9) 3729 0 R (paragraph.6.7.5.1) 3748 0 R (paragraph.6.8.2.1) 3763 0 R (paragraph.6.8.2.2) 3771 0 R (paragraph.6.8.2.3) 3772 0 R (paragraph.6.8.2.4) 3780 0 R (paragraph.6.9.2.1) 3910 0 R (paragraph.6.9.2.2) 3912 0 R (paragraph.6.9.3.1) 3917 0 R (paragraph.6.9.4.1) 3918 0 R (paragraph.6.9.4.10) 3959 0 R (paragraph.6.9.4.11) 3961 0 R (paragraph.6.9.4.12) 3963 0 R (paragraph.6.9.4.13) 3965 0 R (paragraph.6.9.4.14) 3967 0 R (paragraph.6.9.4.15) 3969 0 R (paragraph.6.9.4.16) 3971 0 R (paragraph.6.9.4.17) 3976 0 R (paragraph.6.9.4.18) 3978 0 R (paragraph.6.9.4.19) 3980 0 R (paragraph.6.9.4.2) 3936 0 R (paragraph.6.9.4.20) 3982 0 R (paragraph.6.9.4.21) 3988 0 R (paragraph.6.9.4.22) 3990 0 R (paragraph.6.9.4.23) 3992 0 R (paragraph.6.9.4.24) 3994 0 R (paragraph.6.9.4.25) 3996 0 R (paragraph.6.9.4.26) 3998 0 R (paragraph.6.9.4.27) 4000 0 R (paragraph.6.9.4.3) 3941 0 R (paragraph.6.9.4.4) 3943 0 R (paragraph.6.9.4.5) 3945 0 R (paragraph.6.9.4.6) 3947 0 R (paragraph.6.9.4.7) 3949 0 R (paragraph.6.9.4.8) 3951 0 R (paragraph.6.9.4.9) 3957 0 R (paragraph.6.9.5.1) 4002 0 R (pgsbox) 794 0 R (prj_8h) 1037 0 R (prj_8h_025adf8a63b5d4a8d2a4de804e0707be) 2941 0 R (prj_8h_105e2bf177120eb34f41e6af768f855d) 3038 0 R (prj_8h_13e0f81e1fd4bdc46847ab4c634ad346) 2946 0 R (prj_8h_151140d870ed4f490317938bd6260a6a) 2993 0 R (prj_8h_167a49d730bca43483aef311f7114ae4) 3082 0 R (prj_8h_17be11269d86b3308fd925949877718e) 2991 0 R (prj_8h_1f1714691f99f11640dccdc74eadfb49) 3079 0 R (prj_8h_28b623c88d38ab711fc61f36a97d0b27) 3078 0 R (prj_8h_28ddb923a52cb597ca9c7dd03ceeb4fe) 2980 0 R (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 (prj_8h_2c87fbf68277f03051d3eaae3db785e9) 2942 0 R (prj_8h_2cdabd9dfe78fe18b9e6597881d8ed92) 2841 0 R (prj_8h_2d30db5685dd1faa18680a0e69bc5854) 3124 0 R (prj_8h_2da3bbd3c42c6ad324117cc5f249a834) 3029 0 R (prj_8h_2f42dcec4ea56bbb25b563859228b02e) 3041 0 R (prj_8h_2fe67a5ecf17729881efa24c83482611) 2887 0 R (prj_8h_310444979f8f0e62db2bcbe39b0e3d35) 2988 0 R (prj_8h_3229533df20718c0d5671cc9eb5316fe) 2938 0 R (prj_8h_33f92621800eb880b75611c439526d19) 3028 0 R (prj_8h_344308a1d96a93f9bc682141f3df1a14) 3040 0 R (prj_8h_34d303d7ae44a6aca43c1a81bfaac10f) 2889 0 R (prj_8h_3672afec3db0f850d67404814ebdbc64) 873 0 R (prj_8h_36ccae7b426311614a4e80432a2b62c3) 2981 0 R (prj_8h_36cf447dee9f2e90e42d43d7adc5a0a1) 2944 0 R (prj_8h_37ad31c5d2926862d211db0d14f401f0) 2839 0 R (prj_8h_3b4cda48838c613460bff00c76fceb44) 3076 0 R (prj_8h_4089618a84e11369bf9e5fd7c11c7368) 3125 0 R (prj_8h_4b25d630b7590f31fa0aa6d5861c9bfd) 3121 0 R (prj_8h_4ff298fcdc6e7e23dfb4971fbd26ebe7) 3090 0 R (prj_8h_50db1538981df162709b81be0b2961ab) 2848 0 R (prj_8h_53315ef8d3bd4002d1e98142fcf62566) 3075 0 R (prj_8h_5380727f9aeff5aa57f8545d6b54a8f8) 2985 0 R (prj_8h_5517fccc15882e298ac9433f44d1ae4c) 2989 0 R (prj_8h_574e44daea81568a6d5e324a6f339d6f) 2936 0 R (prj_8h_588e9a86fc4dcd1195f867f718ce5429) 3032 0 R (prj_8h_5a2f80bed69a84464e5654f91ed4fb63) 3119 0 R (prj_8h_666322bfe8c4b8e73f00afeb47283f97) 2933 0 R (prj_8h_66b51f10624b6c17a84b5b54058dd72b) 2892 0 R (prj_8h_68ce41ad199c3385bed7e7d4ded2bd8a) 2947 0 R (prj_8h_6d1f0504f9b864d4aed4a59d60bab819) 3086 0 R (prj_8h_6e2db45f219ba5732ddca43a9fc17408) 3122 0 R (prj_8h_6f3cbaaf367984579aad5ec7eb00f397) 2995 0 R (prj_8h_70b750ec65eb4a277057200c7fbb251f) 2888 0 R (prj_8h_749605599f1bf2b883c5c88b6cc9c06b) 3120 0 R (prj_8h_75b6b1cb0a748e9b5d3a4cd31129ace6) 2943 0 R (prj_8h_77283589634cc9a054f3a7c7fc91d38d) 3033 0 R (prj_8h_7b60d7992bf9c671cb4191f0ec2e0c90) 2937 0 R (prj_8h_7c719c0387d23c53b0ceb3ee161de66a) 2987 0 R (prj_8h_7f080405538ea2ddd2882c991e25bd2f) 869 0 R (prj_8h_847b7c3f5b7361596912d3d876b4f4fe) 3088 0 R (prj_8h_849a1bbd679d0c193e8be96a8b9ed534) 2939 0 R (prj_8h_853c1df5e8327d83e9cfdde9455355f5) 2994 0 R (prj_8h_86e25219d2169702c7db6508750097cf) 3117 0 R (prj_8h_8785bdf33bdaa3d9d52fd51b621ec8d5) 2849 0 R (prj_8h_88c15d0b6f789cbbd7c5d323ef131360) 2893 0 R (prj_8h_8bc552f12260f944e0b8f9b714804983) 3083 0 R (prj_8h_8cca776751549082521a72a743d6b937) 3030 0 R (prj_8h_8ebb4c79b635cef463b4e7242ff23c25) 2884 0 R (prj_8h_94f59295c312536ce66482b3d9bebec4) 872 0 R (prj_8h_9a387f05414e7b59487fdcb03ff79ced) 2881 0 R (prj_8h_9bceed17f625eb88a0826871dc8296b5) 3123 0 R (prj_8h_9d3358bed907342e3309e54bd2ab89da) 2891 0 R (prj_8h_a2167e62576d36eae341c2583cb5d678) 3089 0 R (prj_8h_aba5ce89ae711728d8ba8105ac5fd599) 2934 0 R (prj_8h_abdc7abc8b7c80187770cfd12c63f700) 3077 0 R (prj_8h_acc46318c778bd844e30d6997394cc8a) 2840 0 R (prj_8h_ad75dcd0cd2fd0b6a162b5587cba9c2d) 3080 0 R (prj_8h_aec02a8e47d68e126983e9bb07a0c0aa) 3043 0 R (prj_8h_afd25a96ccc5966c04d7732ca482c0c1) 3118 0 R (prj_8h_b1264f0201113c1a8e931ad9a7630e2f) 3034 0 R (prj_8h_b4325a957786611772b90e7a080327f3) 2983 0 R (prj_8h_b46a0a668f28939626287d048153863f) 2894 0 R (prj_8h_b6ce2bb75a87b1679d05f251227d2f1b) 2895 0 R (prj_8h_bbfbf3cba73850d7608765725993dfe3) 3081 0 R (prj_8h_bc26dfb2d0b0bee71f6e4541977d237f) 2885 0 R (prj_8h_bdf8c6c3ef615a01ebf8822e013d6a63) 2931 0 R (prj_8h_be28216295d9e7ad7dbb01bf5985df9f) 2882 0 R (prj_8h_bf6696d3455c684cb44d06da7885ce94) 2883 0 R (prj_8h_c038f2474d5d58de157554cee74a9735) 2932 0 R (prj_8h_c2f3bc42ac6e7d458364ebcf2b35814f) 3031 0 R (prj_8h_c8dfb42cf72db0c4bc690d030f75c662) 2838 0 R (prj_8h_c940da0fb0552876fb40a92f82c9625f) 3116 0 R (prj_8h_c983c5a393c5b3f1041f07b2eb95a3a5) 2935 0 R (prj_8h_c9a7ed6b032cfdaba0e8caba17c6c149) 3085 0 R (prj_8h_cb157519ef498bf669298c5508492f3e) 870 0 R (prj_8h_cd4f54c072b6219242daeb6d4b9a74cb) 2890 0 R (prj_8h_cf989261fd56f1e8b4eb8941ec2c754f) 2984 0 R (prj_8h_d2a2b56c0900516dd24eebf430bcb29c) 2990 0 R (prj_8h_d43dbc765c63162d0af2b9285b8a434f) 1420 0 R (prj_8h_d70968320728202aa12048162248d368) 3035 0 R (prj_8h_d994cb23871c51b20754973bef180f8a) 1146 0 R (prj_8h_d9a80b98c04b0e06d08fd84bacc58b27) 2986 0 R (prj_8h_dc4da028cde2d970e9e5e22adca22f37) 2940 0 R (prj_8h_dc97181f64d72234b8c6903b22b33df9) 3115 0 R (prj_8h_df9cca0265038851129d1966017cd525) 945 0 R (prj_8h_eb5951ec54b929d16ab464939a37d74f) 2992 0 R (prj_8h_eb7881cd5d7b4b5e26281a512b8f62ac) 2896 0 R (prj_8h_ed0317c8ffef248346da897568df266c) 3042 0 R (prj_8h_f363383621fb2b72243c1d6b894874d5) 2982 0 R (prj_8h_f44375ad9036898dd6d12d2cc58bf53b) 3091 0 R (prj_8h_f862254dceec64a987fdaabc40e4963d) 871 0 R (prj_8h_fa8d27e481bbfffacd3e671e6715d5cb) 3036 0 R (prj_8h_faafab5c440384667d7af444b7aca750) 2886 0 R (prj_8h_fbf5f05496f1e018425e02d60a4e0b74) 3037 0 R (prj_8h_fc5276e759c799deea36271d9cafc5e9) 3087 0 R (prj_8h_fcefcb885b7d1c33e0458345cdc9f4a4) 3084 0 R (prj_8h_fedc43dc512008174ec9b87753519031) 3039 0 R (prj_8h_ff09e87b2246bdec83f6a7bb1bc0f471) 2979 0 R (prj_8h_ffdbf993ce959fce2c148c07cd0f2c0c) 2945 0 R (section*.1) 605 0 R (section*.10) 1562 0 R (section*.11) 1715 0 R (section*.12) 1839 0 R (section*.13) 1859 0 R (section*.14) 2257 0 R (section*.15) 2309 0 R (section*.16) 2311 0 R (section*.17) 2325 0 R (section*.18) 2344 0 R (section*.19) 2361 0 R (section*.2) 1070 0 R (section*.20) 2451 0 R (section*.21) 2458 0 R (section*.22) 2469 0 R (section*.23) 2471 0 R (section*.24) 2475 0 R (section*.25) 2545 0 R (section*.26) 2551 0 R (section*.27) 2583 0 R (section*.28) 2585 0 R (section*.29) 2608 0 R (section*.3) 1168 0 R (section*.30) 2615 0 R (section*.31) 2637 0 R (section*.32) 2761 0 R (section*.33) 2768 0 R (section*.34) 2783 0 R (section*.35) 2796 0 R (section*.36) 2802 0 R (section*.37) 2819 0 R (section*.38) 2826 0 R (section*.39) 3096 0 R (section*.4) 1257 0 R (section*.40) 3550 0 R (section*.41) 3556 0 R (section*.42) 3570 0 R (section*.43) 3577 0 R (section*.44) 3623 0 R (section*.45) 3753 0 R (section*.46) 3789 0 R (section*.47) 3791 0 R (section*.48) 3796 0 R (section*.49) 3803 0 R (section*.5) 1276 0 R (section*.50) 3871 0 R (section*.51) 4003 0 R (section*.52) 4009 0 R (section*.53) 4027 0 R (section*.54) 4036 0 R (section*.55) 4075 0 R (section*.56) 4190 0 R (section*.57) 4199 0 R (section*.58) 4248 0 R (section*.59) 4264 0 R (section*.6) 1356 0 R (section*.60) 4316 0 R (section*.61) 4532 0 R (section*.62) 4534 0 R (section*.63) 4539 0 R (section*.64) 4584 0 R (section*.65) 4607 0 R (section*.66) 4622 0 R (section*.67) 4672 0 R (section*.68) 4798 0 R (section*.69) 4907 0 R (section*.7) 1451 0 R (section*.70) 4916 0 R (section*.71) 4933 0 R (section*.72) 5343 0 R (section*.73) 5371 0 R (section*.74) 5373 0 R (section*.75) 5420 0 R (section*.76) 5422 0 R (section*.77) 5476 0 R (section*.78) 5522 0 R (section*.79) 5539 0 R (section*.8) 1463 0 R (section*.80) 5549 0 R (section*.81) 5711 0 R (section*.82) 5745 0 R (section*.9) 1480 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 (section.6) 198 0 R (software) 785 0 R (spc_8h) 1038 0 R (spc_8h_2e04fc3ccd8aceebb4bfef56c5399a7d) 3602 0 R (spc_8h_300fdb21c6e53aca6749db3455e531b2) 3638 0 R (spc_8h_30c95d776068ef3cc959a50af9995fa9) 3601 0 R (spc_8h_49807752ce4e223d4095cf6ad13bac0a) 949 0 R (spc_8h_49f16254df0e3498ae2c1eb641f5232c) 3643 0 R (spc_8h_4d66edc63bfc8a39adc6bac9e88c8e81) 946 0 R (spc_8h_4e195ae6c61da3608692a3c7f2395599) 3594 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b) 3595 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0653e60411a641a326492c65d257daa8) 3598 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b0b84f38d1e903eacda3122ce55bff741) 3596 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b3ba9183c7c3dace15eef0606980fd615) 3599 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7c5e0d09fac9f441e39f3cf28801961f) 3597 0 R (spc_8h_51ba1ce5380fd2e7693c37554d18fc3b7e218c5bd52bd6a45d8ad66573653007) 3600 0 R (spc_8h_615d3ef3a505a8be7da1578d9338d218) 2156 0 R (spc_8h_6f88e6f1a549bffa0d0ab2b9523d2000) 3641 0 R (spc_8h_7304d0d00bcf9d2bad1f56ba6d8322ea) 3603 0 R (spc_8h_96978fec523018fd6898301a3452c166) 947 0 R (spc_8h_96e8686daa13255e36506c3bfc213e46) 3644 0 R (spc_8h_99689938e16d737f26bf6504f2e1599a) 3639 0 R (spc_8h_ab517aed3ee9f8d5a5ca1f990d310b61) 950 0 R (spc_8h_b9fc42d8e1d281839a0a42ac00bcd180) 3642 0 R (spc_8h_c39694faccdd56850677999d714cd14a) 948 0 R (spc_8h_cc0b7b9e5bc5495f24129492e4ff5218) 3640 0 R (spc_8h_e6e89217a5eca87a2101ae195da74347) 3605 0 R (spc_8h_e7fe86ae85a1a3bd19c2d78c3dba58f6) 3604 0 R (spc_8h_eb46b7cc0b8e5a01be7862b3c446204a) 3637 0 R (spc_8h_f0e4274b242fd41625b6ad4f4376b8da) 951 0 R (spc_8h_f2ee6399a65f2467841be79e4bbb41c3) 1538 0 R (sph_8h) 1039 0 R (sph_8h_5c0783d56189d48d9f52af05b64a4df6) 3764 0 R (sph_8h_8ee2e117701f434f0bffbbe52f05d118) 3766 0 R (sph_8h_bcdbd119e57482315882d849f2b04e91) 3762 0 R (sph_8h_ec6222fe1e4d807c9b59980b8e548eb0) 3765 0 R (spx_8h) 1040 0 R (spx_8h_0459c65496512f270d3c569c346ce413) 3859 0 R (spx_8h_09b951b08ac818b9da44389a3ddf614a) 3854 0 R (spx_8h_16bc2fef69c592c5bcdc695633f17df0) 3850 0 R (spx_8h_192c7ea1edb2fc79d391a51bec7442e0) 1667 0 R (spx_8h_286f473d94247fbd7c2485e515fee67f) 3891 0 R (spx_8h_3e86c3462619b4fdf0aeeeea9874757e) 3849 0 R (spx_8h_413fa882d2b67a792a35938738214057) 3852 0 R (spx_8h_45f0db5bb967998f070cad30e5e68180) 3811 0 R (spx_8h_51b714ff0ed788c20f1b273ec551b6f6) 3847 0 R (spx_8h_544be13048057701c37a8e9c4f761be2) 3889 0 R (spx_8h_56a7d77413c654541fb29f58561c16f9) 3862 0 R (spx_8h_5a497ffd57345f2f0bf1c9abc56842c4) 3851 0 R (spx_8h_5c2eb2d8649eaab21e71efcd25d9236c) 3821 0 R (spx_8h_5eed4e6f2879b4607e60b4f77e2736bd) 3846 0 R (spx_8h_61a1980ff0683231529b784af1c48eaa) 3887 0 R (spx_8h_6c79d97dcc410e1a7a3e6e26ba3dabe6) 3848 0 R (spx_8h_6ee182e1185978bc6e7f69e4604fe341) 3819 0 R (spx_8h_772a14e27c613ea7b63697efdb765205) 3858 0 R (spx_8h_777e5c4790da397aefcada61445a1bb3) 3812 0 R (spx_8h_89a689b848429cfa5780757a5eee9347) 3822 0 R (spx_8h_8aba8fe47efe098740991771e97fe756) 3853 0 R (spx_8h_974f799a8ee19dd23114ca01b225a02f) 3856 0 R (spx_8h_9eb861d7c7437c5f974ad425da8b5664) 3823 0 R (spx_8h_a626b0cad9206c62e7e265bdf8c92c31) 3855 0 R (spx_8h_b23cb997ad699b59f91f4dfe4e8b28b0) 3888 0 R (spx_8h_cc02a893f538f5f0c0d1d9baae2b0e10) 3860 0 R (spx_8h_d0a5167b8e52a0cdc3990e35a324ba02) 3820 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf) 3813 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf23753b512249d3752a74ce7497d9c852) 3816 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf45313ec670a74e7effc1bcee16cb0b56) 3814 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf6b6639fb6d3683c9d356dbd7cf705de1) 3817 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecaf7342349cd1dc5b4581ae9c39f31d055e) 3815 0 R (spx_8h_d99a404f496d5b8ce3ef6e53c630ecafe795e388e346496b34e57864af841ae2) 3818 0 R (spx_8h_da5d4cf3e8791d64da68575da692e3f3) 3890 0 R (spx_8h_f4784a764fd0f36c82548ef755c470bd) 3857 0 R (spx_8h_f7a2d05c2db901488d68576343aad873) 3861 0 R (structcelprm) 1019 0 R (structcelprm_011e38b3a5505fdc13855348571bfad1) 1101 0 R (structcelprm_07d1785f7d7a8793555147140757956d) 1108 0 R (structcelprm_1b9cbfd7cfa2306464d57dc4acd03b06) 1107 0 R (structcelprm_3f9ae993e97f0e73e3f59117929eeda6) 1102 0 R (structcelprm_408a39c1d060d5b32f884f8a8c60aaa2) 1098 0 R (structcelprm_74585275b64c292b394b74f2f19a8048) 1099 0 R (structcelprm_756c8f0991a748ab47361b0215c4577b) 1105 0 R (structcelprm_7bb5e1ff4d73c884d73eeb0f8f2677d7) 1106 0 R (structcelprm_80ea2023638ededd2760cc9a260c456b) 1104 0 R (structcelprm_b034f85dc785113c396c9864cdddfe52) 1100 0 R (structcelprm_be1991f17c0ecb857d5bd30a6a689b84) 1103 0 R (structfitskey) 1020 0 R (structfitskey_413484cd565be07b4adc75ed53c4ace7) 1203 0 R (structfitskey_42413fd1f1f3117a4bc4c0599c2c3889) 1197 0 R (structfitskey_43de42050c7e0232c9f7c5a28bfede4b) 1187 0 R (structfitskey_48b4ff24100b6ada4fd184d5c3d55eec) 1194 0 R (structfitskey_4fe936ed7df47a073c049f4fe1528ba2) 1207 0 R (structfitskey_68ab074cc13a9e0be1583ee93aa0db6b) 1201 0 R (structfitskey_88e62afbb23808ae484b8734bb1685b9) 1198 0 R (structfitskey_935a63ff3aa2c0403ed8eee1a94662e7) 1192 0 R (structfitskey_a914a7430a2746de8ceb641321842784) 1205 0 R (structfitskey_aa0b63820fb73086d2f55ea9687d8126) 1204 0 R (structfitskey_d50ff3c9166c43e1fe0542b18a216ee1) 1206 0 R (structfitskey_dbc83643fe92fd44408a6d62dbaf87b1) 1196 0 R (structfitskey_e6f81da89b09d92db5258191a1a9354b) 1202 0 R (structfitskey_f1a8fb88bc5d4ba60f9f12d0885c360e) 1200 0 R (structfitskey_f5bd77eb6d318c562bfe650f6784eb5f) 1190 0 R (structfitskeyid) 1021 0 R (structfitskeyid_8c8c5a6be67ef57333e80e71f320b62e) 1267 0 R (structfitskeyid_9c19a56e7a92c1728bebd92e5370b9c7) 1264 0 R (structfitskeyid_b20aa3220d9994d02a1791e35dc91a56) 1266 0 R (structlinprm) 1022 0 R (structlinprm_091103ceb860eeed1a280effa0df28df) 1310 0 R (structlinprm_162762d02eaade6a53d63d70b8827caa) 1300 0 R (structlinprm_28a705f744a32cd05dd3aa86ca58998b) 1302 0 R (structlinprm_2975830d4214bb6b35cb1ca922875057) 1305 0 R (structlinprm_3691ff3f40a0ba087637d30ffc87e6d0) 1298 0 R (structlinprm_4c40bec32ec40035b8c1ef13db652270) 1299 0 R (structlinprm_596f68ff17fce142f36530d72dd838c4) 1306 0 R (structlinprm_5ac85757a7a46247e353a089374eb128) 1312 0 R (structlinprm_5bb0b2b2ce1f160a8a70f6437a893eea) 1296 0 R (structlinprm_5ef7cce6307f640aca1080d0d5ad9ba1) 1307 0 R (structlinprm_7036b8527bc8b220ad8a863442631f48) 1311 0 R (structlinprm_7f40c88135117b07a7767082ef24aba9) 1304 0 R (structlinprm_b73e780d0792b3570fcf2cf55651f22c) 1309 0 R (structlinprm_b7a8cacb1454446f9b5a521703fcca75) 1313 0 R (structlinprm_e281f0f7ebeaf5038cc13c13946641b1) 1297 0 R (structlinprm_eaaf26fd243da58fee173b075bed1de7) 1301 0 R (structlinprm_eefcacedf2989970f0df2c246d84bfb7) 1308 0 R (structlinprm_f0a5cac7b1d2d3a0feb6905c05b122c2) 1303 0 R (structprjprm) 1023 0 R (structprjprm_164706f09314c493c7e9d2c7325f8372) 1393 0 R (structprjprm_30e78bb110dc7a8ad0303370ce20762c) 1394 0 R (structprjprm_36fa82794133f84373606b1f692ce8c4) 1395 0 R (structprjprm_3894c2e551929b29adce50cd637fa351) 1141 0 R (structprjprm_3b40a2df3b436c4ffcf5be6814993278) 1396 0 R (structprjprm_46d6928a9026e7b3376dcf0d3f91db64) 1142 0 R (structprjprm_4f3c364f16d0b6498d7e11e6bb67239c) 1140 0 R (structprjprm_62e88bd3c9e02f38193a800035b83918) 1391 0 R (structprjprm_699ad609ff7c1935d8fb6a457a5b8164) 1143 0 R (structprjprm_ab36c6218a33025ac4c5025de7c67d42) 1398 0 R (structprjprm_ae2c61d85c72e87f4b2b77a14c8eb316) 1392 0 R (structprjprm_b165b11d417700de0a4187f133050a2b) 1384 0 R (structprjprm_b3e207e26d1c9db06cedba2cf4460340) 1388 0 R (structprjprm_b8dd3d8b1e462a2b261fc9e304885943) 1383 0 R (structprjprm_bcd2a3ee9f61b930d23bf741cea63bf3) 1386 0 R (structprjprm_d304d66b3f3aa64fe9c7251d3c420d02) 1382 0 R (structprjprm_d7a41e3d03cb739c2a9aa1f8aabf54f9) 1389 0 R (structprjprm_e634b0747fe55f77e65b6909c94227d9) 1390 0 R (structprjprm_e699a5fb02198777343057972e1452d0) 1400 0 R (structprjprm_e91fa3ff034b1c6de3ec98d8fb9e0ab1) 1144 0 R (structprjprm_eef644ffeafea16e82b2b995a470a345) 1399 0 R (structprjprm_f0fcebbc8155f0b1ee868e64a2ed9ac3) 1385 0 R (structprjprm_fb805c40a4d37c195074c1305874d615) 1397 0 R (structprjprm_fecdd175932cbf29fcfac575b1a5cb9b) 1387 0 R (structpscard) 1024 0 R (structpscard_37a06c885cf73736f2eb5e78bd1034a1) 1457 0 R (structpscard_71912f084bc3cadeb0758756a723071a) 1459 0 R (structpscard_9986f2ace84978f6cc543224b57592c9) 1461 0 R (structpvcard) 1025 0 R (structpvcard_5c97562bbadb55b8a2db59d9c7878059) 1472 0 R (structpvcard_88fa516543184eaffe6bd2c57946d9a7) 1470 0 R (structpvcard_f011f1972d6d345540f36a5c08a30d1f) 1471 0 R (structs) 787 0 R (structspcprm) 1026 0 R (structspcprm_20db4194170d78054908acf94b41d9d9) 1512 0 R (structspcprm_2c5c2d97e6c5f617272834b1516c84de) 1503 0 R (structspcprm_387d74de3215763d7e22c222b19a2c44) 1501 0 R (structspcprm_4dbc8c7064ae790483017b6c81e7ded2) 1505 0 R (structspcprm_55316470e5591401576ba3c5c384df0b) 1511 0 R (structspcprm_5f9a48a52144f8ced93baaffc107a3a6) 1502 0 R (structspcprm_6727d3a30592e54c7361e0434a795832) 1515 0 R (structspcprm_6d4124d4db8f7addcbfee99a8634522e) 1510 0 R (structspcprm_74433ae0e7e1ec426777bafb402b50c4) 1504 0 R (structspcprm_844792d006c308f465ce8ca593a37df3) 1509 0 R (structspcprm_8ef0c963f1b0ee957f3403da7559a81c) 1507 0 R (structspcprm_dd01b70b4a074a7bdccff378ab61a948) 1513 0 R (structspcprm_e11db8d7ff8b605eed87298a32fd094d) 1506 0 R (structspcprm_ec5d37c00d382a84a090d4f52d9a4346) 1508 0 R (structspcprm_fb6a33994ad13f402efb68d20a97eee1) 1514 0 R (structspcprm_feeb5f4056f271fd37291a712a7b6791) 1498 0 R (structspxprm) 1027 0 R (structspxprm_1d7633da24d461d6f791e003be2a508a) 1646 0 R (structspxprm_1d7fd26e54e3b253a9e26163445cbfc8) 1617 0 R (structspxprm_1f9bd735b5ffa618aa0713616a3b2b87) 1629 0 R (structspxprm_203c7de3b62de030e721e99cc0a5799b) 1638 0 R (structspxprm_25de138f15027a948887f59f79b59d91) 1634 0 R (structspxprm_2c20a26fe559feacc85e6e76c31bbbc3) 1609 0 R (structspxprm_2d4ca3a63bb8871faec7928c8f713484) 1625 0 R (structspxprm_307491e5045c959ed5212c54b6e300e9) 1636 0 R (structspxprm_34e6a4ba58cd67ef619ab48a58c8b808) 1627 0 R (structspxprm_41ee038d00742dcf8cae9b6ed45a699b) 1615 0 R (structspxprm_51aa1b37a464c53a5c07a9a407c4b96c) 1620 0 R (structspxprm_533847a7e77e2bba8ce886289d31abdb) 1607 0 R (structspxprm_5ab73474c2a6e92885c805cc017f6fbe) 1645 0 R (structspxprm_5f4248299fb8a02ff1df6ed3d1baaa1b) 1612 0 R (structspxprm_6300648f1270fbd6f45fefaac054db70) 1635 0 R (structspxprm_678577f6866727419716361586fe34bb) 1623 0 R (structspxprm_6d41ec682a058f4028032bf6934f7fc0) 1621 0 R (structspxprm_709e6f9fd2c706705a019d865280526f) 1637 0 R (structspxprm_75c591192f69d3e284d037d0216c2179) 1642 0 R (structspxprm_78d8a2235f18250cfa97a32625ab72a0) 1641 0 R (structspxprm_7ba88553a468a9ef696c0c1eeda6864f) 1616 0 R (structspxprm_7e1e561ce26f9be86978783bbd0dd496) 1644 0 R (structspxprm_84d43f663df39a476b33a9516f3662eb) 1639 0 R (structspxprm_90656bb22c7fdb8c750ee5a16745334c) 1631 0 R (structspxprm_968cf3d8e4b0d082c6d617f5a38344f7) 1618 0 R (structspxprm_9c60b90b7911b9846b353991dbf38084) 1628 0 R (structspxprm_9cab306f378116a9b9388bd215a98c0b) 1630 0 R (structspxprm_a37e50cd66795673d6bd43883a1be540) 1614 0 R (structspxprm_a419711bf0079fff37d4adbae3278f5c) 1624 0 R (structspxprm_a6ef9cc07973932f19c48062199e6689) 1632 0 R (structspxprm_a75c986198c4673e2caa30bd4ac73a30) 1622 0 R (structspxprm_b232cb470b7f96330512dea46791644e) 1648 0 R (structspxprm_b67c62285ad58f5f0c1a88cb15ac3408) 1613 0 R (structspxprm_c0096d466fedc5ec61948044af06551d) 1626 0 R (structspxprm_c8f016fe8e911c4ffbedde63318bb3db) 1649 0 R (structspxprm_c9e44005ceadafb8158df81fe022f46e) 1633 0 R (structspxprm_cc8a46737906be2cee7cba0b2aa09d87) 1647 0 R (structspxprm_cfdb74852a20099c1cdc3b2cc8faa03b) 1643 0 R (structspxprm_d3a5b851397a50e8644aeda10b184776) 1608 0 R (structspxprm_e83f0b38ecd0b7b7b6afb6eb42a61fd4) 1610 0 R (structspxprm_ef53f8244101a4229518b25b08143d18) 1619 0 R (structspxprm_f252fd0c875bfe2dc99c56617ae2faa8) 1640 0 R (structspxprm_f2a797bbae7610552aa9adfe75118908) 1611 0 R (structtabprm) 1028 0 R (structtabprm_0777c3de4601874221031a8ad37eff95) 1735 0 R (structtabprm_1ce970a854c9976d8b3e4e26df102b3b) 1779 0 R (structtabprm_1ef3d0af652bb59fb838a6b01bb133e2) 1731 0 R (structtabprm_27a7b0b12492e1b5f19242ec0eff8e08) 1727 0 R (structtabprm_29505cdf78fb12ca5951295fc16f4819) 1730 0 R (structtabprm_36adcba673ae8ede86b80f7e5111e0ec) 1774 0 R (structtabprm_3df12930fa5f38dcfc71aece8aed816c) 1771 0 R (structtabprm_4263d73c71a9a5e77643f572c483b7ab) 1734 0 R (structtabprm_43276034ba8e0954a6e2632117cd0afd) 1780 0 R (structtabprm_48cbe51ee26f0615036308fe72768403) 1737 0 R (structtabprm_5c62c8fd3dc6e9a3c928be9a1ed81ca1) 1776 0 R (structtabprm_64b8a2eaba4116cc647a435108269be3) 1728 0 R (structtabprm_71057a73168d71019b0caaa203fe5a05) 1775 0 R (structtabprm_77130658a6e330e0edba348d1dc7edf2) 1769 0 R (structtabprm_8572ca79676edfe06b3d1df00f93384b) 1772 0 R (structtabprm_9d2c36c4cfb17532ba5f08cbd90a5785) 1777 0 R (structtabprm_ade738f7269d71d34fdf3d52f1c61d88) 1770 0 R (structtabprm_bf7f932bcefad1f0e371167971018965) 1778 0 R (structtabprm_c05f0ad36debbabf441ca8d8aac59a96) 1781 0 R (structtabprm_cee8b63d1691f1f531a1bb4854c6bf4c) 1733 0 R (structtabprm_dc7e170dba47f4e6d40afabfdaecfddd) 1736 0 R (structtabprm_e19ca756ab2190f5d5ced59ad0a1a4bc) 1773 0 R (structtabprm_f00d4a4e089737a799fb91e1a68040dc) 1729 0 R (structtabprm_fa6969fd752bb4e3823e8facf86bbd60) 1732 0 R (structwcserr) 1029 0 R (structwcserr_210814c32ace19b9d09e4774e94a3c3c) 1847 0 R (structwcserr_278b3daecfc93a28c31750e6a6dc3718) 1850 0 R (structwcserr_311c9994c1d3793b2c98d706987bcd09) 1849 0 R (structwcserr_417d725c2e5615c3fb73cc210e0ccff2) 1845 0 R (structwcserr_cf8ea013ae1dc84ed25d5ace5a0a7000) 1851 0 R (structwcsprm) 1030 0 R (structwcsprm_042875def8cab8354c5b2c40ab9fa374) 2022 0 R (structwcsprm_04fbd6ed1b338e225f2291523e64be2c) 1907 0 R (structwcsprm_0730c37f09502eb364f4e7d7addb8ab8) 1985 0 R (structwcsprm_08098820949433d1336841d32d0b62b5) 2002 0 R (structwcsprm_092c11d209ecdd16bb79858c68e4d582) 2026 0 R (structwcsprm_0936d10c2ac93d13d096b1711ac639a1) 1992 0 R (structwcsprm_0d15534535c7f9308c9daa2cceff29e7) 2027 0 R (structwcsprm_0e31f1eef036258c2957da9b985945dd) 1905 0 R (structwcsprm_13fab263ca03f35844fdaca289b7dfac) 2028 0 R (structwcsprm_15485177ea8bbacefc29a5a5cba98c8f) 1920 0 R (structwcsprm_164e3852bcd2dea8b5f73e1dff79ddf5) 2015 0 R (structwcsprm_2166fb650f937d8870711d8be5986b66) 1995 0 R (structwcsprm_292133b2b7143b969a3af6a3f2cf3709) 1998 0 R (structwcsprm_3224bd06f8f4d2d7d398533eb44a49e8) 2008 0 R (structwcsprm_3495a5b0ef529706ec9a0af5c3163d63) 1896 0 R (structwcsprm_35bff8de85e5a8892e1b68db69ca7a68) 1893 0 R (structwcsprm_42052d557bdef2c5640a6d19b6d9ed8b) 1909 0 R (structwcsprm_42e0ff2da3b0c1ca0a9509f787ed1951) 2017 0 R (structwcsprm_49eee6450b1a646d3fe01b8965a63af4) 1919 0 R (structwcsprm_4c89dafecd036e169f96cb84d53ace65) 1908 0 R (structwcsprm_4ed527b90d49e8365c1b727f7bec29c7) 2025 0 R (structwcsprm_5072893bd9beddb33967697d501acdce) 2018 0 R (structwcsprm_5444415c94c7ab0226788f5efe93221d) 2024 0 R (structwcsprm_5780880281f2f9d085d2e06919b7647a) 2013 0 R (structwcsprm_5b56e1b378a6ae9f8dfff5c364f0653c) 2000 0 R (structwcsprm_5d0b60efc55a61525b9beb26ead4859e) 1904 0 R (structwcsprm_5e04127eb71da6e1350467a7a6d236f5) 1902 0 R (structwcsprm_5ed753e401cda620a04adfb4ebfb8e0d) 2014 0 R (structwcsprm_603ef3ab7f3bc42cf8d8bf99b79b63ac) 2012 0 R (structwcsprm_65801f93622504672ee3faf8f2110e48) 1988 0 R (structwcsprm_6778d31ec5a2ee643dc5f0a8af630b03) 2016 0 R (structwcsprm_6a3fa7adc304567271c5cc0eda3ac986) 2021 0 R (structwcsprm_6a88e64207df5007151c2c25028ce3eb) 1987 0 R (structwcsprm_70cac2976524a5f0a6aeb2b3fcb95834) 1894 0 R (structwcsprm_7320fc64e7705cc7495eba07482b5c55) 1917 0 R (structwcsprm_7a0a1ce2432cef9377f70367ea1fd18c) 1898 0 R (structwcsprm_7a88af56c4c978c6d4213ae1f4bec87a) 2023 0 R (structwcsprm_8625c0a6ff99c754566c46c2372df801) 1997 0 R (structwcsprm_8715975565c8bbd0c562a32eee40fd20) 1993 0 R (structwcsprm_88b55f6c8d122f3ff63532de85698864) 1984 0 R (structwcsprm_8b3a65921acc0dabfa4efd19a003ea6e) 1913 0 R (structwcsprm_9063e8d0c956e9eae7f7d6f3608b9ed2) 1999 0 R (structwcsprm_912eed291f15134e8cfb8750acc6c4bc) 1906 0 R (structwcsprm_922f0f57b8c35cad3d01ceedeba01d4b) 1918 0 R (structwcsprm_94c26ce331cc876d63baeeada9820241) 1996 0 R (structwcsprm_9eac54f497e1244c8106dd3ebba12223) 1990 0 R (structwcsprm_9eca2fcc30058310d020181ae16bf256) 1910 0 R (structwcsprm_9ee8fb568ca75874bab00825b768f8ca) 1916 0 R (structwcsprm_9fd60ce9e6bc31df07ed02ce64b48be4) 1994 0 R (structwcsprm_a0ae3f3605566be2e85e51e5b52c3b52) 1899 0 R (structwcsprm_ad387ccbd7847672b5dc2223d9124120) 1922 0 R (structwcsprm_adad828f07e3affd1511e533b00da19f) 1895 0 R (structwcsprm_b253d36f0dc1716952285c6078622e66) 2007 0 R (structwcsprm_b63cdcf6ff8febd1b40d0e044ca7d7ef) 2006 0 R (structwcsprm_b7f7173e6d2b1b8028a3275bdd751e79) 2003 0 R (structwcsprm_b9729795155b8f37afd80784fb70068b) 2004 0 R (structwcsprm_c089e5d0e3191255ceaea7f8591b27ea) 1989 0 R (structwcsprm_c0cb013b1505fb7abd4167ac0db0e0aa) 1986 0 R (structwcsprm_c3c9c869bef4e4850dfd9762b33ce908) 1914 0 R (structwcsprm_c8391dd770637dbb841067996b7777ba) 2009 0 R (structwcsprm_ce7e0986c79d73bd3a0613034b71974f) 2030 0 R (structwcsprm_da1b98589c0127d34766b4c6b5d6cb41) 1903 0 R (structwcsprm_de355cdce054938cfa36e06ef9c51446) 1897 0 R (structwcsprm_de8495d3ca5047eeadba5934d0bb2708) 2005 0 R (structwcsprm_e09d5bf005e3bd7ee880353e8816ceb8) 2029 0 R (structwcsprm_e1f462606974e1324cd38f143eda691e) 1900 0 R (structwcsprm_e352318ce3202dab1b5db8b9ceec7703) 2001 0 R (structwcsprm_e6b40e2adeb31414871c7cae68619d63) 1921 0 R (structwcsprm_e7609283351ea46484690f873f8ea9c3) 1915 0 R (structwcsprm_e83952aec7c1ac76c090bc89bf4eeea7) 2010 0 R (structwcsprm_ee7f71c872491b25e1d1440e5dfa8153) 2020 0 R (structwcsprm_f124a4259475ea355ced38e73a05363a) 1912 0 R (structwcsprm_f1cb3e68560d1ac42c620cfe3900af95) 2019 0 R (structwcsprm_f300da5a94594a9769ab312bb56dde83) 1991 0 R (structwcsprm_f54ce939604be183231f0ee006e2f8ed) 2011 0 R (structwcsprm_f8f679749574250cb9ba09e1f05fab5d) 1901 0 R (structwcsprm_fd2f31d782b3becce4ca2f9b495ec0b1) 1911 0 R (structwtbarr) 1031 0 R (structwtbarr_10c8dba85b62e2794071dd50a41c4bb1) 2275 0 R (structwtbarr_1e88ad32570534a006e96cba721489b5) 2271 0 R (structwtbarr_24487eda7b17800f41bd4a452c6306d5) 2274 0 R (structwtbarr_2ff7c235353320c6dd98951484012ee7) 2277 0 R (structwtbarr_41c30234dbdf18ac094872cf39562172) 2280 0 R (structwtbarr_750832793167bbeebd1074e29844415d) 2276 0 R (structwtbarr_8743b84c99b4b5e7ab7bf0653507a180) 2270 0 R (structwtbarr_901403d05f985d4a1fbd2fdc9585bd50) 2279 0 R (structwtbarr_9f1fcad814aa3da08dfa75ede2a07deb) 2273 0 R (structwtbarr_f862b4f90b0406ed8dd0c240768d4bd3) 2278 0 R (structwtbarr_f8ea7b15992ab7a86be63ff83318be41) 2272 0 R (subsection.1.1) 10 0 R (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (subsubsection.6.9.5) 386 0 R (tab_8h) 1087 0 R (tab_8h_006d6e8cb373e0dc3e9ccf128adb9411) 1805 0 R (tab_8h_0f3501cc592c78e0f2cb9922466589f2) 4061 0 R (tab_8h_141c3365f0364c01237aeeb93ddb717e) 958 0 R (tab_8h_27460f165fb03a075a1c6c6a48f33c62) 954 0 R (tab_8h_49872082d67e357c5c68a633824133ae) 959 0 R (tab_8h_4abf39ca4cfc2ea073bffdbb98caa46d) 957 0 R (tab_8h_519e8e4503f7c41c0f99e8597171c97f) 1782 0 R (tab_8h_6b3768349e9a5e925aab24effddc584f) 4062 0 R (tab_8h_824d1e7c8fea5e5918a8555df39aa5b7) 953 0 R (tab_8h_87b3a2a84bab396a528af8382ce9ad04) 4060 0 R (tab_8h_8b57d9bacbabd2b516d77220cdb6167d) 952 0 R (tab_8h_9c80120944556169d230d4cd051d88cb) 4051 0 R (tab_8h_aded7db92aa2758198b33f35f5f18d6e) 1806 0 R (tab_8h_bb7920acdfb83179d3bac65035144c02) 1783 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed) 4052 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed09c02b9ffff721d3f2dd64c318d7c38b) 4056 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed1e503c059ddfe8f4aca37d335f7271f8) 4055 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed42a664a8df3b0a485f49eb0e7c8108cd) 4053 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2ed9d77712eeed3ab7d2bf25e5251c9451b) 4058 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2eda0705873598b9fa5bf3b9afbc598a6bc) 4054 0 R (tab_8h_bd68f3b717dcf0fcd0078b9a4204f2edc6f6b4c9eca2bd36b0bf2f89309f9297) 4057 0 R (tab_8h_bf96fe5488df6796ec2606b974f330fe) 955 0 R (tab_8h_e2ee098afabb7a7d225f930276ffb441) 956 0 R (tab_8h_e403ff0b740916989c7386728df001c8) 4059 0 R (testing) 792 0 R (threads) 791 0 R (vector) 790 0 R (wcs_8h) 1088 0 R (wcs_8h_0653c98b8a1bee5755740ae3f4854094) 4233 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f) 4290 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f03824b7b5c22e5f0cc91363eb695a804) 4300 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f08306533cf0c7555dad662e82e8a4a69) 4299 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f2904278d916c820236347783312a7ce0) 4294 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f37c8aa0aedc12c63df08f39cb7177ff7) 4304 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f598db0fcc4961aa3c5e0a296bec2b313) 4295 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f5c58d5530bc7577a70185376c15180af) 4293 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f5d662102c172495df1f9bb03cedd701d) 4301 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f71cb7eaa633d9e0f560555a016f1f007) 4297 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f832122bb304560f92df91e391d55948a) 4302 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f88e600163f719a759d3569bf1548109e) 4303 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25f8b87c21d4a2cab41d4eea0a95378fca8) 4291 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25fc51c733d8a719dd698f9e96e9a4fa83f) 4292 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25fdfa2a8cf8021827378091315b8e0a020) 4298 0 R (wcs_8h_158615aa1622d8feedd228795ff9a25ffe9ed842ea8f525c7b8fed2f60015dd9) 4296 0 R (wcs_8h_1bcf49cfe1ed1bb2bc4c930f98d808fa) 960 0 R (wcs_8h_22bbac394b025c4cfc7bd73b6d6e3962) 4236 0 R (wcs_8h_27d3dd209db3e76cf4c50f48c01ba986) 2212 0 R (wcs_8h_2afc8255fde0965dddaa374463666d45) 2061 0 R (wcs_8h_37c4884cf58baf25b2984ec3bccb80a5) 968 0 R (wcs_8h_3d64b57cec404114c75bd25a562e8053) 964 0 R (wcs_8h_42b2578d76ace7ca6114d82b7ae46a89) 2136 0 R (wcs_8h_465ef3c77aaf546324dae0692e6de7fe) 962 0 R (wcs_8h_4ab38bc642c4656f62c43acf84a849f1) 4305 0 R (wcs_8h_4b2dfca2e80fe80ba85dc830cd9c377b) 4238 0 R (wcs_8h_57975833fe0588eb7c7b6d79f13a7693) 4349 0 R (wcs_8h_5d377c202850ee0eaf44b3e989d0736e) 4235 0 R (wcs_8h_60673d05a3513659ac848a9cb3d0cb07) 2213 0 R (wcs_8h_6852f6dd2883c82296f1108b897d337e) 4240 0 R (wcs_8h_6ba6d2640572b12a11e3558fa75a01ed) 4239 0 R (wcs_8h_84a67c964e212bbf004c264b3ca70fee) 966 0 R (wcs_8h_864c99fef9f3eee29085ce42d0ee0d64) 4234 0 R (wcs_8h_8f5c31a6983b17abbe2fead61550d55c) 965 0 R (wcs_8h_8fe5dcd9927240dc0348b850ee662367) 4307 0 R (wcs_8h_b9885b02031ff7aa7b094f4a1edee2cd) 4237 0 R (wcs_8h_b9aeb8cf1afb1bfb22e989580d90fca8) 4306 0 R (wcs_8h_c55946dadc53ac592cb686275902ae7b) 4241 0 R (wcs_8h_cfbadc770489b6b5186b95eaa35467f1) 969 0 R (wcs_8h_d16bd8db875ee05b014429efdc1f3471) 961 0 R (wcs_8h_de3959355dc9d0987e7ccc4070795c38) 967 0 R (wcs_8h_e1738854472218541bda531653ef2709) 963 0 R (wcs_8h_e5cc3f5d249755583403cdf54d2ebb91) 1469 0 R (wcs_8h_e790c9ce6c9b7a4845cf1c3c97b1e97a) 2137 0 R (wcs_8h_f3f00b876c8212d43f32a51feeadaa81) 2214 0 R (wcserr_8h) 1089 0 R (wcserr_8h_1691b8bd184d40ca6fda255be078fa53) 1163 0 R (wcserr_8h_6585b9fc3a59b369e3336f3133dd1ca9) 4475 0 R (wcserr_8h_7b46d9cbaea3241d91e40d03a2725fd7) 4551 0 R (wcserr_8h_b0945d3588b604205b9c1b3d661a794f) 4553 0 R (wcserr_8h_cfa8a447539633296d50e67c7ab466c2) 4552 0 R (wcserr_8h_d53f2d5e6a70e53cb3decc6c7b42ad96) 4550 0 R (wcserr_8h_d970e4ae584d3052b7bec2f1afb4689d) 4554 0 R (wcsfix_8h) 1090 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183) 4642 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518315a9e5f9cbb559ef53018e9aade43e88) 4654 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251831e4cf4eeb3cd2f4d8c2c1f040aa62f6c) 4646 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518326d787caed068586fbef3d3c0fbce41f) 4649 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251833f4b7a9a303943f6c12ea51cce2240cf) 4652 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183421fc9b9a2aac54bc832b3c1180f8f07) 4648 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251835dd410d6f1a55543c4f7d0f82435eb40) 4650 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b2518381b5390b4f770515ae950d9e382b2885) 4651 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b251838553bf40509263e3c3a198810f83d26e) 4647 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183d6bf7801d043f41f67c54677d6cfcb75) 4653 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ec3fdc50ed9f4ca8d80d7ce7751ef0e3) 4643 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183ee9fbc64e56bb6d307d06d8ef8e8b244) 4644 0 R (wcsfix_8h_0399bbea1e28abad3259a8ea05b25183f574a836e251e8a0257da97580bb9354) 4645 0 R (wcsfix_8h_07281faacbec1df800a417bf157751d7) 4640 0 R (wcsfix_8h_0816c5f2354ee6c0044e11867d7558ea) 4637 0 R (wcsfix_8h_0ed13e54c3eacb9325afbae78ef33b61) 4641 0 R (wcsfix_8h_256ce6281894f65dd15396cc0994e875) 971 0 R (wcsfix_8h_25714f1558ecbee6c1b1fef0abf8ea7f) 4629 0 R (wcsfix_8h_3229b126ed844da0a2d4f7abff1de7d0) 970 0 R (wcsfix_8h_4d37e0274dff84649cba075b8761b3fa) 4639 0 R (wcsfix_8h_62298e0fb06332a282d9daab718a1286) 4655 0 R (wcsfix_8h_7181ebe5e9f0a4058642c56dc848bd5c) 4631 0 R (wcsfix_8h_77b614a15de67b42040c2be46cbfca1a) 4632 0 R (wcsfix_8h_883167275c4d3855ba453364db3d8d66) 4634 0 R (wcsfix_8h_89e1b5b4d2fa89af03f5d1143352b05f) 4630 0 R (wcsfix_8h_8f4a947e2605b35ffa92f08b113d60b2) 4633 0 R (wcsfix_8h_c1df72303f64e50d5e3cb320c126443b) 4636 0 R (wcsfix_8h_f011e4065b6179e19d2964bc9646b6af) 4638 0 R (wcsfix_8h_f1b99efe520fbd2d4bd0e5a35f87e186) 4635 0 R (wcsfix_8h_f23e7b02522c40fa5dfbf3d569348844) 4628 0 R (wcshdr_8h) 1091 0 R (wcshdr_8h_017f1e817bdb2114ba765e7a9ef73bac) 4839 0 R (wcshdr_8h_06cd9297f8315235ba1cf13d1cc115e1) 4947 0 R (wcshdr_8h_0b8372e555a2e2bcc63a11f3dc7a1bf6) 2060 0 R (wcshdr_8h_0b9b53e5cfd05653cbca75cf1aa8b2ed) 4837 0 R (wcshdr_8h_0e8eb873389e9c15bd6079a96c41ad60) 4889 0 R (wcshdr_8h_16e35904c64fe6b0aab144bd022c722f) 4945 0 R (wcshdr_8h_1b66d50d7f1927222a170bc88f9db51e) 4846 0 R (wcshdr_8h_1d506ef2ad493a963426e0732a6328ca) 4845 0 R (wcshdr_8h_222a5bd7659f3e1ea1a9ed21f54c50ef) 4899 0 R (wcshdr_8h_27465844aaeea0623133f8151ca4fd9b) 4946 0 R (wcshdr_8h_33d67fd81c52448aead9e09f32ba9cca) 4890 0 R (wcshdr_8h_3dea9d7548bdbc9a7cc8d0a04cdd46fb) 4843 0 R (wcshdr_8h_446914676e0b3f55ac6a080015a52b43) 4896 0 R (wcshdr_8h_54634ed49425e8842874e9e2b77899df) 4894 0 R (wcshdr_8h_5592649ee4c25e118559c6d283c51930) 4895 0 R (wcshdr_8h_5feeef18919b1cbb79729bbfa75976ec) 4840 0 R (wcshdr_8h_6174a483baad91dae3fa1c30b0e4cde5) 4944 0 R (wcshdr_8h_63eb554461f3df5dc64a25f71891b9f1) 4842 0 R (wcshdr_8h_6779d48001260a0011b3dcffdcb64cb6) 4897 0 R (wcshdr_8h_6dd857f7b61a5b349cc8af5a4b6d8a1c) 2211 0 R (wcshdr_8h_7bf13ab87b23ecdbbb4b4847d4944070) 4893 0 R (wcshdr_8h_92a0007f672a5498ab1b6ccc6a4a002b) 4836 0 R (wcshdr_8h_95325b53ebd8d7d0a371a65b27b3d04a) 4901 0 R (wcshdr_8h_96b787f84207faa42599e50e6e078d21) 4898 0 R (wcshdr_8h_9a70ad2a355a9736711d8017535bf72b) 4902 0 R (wcshdr_8h_a7c5021293b0db20ece0e82c3702a159) 4892 0 R (wcshdr_8h_ace96fb8c1499616dd1333af3e8340b0) 4900 0 R (wcshdr_8h_b65e929c7d525d735ae240046d4f0d9c) 4891 0 R (wcshdr_8h_c75623ee805ab7d43b0bba684c719a60) 2062 0 R (wcshdr_8h_dc053d80a9c4da454a52eed34e123633) 2489 0 R (wcshdr_8h_df57a609a5c3f7288452cce86210260e) 4888 0 R (wcshdr_8h_dff9a101a373a634f3a1baab29e92534) 4847 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae) 4937 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0a858638ef0dd0dc9b529f98b14cc46f) 4940 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae0c926e2cc98a8c39585aa0e212423459) 4941 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae218297c7a2a4d405c251e9ed239e615b) 4942 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdae99dd31e274ec97542e650ff89357cded) 4939 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaebfe69dd9e4c486f856a5dc44b02e79a1) 4938 0 R (wcshdr_8h_e2dfc36c150d3a16a5e83131d32ecdaeeae58359638c0c631e6c7c573a343508) 4943 0 R (wcshdr_8h_e8a768f544fe3ae81436b73dca3099fb) 4848 0 R (wcshdr_8h_ee4fe41274945f9e34009d2eb309c922) 4844 0 R (wcshdr_8h_fc0a5a6b475a8e50b77d4be099790985) 4841 0 R (wcshdr_8h_fd6d52bed79bd48230f651ac48eb5ca6) 4838 0 R (wcslib_8h) 1092 0 R (wcsmath_8h) 1093 0 R (wcsmath_8h_01d44d9782a85952a48ed76bf105351b) 5356 0 R (wcsmath_8h_0a3cc1d5cde549e408f825ddd7f5853d) 5353 0 R (wcsmath_8h_2dc3870be25a19efa2940150507aaf71) 5357 0 R (wcsmath_8h_39c663074332446065723e9be9350139) 5354 0 R (wcsmath_8h_514396dd60fa0621c83072091fb2a0cd) 5355 0 R (wcsmath_8h_598a3330b3c21701223ee0ca14316eca) 5351 0 R (wcsmath_8h_dea646bef24ac88b544d7094860127ff) 5358 0 R (wcsprintf_8h) 1094 0 R (wcsprintf_8h_46950abaf5a27347da8160741f98f973) 2429 0 R (wcsprintf_8h_5c6f91916a0b8f8c2d85274c0ba130f6) 5388 0 R (wcsprintf_8h_7af03fe3aabc25673cc012adc1e3f8cc) 5387 0 R (wcsprintf_8h_b8a869f35385b17a26cb5070ab63e5d5) 5389 0 R (wcstrig_8h) 1095 0 R (wcstrig_8h_2b83ceb814c90ebfa042a26d884ac159) 5439 0 R (wcstrig_8h_42ae26d339f06986ca7f12ba02abcd32) 5438 0 R (wcstrig_8h_666bbac788099d5bc6d88e685f2713a3) 5441 0 R (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 (wcsunits_8h) 1096 0 R (wcsunits_8h_0967644d30d7f98f21b6bb0e68a637c0) 5505 0 R (wcsunits_8h_0e7fd01137ef47ca728c19e8870d1ab5) 5574 0 R (wcsunits_8h_11a1284e63c7515fd0240ca8f85fc111) 5509 0 R (wcsunits_8h_25ba0f0129e88c6e7c74d4562cf796cd) 5572 0 R (wcsunits_8h_27df51b1593f3642bfd9833e71c73a34) 5512 0 R (wcsunits_8h_2cf5fc976d2663fed07f1f837245f36b) 5514 0 R (wcsunits_8h_347b88663166b66404cbb2f8aac211bb) 5508 0 R (wcsunits_8h_45b2d15aa5504b7e7e8b7b345d090f32) 5482 0 R (wcsunits_8h_47aa4e0a54f11d7ed5146c00906a3984) 5571 0 R (wcsunits_8h_560462cb2a7fa7eae6b4f325c85e7911) 2101 0 R (wcsunits_8h_59e3354bb9908a4841aa478f2dbd3973) 5507 0 R (wcsunits_8h_69241e398126a72e5d095ed3aff156c3) 5481 0 R (wcsunits_8h_6ef9e3ba449b38275c422e454abe3601) 5480 0 R (wcsunits_8h_7332ce1c3c715011599d4b9d13e7b760) 5511 0 R (wcsunits_8h_7daf2b3a5c7e96f2823bca916554cc4b) 5517 0 R (wcsunits_8h_807ef7c93e34207776303badf177fa41) 5503 0 R (wcsunits_8h_8217718f8c515151dc33ceba922b39ba) 5575 0 R (wcsunits_8h_84fdca1d2c8647a2f33a760578de62c6) 5510 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 (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 (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3efe9b1b29365d17b25452562f770d44975) 5568 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3eff6fc9ca59d14a8889809c050c01154ff) 5570 0 R (wcsunits_8h_864e6b966575a8c42eb333ba9f14a3eff7a5cd4ed90aeef7598875cb5bf57a11) 5561 0 R (wcsunits_8h_8bb521a40223ec7358f85d719834ad7f) 5504 0 R (wcsunits_8h_8f84e63b1fa2003f3438e7cd21231b92) 5506 0 R (wcsunits_8h_946bca82ae3fb279ad3d86dbc793be07) 5516 0 R (wcsunits_8h_b622892a80194a6a432510665156e4fb) 5515 0 R (wcsunits_8h_cd49d777bc04d68cdfdd29f5b6a7252b) 5577 0 R (wcsunits_8h_ce657c3f971b4ac9004a2639d142f636) 5513 0 R (wcsunits_8h_ec5892437858120d456503fe38f4031b) 5576 0 R (wcsunits_8h_ef5d64e333f758458b1edaa617911513) 2102 0 R (wcsunits_8h_f2c6e7c95fd6741183b2b74dd24d59ce) 5573 0 R (wcsutil_8h) 1097 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 (wcsutil_8h_b32722081f8cda184d7ada6d734c637c) 5724 0 R (wcsutil_8h_fe7f963c2038673015bbce204c4a8171) 5723 0 R] /Limits [(Doc-Start) (wcsutil_8h_fe7f963c2038673015bbce204c4a8171)] >> endobj 7324 0 obj << /Kids [7323 0 R] >> endobj 7325 0 obj << /Dests 7324 0 R >> endobj 7326 0 obj << /Type /Catalog /Pages 7321 0 R /Outlines 7322 0 R /Names 7325 0 R /PageMode /UseOutlines /OpenAction 589 0 R >> endobj 7327 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.305)/Keywords() /CreationDate (D:20111004190252+11'00') /PTEX.Fullbanner (This is pdfeTeX using libpoppler, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5) kpathsea version 3.5.5) >> endobj xref 0 7328 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000015 00000 n 0000067985 00000 n 0001641810 00000 n 0000000060 00000 n 0000000243 00000 n 0000068154 00000 n 0001641738 00000 n 0000000293 00000 n 0000000360 00000 n 0000068267 00000 n 0001641665 00000 n 0000000411 00000 n 0000000483 00000 n 0000076710 00000 n 0001641577 00000 n 0000000529 00000 n 0000000634 00000 n 0000099797 00000 n 0001641451 00000 n 0000000680 00000 n 0000000813 00000 n 0000099853 00000 n 0001641390 00000 n 0000000864 00000 n 0000000969 00000 n 0000099909 00000 n 0001641264 00000 n 0000001015 00000 n 0000001095 00000 n 0000099965 00000 n 0001641203 00000 n 0000001146 00000 n 0000001221 00000 n 0000108661 00000 n 0001641074 00000 n 0000001267 00000 n 0000001440 00000 n 0000108777 00000 n 0001640963 00000 n 0000001491 00000 n 0000001639 00000 n 0000108893 00000 n 0001640889 00000 n 0000001695 00000 n 0000001825 00000 n 0000115442 00000 n 0001640815 00000 n 0000001881 00000 n 0000002006 00000 n 0000120826 00000 n 0001640691 00000 n 0000002057 00000 n 0000002210 00000 n 0000127476 00000 n 0001640617 00000 n 0000002266 00000 n 0000002396 00000 n 0000127533 00000 n 0001640543 00000 n 0000002452 00000 n 0000002577 00000 n 0000143078 00000 n 0001640419 00000 n 0000002628 00000 n 0000002791 00000 n 0000143194 00000 n 0001640345 00000 n 0000002847 00000 n 0000002977 00000 n 0000143251 00000 n 0001640271 00000 n 0000003033 00000 n 0000003158 00000 n 0000150479 00000 n 0001640147 00000 n 0000003209 00000 n 0000003357 00000 n 0000150595 00000 n 0001640073 00000 n 0000003413 00000 n 0000003543 00000 n 0000154627 00000 n 0001639999 00000 n 0000003599 00000 n 0000003724 00000 n 0000166676 00000 n 0001639874 00000 n 0000003775 00000 n 0000003923 00000 n 0000166792 00000 n 0001639800 00000 n 0000003979 00000 n 0000004109 00000 n 0000171426 00000 n 0001639725 00000 n 0000004165 00000 n 0000004291 00000 n 0000182192 00000 n 0001639595 00000 n 0000004343 00000 n 0000004492 00000 n 0000182309 00000 n 0001639516 00000 n 0000004549 00000 n 0000004680 00000 n 0000182366 00000 n 0001639437 00000 n 0000004737 00000 n 0000004863 00000 n 0000182850 00000 n 0001639306 00000 n 0000004915 00000 n 0000005064 00000 n 0000182965 00000 n 0001639227 00000 n 0000005121 00000 n 0000005252 00000 n 0000189004 00000 n 0001639148 00000 n 0000005309 00000 n 0000005435 00000 n 0000189489 00000 n 0001639017 00000 n 0000005487 00000 n 0000005636 00000 n 0000189604 00000 n 0001638938 00000 n 0000005693 00000 n 0000005824 00000 n 0000189662 00000 n 0001638859 00000 n 0000005881 00000 n 0000006007 00000 n 0000210402 00000 n 0001638728 00000 n 0000006059 00000 n 0000006208 00000 n 0000213067 00000 n 0001638649 00000 n 0000006265 00000 n 0000006396 00000 n 0000213125 00000 n 0001638570 00000 n 0000006453 00000 n 0000006579 00000 n 0000226095 00000 n 0001638439 00000 n 0000006632 00000 n 0000006781 00000 n 0000234262 00000 n 0001638360 00000 n 0000006839 00000 n 0000006970 00000 n 0000234320 00000 n 0001638281 00000 n 0000007028 00000 n 0000007154 00000 n 0000249539 00000 n 0001638150 00000 n 0000007207 00000 n 0000007356 00000 n 0000249656 00000 n 0001638071 00000 n 0000007414 00000 n 0000007545 00000 n 0000249714 00000 n 0001637992 00000 n 0000007603 00000 n 0000007729 00000 n 0000259478 00000 n 0001637861 00000 n 0000007782 00000 n 0000007931 00000 n 0000281912 00000 n 0001637782 00000 n 0000007989 00000 n 0000008120 00000 n 0000281970 00000 n 0001637703 00000 n 0000008178 00000 n 0000008304 00000 n 0000332590 00000 n 0001637586 00000 n 0000008357 00000 n 0000008506 00000 n 0000336531 00000 n 0001637507 00000 n 0000008564 00000 n 0000008695 00000 n 0000336589 00000 n 0001637428 00000 n 0000008753 00000 n 0000008879 00000 n 0000343981 00000 n 0001637309 00000 n 0000008926 00000 n 0000009047 00000 n 0000344098 00000 n 0001637191 00000 n 0000009099 00000 n 0000009233 00000 n 0000354268 00000 n 0001637112 00000 n 0000009290 00000 n 0000009421 00000 n 0000358106 00000 n 0001637019 00000 n 0000009478 00000 n 0000009609 00000 n 0000358871 00000 n 0001636926 00000 n 0000009666 00000 n 0000009850 00000 n 0000363990 00000 n 0001636833 00000 n 0000009907 00000 n 0000010048 00000 n 0000372244 00000 n 0001636754 00000 n 0000010105 00000 n 0000010246 00000 n 0000372478 00000 n 0001636622 00000 n 0000010298 00000 n 0000010452 00000 n 0000379171 00000 n 0001636543 00000 n 0000010509 00000 n 0000010640 00000 n 0000382767 00000 n 0001636450 00000 n 0000010697 00000 n 0000010828 00000 n 0000383790 00000 n 0001636357 00000 n 0000010885 00000 n 0000011021 00000 n 0000389481 00000 n 0001636264 00000 n 0000011078 00000 n 0000011219 00000 n 0000394504 00000 n 0001636185 00000 n 0000011276 00000 n 0000011417 00000 n 0000394743 00000 n 0001636053 00000 n 0000011469 00000 n 0000011633 00000 n 0000402005 00000 n 0001635974 00000 n 0000011690 00000 n 0000011821 00000 n 0000402063 00000 n 0001635895 00000 n 0000011878 00000 n 0000012019 00000 n 0000409537 00000 n 0001635763 00000 n 0000012071 00000 n 0000012205 00000 n 0000420764 00000 n 0001635684 00000 n 0000012262 00000 n 0000012393 00000 n 0000425568 00000 n 0001635591 00000 n 0000012450 00000 n 0000012581 00000 n 0000432500 00000 n 0001635498 00000 n 0000012638 00000 n 0000012822 00000 n 0000432930 00000 n 0001635405 00000 n 0000012879 00000 n 0000013020 00000 n 0000450278 00000 n 0001635326 00000 n 0000013077 00000 n 0000013218 00000 n 0000450516 00000 n 0001635194 00000 n 0000013270 00000 n 0000013404 00000 n 0000454053 00000 n 0001635115 00000 n 0000013461 00000 n 0000013592 00000 n 0000454111 00000 n 0001635022 00000 n 0000013649 00000 n 0000013833 00000 n 0000454607 00000 n 0001634929 00000 n 0000013890 00000 n 0000014031 00000 n 0000457389 00000 n 0001634850 00000 n 0000014088 00000 n 0000014229 00000 n 0000457628 00000 n 0001634718 00000 n 0000014281 00000 n 0000014415 00000 n 0000512316 00000 n 0001634639 00000 n 0000014472 00000 n 0000014603 00000 n 0000538316 00000 n 0001634546 00000 n 0000014660 00000 n 0000014791 00000 n 0000543186 00000 n 0001634453 00000 n 0000014848 00000 n 0000015032 00000 n 0000549091 00000 n 0001634360 00000 n 0000015089 00000 n 0000015230 00000 n 0000608087 00000 n 0001634281 00000 n 0000015287 00000 n 0000015428 00000 n 0000613341 00000 n 0001634149 00000 n 0000015480 00000 n 0000015614 00000 n 0000632091 00000 n 0001634070 00000 n 0000015671 00000 n 0000015802 00000 n 0000641151 00000 n 0001633977 00000 n 0000015859 00000 n 0000015990 00000 n 0000645261 00000 n 0001633884 00000 n 0000016047 00000 n 0000016231 00000 n 0000645757 00000 n 0001633791 00000 n 0000016288 00000 n 0000016429 00000 n 0000672722 00000 n 0001633712 00000 n 0000016486 00000 n 0000016627 00000 n 0000677586 00000 n 0001633580 00000 n 0000016679 00000 n 0000016813 00000 n 0000677703 00000 n 0001633501 00000 n 0000016870 00000 n 0000017001 00000 n 0000677761 00000 n 0001633422 00000 n 0000017058 00000 n 0000017199 00000 n 0000692315 00000 n 0001633290 00000 n 0000017251 00000 n 0000017385 00000 n 0000704429 00000 n 0001633211 00000 n 0000017442 00000 n 0000017573 00000 n 0000710156 00000 n 0001633118 00000 n 0000017630 00000 n 0000017761 00000 n 0000717163 00000 n 0001633025 00000 n 0000017818 00000 n 0000018002 00000 n 0000717659 00000 n 0001632932 00000 n 0000018059 00000 n 0000018200 00000 n 0000733032 00000 n 0001632853 00000 n 0000018257 00000 n 0000018398 00000 n 0000733267 00000 n 0001632721 00000 n 0000018451 00000 n 0000018585 00000 n 0000752083 00000 n 0001632642 00000 n 0000018643 00000 n 0000018774 00000 n 0000752141 00000 n 0001632549 00000 n 0000018832 00000 n 0000018963 00000 n 0000756964 00000 n 0001632456 00000 n 0000019021 00000 n 0000019205 00000 n 0000764153 00000 n 0001632363 00000 n 0000019263 00000 n 0000019404 00000 n 0000779883 00000 n 0001632284 00000 n 0000019462 00000 n 0000019603 00000 n 0000780121 00000 n 0001632152 00000 n 0000019656 00000 n 0000019790 00000 n 0000811883 00000 n 0001632073 00000 n 0000019848 00000 n 0000019979 00000 n 0000817278 00000 n 0001631980 00000 n 0000020037 00000 n 0000020168 00000 n 0000826284 00000 n 0001631887 00000 n 0000020226 00000 n 0000020410 00000 n 0000827355 00000 n 0001631794 00000 n 0000020468 00000 n 0000020609 00000 n 0000873159 00000 n 0001631715 00000 n 0000020667 00000 n 0000020808 00000 n 0000873397 00000 n 0001631583 00000 n 0000020861 00000 n 0000021010 00000 n 0000873631 00000 n 0001631504 00000 n 0000021068 00000 n 0000021199 00000 n 0000877499 00000 n 0001631411 00000 n 0000021257 00000 n 0000021388 00000 n 0000877911 00000 n 0001631332 00000 n 0000021446 00000 n 0000021587 00000 n 0000893482 00000 n 0001631200 00000 n 0000021640 00000 n 0000021789 00000 n 0000903430 00000 n 0001631121 00000 n 0000021847 00000 n 0000021978 00000 n 0000910964 00000 n 0001631028 00000 n 0000022036 00000 n 0000022167 00000 n 0000917058 00000 n 0001630935 00000 n 0000022225 00000 n 0000022409 00000 n 0000917997 00000 n 0001630842 00000 n 0000022467 00000 n 0000022608 00000 n 0000944317 00000 n 0001630763 00000 n 0000022666 00000 n 0000022807 00000 n 0000944555 00000 n 0001630631 00000 n 0000022860 00000 n 0000023009 00000 n 0000963876 00000 n 0001630552 00000 n 0000023067 00000 n 0000023198 00000 n 0000975907 00000 n 0001630459 00000 n 0000023256 00000 n 0000023387 00000 n 0000998705 00000 n 0001630366 00000 n 0000023445 00000 n 0000023629 00000 n 0001004941 00000 n 0001630273 00000 n 0000023687 00000 n 0000023828 00000 n 0001087766 00000 n 0001630194 00000 n 0000023886 00000 n 0000024027 00000 n 0001088006 00000 n 0001630062 00000 n 0000024080 00000 n 0000024229 00000 n 0001091273 00000 n 0001629997 00000 n 0000024287 00000 n 0000024418 00000 n 0001091390 00000 n 0001629865 00000 n 0000024471 00000 n 0000024625 00000 n 0001091507 00000 n 0001629786 00000 n 0000024683 00000 n 0000024814 00000 n 0001091565 00000 n 0001629707 00000 n 0000024872 00000 n 0000025003 00000 n 0001098053 00000 n 0001629575 00000 n 0000025056 00000 n 0000025220 00000 n 0001098229 00000 n 0001629496 00000 n 0000025278 00000 n 0000025409 00000 n 0001104546 00000 n 0001629403 00000 n 0000025467 00000 n 0000025598 00000 n 0001104722 00000 n 0001629324 00000 n 0000025656 00000 n 0000025797 00000 n 0001109823 00000 n 0001629192 00000 n 0000025850 00000 n 0000026004 00000 n 0001114447 00000 n 0001629113 00000 n 0000026062 00000 n 0000026193 00000 n 0001114505 00000 n 0001629020 00000 n 0000026251 00000 n 0000026382 00000 n 0001114681 00000 n 0001628941 00000 n 0000026440 00000 n 0000026581 00000 n 0001120063 00000 n 0001628809 00000 n 0000026634 00000 n 0000026793 00000 n 0001135613 00000 n 0001628730 00000 n 0000026851 00000 n 0000026982 00000 n 0001144612 00000 n 0001628637 00000 n 0000027040 00000 n 0000027171 00000 n 0001154768 00000 n 0001628544 00000 n 0000027229 00000 n 0000027413 00000 n 0001159192 00000 n 0001628451 00000 n 0000027471 00000 n 0000027612 00000 n 0001171138 00000 n 0001628372 00000 n 0000027670 00000 n 0000027811 00000 n 0001177131 00000 n 0001628254 00000 n 0000027864 00000 n 0000028018 00000 n 0001177248 00000 n 0001628175 00000 n 0000028076 00000 n 0000028207 00000 n 0001177306 00000 n 0001628096 00000 n 0000028265 00000 n 0000028406 00000 n 0000028765 00000 n 0000028998 00000 n 0000028458 00000 n 0000028884 00000 n 0000028941 00000 n 0001621560 00000 n 0001600172 00000 n 0001621385 00000 n 0001622837 00000 n 0000036943 00000 n 0000031272 00000 n 0000029070 00000 n 0001599004 00000 n 0001580196 00000 n 0001598829 00000 n 0000036886 00000 n 0000031667 00000 n 0000031817 00000 n 0000031973 00000 n 0000032130 00000 n 0000032281 00000 n 0000032431 00000 n 0000032588 00000 n 0000032738 00000 n 0000032895 00000 n 0000033046 00000 n 0000033202 00000 n 0000033364 00000 n 0000033526 00000 n 0000033683 00000 n 0000033845 00000 n 0000034007 00000 n 0000034163 00000 n 0000034324 00000 n 0000034486 00000 n 0000034643 00000 n 0000034805 00000 n 0000034967 00000 n 0000035124 00000 n 0000035285 00000 n 0000035447 00000 n 0000035604 00000 n 0000035766 00000 n 0000035927 00000 n 0000036084 00000 n 0000036246 00000 n 0000036408 00000 n 0000036565 00000 n 0000036727 00000 n 0000045664 00000 n 0000039407 00000 n 0000037028 00000 n 0000045607 00000 n 0000039826 00000 n 0000039983 00000 n 0000040145 00000 n 0000040307 00000 n 0000040465 00000 n 0000040628 00000 n 0000040791 00000 n 0000040948 00000 n 0000041111 00000 n 0000041274 00000 n 0000041432 00000 n 0000041595 00000 n 0000041758 00000 n 0000041916 00000 n 0000042079 00000 n 0000042242 00000 n 0000042393 00000 n 0000042550 00000 n 0000042712 00000 n 0000042874 00000 n 0000043036 00000 n 0000043196 00000 n 0000043358 00000 n 0000043515 00000 n 0000043677 00000 n 0000043839 00000 n 0000044000 00000 n 0000044161 00000 n 0000044323 00000 n 0000044480 00000 n 0000044642 00000 n 0000044804 00000 n 0000044961 00000 n 0000045122 00000 n 0000045284 00000 n 0000045446 00000 n 0000054319 00000 n 0000048045 00000 n 0000045749 00000 n 0000054262 00000 n 0000048464 00000 n 0000048625 00000 n 0000048782 00000 n 0000048944 00000 n 0000049106 00000 n 0000049268 00000 n 0000049430 00000 n 0000049586 00000 n 0000049748 00000 n 0000049910 00000 n 0000050072 00000 n 0000050234 00000 n 0000050396 00000 n 0000050552 00000 n 0000050714 00000 n 0000050876 00000 n 0000051038 00000 n 0000051199 00000 n 0000051361 00000 n 0000051518 00000 n 0000051680 00000 n 0000051842 00000 n 0000051999 00000 n 0000052160 00000 n 0000052322 00000 n 0000052484 00000 n 0000052646 00000 n 0000052808 00000 n 0000052966 00000 n 0000053128 00000 n 0000053290 00000 n 0000053453 00000 n 0000053616 00000 n 0000053778 00000 n 0000053936 00000 n 0000054099 00000 n 0000063008 00000 n 0000056710 00000 n 0000054404 00000 n 0000062951 00000 n 0000057129 00000 n 0000057292 00000 n 0000057455 00000 n 0000057618 00000 n 0000057776 00000 n 0000057939 00000 n 0000058102 00000 n 0000058264 00000 n 0000058422 00000 n 0000058585 00000 n 0000058747 00000 n 0000058910 00000 n 0000059073 00000 n 0000059236 00000 n 0000059394 00000 n 0000059557 00000 n 0000059720 00000 n 0000059883 00000 n 0000060046 00000 n 0000060209 00000 n 0000060367 00000 n 0000060530 00000 n 0000060688 00000 n 0000060850 00000 n 0000061013 00000 n 0000061171 00000 n 0000061334 00000 n 0000061497 00000 n 0000061660 00000 n 0000061817 00000 n 0000061979 00000 n 0000062142 00000 n 0000062305 00000 n 0000062462 00000 n 0000062625 00000 n 0000062788 00000 n 0000068323 00000 n 0000065278 00000 n 0000063093 00000 n 0000065537 00000 n 0000065699 00000 n 0000065862 00000 n 0000066020 00000 n 0000066183 00000 n 0000068040 00000 n 0000068097 00000 n 0000066346 00000 n 0000066493 00000 n 0000066643 00000 n 0000066793 00000 n 0000066942 00000 n 0000067090 00000 n 0000067243 00000 n 0000067390 00000 n 0000067539 00000 n 0000067688 00000 n 0000067837 00000 n 0000068210 00000 n 0001579227 00000 n 0001559225 00000 n 0001579054 00000 n 0001489033 00000 n 0001489001 00000 n 0001488969 00000 n 0001488937 00000 n 0001488905 00000 n 0001488873 00000 n 0001488841 00000 n 0001488809 00000 n 0001488777 00000 n 0001488745 00000 n 0001488713 00000 n 0000077844 00000 n 0000070320 00000 n 0000068421 00000 n 0000076766 00000 n 0000076823 00000 n 0000070715 00000 n 0000070895 00000 n 0000076880 00000 n 0000071076 00000 n 0000071258 00000 n 0000076937 00000 n 0000071439 00000 n 0000071621 00000 n 0000076994 00000 n 0000071803 00000 n 0000071984 00000 n 0000077051 00000 n 0000072166 00000 n 0000072347 00000 n 0000077108 00000 n 0000072528 00000 n 0001558436 00000 n 0001542502 00000 n 0001558257 00000 n 0000077165 00000 n 0000072714 00000 n 0000072895 00000 n 0000077222 00000 n 0000073076 00000 n 0000073258 00000 n 0000077279 00000 n 0000073438 00000 n 0000073620 00000 n 0000077336 00000 n 0000073802 00000 n 0000073984 00000 n 0000077393 00000 n 0000074166 00000 n 0000074347 00000 n 0000077450 00000 n 0000074529 00000 n 0000074711 00000 n 0000077507 00000 n 0000074893 00000 n 0000075074 00000 n 0000077560 00000 n 0000075256 00000 n 0000075438 00000 n 0000077617 00000 n 0000075620 00000 n 0000075802 00000 n 0000077674 00000 n 0000075984 00000 n 0000076166 00000 n 0000077731 00000 n 0000076348 00000 n 0000076529 00000 n 0000077788 00000 n 0001622955 00000 n 0000358282 00000 n 0000372302 00000 n 0000358404 00000 n 0000358521 00000 n 0000358637 00000 n 0000358754 00000 n 0000383311 00000 n 0000425744 00000 n 0000450336 00000 n 0000425866 00000 n 0000425983 00000 n 0000426100 00000 n 0000426217 00000 n 0000426334 00000 n 0000426451 00000 n 0000542598 00000 n 0000608145 00000 n 0000542720 00000 n 0000542837 00000 n 0000542952 00000 n 0000090373 00000 n 0000080269 00000 n 0000077942 00000 n 0000080768 00000 n 0000080950 00000 n 0000089122 00000 n 0000081132 00000 n 0000081314 00000 n 0000089179 00000 n 0000081496 00000 n 0000081677 00000 n 0000089236 00000 n 0000081858 00000 n 0000082039 00000 n 0000089293 00000 n 0000082221 00000 n 0000082403 00000 n 0000089349 00000 n 0000082583 00000 n 0000082765 00000 n 0000089406 00000 n 0000082947 00000 n 0000083129 00000 n 0000089463 00000 n 0000083311 00000 n 0000083493 00000 n 0000089520 00000 n 0000083674 00000 n 0000083856 00000 n 0000089577 00000 n 0000084038 00000 n 0000084220 00000 n 0000089634 00000 n 0000084401 00000 n 0000084582 00000 n 0000089691 00000 n 0000084764 00000 n 0000084946 00000 n 0000089748 00000 n 0000085128 00000 n 0000085309 00000 n 0000089805 00000 n 0000085491 00000 n 0000085673 00000 n 0000089862 00000 n 0000085854 00000 n 0000086036 00000 n 0000089918 00000 n 0000086217 00000 n 0000086398 00000 n 0000089975 00000 n 0000086579 00000 n 0000086761 00000 n 0000090032 00000 n 0000086942 00000 n 0000087124 00000 n 0000090088 00000 n 0000087304 00000 n 0000087486 00000 n 0000090145 00000 n 0000087668 00000 n 0000087850 00000 n 0000090202 00000 n 0000088032 00000 n 0000088214 00000 n 0000090259 00000 n 0000088396 00000 n 0000088578 00000 n 0000090316 00000 n 0000088758 00000 n 0000088939 00000 n 0000543069 00000 n 0000641327 00000 n 0000672780 00000 n 0000641449 00000 n 0000641566 00000 n 0000641683 00000 n 0000641800 00000 n 0000752317 00000 n 0000779941 00000 n 0000752439 00000 n 0000756383 00000 n 0000756500 00000 n 0000756617 00000 n 0000756730 00000 n 0000756847 00000 n 0000818308 00000 n 0000873217 00000 n 0000818430 00000 n 0000822923 00000 n 0000823040 00000 n 0000823157 00000 n 0000823274 00000 n 0000823391 00000 n 0000823507 00000 n 0000823624 00000 n 0000916936 00000 n 0000944375 00000 n 0000100020 00000 n 0000092460 00000 n 0000090458 00000 n 0000092962 00000 n 0000093117 00000 n 0000093274 00000 n 0000093430 00000 n 0000093587 00000 n 0000093745 00000 n 0000093902 00000 n 0000094057 00000 n 0000094214 00000 n 0000094368 00000 n 0000094525 00000 n 0000094680 00000 n 0000094837 00000 n 0000094992 00000 n 0000095149 00000 n 0000095304 00000 n 0000095460 00000 n 0000095615 00000 n 0000095772 00000 n 0000095926 00000 n 0000096083 00000 n 0000096238 00000 n 0000096396 00000 n 0000096551 00000 n 0000096709 00000 n 0000096864 00000 n 0000097022 00000 n 0000097172 00000 n 0000097330 00000 n 0000097484 00000 n 0000097642 00000 n 0000097798 00000 n 0000097956 00000 n 0000098106 00000 n 0000098264 00000 n 0000098414 00000 n 0000098572 00000 n 0000098721 00000 n 0000098878 00000 n 0000099028 00000 n 0000099186 00000 n 0000099336 00000 n 0000099493 00000 n 0000099642 00000 n 0000108718 00000 n 0000120768 00000 n 0000143014 00000 n 0000150415 00000 n 0000166617 00000 n 0000178265 00000 n 0000182788 00000 n 0000189425 00000 n 0000198784 00000 n 0000226036 00000 n 0000249475 00000 n 0000259414 00000 n 0000332526 00000 n 0000344039 00000 n 0000372419 00000 n 0000394680 00000 n 0000409473 00000 n 0000450453 00000 n 0000457565 00000 n 0000613277 00000 n 0000672897 00000 n 0000692253 00000 n 0000108950 00000 n 0000102349 00000 n 0000100118 00000 n 0000108602 00000 n 0000102798 00000 n 0000102947 00000 n 0000103105 00000 n 0000103255 00000 n 0000103413 00000 n 0000103565 00000 n 0000103722 00000 n 0000103875 00000 n 0000104033 00000 n 0000104186 00000 n 0000104344 00000 n 0000104497 00000 n 0000104655 00000 n 0000104809 00000 n 0000104967 00000 n 0000105123 00000 n 0000105281 00000 n 0000105435 00000 n 0000105593 00000 n 0000105748 00000 n 0000105906 00000 n 0000106060 00000 n 0001541342 00000 n 0001531747 00000 n 0001541176 00000 n 0000108834 00000 n 0000106218 00000 n 0000106406 00000 n 0000106595 00000 n 0000106784 00000 n 0000106972 00000 n 0000107160 00000 n 0000107316 00000 n 0000107505 00000 n 0000107694 00000 n 0000107881 00000 n 0000108070 00000 n 0001530924 00000 n 0001528100 00000 n 0001530759 00000 n 0000108225 00000 n 0000108413 00000 n 0000733208 00000 n 0000780058 00000 n 0000873334 00000 n 0000882008 00000 n 0000944492 00000 n 0001087942 00000 n 0001091331 00000 n 0001097989 00000 n 0001109765 00000 n 0001120004 00000 n 0001173262 00000 n 0000115499 00000 n 0000115617 00000 n 0000115739 00000 n 0000115862 00000 n 0000115985 00000 n 0000120038 00000 n 0000120159 00000 n 0000120282 00000 n 0000120405 00000 n 0000120523 00000 n 0000120646 00000 n 0000116107 00000 n 0000112154 00000 n 0000109090 00000 n 0000115383 00000 n 0000115558 00000 n 0000112432 00000 n 0000112620 00000 n 0000112807 00000 n 0000112995 00000 n 0000113182 00000 n 0000113369 00000 n 0000113558 00000 n 0000113747 00000 n 0000113935 00000 n 0000114124 00000 n 0000114313 00000 n 0000114494 00000 n 0000115680 00000 n 0001527196 00000 n 0001522043 00000 n 0001527032 00000 n 0001521537 00000 n 0001518968 00000 n 0001521373 00000 n 0000115803 00000 n 0000115926 00000 n 0000114676 00000 n 0000114865 00000 n 0000115048 00000 n 0000116048 00000 n 0000115231 00000 n 0000171601 00000 n 0000171724 00000 n 0000171847 00000 n 0000171970 00000 n 0000172093 00000 n 0000364402 00000 n 0000549149 00000 n 0000120883 00000 n 0000119295 00000 n 0000116259 00000 n 0000119979 00000 n 0000119456 00000 n 0000120100 00000 n 0000119644 00000 n 0000120223 00000 n 0001518541 00000 n 0001516988 00000 n 0001518377 00000 n 0000120346 00000 n 0000120464 00000 n 0000120587 00000 n 0000119793 00000 n 0000120709 00000 n 0000877969 00000 n 0000128016 00000 n 0000123465 00000 n 0000121050 00000 n 0000127358 00000 n 0000127417 00000 n 0000123771 00000 n 0000123961 00000 n 0000124149 00000 n 0000124339 00000 n 0000124528 00000 n 0000124718 00000 n 0000124907 00000 n 0000125097 00000 n 0000125284 00000 n 0000125473 00000 n 0000125663 00000 n 0000125853 00000 n 0000126043 00000 n 0000126233 00000 n 0000126422 00000 n 0000126611 00000 n 0000126800 00000 n 0000126986 00000 n 0000127590 00000 n 0000127648 00000 n 0000127173 00000 n 0000127706 00000 n 0000127770 00000 n 0000127829 00000 n 0000127893 00000 n 0000127952 00000 n 0001623076 00000 n 0000130858 00000 n 0000136774 00000 n 0000136892 00000 n 0000383847 00000 n 0000137015 00000 n 0000137138 00000 n 0000137259 00000 n 0000137382 00000 n 0000137504 00000 n 0000137627 00000 n 0000142769 00000 n 0000142892 00000 n 0000389539 00000 n 0000130981 00000 n 0000130210 00000 n 0000128115 00000 n 0000130740 00000 n 0000130799 00000 n 0000130922 00000 n 0000130363 00000 n 0000130550 00000 n 0000137690 00000 n 0000133408 00000 n 0000131107 00000 n 0000136715 00000 n 0000133687 00000 n 0000133876 00000 n 0000134063 00000 n 0000136833 00000 n 0000136956 00000 n 0000134253 00000 n 0000134443 00000 n 0000134633 00000 n 0000137079 00000 n 0000134821 00000 n 0000135010 00000 n 0000137200 00000 n 0000135200 00000 n 0000135389 00000 n 0000137323 00000 n 0000135579 00000 n 0000135769 00000 n 0000137445 00000 n 0000135959 00000 n 0000136149 00000 n 0000137568 00000 n 0000136339 00000 n 0000136527 00000 n 0000143489 00000 n 0000140135 00000 n 0000137816 00000 n 0000142651 00000 n 0000142710 00000 n 0000140378 00000 n 0000140567 00000 n 0000140756 00000 n 0000140945 00000 n 0000141133 00000 n 0000141322 00000 n 0000142833 00000 n 0000142956 00000 n 0000143135 00000 n 0000141511 00000 n 0000141703 00000 n 0000141895 00000 n 0000142087 00000 n 0000142273 00000 n 0000142465 00000 n 0000143308 00000 n 0000143367 00000 n 0000143426 00000 n 0000150292 00000 n 0000150652 00000 n 0000145959 00000 n 0000143615 00000 n 0000150174 00000 n 0000150233 00000 n 0000150356 00000 n 0000146283 00000 n 0000146440 00000 n 0000150536 00000 n 0000146627 00000 n 0000146816 00000 n 0000147004 00000 n 0000147193 00000 n 0000147381 00000 n 0000147570 00000 n 0000147759 00000 n 0000147947 00000 n 0000148136 00000 n 0000148325 00000 n 0000148479 00000 n 0000148666 00000 n 0000148855 00000 n 0000149043 00000 n 0000149232 00000 n 0000149420 00000 n 0000149609 00000 n 0000149797 00000 n 0000149986 00000 n 0000154684 00000 n 0000154802 00000 n 0000154925 00000 n 0000155048 00000 n 0000155170 00000 n 0000157356 00000 n 0000157474 00000 n 0000157596 00000 n 0000157719 00000 n 0000157842 00000 n 0000157965 00000 n 0000158087 00000 n 0000158210 00000 n 0000158333 00000 n 0000158456 00000 n 0000158579 00000 n 0000158702 00000 n 0000166495 00000 n 0000155233 00000 n 0000153079 00000 n 0000150792 00000 n 0000154568 00000 n 0000154743 00000 n 0000153277 00000 n 0000153465 00000 n 0000153653 00000 n 0000153841 00000 n 0000154024 00000 n 0000154205 00000 n 0000154866 00000 n 0000154387 00000 n 0000154989 00000 n 0000155111 00000 n 0000438832 00000 n 0000432988 00000 n 0000158766 00000 n 0000156710 00000 n 0000155359 00000 n 0000157238 00000 n 0000157297 00000 n 0000157415 00000 n 0000157537 00000 n 0000156863 00000 n 0000157660 00000 n 0000157783 00000 n 0000157906 00000 n 0000157052 00000 n 0000158028 00000 n 0000158151 00000 n 0000158274 00000 n 0000158397 00000 n 0000158520 00000 n 0000158643 00000 n 0001623201 00000 n 0000166849 00000 n 0000161340 00000 n 0000158892 00000 n 0000166377 00000 n 0000166436 00000 n 0000166558 00000 n 0000166733 00000 n 0000161700 00000 n 0000161889 00000 n 0000162078 00000 n 0000162267 00000 n 0000162456 00000 n 0000162645 00000 n 0000162832 00000 n 0000163021 00000 n 0000163210 00000 n 0000163399 00000 n 0000163587 00000 n 0000163776 00000 n 0000163965 00000 n 0000164152 00000 n 0000164340 00000 n 0000164529 00000 n 0000164718 00000 n 0000164906 00000 n 0000165061 00000 n 0000165249 00000 n 0000165438 00000 n 0000165625 00000 n 0000165814 00000 n 0000166002 00000 n 0000166190 00000 n 0000171483 00000 n 0000172216 00000 n 0000172338 00000 n 0000174252 00000 n 0000174375 00000 n 0000174498 00000 n 0000174621 00000 n 0000174744 00000 n 0000174867 00000 n 0000177046 00000 n 0000177169 00000 n 0000177292 00000 n 0000177415 00000 n 0000177538 00000 n 0000177661 00000 n 0000177778 00000 n 0000177901 00000 n 0000178019 00000 n 0000178142 00000 n 0000172401 00000 n 0000169666 00000 n 0000166989 00000 n 0000171367 00000 n 0000171542 00000 n 0000169873 00000 n 0000170061 00000 n 0000170249 00000 n 0000170437 00000 n 0000170625 00000 n 0000170812 00000 n 0000170995 00000 n 0000171665 00000 n 0000171788 00000 n 0000171911 00000 n 0000172034 00000 n 0000172157 00000 n 0000171184 00000 n 0000172279 00000 n 0000549502 00000 n 0000174930 00000 n 0000174011 00000 n 0000172567 00000 n 0000174134 00000 n 0000174193 00000 n 0000174316 00000 n 0000174439 00000 n 0000174562 00000 n 0000174685 00000 n 0000174808 00000 n 0000178329 00000 n 0000176598 00000 n 0000175042 00000 n 0000176928 00000 n 0000176987 00000 n 0000177110 00000 n 0000177233 00000 n 0000177356 00000 n 0000177479 00000 n 0000176742 00000 n 0000177602 00000 n 0000177719 00000 n 0000177842 00000 n 0000177960 00000 n 0000178083 00000 n 0000178206 00000 n 0000183023 00000 n 0000180101 00000 n 0000178495 00000 n 0000182133 00000 n 0000182250 00000 n 0000180326 00000 n 0000180515 00000 n 0000180704 00000 n 0000180892 00000 n 0000181075 00000 n 0000182424 00000 n 0000182483 00000 n 0000182542 00000 n 0000182606 00000 n 0000182665 00000 n 0000182729 00000 n 0000182908 00000 n 0000181231 00000 n 0000181419 00000 n 0000181608 00000 n 0000181797 00000 n 0000181978 00000 n 0000847139 00000 n 0000189062 00000 n 0000189180 00000 n 0000189302 00000 n 0000189838 00000 n 0000185489 00000 n 0000183149 00000 n 0000188945 00000 n 0000189121 00000 n 0000189243 00000 n 0000189366 00000 n 0000189545 00000 n 0000185777 00000 n 0000185965 00000 n 0000186154 00000 n 0000186343 00000 n 0000186531 00000 n 0000186720 00000 n 0000186908 00000 n 0000187097 00000 n 0000187286 00000 n 0000187475 00000 n 0000187664 00000 n 0000187819 00000 n 0000188007 00000 n 0000188196 00000 n 0000188384 00000 n 0000188571 00000 n 0000188757 00000 n 0000189720 00000 n 0000189779 00000 n 0001623326 00000 n 0000194332 00000 n 0000194454 00000 n 0000194577 00000 n 0000194700 00000 n 0000194822 00000 n 0000194944 00000 n 0000195067 00000 n 0000197811 00000 n 0000197933 00000 n 0000198051 00000 n 0000198174 00000 n 0000198297 00000 n 0000198415 00000 n 0000198538 00000 n 0000198661 00000 n 0000195130 00000 n 0000192387 00000 n 0000189978 00000 n 0000194273 00000 n 0000192603 00000 n 0000192790 00000 n 0000192978 00000 n 0000193166 00000 n 0000193354 00000 n 0000193541 00000 n 0000193729 00000 n 0000193911 00000 n 0000194396 00000 n 0000194518 00000 n 0000194641 00000 n 0000194763 00000 n 0000194886 00000 n 0000195008 00000 n 0001516558 00000 n 0001513964 00000 n 0001516393 00000 n 0000194092 00000 n 0000650962 00000 n 0000198847 00000 n 0000197050 00000 n 0000195284 00000 n 0000197693 00000 n 0000197752 00000 n 0000197874 00000 n 0000197992 00000 n 0000198115 00000 n 0000197212 00000 n 0000198238 00000 n 0000198356 00000 n 0000198479 00000 n 0001513653 00000 n 0001511603 00000 n 0001513488 00000 n 0000197397 00000 n 0000198602 00000 n 0000198725 00000 n 0000197546 00000 n 0000210519 00000 n 0000201544 00000 n 0000199001 00000 n 0000210343 00000 n 0000210460 00000 n 0000202075 00000 n 0000202264 00000 n 0000202453 00000 n 0000202642 00000 n 0000202830 00000 n 0000203019 00000 n 0000203208 00000 n 0000203397 00000 n 0000203586 00000 n 0000203775 00000 n 0000203964 00000 n 0000204153 00000 n 0000204342 00000 n 0000204531 00000 n 0000204719 00000 n 0000204908 00000 n 0000205097 00000 n 0000205286 00000 n 0000205474 00000 n 0000205663 00000 n 0000205852 00000 n 0000206041 00000 n 0000206230 00000 n 0000206419 00000 n 0000206607 00000 n 0000206796 00000 n 0000206985 00000 n 0000207174 00000 n 0000207362 00000 n 0000207551 00000 n 0000207740 00000 n 0000207928 00000 n 0000208117 00000 n 0000208306 00000 n 0000208491 00000 n 0000208680 00000 n 0000208869 00000 n 0000209058 00000 n 0000209247 00000 n 0000209436 00000 n 0000209625 00000 n 0000209813 00000 n 0000209968 00000 n 0000210156 00000 n 0000213183 00000 n 0000213301 00000 n 0000213424 00000 n 0000213547 00000 n 0000213670 00000 n 0000213793 00000 n 0000213916 00000 n 0000214039 00000 n 0000214162 00000 n 0000214285 00000 n 0000214408 00000 n 0000216092 00000 n 0000216215 00000 n 0000216338 00000 n 0000216461 00000 n 0000216584 00000 n 0000216707 00000 n 0000216830 00000 n 0000216951 00000 n 0000217074 00000 n 0000217197 00000 n 0000217320 00000 n 0000217443 00000 n 0000217566 00000 n 0000218945 00000 n 0000219068 00000 n 0000219191 00000 n 0000219314 00000 n 0000219437 00000 n 0000219560 00000 n 0000219683 00000 n 0000219804 00000 n 0000219925 00000 n 0000220048 00000 n 0000220170 00000 n 0000220293 00000 n 0000220416 00000 n 0000225300 00000 n 0000225423 00000 n 0000225546 00000 n 0000225669 00000 n 0000225792 00000 n 0000225914 00000 n 0000214471 00000 n 0000212287 00000 n 0000210646 00000 n 0000213008 00000 n 0000212449 00000 n 0000213242 00000 n 0000213365 00000 n 0000213488 00000 n 0000213611 00000 n 0000212631 00000 n 0000212820 00000 n 0000213734 00000 n 0000213857 00000 n 0000213980 00000 n 0000214103 00000 n 0000214226 00000 n 0000214349 00000 n 0000717717 00000 n 0000217629 00000 n 0000215851 00000 n 0000214570 00000 n 0000215974 00000 n 0000216033 00000 n 0000216156 00000 n 0000216279 00000 n 0000216402 00000 n 0000216525 00000 n 0000216648 00000 n 0000216771 00000 n 0000216894 00000 n 0000217015 00000 n 0000217138 00000 n 0000217261 00000 n 0000217384 00000 n 0000217507 00000 n 0000220480 00000 n 0000218704 00000 n 0000217755 00000 n 0000218827 00000 n 0000218886 00000 n 0000219009 00000 n 0000219132 00000 n 0000219255 00000 n 0000219378 00000 n 0000219501 00000 n 0000219624 00000 n 0000219747 00000 n 0000219868 00000 n 0000219989 00000 n 0000220111 00000 n 0000220234 00000 n 0000220357 00000 n 0001623451 00000 n 0000226212 00000 n 0000222677 00000 n 0000220579 00000 n 0000225182 00000 n 0000225241 00000 n 0000225364 00000 n 0000225487 00000 n 0000225610 00000 n 0000225733 00000 n 0000225855 00000 n 0000222920 00000 n 0000225977 00000 n 0000226153 00000 n 0000223106 00000 n 0000223295 00000 n 0000223484 00000 n 0000223673 00000 n 0000223862 00000 n 0000224050 00000 n 0000224238 00000 n 0000224427 00000 n 0000224616 00000 n 0000224805 00000 n 0000224994 00000 n 0000234378 00000 n 0000234496 00000 n 0000234618 00000 n 0000240192 00000 n 0000240315 00000 n 0000240438 00000 n 0000240561 00000 n 0000240679 00000 n 0000240802 00000 n 0000244836 00000 n 0000244959 00000 n 0000234681 00000 n 0000229225 00000 n 0000226365 00000 n 0000234203 00000 n 0000229585 00000 n 0000229773 00000 n 0000229962 00000 n 0000230117 00000 n 0000230305 00000 n 0000230493 00000 n 0000230681 00000 n 0000230870 00000 n 0000231057 00000 n 0000231246 00000 n 0000231435 00000 n 0000231624 00000 n 0000231813 00000 n 0000232001 00000 n 0000234437 00000 n 0000232190 00000 n 0000232378 00000 n 0000232566 00000 n 0000232753 00000 n 0000232941 00000 n 0000233129 00000 n 0000233317 00000 n 0000233500 00000 n 0000233682 00000 n 0000234559 00000 n 0000233865 00000 n 0000234047 00000 n 0000245081 00000 n 0000245204 00000 n 0000245327 00000 n 0000245450 00000 n 0000245573 00000 n 0000245696 00000 n 0000245818 00000 n 0000245940 00000 n 0000246063 00000 n 0000248983 00000 n 0000249106 00000 n 0000249229 00000 n 0000249352 00000 n 0000771273 00000 n 0000764211 00000 n 0000240865 00000 n 0000237819 00000 n 0000234794 00000 n 0000240074 00000 n 0000240133 00000 n 0000238053 00000 n 0000238242 00000 n 0000238424 00000 n 0000240256 00000 n 0000238580 00000 n 0000238769 00000 n 0000238952 00000 n 0000240379 00000 n 0000239134 00000 n 0000240502 00000 n 0000239322 00000 n 0000239511 00000 n 0000240620 00000 n 0000239700 00000 n 0000240743 00000 n 0000239888 00000 n 0000776055 00000 n 0000776173 00000 n 0000246126 00000 n 0000243011 00000 n 0000241045 00000 n 0000244718 00000 n 0000244777 00000 n 0000244900 00000 n 0000243218 00000 n 0000245022 00000 n 0000243407 00000 n 0000243595 00000 n 0000245145 00000 n 0000243784 00000 n 0000243973 00000 n 0000245268 00000 n 0000244162 00000 n 0000244350 00000 n 0000245391 00000 n 0000244532 00000 n 0000245514 00000 n 0000245637 00000 n 0000245759 00000 n 0000245882 00000 n 0000246004 00000 n 0000250012 00000 n 0000247743 00000 n 0000246306 00000 n 0000248865 00000 n 0000248924 00000 n 0000249047 00000 n 0000249170 00000 n 0000249293 00000 n 0000249416 00000 n 0000249597 00000 n 0000247923 00000 n 0000248112 00000 n 0000248301 00000 n 0000248489 00000 n 0000248677 00000 n 0000249772 00000 n 0000249831 00000 n 0000249890 00000 n 0000249953 00000 n 0000259057 00000 n 0000259178 00000 n 0000259296 00000 n 0000259595 00000 n 0000252603 00000 n 0000250139 00000 n 0000258998 00000 n 0000259120 00000 n 0000259237 00000 n 0000259355 00000 n 0000259536 00000 n 0000253026 00000 n 0000253215 00000 n 0000253404 00000 n 0000253593 00000 n 0000253782 00000 n 0000253970 00000 n 0000254158 00000 n 0000254347 00000 n 0000254536 00000 n 0000254725 00000 n 0000254913 00000 n 0000255102 00000 n 0000255290 00000 n 0000255479 00000 n 0000255667 00000 n 0000255823 00000 n 0000256012 00000 n 0000256201 00000 n 0000256390 00000 n 0000256546 00000 n 0000256735 00000 n 0000256923 00000 n 0000257112 00000 n 0000257301 00000 n 0000257490 00000 n 0000257679 00000 n 0000257868 00000 n 0000258057 00000 n 0000258245 00000 n 0000258434 00000 n 0000258622 00000 n 0000258811 00000 n 0001623576 00000 n 0000282028 00000 n 0000285735 00000 n 0000285858 00000 n 0000285981 00000 n 0000286102 00000 n 0000286225 00000 n 0000286348 00000 n 0000292270 00000 n 0000292393 00000 n 0000292516 00000 n 0000292638 00000 n 0000292761 00000 n 0000292884 00000 n 0000300476 00000 n 0000300599 00000 n 0000300721 00000 n 0000300844 00000 n 0000300967 00000 n 0000301090 00000 n 0000301208 00000 n 0000301330 00000 n 0000307235 00000 n 0000307357 00000 n 0000307480 00000 n 0000309878 00000 n 0000310001 00000 n 0000310124 00000 n 0000310247 00000 n 0000310370 00000 n 0000310493 00000 n 0000274037 00000 n 0000262911 00000 n 0000259722 00000 n 0000273978 00000 n 0000263559 00000 n 0000263748 00000 n 0000263935 00000 n 0000264124 00000 n 0000264313 00000 n 0000264501 00000 n 0000264690 00000 n 0000264879 00000 n 0000265067 00000 n 0000265256 00000 n 0000265445 00000 n 0000265634 00000 n 0000265821 00000 n 0000266010 00000 n 0000266199 00000 n 0000266355 00000 n 0000266544 00000 n 0000266700 00000 n 0000266889 00000 n 0000267078 00000 n 0000267267 00000 n 0000267455 00000 n 0000267644 00000 n 0000267833 00000 n 0000268022 00000 n 0000268211 00000 n 0000268400 00000 n 0000268554 00000 n 0000268743 00000 n 0000268898 00000 n 0000269086 00000 n 0000269241 00000 n 0000269429 00000 n 0000269584 00000 n 0000269772 00000 n 0000269961 00000 n 0000270149 00000 n 0000270338 00000 n 0000270527 00000 n 0000270714 00000 n 0000270903 00000 n 0000271091 00000 n 0000271280 00000 n 0000271469 00000 n 0000271625 00000 n 0000271814 00000 n 0000271970 00000 n 0000272159 00000 n 0000272346 00000 n 0000272535 00000 n 0000272723 00000 n 0000272912 00000 n 0000273101 00000 n 0000273290 00000 n 0000273446 00000 n 0000273635 00000 n 0000273790 00000 n 0000310615 00000 n 0000310738 00000 n 0000310856 00000 n 0000313301 00000 n 0000313424 00000 n 0000313547 00000 n 0000313670 00000 n 0000313793 00000 n 0000313916 00000 n 0000314039 00000 n 0000314162 00000 n 0000314285 00000 n 0000314408 00000 n 0000314531 00000 n 0000319830 00000 n 0000319953 00000 n 0000320076 00000 n 0000320199 00000 n 0000320322 00000 n 0000320445 00000 n 0000320568 00000 n 0000320691 00000 n 0000320814 00000 n 0000324153 00000 n 0000324275 00000 n 0000324393 00000 n 0000324516 00000 n 0000324638 00000 n 0000326261 00000 n 0000326384 00000 n 0000326502 00000 n 0000326625 00000 n 0000326748 00000 n 0000326870 00000 n 0000326993 00000 n 0000327116 00000 n 0000327239 00000 n 0000327362 00000 n 0000327485 00000 n 0000327608 00000 n 0000327731 00000 n 0000331788 00000 n 0000331911 00000 n 0000332034 00000 n 0000332157 00000 n 0000332280 00000 n 0000332403 00000 n 0000282146 00000 n 0000277054 00000 n 0000274137 00000 n 0000281853 00000 n 0000277405 00000 n 0000277591 00000 n 0000277774 00000 n 0000277960 00000 n 0000278112 00000 n 0000278295 00000 n 0000282087 00000 n 0000278478 00000 n 0000278666 00000 n 0000278852 00000 n 0000279040 00000 n 0000279226 00000 n 0000279413 00000 n 0000279601 00000 n 0000279788 00000 n 0000279976 00000 n 0000280164 00000 n 0000280352 00000 n 0000280540 00000 n 0000280728 00000 n 0000280916 00000 n 0000281103 00000 n 0000281290 00000 n 0000281478 00000 n 0000281666 00000 n 0001073812 00000 n 0000827649 00000 n 0001004999 00000 n 0000286411 00000 n 0000284447 00000 n 0000282245 00000 n 0000285676 00000 n 0000284636 00000 n 0000284819 00000 n 0000284975 00000 n 0000285157 00000 n 0000285799 00000 n 0000285340 00000 n 0000285521 00000 n 0000285922 00000 n 0000286044 00000 n 0000286166 00000 n 0000286289 00000 n 0000293007 00000 n 0000289726 00000 n 0000286537 00000 n 0000292152 00000 n 0000292211 00000 n 0000289969 00000 n 0000290157 00000 n 0000290311 00000 n 0000290493 00000 n 0000290676 00000 n 0000290863 00000 n 0000291046 00000 n 0000291233 00000 n 0000292334 00000 n 0000292457 00000 n 0000292579 00000 n 0000291415 00000 n 0000291598 00000 n 0000291786 00000 n 0000291969 00000 n 0000292702 00000 n 0000292825 00000 n 0000292948 00000 n 0001170902 00000 n 0001170784 00000 n 0000301453 00000 n 0000296332 00000 n 0000293160 00000 n 0000300417 00000 n 0000296656 00000 n 0000300540 00000 n 0000296845 00000 n 0000297034 00000 n 0000297215 00000 n 0000297404 00000 n 0000300663 00000 n 0000297587 00000 n 0000297743 00000 n 0000297925 00000 n 0000298107 00000 n 0000298263 00000 n 0000298444 00000 n 0000300785 00000 n 0000298627 00000 n 0000300908 00000 n 0000298815 00000 n 0000299004 00000 n 0000299187 00000 n 0000299376 00000 n 0000301031 00000 n 0000299558 00000 n 0000299714 00000 n 0000299896 00000 n 0000300079 00000 n 0000300235 00000 n 0000301149 00000 n 0000301272 00000 n 0000301394 00000 n 0000827413 00000 n 0000827531 00000 n 0000307543 00000 n 0000304891 00000 n 0000301579 00000 n 0000307176 00000 n 0000305125 00000 n 0000305314 00000 n 0000305503 00000 n 0000305692 00000 n 0000305881 00000 n 0000306069 00000 n 0000306257 00000 n 0000306439 00000 n 0000306622 00000 n 0000306811 00000 n 0000307299 00000 n 0000306993 00000 n 0000307421 00000 n 0001623701 00000 n 0000669325 00000 n 0000310920 00000 n 0000309637 00000 n 0000307669 00000 n 0000309760 00000 n 0000309819 00000 n 0000309942 00000 n 0000310065 00000 n 0000310188 00000 n 0000310311 00000 n 0000310434 00000 n 0000310556 00000 n 0000310679 00000 n 0000310797 00000 n 0000314595 00000 n 0000312851 00000 n 0000311046 00000 n 0000313183 00000 n 0000313242 00000 n 0000313365 00000 n 0000313488 00000 n 0000313611 00000 n 0000313734 00000 n 0000313857 00000 n 0000313980 00000 n 0000314103 00000 n 0000314226 00000 n 0000314349 00000 n 0000314472 00000 n 0000312995 00000 n 0000320877 00000 n 0000317373 00000 n 0000314707 00000 n 0000319712 00000 n 0000319771 00000 n 0000317616 00000 n 0000319894 00000 n 0000317805 00000 n 0000317961 00000 n 0000318148 00000 n 0000318334 00000 n 0000320017 00000 n 0000318489 00000 n 0000318645 00000 n 0000318833 00000 n 0000320140 00000 n 0000320263 00000 n 0000320386 00000 n 0000320509 00000 n 0000320632 00000 n 0000319018 00000 n 0000319201 00000 n 0000319382 00000 n 0000320755 00000 n 0000319564 00000 n 0001060181 00000 n 0000852825 00000 n 0000856925 00000 n 0000861694 00000 n 0000324702 00000 n 0000323260 00000 n 0000321003 00000 n 0000324035 00000 n 0000324094 00000 n 0000323431 00000 n 0000324216 00000 n 0000324334 00000 n 0000323587 00000 n 0000324457 00000 n 0000323737 00000 n 0000324580 00000 n 0000323887 00000 n 0000327794 00000 n 0000325813 00000 n 0000324828 00000 n 0000326143 00000 n 0000326202 00000 n 0000325957 00000 n 0000326325 00000 n 0000326443 00000 n 0000326566 00000 n 0000326689 00000 n 0000326811 00000 n 0000326934 00000 n 0000327057 00000 n 0000327180 00000 n 0000327303 00000 n 0000327426 00000 n 0000327549 00000 n 0000327672 00000 n 0000332705 00000 n 0000329360 00000 n 0000327920 00000 n 0000331670 00000 n 0000331729 00000 n 0000331852 00000 n 0000331975 00000 n 0000332098 00000 n 0000332221 00000 n 0000332344 00000 n 0000332467 00000 n 0000332646 00000 n 0000329594 00000 n 0000329783 00000 n 0000329972 00000 n 0000330161 00000 n 0000330350 00000 n 0000330539 00000 n 0000330726 00000 n 0000330915 00000 n 0000331103 00000 n 0000331292 00000 n 0000331481 00000 n 0001623826 00000 n 0000336647 00000 n 0000336765 00000 n 0000336887 00000 n 0000337009 00000 n 0000337125 00000 n 0000337248 00000 n 0000337371 00000 n 0000337494 00000 n 0000337617 00000 n 0000337740 00000 n 0000343858 00000 n 0000337803 00000 n 0000334751 00000 n 0000332832 00000 n 0000336472 00000 n 0000334967 00000 n 0000335152 00000 n 0000335338 00000 n 0000335493 00000 n 0000335649 00000 n 0000335835 00000 n 0000336021 00000 n 0000336174 00000 n 0000336324 00000 n 0000336706 00000 n 0000336828 00000 n 0000336950 00000 n 0000337067 00000 n 0000337189 00000 n 0000337312 00000 n 0000337435 00000 n 0000337558 00000 n 0000337681 00000 n 0000344333 00000 n 0000339922 00000 n 0000337915 00000 n 0000343740 00000 n 0000343799 00000 n 0000343922 00000 n 0000344156 00000 n 0000340228 00000 n 0000344215 00000 n 0000340384 00000 n 0000340566 00000 n 0000340722 00000 n 0000340878 00000 n 0000341061 00000 n 0000341244 00000 n 0000341427 00000 n 0000341610 00000 n 0000341793 00000 n 0000341976 00000 n 0000342159 00000 n 0000342342 00000 n 0000342525 00000 n 0000344274 00000 n 0000342708 00000 n 0000342891 00000 n 0000343104 00000 n 0000343314 00000 n 0000343528 00000 n 0000358164 00000 n 0000358929 00000 n 0000359045 00000 n 0000359109 00000 n 0000359173 00000 n 0000359237 00000 n 0000354326 00000 n 0000347950 00000 n 0000344459 00000 n 0000354091 00000 n 0000348382 00000 n 0000348596 00000 n 0000348811 00000 n 0000354150 00000 n 0000349026 00000 n 0000349208 00000 n 0000349364 00000 n 0000349520 00000 n 0000349703 00000 n 0000349859 00000 n 0000350015 00000 n 0000350198 00000 n 0000350354 00000 n 0000350510 00000 n 0000350692 00000 n 0000350845 00000 n 0000351001 00000 n 0000351184 00000 n 0000351340 00000 n 0000351522 00000 n 0000354209 00000 n 0000351677 00000 n 0000351859 00000 n 0000352015 00000 n 0000352198 00000 n 0000352354 00000 n 0000352537 00000 n 0000352720 00000 n 0000352903 00000 n 0000353059 00000 n 0000353241 00000 n 0000353430 00000 n 0000353611 00000 n 0000353793 00000 n 0000353943 00000 n 0000359301 00000 n 0000359364 00000 n 0000359428 00000 n 0000364048 00000 n 0000364166 00000 n 0000364284 00000 n 0000368323 00000 n 0000368441 00000 n 0000359491 00000 n 0000355894 00000 n 0000354439 00000 n 0000358047 00000 n 0000358223 00000 n 0000356128 00000 n 0000358345 00000 n 0000356284 00000 n 0000356455 00000 n 0000358462 00000 n 0000356637 00000 n 0000356808 00000 n 0000358579 00000 n 0000356990 00000 n 0000357161 00000 n 0000358695 00000 n 0000357343 00000 n 0000357514 00000 n 0000358812 00000 n 0000357696 00000 n 0000357866 00000 n 0000358987 00000 n 0001510873 00000 n 0001496173 00000 n 0001510692 00000 n 0000364520 00000 n 0000361699 00000 n 0000359604 00000 n 0000363931 00000 n 0000364107 00000 n 0000361942 00000 n 0000362098 00000 n 0000362254 00000 n 0000364225 00000 n 0000362410 00000 n 0000362565 00000 n 0000364343 00000 n 0000362721 00000 n 0000362877 00000 n 0000363066 00000 n 0000364461 00000 n 0000363222 00000 n 0000363377 00000 n 0000363559 00000 n 0000363742 00000 n 0001104898 00000 n 0000368500 00000 n 0000367015 00000 n 0000364634 00000 n 0000368264 00000 n 0000367204 00000 n 0000367360 00000 n 0000367548 00000 n 0000368382 00000 n 0000367733 00000 n 0000367889 00000 n 0000368078 00000 n 0001623951 00000 n 0000372595 00000 n 0000371099 00000 n 0000368641 00000 n 0000372126 00000 n 0000372185 00000 n 0000371279 00000 n 0000371435 00000 n 0000371624 00000 n 0000372360 00000 n 0000372536 00000 n 0000371810 00000 n 0000371969 00000 n 0000379228 00000 n 0000375148 00000 n 0000372762 00000 n 0000378876 00000 n 0000378935 00000 n 0000375454 00000 n 0000375641 00000 n 0000375826 00000 n 0000376013 00000 n 0000376200 00000 n 0000376387 00000 n 0000376573 00000 n 0000376760 00000 n 0000376918 00000 n 0000377104 00000 n 0000378994 00000 n 0000377260 00000 n 0000379053 00000 n 0000377445 00000 n 0000377632 00000 n 0000377790 00000 n 0000379112 00000 n 0000377946 00000 n 0000378131 00000 n 0000378317 00000 n 0000378503 00000 n 0000378689 00000 n 0000382825 00000 n 0000382943 00000 n 0000383066 00000 n 0000383189 00000 n 0000383433 00000 n 0000383551 00000 n 0000383672 00000 n 0000394562 00000 n 0001013187 00000 n 0000383965 00000 n 0000381054 00000 n 0000379341 00000 n 0000382708 00000 n 0000382884 00000 n 0000381261 00000 n 0000383007 00000 n 0000381448 00000 n 0000383130 00000 n 0000381635 00000 n 0000383252 00000 n 0000381822 00000 n 0000383374 00000 n 0000382009 00000 n 0000383492 00000 n 0000382180 00000 n 0000383613 00000 n 0000383731 00000 n 0000383906 00000 n 0000382367 00000 n 0000382521 00000 n 0000389891 00000 n 0000387657 00000 n 0000384077 00000 n 0000389422 00000 n 0000389598 00000 n 0000387873 00000 n 0000388030 00000 n 0000388189 00000 n 0000388381 00000 n 0000388572 00000 n 0000388762 00000 n 0000388951 00000 n 0000389108 00000 n 0000389657 00000 n 0000389716 00000 n 0000389774 00000 n 0000389265 00000 n 0000389832 00000 n 0000394860 00000 n 0000393216 00000 n 0000390005 00000 n 0000393914 00000 n 0000393973 00000 n 0000394032 00000 n 0000394091 00000 n 0000393378 00000 n 0000394150 00000 n 0000394209 00000 n 0000394268 00000 n 0000394327 00000 n 0000394386 00000 n 0000394445 00000 n 0000393568 00000 n 0000394621 00000 n 0000394801 00000 n 0000393758 00000 n 0000402239 00000 n 0000398685 00000 n 0000395000 00000 n 0000401887 00000 n 0000401946 00000 n 0000398982 00000 n 0000399171 00000 n 0000399327 00000 n 0000399514 00000 n 0000399668 00000 n 0000402121 00000 n 0000402180 00000 n 0000399856 00000 n 0000400012 00000 n 0000400168 00000 n 0000400324 00000 n 0000400510 00000 n 0000400666 00000 n 0000400816 00000 n 0000400971 00000 n 0000401121 00000 n 0000401270 00000 n 0000401426 00000 n 0000401581 00000 n 0000401731 00000 n 0001624076 00000 n 0000409712 00000 n 0000404937 00000 n 0000402366 00000 n 0000409414 00000 n 0000405288 00000 n 0000405443 00000 n 0000405598 00000 n 0000405754 00000 n 0000405904 00000 n 0000406053 00000 n 0000409595 00000 n 0000406209 00000 n 0000409653 00000 n 0000406363 00000 n 0000406546 00000 n 0000406702 00000 n 0000406858 00000 n 0000407041 00000 n 0000407224 00000 n 0000407406 00000 n 0000407588 00000 n 0000407771 00000 n 0000407954 00000 n 0000408135 00000 n 0000408316 00000 n 0000408499 00000 n 0000408682 00000 n 0000408865 00000 n 0000409048 00000 n 0000409231 00000 n 0000425626 00000 n 0000420821 00000 n 0000413189 00000 n 0000409838 00000 n 0000420528 00000 n 0000420587 00000 n 0000413675 00000 n 0000413858 00000 n 0000414073 00000 n 0000414288 00000 n 0000414502 00000 n 0000414716 00000 n 0000420646 00000 n 0000414931 00000 n 0000415114 00000 n 0000415269 00000 n 0000415425 00000 n 0000415608 00000 n 0000415764 00000 n 0000415920 00000 n 0000416076 00000 n 0000416259 00000 n 0000416415 00000 n 0000416571 00000 n 0000416753 00000 n 0000416908 00000 n 0000417063 00000 n 0000417246 00000 n 0000417402 00000 n 0000417556 00000 n 0000417739 00000 n 0000417895 00000 n 0000418078 00000 n 0000418234 00000 n 0000420705 00000 n 0000418417 00000 n 0000418596 00000 n 0000418752 00000 n 0000418934 00000 n 0000419117 00000 n 0000419300 00000 n 0000419456 00000 n 0000419639 00000 n 0000419819 00000 n 0000420002 00000 n 0000420158 00000 n 0000420341 00000 n 0000432558 00000 n 0000432674 00000 n 0000432738 00000 n 0000432802 00000 n 0000432866 00000 n 0000433106 00000 n 0000438596 00000 n 0000438714 00000 n 0000444513 00000 n 0000444631 00000 n 0000450160 00000 n 0000426508 00000 n 0000422414 00000 n 0000420934 00000 n 0000425509 00000 n 0000422693 00000 n 0000422875 00000 n 0000423057 00000 n 0000425685 00000 n 0000423240 00000 n 0000425807 00000 n 0000423396 00000 n 0000423566 00000 n 0000425924 00000 n 0000423746 00000 n 0000423917 00000 n 0000426041 00000 n 0000424099 00000 n 0000424270 00000 n 0000426158 00000 n 0000424452 00000 n 0000424623 00000 n 0000426275 00000 n 0000424805 00000 n 0000424975 00000 n 0000426392 00000 n 0000425156 00000 n 0000425327 00000 n 0000433224 00000 n 0000429687 00000 n 0000426607 00000 n 0000432382 00000 n 0000432441 00000 n 0000429948 00000 n 0000430119 00000 n 0000432616 00000 n 0000433047 00000 n 0000430301 00000 n 0000430456 00000 n 0000430612 00000 n 0000430800 00000 n 0000430956 00000 n 0000431144 00000 n 0000431332 00000 n 0000431488 00000 n 0000431677 00000 n 0000433165 00000 n 0000431863 00000 n 0000432019 00000 n 0000432201 00000 n 0000438891 00000 n 0000435861 00000 n 0000433352 00000 n 0000438537 00000 n 0000436122 00000 n 0000436311 00000 n 0000436467 00000 n 0000436655 00000 n 0000438655 00000 n 0000436840 00000 n 0000436996 00000 n 0000437179 00000 n 0000437362 00000 n 0000437545 00000 n 0000437700 00000 n 0000437882 00000 n 0000438773 00000 n 0000438037 00000 n 0000438193 00000 n 0000438381 00000 n 0000444749 00000 n 0000441611 00000 n 0000439019 00000 n 0000444395 00000 n 0000444454 00000 n 0000441872 00000 n 0000442061 00000 n 0000442249 00000 n 0000442404 00000 n 0000442593 00000 n 0000442776 00000 n 0000442959 00000 n 0000443148 00000 n 0000443336 00000 n 0000443491 00000 n 0000443680 00000 n 0000444572 00000 n 0000443866 00000 n 0000444022 00000 n 0000444210 00000 n 0000444690 00000 n 0001624201 00000 n 0000450691 00000 n 0000447716 00000 n 0000444890 00000 n 0000450101 00000 n 0000447950 00000 n 0000448106 00000 n 0000448295 00000 n 0000450219 00000 n 0000450394 00000 n 0000450574 00000 n 0000448481 00000 n 0000448663 00000 n 0000448877 00000 n 0000449092 00000 n 0000449307 00000 n 0000449521 00000 n 0000450633 00000 n 0000449735 00000 n 0000449918 00000 n 0000454169 00000 n 0000454287 00000 n 0000454351 00000 n 0000454415 00000 n 0000454479 00000 n 0000454543 00000 n 0000454665 00000 n 0000457271 00000 n 0000454783 00000 n 0000453228 00000 n 0000450858 00000 n 0000453935 00000 n 0000453994 00000 n 0000453390 00000 n 0000453572 00000 n 0000453753 00000 n 0000454228 00000 n 0000454724 00000 n 0000457447 00000 n 0000457744 00000 n 0000456913 00000 n 0000454923 00000 n 0000457212 00000 n 0000457330 00000 n 0000457506 00000 n 0000457685 00000 n 0000457057 00000 n 0000466937 00000 n 0000460331 00000 n 0000457884 00000 n 0000466701 00000 n 0000466760 00000 n 0000460763 00000 n 0000460946 00000 n 0000461129 00000 n 0000461312 00000 n 0000461494 00000 n 0000461650 00000 n 0000461806 00000 n 0000461988 00000 n 0000462170 00000 n 0000462352 00000 n 0000462534 00000 n 0000462717 00000 n 0000462900 00000 n 0000463083 00000 n 0000463266 00000 n 0000463449 00000 n 0000466819 00000 n 0000463632 00000 n 0000463814 00000 n 0000464028 00000 n 0000464243 00000 n 0000464457 00000 n 0000464671 00000 n 0000466878 00000 n 0000464885 00000 n 0000465068 00000 n 0000465224 00000 n 0000465379 00000 n 0000465562 00000 n 0000465718 00000 n 0000465872 00000 n 0000466054 00000 n 0000466209 00000 n 0000466365 00000 n 0000466546 00000 n 0000538374 00000 n 0000538492 00000 n 0000538615 00000 n 0000538738 00000 n 0000543244 00000 n 0000543362 00000 n 0000543426 00000 n 0000543490 00000 n 0000543554 00000 n 0000543618 00000 n 0000549267 00000 n 0000549385 00000 n 0000474557 00000 n 0000469490 00000 n 0000467050 00000 n 0000474498 00000 n 0000469868 00000 n 0000470023 00000 n 0000470205 00000 n 0000470387 00000 n 0000470569 00000 n 0000470725 00000 n 0000470881 00000 n 0000471063 00000 n 0000471245 00000 n 0000471427 00000 n 0000471582 00000 n 0000471737 00000 n 0000471919 00000 n 0000472102 00000 n 0000472285 00000 n 0000472440 00000 n 0000472596 00000 n 0000472779 00000 n 0000472962 00000 n 0000473145 00000 n 0000473301 00000 n 0000473457 00000 n 0000473639 00000 n 0000473820 00000 n 0000474003 00000 n 0000474159 00000 n 0000474315 00000 n 0000553703 00000 n 0000553820 00000 n 0000558796 00000 n 0000558914 00000 n 0000559037 00000 n 0000559160 00000 n 0000559282 00000 n 0000559404 00000 n 0000559527 00000 n 0000563979 00000 n 0000564102 00000 n 0000564225 00000 n 0000564348 00000 n 0000564471 00000 n 0000564593 00000 n 0000564716 00000 n 0000482684 00000 n 0000477260 00000 n 0000474683 00000 n 0000482625 00000 n 0000477656 00000 n 0000477839 00000 n 0000478022 00000 n 0000478176 00000 n 0000478332 00000 n 0000478513 00000 n 0000478696 00000 n 0000478878 00000 n 0000479033 00000 n 0000479189 00000 n 0000479371 00000 n 0000479554 00000 n 0000479735 00000 n 0000479889 00000 n 0000480044 00000 n 0000480227 00000 n 0000480410 00000 n 0000480593 00000 n 0000480749 00000 n 0000480905 00000 n 0000481088 00000 n 0000481271 00000 n 0000481454 00000 n 0000481610 00000 n 0000481766 00000 n 0000481949 00000 n 0000482132 00000 n 0000482315 00000 n 0000482471 00000 n 0001624326 00000 n 0000564839 00000 n 0000569406 00000 n 0000569529 00000 n 0000569652 00000 n 0000569775 00000 n 0000569898 00000 n 0000570021 00000 n 0000570144 00000 n 0000570267 00000 n 0000570390 00000 n 0000574887 00000 n 0000575010 00000 n 0000575133 00000 n 0000575256 00000 n 0000575379 00000 n 0000575501 00000 n 0000575624 00000 n 0000490359 00000 n 0000485263 00000 n 0000482810 00000 n 0000490300 00000 n 0000485641 00000 n 0000485824 00000 n 0000486007 00000 n 0000486190 00000 n 0000486344 00000 n 0000486500 00000 n 0000486683 00000 n 0000486866 00000 n 0000487049 00000 n 0000487205 00000 n 0000487361 00000 n 0000487544 00000 n 0000487727 00000 n 0000487909 00000 n 0000488063 00000 n 0000488219 00000 n 0000488401 00000 n 0000488584 00000 n 0000488767 00000 n 0000488923 00000 n 0000489079 00000 n 0000489262 00000 n 0000489444 00000 n 0000489626 00000 n 0000489781 00000 n 0000489936 00000 n 0000490119 00000 n 0000575746 00000 n 0000580364 00000 n 0000580487 00000 n 0000580609 00000 n 0000580732 00000 n 0000580855 00000 n 0000580978 00000 n 0000581101 00000 n 0000581224 00000 n 0000581347 00000 n 0000585837 00000 n 0000585960 00000 n 0000586083 00000 n 0000586206 00000 n 0000586329 00000 n 0000586452 00000 n 0000586575 00000 n 0000498210 00000 n 0000492976 00000 n 0000490485 00000 n 0000498151 00000 n 0000493363 00000 n 0000493546 00000 n 0000493702 00000 n 0000493858 00000 n 0000494041 00000 n 0000494224 00000 n 0000494407 00000 n 0000494563 00000 n 0000494719 00000 n 0000494902 00000 n 0000495084 00000 n 0000495265 00000 n 0000495420 00000 n 0000495576 00000 n 0000495759 00000 n 0000495941 00000 n 0000496124 00000 n 0000496280 00000 n 0000496436 00000 n 0000496619 00000 n 0000496802 00000 n 0000496984 00000 n 0000497139 00000 n 0000497294 00000 n 0000497474 00000 n 0000497657 00000 n 0000497840 00000 n 0000497996 00000 n 0000586697 00000 n 0000591146 00000 n 0000591269 00000 n 0000591391 00000 n 0000591514 00000 n 0000591637 00000 n 0000591760 00000 n 0000591883 00000 n 0000592006 00000 n 0000592129 00000 n 0000596570 00000 n 0000596693 00000 n 0000596816 00000 n 0000596939 00000 n 0000597062 00000 n 0000597184 00000 n 0000505908 00000 n 0000500810 00000 n 0000498336 00000 n 0000505849 00000 n 0000501188 00000 n 0000501371 00000 n 0000501554 00000 n 0000501737 00000 n 0000501893 00000 n 0000502047 00000 n 0000502230 00000 n 0000502412 00000 n 0000502594 00000 n 0000502750 00000 n 0000502906 00000 n 0000503088 00000 n 0000503270 00000 n 0000503452 00000 n 0000503607 00000 n 0000503763 00000 n 0000503946 00000 n 0000504129 00000 n 0000504312 00000 n 0000504468 00000 n 0000504624 00000 n 0000504807 00000 n 0000504990 00000 n 0000505172 00000 n 0000505327 00000 n 0000505483 00000 n 0000505666 00000 n 0000597307 00000 n 0000597430 00000 n 0000602046 00000 n 0000602169 00000 n 0000602292 00000 n 0000602415 00000 n 0000602538 00000 n 0000602661 00000 n 0000602784 00000 n 0000602907 00000 n 0000603030 00000 n 0000607350 00000 n 0000607473 00000 n 0000607596 00000 n 0000607719 00000 n 0000607842 00000 n 0000607964 00000 n 0000512373 00000 n 0000508695 00000 n 0000506034 00000 n 0000512198 00000 n 0000512257 00000 n 0000508992 00000 n 0000509174 00000 n 0000509356 00000 n 0000509539 00000 n 0000509722 00000 n 0000509905 00000 n 0000510087 00000 n 0000510270 00000 n 0000510453 00000 n 0000510635 00000 n 0000510818 00000 n 0000511001 00000 n 0000511183 00000 n 0000511339 00000 n 0000511522 00000 n 0000511678 00000 n 0000511860 00000 n 0000512043 00000 n 0000608262 00000 n 0000608385 00000 n 0000612173 00000 n 0000612296 00000 n 0000612419 00000 n 0000612541 00000 n 0000612662 00000 n 0000612785 00000 n 0000612908 00000 n 0000613031 00000 n 0000613154 00000 n 0000532998 00000 n 0000516812 00000 n 0000512486 00000 n 0000532939 00000 n 0000517703 00000 n 0000517891 00000 n 0000518074 00000 n 0000518257 00000 n 0000518440 00000 n 0000518596 00000 n 0000518778 00000 n 0000518932 00000 n 0000519114 00000 n 0000519270 00000 n 0000519451 00000 n 0000519633 00000 n 0000519814 00000 n 0000519996 00000 n 0000520179 00000 n 0000520362 00000 n 0000520544 00000 n 0000520727 00000 n 0000520910 00000 n 0000521090 00000 n 0000521272 00000 n 0000521454 00000 n 0000521636 00000 n 0000521819 00000 n 0000522002 00000 n 0000522184 00000 n 0000522367 00000 n 0000522550 00000 n 0000522731 00000 n 0000522914 00000 n 0000523097 00000 n 0000523279 00000 n 0000523462 00000 n 0000523645 00000 n 0000523826 00000 n 0000524008 00000 n 0000524190 00000 n 0000524372 00000 n 0000524555 00000 n 0000524737 00000 n 0000524919 00000 n 0000525102 00000 n 0000525285 00000 n 0000525467 00000 n 0000525650 00000 n 0000525833 00000 n 0000526014 00000 n 0000526197 00000 n 0000526380 00000 n 0000526562 00000 n 0000526745 00000 n 0000526927 00000 n 0000527109 00000 n 0000527291 00000 n 0000527474 00000 n 0000527655 00000 n 0000527837 00000 n 0000528019 00000 n 0000528201 00000 n 0000528384 00000 n 0000528566 00000 n 0000528748 00000 n 0000528931 00000 n 0000529114 00000 n 0000529295 00000 n 0000529477 00000 n 0000529659 00000 n 0000529841 00000 n 0000530024 00000 n 0000530206 00000 n 0000530388 00000 n 0000530571 00000 n 0000530754 00000 n 0000530936 00000 n 0000531119 00000 n 0000531302 00000 n 0000531483 00000 n 0000531666 00000 n 0000531849 00000 n 0000532031 00000 n 0000532214 00000 n 0000532397 00000 n 0000532577 00000 n 0000532758 00000 n 0000538801 00000 n 0000536201 00000 n 0000533084 00000 n 0000538257 00000 n 0000536426 00000 n 0000536608 00000 n 0000536791 00000 n 0000536974 00000 n 0000537156 00000 n 0000537339 00000 n 0000537522 00000 n 0000537703 00000 n 0000537886 00000 n 0000538069 00000 n 0000538433 00000 n 0000538556 00000 n 0000538679 00000 n 0001624451 00000 n 0000543682 00000 n 0000540325 00000 n 0000538955 00000 n 0000542480 00000 n 0000542539 00000 n 0000540559 00000 n 0000542661 00000 n 0000540715 00000 n 0000540886 00000 n 0000542778 00000 n 0000541068 00000 n 0000541239 00000 n 0000542894 00000 n 0000541421 00000 n 0000541592 00000 n 0000543010 00000 n 0000541774 00000 n 0000541945 00000 n 0000543127 00000 n 0000542127 00000 n 0000542298 00000 n 0000543303 00000 n 0000549620 00000 n 0000546286 00000 n 0000543795 00000 n 0000549032 00000 n 0000549208 00000 n 0000546556 00000 n 0000546712 00000 n 0000546868 00000 n 0000549326 00000 n 0000547024 00000 n 0000547180 00000 n 0000549444 00000 n 0000547335 00000 n 0000547491 00000 n 0000547679 00000 n 0000549561 00000 n 0000547835 00000 n 0000547991 00000 n 0000548174 00000 n 0000548357 00000 n 0000548513 00000 n 0000548668 00000 n 0000548850 00000 n 0000553938 00000 n 0000552004 00000 n 0000549734 00000 n 0000553644 00000 n 0000552211 00000 n 0000552367 00000 n 0000552554 00000 n 0000553761 00000 n 0000552737 00000 n 0000552925 00000 n 0000553081 00000 n 0000553270 00000 n 0000553879 00000 n 0000553455 00000 n 0000559590 00000 n 0000556575 00000 n 0000554079 00000 n 0000558737 00000 n 0000556809 00000 n 0000556963 00000 n 0000557152 00000 n 0000558855 00000 n 0000557337 00000 n 0000557492 00000 n 0000558978 00000 n 0000557673 00000 n 0000559101 00000 n 0000557855 00000 n 0000559223 00000 n 0000558037 00000 n 0000558193 00000 n 0000559345 00000 n 0000558375 00000 n 0000559468 00000 n 0000558557 00000 n 0000564961 00000 n 0000561706 00000 n 0000559744 00000 n 0000563861 00000 n 0000563920 00000 n 0000561940 00000 n 0000562096 00000 n 0000564043 00000 n 0000562278 00000 n 0000564166 00000 n 0000562460 00000 n 0000564289 00000 n 0000562641 00000 n 0000562797 00000 n 0000564412 00000 n 0000562979 00000 n 0000564535 00000 n 0000563161 00000 n 0000564657 00000 n 0000563342 00000 n 0000563497 00000 n 0000564780 00000 n 0000563679 00000 n 0000564903 00000 n 0000570454 00000 n 0000567000 00000 n 0000565115 00000 n 0000569347 00000 n 0000567243 00000 n 0000569470 00000 n 0000567425 00000 n 0000567581 00000 n 0000569593 00000 n 0000567763 00000 n 0000569716 00000 n 0000567944 00000 n 0000569839 00000 n 0000568126 00000 n 0000568282 00000 n 0000569962 00000 n 0000568464 00000 n 0000570085 00000 n 0000568645 00000 n 0000570208 00000 n 0000568827 00000 n 0000568983 00000 n 0000570331 00000 n 0000569165 00000 n 0001624576 00000 n 0000575868 00000 n 0000572613 00000 n 0000570608 00000 n 0000574769 00000 n 0000574828 00000 n 0000572847 00000 n 0000574951 00000 n 0000573029 00000 n 0000573185 00000 n 0000575074 00000 n 0000573367 00000 n 0000575197 00000 n 0000573548 00000 n 0000575320 00000 n 0000573730 00000 n 0000573886 00000 n 0000575443 00000 n 0000574068 00000 n 0000575565 00000 n 0000574249 00000 n 0000575687 00000 n 0000574431 00000 n 0000574587 00000 n 0000575810 00000 n 0000581411 00000 n 0000577958 00000 n 0000576022 00000 n 0000580305 00000 n 0000578201 00000 n 0000580428 00000 n 0000578383 00000 n 0000580551 00000 n 0000578565 00000 n 0000578721 00000 n 0000580673 00000 n 0000578902 00000 n 0000580796 00000 n 0000579084 00000 n 0000580919 00000 n 0000579266 00000 n 0000579422 00000 n 0000581042 00000 n 0000579603 00000 n 0000581165 00000 n 0000579785 00000 n 0000581288 00000 n 0000579967 00000 n 0000580123 00000 n 0000586820 00000 n 0000583567 00000 n 0000581565 00000 n 0000585719 00000 n 0000585778 00000 n 0000583801 00000 n 0000585901 00000 n 0000583983 00000 n 0000586024 00000 n 0000584164 00000 n 0000584320 00000 n 0000586147 00000 n 0000584501 00000 n 0000586270 00000 n 0000584683 00000 n 0000586393 00000 n 0000584865 00000 n 0000585020 00000 n 0000586516 00000 n 0000585201 00000 n 0000586638 00000 n 0000585383 00000 n 0000586761 00000 n 0000585565 00000 n 0000592193 00000 n 0000588904 00000 n 0000586974 00000 n 0000591087 00000 n 0000589138 00000 n 0000591210 00000 n 0000589320 00000 n 0000591333 00000 n 0000589502 00000 n 0000591455 00000 n 0000589684 00000 n 0000589839 00000 n 0000591578 00000 n 0000590021 00000 n 0000591701 00000 n 0000590203 00000 n 0000591824 00000 n 0000590385 00000 n 0000590541 00000 n 0000591947 00000 n 0000590723 00000 n 0000592070 00000 n 0000590905 00000 n 0000597552 00000 n 0000594297 00000 n 0000592347 00000 n 0000596452 00000 n 0000596511 00000 n 0000594531 00000 n 0000594687 00000 n 0000596634 00000 n 0000594869 00000 n 0000596757 00000 n 0000595051 00000 n 0000596880 00000 n 0000595232 00000 n 0000595388 00000 n 0000597003 00000 n 0000595570 00000 n 0000597126 00000 n 0000595752 00000 n 0000597248 00000 n 0000595933 00000 n 0000596088 00000 n 0000597371 00000 n 0000596270 00000 n 0000597494 00000 n 0000603094 00000 n 0000599641 00000 n 0000597706 00000 n 0000601987 00000 n 0000599884 00000 n 0000602110 00000 n 0000600066 00000 n 0000600222 00000 n 0000602233 00000 n 0000600404 00000 n 0000602356 00000 n 0000600585 00000 n 0000602479 00000 n 0000600767 00000 n 0000600923 00000 n 0000602602 00000 n 0000601105 00000 n 0000602725 00000 n 0000601286 00000 n 0000602848 00000 n 0000601468 00000 n 0000601623 00000 n 0000602971 00000 n 0000601805 00000 n 0001624701 00000 n 0000608448 00000 n 0000605236 00000 n 0000603248 00000 n 0000607232 00000 n 0000607291 00000 n 0000605461 00000 n 0000607414 00000 n 0000605643 00000 n 0000605799 00000 n 0000607537 00000 n 0000605981 00000 n 0000607660 00000 n 0000606162 00000 n 0000607783 00000 n 0000606344 00000 n 0000606500 00000 n 0000607906 00000 n 0000606682 00000 n 0000608028 00000 n 0000606863 00000 n 0000608203 00000 n 0000608326 00000 n 0000607045 00000 n 0000613458 00000 n 0000610182 00000 n 0000608602 00000 n 0000612055 00000 n 0000612114 00000 n 0000610398 00000 n 0000612237 00000 n 0000610587 00000 n 0000612360 00000 n 0000610776 00000 n 0000612482 00000 n 0000610963 00000 n 0000612604 00000 n 0000611152 00000 n 0000612726 00000 n 0000611340 00000 n 0000612849 00000 n 0000611529 00000 n 0000612972 00000 n 0000613095 00000 n 0000611718 00000 n 0000613218 00000 n 0000613399 00000 n 0000611901 00000 n 0000623081 00000 n 0000616168 00000 n 0000613570 00000 n 0000622845 00000 n 0000622904 00000 n 0000616618 00000 n 0000616801 00000 n 0000616957 00000 n 0000617113 00000 n 0000617296 00000 n 0000617479 00000 n 0000617662 00000 n 0000617845 00000 n 0000618028 00000 n 0000618211 00000 n 0000618393 00000 n 0000618575 00000 n 0000618757 00000 n 0000622963 00000 n 0000618939 00000 n 0000619122 00000 n 0000619335 00000 n 0000619548 00000 n 0000619762 00000 n 0000619976 00000 n 0000623022 00000 n 0000620190 00000 n 0000620373 00000 n 0000620529 00000 n 0000620685 00000 n 0000620868 00000 n 0000621024 00000 n 0000621180 00000 n 0000621363 00000 n 0000621519 00000 n 0000621675 00000 n 0000621858 00000 n 0000622014 00000 n 0000622169 00000 n 0000622352 00000 n 0000622508 00000 n 0000622690 00000 n 0000641209 00000 n 0000645319 00000 n 0000645437 00000 n 0000645501 00000 n 0000645565 00000 n 0000645629 00000 n 0000645693 00000 n 0000645815 00000 n 0000645933 00000 n 0000646050 00000 n 0000651080 00000 n 0000651198 00000 n 0000632149 00000 n 0000627072 00000 n 0000623194 00000 n 0000631973 00000 n 0000627441 00000 n 0000627623 00000 n 0000627779 00000 n 0000627962 00000 n 0000628118 00000 n 0000628301 00000 n 0000628457 00000 n 0000628640 00000 n 0000628796 00000 n 0000628979 00000 n 0000629158 00000 n 0000629341 00000 n 0000629524 00000 n 0000632032 00000 n 0000629707 00000 n 0000629888 00000 n 0000630043 00000 n 0000630226 00000 n 0000630382 00000 n 0000630565 00000 n 0000630748 00000 n 0000630930 00000 n 0000631086 00000 n 0000631269 00000 n 0000631458 00000 n 0000631640 00000 n 0000631823 00000 n 0000655731 00000 n 0000660308 00000 n 0000664804 00000 n 0000664922 00000 n 0000672250 00000 n 0000672368 00000 n 0000672486 00000 n 0000672604 00000 n 0000637150 00000 n 0000635999 00000 n 0000632275 00000 n 0000637091 00000 n 0000636179 00000 n 0000636361 00000 n 0000636543 00000 n 0000636726 00000 n 0000636909 00000 n 0000641917 00000 n 0000638947 00000 n 0000637263 00000 n 0000641092 00000 n 0000641268 00000 n 0000639181 00000 n 0000641390 00000 n 0000639336 00000 n 0000639507 00000 n 0000641507 00000 n 0000639688 00000 n 0000639859 00000 n 0000641624 00000 n 0000640040 00000 n 0000640209 00000 n 0000641741 00000 n 0000640388 00000 n 0000640559 00000 n 0000641858 00000 n 0000640740 00000 n 0000640911 00000 n 0001624826 00000 n 0000646168 00000 n 0000643889 00000 n 0000642016 00000 n 0000645202 00000 n 0000645378 00000 n 0000645874 00000 n 0000644087 00000 n 0000644243 00000 n 0000644399 00000 n 0000645991 00000 n 0000644550 00000 n 0000644706 00000 n 0000646109 00000 n 0000644858 00000 n 0000645013 00000 n 0000651256 00000 n 0000648761 00000 n 0000646282 00000 n 0000650903 00000 n 0000648995 00000 n 0000651021 00000 n 0000649146 00000 n 0000649301 00000 n 0000649483 00000 n 0000649665 00000 n 0000649853 00000 n 0000650003 00000 n 0000650192 00000 n 0000651139 00000 n 0000650378 00000 n 0000650530 00000 n 0000650718 00000 n 0000655849 00000 n 0000654734 00000 n 0000651384 00000 n 0000655613 00000 n 0000655672 00000 n 0000654905 00000 n 0000655057 00000 n 0000655245 00000 n 0000655790 00000 n 0000655430 00000 n 0000660426 00000 n 0000659732 00000 n 0000655990 00000 n 0000660249 00000 n 0000660367 00000 n 0000659885 00000 n 0000660068 00000 n 0000664980 00000 n 0000664226 00000 n 0000660567 00000 n 0000664745 00000 n 0000664863 00000 n 0000664379 00000 n 0000664562 00000 n 0000669443 00000 n 0000668880 00000 n 0000665121 00000 n 0000669207 00000 n 0000669266 00000 n 0000669024 00000 n 0000669384 00000 n 0001624951 00000 n 0000672960 00000 n 0000672068 00000 n 0000669584 00000 n 0000672191 00000 n 0000672309 00000 n 0000672427 00000 n 0000672545 00000 n 0000672663 00000 n 0000672838 00000 n 0000677937 00000 n 0000675860 00000 n 0000673087 00000 n 0000677527 00000 n 0000677644 00000 n 0000676067 00000 n 0000676250 00000 n 0000676432 00000 n 0000676615 00000 n 0000676797 00000 n 0000676980 00000 n 0000677162 00000 n 0000677345 00000 n 0000677819 00000 n 0000677878 00000 n 0000680890 00000 n 0000681008 00000 n 0000685735 00000 n 0000681126 00000 n 0000680505 00000 n 0000678078 00000 n 0000680831 00000 n 0000680949 00000 n 0000681067 00000 n 0000680649 00000 n 0000685858 00000 n 0000684585 00000 n 0000681267 00000 n 0000685676 00000 n 0000684765 00000 n 0000684947 00000 n 0000685799 00000 n 0000685129 00000 n 0000685311 00000 n 0000685493 00000 n 0000692608 00000 n 0000688375 00000 n 0000686052 00000 n 0000692194 00000 n 0000688681 00000 n 0000692373 00000 n 0000688864 00000 n 0000692432 00000 n 0000689020 00000 n 0000689203 00000 n 0000689359 00000 n 0000689515 00000 n 0000692491 00000 n 0000689698 00000 n 0000689881 00000 n 0000690094 00000 n 0000690308 00000 n 0000690519 00000 n 0000690733 00000 n 0000692550 00000 n 0000690947 00000 n 0000691128 00000 n 0000691280 00000 n 0000691463 00000 n 0000691645 00000 n 0000691828 00000 n 0000692011 00000 n 0000710214 00000 n 0000710332 00000 n 0000717221 00000 n 0000717339 00000 n 0000717403 00000 n 0000717467 00000 n 0000717531 00000 n 0000717595 00000 n 0000717835 00000 n 0000721099 00000 n 0000721217 00000 n 0000721340 00000 n 0000721463 00000 n 0000698150 00000 n 0000694701 00000 n 0000692734 00000 n 0000698091 00000 n 0000694989 00000 n 0000695172 00000 n 0000695355 00000 n 0000695538 00000 n 0000695721 00000 n 0000695904 00000 n 0000696086 00000 n 0000696268 00000 n 0000696451 00000 n 0000696634 00000 n 0000696815 00000 n 0000696997 00000 n 0000697180 00000 n 0000697363 00000 n 0000697546 00000 n 0000697727 00000 n 0000697910 00000 n 0001625076 00000 n 0000721585 00000 n 0000721708 00000 n 0000721831 00000 n 0000725117 00000 n 0000725240 00000 n 0000725363 00000 n 0000725485 00000 n 0000725608 00000 n 0000725731 00000 n 0000725852 00000 n 0000728548 00000 n 0000728666 00000 n 0000728788 00000 n 0000728911 00000 n 0000729033 00000 n 0000732295 00000 n 0000732418 00000 n 0000704487 00000 n 0000700579 00000 n 0000698249 00000 n 0000704312 00000 n 0000700885 00000 n 0000701068 00000 n 0000701251 00000 n 0000701434 00000 n 0000704371 00000 n 0000701617 00000 n 0000701798 00000 n 0000701980 00000 n 0000702136 00000 n 0000702317 00000 n 0000702497 00000 n 0000702678 00000 n 0000702858 00000 n 0000703039 00000 n 0000703221 00000 n 0000703402 00000 n 0000703584 00000 n 0000703766 00000 n 0000703948 00000 n 0000704130 00000 n 0000732541 00000 n 0000732664 00000 n 0000732787 00000 n 0000732910 00000 n 0000733090 00000 n 0000710455 00000 n 0000707128 00000 n 0000704614 00000 n 0000710097 00000 n 0000707398 00000 n 0000707580 00000 n 0000707762 00000 n 0000707944 00000 n 0000708125 00000 n 0000708307 00000 n 0000708488 00000 n 0000708670 00000 n 0000708852 00000 n 0000709033 00000 n 0000709215 00000 n 0000709397 00000 n 0000709579 00000 n 0000709760 00000 n 0000710273 00000 n 0000709941 00000 n 0000710396 00000 n 0000717957 00000 n 0000713728 00000 n 0000710594 00000 n 0000717104 00000 n 0000717280 00000 n 0000717776 00000 n 0000714016 00000 n 0000714172 00000 n 0000714360 00000 n 0000714545 00000 n 0000714727 00000 n 0000714910 00000 n 0000715093 00000 n 0000715276 00000 n 0000715459 00000 n 0000715642 00000 n 0000715825 00000 n 0000716008 00000 n 0000716191 00000 n 0000716373 00000 n 0000716556 00000 n 0000716738 00000 n 0000716921 00000 n 0000717899 00000 n 0000721894 00000 n 0000719760 00000 n 0000718085 00000 n 0000721040 00000 n 0000721158 00000 n 0000719949 00000 n 0000721281 00000 n 0000720131 00000 n 0000721404 00000 n 0000720313 00000 n 0000721527 00000 n 0000720495 00000 n 0000721649 00000 n 0000720677 00000 n 0000721772 00000 n 0000720859 00000 n 0000725975 00000 n 0000723530 00000 n 0000722008 00000 n 0000724999 00000 n 0000725058 00000 n 0000723728 00000 n 0000725181 00000 n 0000723910 00000 n 0000725304 00000 n 0000724091 00000 n 0000725426 00000 n 0000724273 00000 n 0000725549 00000 n 0000724455 00000 n 0000725672 00000 n 0000724636 00000 n 0000725793 00000 n 0000724817 00000 n 0000725916 00000 n 0000729092 00000 n 0000727781 00000 n 0000726089 00000 n 0000728489 00000 n 0000728607 00000 n 0000727943 00000 n 0000728730 00000 n 0000728125 00000 n 0000728852 00000 n 0000728307 00000 n 0000728974 00000 n 0001625201 00000 n 0000733384 00000 n 0000730542 00000 n 0000729206 00000 n 0000732177 00000 n 0000732236 00000 n 0000730749 00000 n 0000732359 00000 n 0000730931 00000 n 0000732482 00000 n 0000731112 00000 n 0000732605 00000 n 0000731293 00000 n 0000732728 00000 n 0000731475 00000 n 0000732851 00000 n 0000731657 00000 n 0000732974 00000 n 0000731839 00000 n 0000733149 00000 n 0000733325 00000 n 0000732021 00000 n 0000743903 00000 n 0000736132 00000 n 0000733510 00000 n 0000743667 00000 n 0000743726 00000 n 0000736618 00000 n 0000736801 00000 n 0000736956 00000 n 0000737112 00000 n 0000737295 00000 n 0000737478 00000 n 0000737661 00000 n 0000737844 00000 n 0000738027 00000 n 0000738210 00000 n 0000738392 00000 n 0000738574 00000 n 0000738756 00000 n 0000738938 00000 n 0000739121 00000 n 0000739304 00000 n 0000739487 00000 n 0000743785 00000 n 0000739670 00000 n 0000739852 00000 n 0000740066 00000 n 0000740281 00000 n 0000740496 00000 n 0000740711 00000 n 0000740925 00000 n 0000741139 00000 n 0000743844 00000 n 0000741354 00000 n 0000741537 00000 n 0000741693 00000 n 0000741849 00000 n 0000742032 00000 n 0000742188 00000 n 0000742371 00000 n 0000742527 00000 n 0000742683 00000 n 0000742838 00000 n 0000743019 00000 n 0000743174 00000 n 0000743330 00000 n 0000743512 00000 n 0000752199 00000 n 0000757022 00000 n 0000757140 00000 n 0000757204 00000 n 0000757268 00000 n 0000757331 00000 n 0000757395 00000 n 0000757459 00000 n 0000764329 00000 n 0000764447 00000 n 0000771038 00000 n 0000771155 00000 n 0000752496 00000 n 0000747288 00000 n 0000744016 00000 n 0000751965 00000 n 0000747648 00000 n 0000747804 00000 n 0000747987 00000 n 0000748143 00000 n 0000748298 00000 n 0000748481 00000 n 0000748637 00000 n 0000748820 00000 n 0000752024 00000 n 0000748976 00000 n 0000749157 00000 n 0000749313 00000 n 0000749495 00000 n 0000749678 00000 n 0000749861 00000 n 0000750043 00000 n 0000750199 00000 n 0000750382 00000 n 0000750565 00000 n 0000750721 00000 n 0000750904 00000 n 0000751093 00000 n 0000751275 00000 n 0000752258 00000 n 0000751458 00000 n 0000752380 00000 n 0000751613 00000 n 0000751784 00000 n 0000757522 00000 n 0000753907 00000 n 0000752609 00000 n 0000756265 00000 n 0000756324 00000 n 0000754150 00000 n 0000754321 00000 n 0000756441 00000 n 0000754503 00000 n 0000754674 00000 n 0000756558 00000 n 0000754856 00000 n 0000755027 00000 n 0000756673 00000 n 0000755208 00000 n 0000755379 00000 n 0000756788 00000 n 0000755561 00000 n 0000755731 00000 n 0000756905 00000 n 0000755912 00000 n 0000756083 00000 n 0000757081 00000 n 0000764505 00000 n 0000761140 00000 n 0000757622 00000 n 0000764094 00000 n 0000764270 00000 n 0000761419 00000 n 0000761575 00000 n 0000761731 00000 n 0000761887 00000 n 0000762042 00000 n 0000762198 00000 n 0000762353 00000 n 0000762509 00000 n 0000762691 00000 n 0000762879 00000 n 0000763035 00000 n 0000763224 00000 n 0000764388 00000 n 0000763410 00000 n 0000763565 00000 n 0000763721 00000 n 0000763909 00000 n 0000771331 00000 n 0000767724 00000 n 0000764673 00000 n 0000770920 00000 n 0000770979 00000 n 0000768012 00000 n 0000768166 00000 n 0000768349 00000 n 0000768532 00000 n 0000768686 00000 n 0000768874 00000 n 0000769030 00000 n 0000769219 00000 n 0000771097 00000 n 0000769405 00000 n 0000769561 00000 n 0000769744 00000 n 0000769927 00000 n 0000770082 00000 n 0000770265 00000 n 0000771214 00000 n 0000770420 00000 n 0000770576 00000 n 0000770765 00000 n 0001625326 00000 n 0000776291 00000 n 0000773942 00000 n 0000771459 00000 n 0000775937 00000 n 0000775996 00000 n 0000774167 00000 n 0000774323 00000 n 0000774506 00000 n 0000774688 00000 n 0000774877 00000 n 0000775033 00000 n 0000775221 00000 n 0000776114 00000 n 0000775406 00000 n 0000775562 00000 n 0000775751 00000 n 0000776232 00000 n 0000780238 00000 n 0000778471 00000 n 0000776419 00000 n 0000779824 00000 n 0000778669 00000 n 0000778825 00000 n 0000779014 00000 n 0000779999 00000 n 0000780179 00000 n 0000779200 00000 n 0000779356 00000 n 0000779512 00000 n 0000779668 00000 n 0000789272 00000 n 0000782791 00000 n 0000780392 00000 n 0000789154 00000 n 0000789213 00000 n 0000783223 00000 n 0000783406 00000 n 0000783588 00000 n 0000783770 00000 n 0000783953 00000 n 0000784135 00000 n 0000784318 00000 n 0000784501 00000 n 0000784684 00000 n 0000784867 00000 n 0000785050 00000 n 0000785231 00000 n 0000785413 00000 n 0000785595 00000 n 0000785750 00000 n 0000785906 00000 n 0000786089 00000 n 0000786245 00000 n 0000786428 00000 n 0000786611 00000 n 0000786792 00000 n 0000786974 00000 n 0000787156 00000 n 0000787338 00000 n 0000787520 00000 n 0000787702 00000 n 0000787883 00000 n 0000788063 00000 n 0000788246 00000 n 0000788428 00000 n 0000788609 00000 n 0000788791 00000 n 0000788972 00000 n 0000817336 00000 n 0000835468 00000 n 0000817454 00000 n 0000817576 00000 n 0000817699 00000 n 0000817817 00000 n 0000817939 00000 n 0000818062 00000 n 0000818185 00000 n 0000801057 00000 n 0000792659 00000 n 0000789384 00000 n 0000800880 00000 n 0000793172 00000 n 0000793355 00000 n 0000800939 00000 n 0000793538 00000 n 0000793721 00000 n 0000793935 00000 n 0000794150 00000 n 0000794365 00000 n 0000794578 00000 n 0000794791 00000 n 0000795005 00000 n 0000795219 00000 n 0000795434 00000 n 0000795648 00000 n 0000795863 00000 n 0000796078 00000 n 0000796292 00000 n 0000796505 00000 n 0000800998 00000 n 0000796720 00000 n 0000796901 00000 n 0000797084 00000 n 0000797267 00000 n 0000797423 00000 n 0000797579 00000 n 0000797762 00000 n 0000797918 00000 n 0000798074 00000 n 0000798228 00000 n 0000798411 00000 n 0000798566 00000 n 0000798722 00000 n 0000798905 00000 n 0000799061 00000 n 0000799217 00000 n 0000799400 00000 n 0000799555 00000 n 0000799710 00000 n 0000799893 00000 n 0000800049 00000 n 0000800204 00000 n 0000800387 00000 n 0000800543 00000 n 0000800725 00000 n 0000826342 00000 n 0000826460 00000 n 0000826524 00000 n 0000826588 00000 n 0000826652 00000 n 0000826716 00000 n 0000826779 00000 n 0000826843 00000 n 0000826907 00000 n 0000826971 00000 n 0000827035 00000 n 0000827099 00000 n 0000827163 00000 n 0000827227 00000 n 0000827291 00000 n 0000846780 00000 n 0000846903 00000 n 0000847021 00000 n 0000811941 00000 n 0000805275 00000 n 0000801183 00000 n 0000811765 00000 n 0000805734 00000 n 0000805917 00000 n 0000806072 00000 n 0000806254 00000 n 0000811824 00000 n 0000806409 00000 n 0000806591 00000 n 0000806747 00000 n 0000806930 00000 n 0000807113 00000 n 0000807296 00000 n 0000807452 00000 n 0000807634 00000 n 0000807790 00000 n 0000807973 00000 n 0000808129 00000 n 0000808312 00000 n 0000808494 00000 n 0000808650 00000 n 0000808806 00000 n 0000808962 00000 n 0000809118 00000 n 0000809273 00000 n 0000809429 00000 n 0000809612 00000 n 0000809768 00000 n 0000809950 00000 n 0000810138 00000 n 0000810319 00000 n 0000810501 00000 n 0000810650 00000 n 0000810799 00000 n 0000810948 00000 n 0000811097 00000 n 0000811246 00000 n 0000811427 00000 n 0000811609 00000 n 0000867101 00000 n 0000818488 00000 n 0000814467 00000 n 0000812067 00000 n 0000817219 00000 n 0000814728 00000 n 0000814911 00000 n 0000815094 00000 n 0000817395 00000 n 0000815277 00000 n 0000817518 00000 n 0000815460 00000 n 0000817640 00000 n 0000815643 00000 n 0000817758 00000 n 0000815825 00000 n 0000817880 00000 n 0000816008 00000 n 0000818003 00000 n 0000816191 00000 n 0000818126 00000 n 0000816374 00000 n 0000818249 00000 n 0000816529 00000 n 0000816685 00000 n 0000818371 00000 n 0000816868 00000 n 0000817038 00000 n 0001625451 00000 n 0000823741 00000 n 0000819705 00000 n 0000818600 00000 n 0000822805 00000 n 0000822864 00000 n 0000819984 00000 n 0000820155 00000 n 0000822981 00000 n 0000820337 00000 n 0000820508 00000 n 0000823098 00000 n 0000820690 00000 n 0000820861 00000 n 0000823215 00000 n 0000821043 00000 n 0000821214 00000 n 0000823332 00000 n 0000821396 00000 n 0000821567 00000 n 0000823449 00000 n 0000821749 00000 n 0000821920 00000 n 0000823565 00000 n 0000822102 00000 n 0000822273 00000 n 0000823682 00000 n 0000822453 00000 n 0000822624 00000 n 0000827707 00000 n 0000825709 00000 n 0000823827 00000 n 0000826225 00000 n 0000826401 00000 n 0000827472 00000 n 0000825862 00000 n 0000827590 00000 n 0000826042 00000 n 0000835586 00000 n 0000831991 00000 n 0000827848 00000 n 0000835350 00000 n 0000835409 00000 n 0000832288 00000 n 0000832444 00000 n 0000832625 00000 n 0000832808 00000 n 0000832964 00000 n 0000833152 00000 n 0000833308 00000 n 0000833497 00000 n 0000833653 00000 n 0000833841 00000 n 0000835527 00000 n 0000834027 00000 n 0000834183 00000 n 0000834366 00000 n 0000834548 00000 n 0000834703 00000 n 0000834857 00000 n 0000835043 00000 n 0000835198 00000 n 0000840264 00000 n 0000838958 00000 n 0000835727 00000 n 0000840205 00000 n 0000839147 00000 n 0000839303 00000 n 0000839486 00000 n 0000839675 00000 n 0000839831 00000 n 0000840019 00000 n 0000847197 00000 n 0000843259 00000 n 0000840405 00000 n 0000846721 00000 n 0000846844 00000 n 0000843565 00000 n 0000843721 00000 n 0000843904 00000 n 0000844087 00000 n 0000844270 00000 n 0000844426 00000 n 0000844609 00000 n 0000846962 00000 n 0000844765 00000 n 0000844921 00000 n 0000845110 00000 n 0000847080 00000 n 0000845266 00000 n 0000845422 00000 n 0000845578 00000 n 0000845733 00000 n 0000845889 00000 n 0000846043 00000 n 0000846198 00000 n 0000846383 00000 n 0000846566 00000 n 0000878087 00000 n 0000852943 00000 n 0000850710 00000 n 0000847311 00000 n 0000852707 00000 n 0000852766 00000 n 0000850935 00000 n 0000851091 00000 n 0000851246 00000 n 0000851435 00000 n 0000851624 00000 n 0000851807 00000 n 0000851990 00000 n 0000852177 00000 n 0000852333 00000 n 0000852521 00000 n 0000852884 00000 n 0001625576 00000 n 0000857043 00000 n 0000856010 00000 n 0000853071 00000 n 0000856866 00000 n 0000856181 00000 n 0000856336 00000 n 0000856524 00000 n 0000856984 00000 n 0000856710 00000 n 0000861812 00000 n 0000860554 00000 n 0000857171 00000 n 0000861635 00000 n 0000860734 00000 n 0000860922 00000 n 0000861753 00000 n 0000861108 00000 n 0000861291 00000 n 0000861479 00000 n 0000867224 00000 n 0000865477 00000 n 0000861940 00000 n 0000867042 00000 n 0000865684 00000 n 0000865872 00000 n 0000867165 00000 n 0000866058 00000 n 0000866214 00000 n 0000866370 00000 n 0000866553 00000 n 0000866736 00000 n 0000866886 00000 n 0000873689 00000 n 0000869900 00000 n 0000867365 00000 n 0000873100 00000 n 0000870188 00000 n 0000870376 00000 n 0000873275 00000 n 0000873454 00000 n 0000870562 00000 n 0000873513 00000 n 0000870716 00000 n 0000870902 00000 n 0000871088 00000 n 0000871244 00000 n 0000873572 00000 n 0000871430 00000 n 0000871616 00000 n 0000871801 00000 n 0000871956 00000 n 0000872111 00000 n 0000872296 00000 n 0000872451 00000 n 0000872636 00000 n 0000872790 00000 n 0000872945 00000 n 0000877557 00000 n 0000877675 00000 n 0000877793 00000 n 0000881773 00000 n 0000881891 00000 n 0000878203 00000 n 0000876228 00000 n 0000873816 00000 n 0000877440 00000 n 0000876417 00000 n 0000877616 00000 n 0000877734 00000 n 0000877852 00000 n 0000876573 00000 n 0000876759 00000 n 0000878028 00000 n 0000876941 00000 n 0000878145 00000 n 0000877096 00000 n 0000877252 00000 n 0000882066 00000 n 0000881059 00000 n 0000878330 00000 n 0000881714 00000 n 0000881832 00000 n 0000881221 00000 n 0000881375 00000 n 0000881560 00000 n 0000881950 00000 n 0001625701 00000 n 0000893716 00000 n 0000884997 00000 n 0000882180 00000 n 0000893423 00000 n 0000893540 00000 n 0000885501 00000 n 0000885687 00000 n 0000885872 00000 n 0000886058 00000 n 0000886244 00000 n 0000886430 00000 n 0000886616 00000 n 0000886802 00000 n 0000886987 00000 n 0000887172 00000 n 0000887357 00000 n 0000887542 00000 n 0000887728 00000 n 0000887914 00000 n 0000888100 00000 n 0000888286 00000 n 0000888472 00000 n 0000888657 00000 n 0000888843 00000 n 0000889029 00000 n 0000889215 00000 n 0000889401 00000 n 0000893599 00000 n 0000889587 00000 n 0000889772 00000 n 0000889987 00000 n 0000890201 00000 n 0000890417 00000 n 0000890634 00000 n 0000890850 00000 n 0000891068 00000 n 0000891286 00000 n 0000891502 00000 n 0000891719 00000 n 0000891937 00000 n 0000892155 00000 n 0000892372 00000 n 0000893657 00000 n 0000892590 00000 n 0000892776 00000 n 0000892932 00000 n 0000893116 00000 n 0000893270 00000 n 0000911022 00000 n 0000923654 00000 n 0000918055 00000 n 0000911140 00000 n 0000923772 00000 n 0000911263 00000 n 0000923890 00000 n 0000911385 00000 n 0000929594 00000 n 0000911508 00000 n 0000929712 00000 n 0000911631 00000 n 0000933976 00000 n 0000911754 00000 n 0000917116 00000 n 0000917230 00000 n 0000917294 00000 n 0000917358 00000 n 0000917422 00000 n 0000917486 00000 n 0000917550 00000 n 0000917614 00000 n 0000917678 00000 n 0000917742 00000 n 0000917806 00000 n 0000917869 00000 n 0000917933 00000 n 0000918173 00000 n 0000903488 00000 n 0000897631 00000 n 0000893842 00000 n 0000903312 00000 n 0000898036 00000 n 0000898222 00000 n 0000898378 00000 n 0000898563 00000 n 0000898718 00000 n 0000898903 00000 n 0000899058 00000 n 0000899244 00000 n 0000899400 00000 n 0000899586 00000 n 0000899742 00000 n 0000899928 00000 n 0000903371 00000 n 0000900084 00000 n 0000900269 00000 n 0000900452 00000 n 0000900603 00000 n 0000900786 00000 n 0000900975 00000 n 0000901130 00000 n 0000901317 00000 n 0000901473 00000 n 0000901662 00000 n 0000901851 00000 n 0000902040 00000 n 0000902196 00000 n 0000902385 00000 n 0000902573 00000 n 0000902758 00000 n 0000902945 00000 n 0000903131 00000 n 0000911818 00000 n 0000906560 00000 n 0000903614 00000 n 0000910905 00000 n 0000906893 00000 n 0000907049 00000 n 0000907201 00000 n 0000907386 00000 n 0000907572 00000 n 0000907756 00000 n 0000907937 00000 n 0000908121 00000 n 0000908306 00000 n 0000908491 00000 n 0000911081 00000 n 0000908676 00000 n 0000908862 00000 n 0000911204 00000 n 0000909048 00000 n 0000909233 00000 n 0000911326 00000 n 0000909418 00000 n 0000909604 00000 n 0000911449 00000 n 0000909790 00000 n 0000909976 00000 n 0000911572 00000 n 0000910161 00000 n 0000910347 00000 n 0000911695 00000 n 0000910533 00000 n 0000910719 00000 n 0000918295 00000 n 0000914561 00000 n 0000911931 00000 n 0000916818 00000 n 0000916877 00000 n 0000914795 00000 n 0000916999 00000 n 0000914981 00000 n 0000915151 00000 n 0000917173 00000 n 0000918114 00000 n 0000918237 00000 n 0000915335 00000 n 0000915519 00000 n 0000915704 00000 n 0000915889 00000 n 0000916074 00000 n 0000916259 00000 n 0000916444 00000 n 0000916632 00000 n 0000923953 00000 n 0000921362 00000 n 0000918409 00000 n 0000923595 00000 n 0000923713 00000 n 0000921596 00000 n 0000923831 00000 n 0000921752 00000 n 0000921941 00000 n 0000922128 00000 n 0000922314 00000 n 0000922502 00000 n 0000922691 00000 n 0000922879 00000 n 0000923067 00000 n 0000923223 00000 n 0000923410 00000 n 0000929830 00000 n 0000927079 00000 n 0000924107 00000 n 0000929476 00000 n 0000929535 00000 n 0000927322 00000 n 0000927510 00000 n 0000927698 00000 n 0000929653 00000 n 0000927854 00000 n 0000928010 00000 n 0000928193 00000 n 0000928382 00000 n 0000928571 00000 n 0000928727 00000 n 0000928915 00000 n 0000929771 00000 n 0000929101 00000 n 0000929290 00000 n 0001625826 00000 n 0000934094 00000 n 0000932276 00000 n 0000929971 00000 n 0000933917 00000 n 0000932483 00000 n 0000932672 00000 n 0000932861 00000 n 0000933017 00000 n 0000933203 00000 n 0000934035 00000 n 0000933387 00000 n 0000933543 00000 n 0000933731 00000 n 0000944672 00000 n 0000936916 00000 n 0000934222 00000 n 0000944258 00000 n 0000944433 00000 n 0000944613 00000 n 0000937384 00000 n 0000937570 00000 n 0000937756 00000 n 0000937942 00000 n 0000938128 00000 n 0000938314 00000 n 0000938500 00000 n 0000938686 00000 n 0000938872 00000 n 0000939058 00000 n 0000939244 00000 n 0000939430 00000 n 0000939616 00000 n 0000939801 00000 n 0000939987 00000 n 0000940173 00000 n 0000940359 00000 n 0000940545 00000 n 0000940731 00000 n 0000940917 00000 n 0000941101 00000 n 0000941285 00000 n 0000941471 00000 n 0000941657 00000 n 0000941843 00000 n 0000942029 00000 n 0000942215 00000 n 0000942401 00000 n 0000942586 00000 n 0000942772 00000 n 0000942958 00000 n 0000943143 00000 n 0000943329 00000 n 0000943515 00000 n 0000943701 00000 n 0000943887 00000 n 0000944073 00000 n 0000975965 00000 n 0000976083 00000 n 0000976206 00000 n 0000976329 00000 n 0000984329 00000 n 0000984451 00000 n 0000984574 00000 n 0000984697 00000 n 0000984820 00000 n 0000984943 00000 n 0000985065 00000 n 0000985187 00000 n 0000985310 00000 n 0000955186 00000 n 0000948181 00000 n 0000944798 00000 n 0000955127 00000 n 0000948631 00000 n 0000948817 00000 n 0000949003 00000 n 0000949189 00000 n 0000949375 00000 n 0000949561 00000 n 0000949745 00000 n 0000949931 00000 n 0000950116 00000 n 0000950302 00000 n 0000950487 00000 n 0000950672 00000 n 0000950858 00000 n 0000951044 00000 n 0000951229 00000 n 0000951414 00000 n 0000951600 00000 n 0000951786 00000 n 0000951970 00000 n 0000952156 00000 n 0000952342 00000 n 0000952528 00000 n 0000952714 00000 n 0000952900 00000 n 0000953086 00000 n 0000953271 00000 n 0000953456 00000 n 0000953642 00000 n 0000953827 00000 n 0000954013 00000 n 0000954199 00000 n 0000954385 00000 n 0000954571 00000 n 0000954757 00000 n 0000954943 00000 n 0000991684 00000 n 0000991807 00000 n 0000991930 00000 n 0000992053 00000 n 0000992175 00000 n 0000992298 00000 n 0000992421 00000 n 0000992543 00000 n 0000992665 00000 n 0000992787 00000 n 0000998090 00000 n 0000998213 00000 n 0000998336 00000 n 0000998459 00000 n 0000998582 00000 n 0000963934 00000 n 0000958334 00000 n 0000955298 00000 n 0000963640 00000 n 0000963699 00000 n 0000958712 00000 n 0000958898 00000 n 0000959115 00000 n 0000959333 00000 n 0000959551 00000 n 0000959768 00000 n 0000959986 00000 n 0000960203 00000 n 0000963758 00000 n 0000960421 00000 n 0000960607 00000 n 0000960763 00000 n 0000960948 00000 n 0000961104 00000 n 0000961289 00000 n 0000961445 00000 n 0000961631 00000 n 0000961786 00000 n 0000961971 00000 n 0000962127 00000 n 0000962312 00000 n 0000962467 00000 n 0000962623 00000 n 0000962807 00000 n 0000962960 00000 n 0000963817 00000 n 0000963113 00000 n 0000963298 00000 n 0000963484 00000 n 0000998762 00000 n 0000998880 00000 n 0000998944 00000 n 0000999008 00000 n 0000999072 00000 n 0000999136 00000 n 0000999200 00000 n 0001068137 00000 n 0001068255 00000 n 0001073694 00000 n 0001087824 00000 n 0000976392 00000 n 0000967834 00000 n 0000964047 00000 n 0000975848 00000 n 0000968347 00000 n 0000968533 00000 n 0000968718 00000 n 0000968903 00000 n 0000969091 00000 n 0000969247 00000 n 0000969430 00000 n 0000969612 00000 n 0000969798 00000 n 0000969951 00000 n 0000970107 00000 n 0000970290 00000 n 0000970473 00000 n 0000970654 00000 n 0000970803 00000 n 0000970989 00000 n 0000971174 00000 n 0000971329 00000 n 0000971514 00000 n 0000971699 00000 n 0000971885 00000 n 0000972070 00000 n 0000972226 00000 n 0000972410 00000 n 0000972595 00000 n 0000972751 00000 n 0000972937 00000 n 0000973123 00000 n 0000973308 00000 n 0000973464 00000 n 0000973650 00000 n 0000973835 00000 n 0000974020 00000 n 0000976024 00000 n 0000974176 00000 n 0000974362 00000 n 0000974548 00000 n 0000976147 00000 n 0000974734 00000 n 0000974920 00000 n 0000975106 00000 n 0000976270 00000 n 0000975292 00000 n 0000975478 00000 n 0000975664 00000 n 0000985433 00000 n 0000978427 00000 n 0000976504 00000 n 0000984211 00000 n 0000984270 00000 n 0000978823 00000 n 0000979009 00000 n 0000979195 00000 n 0000984393 00000 n 0000979381 00000 n 0000979567 00000 n 0000979753 00000 n 0000984515 00000 n 0000979939 00000 n 0000980125 00000 n 0000980311 00000 n 0000984638 00000 n 0000980497 00000 n 0000980682 00000 n 0000980867 00000 n 0000984761 00000 n 0000981053 00000 n 0000981239 00000 n 0000981425 00000 n 0000984884 00000 n 0000981611 00000 n 0000981797 00000 n 0000981983 00000 n 0000985007 00000 n 0000982169 00000 n 0000982355 00000 n 0000982541 00000 n 0000985128 00000 n 0000982727 00000 n 0000982913 00000 n 0000983099 00000 n 0000985251 00000 n 0000983285 00000 n 0000983470 00000 n 0000983655 00000 n 0000985374 00000 n 0000983841 00000 n 0000984026 00000 n 0001625951 00000 n 0000992850 00000 n 0000987793 00000 n 0000985545 00000 n 0000991625 00000 n 0000988099 00000 n 0000991748 00000 n 0000988285 00000 n 0000988471 00000 n 0000988657 00000 n 0000991871 00000 n 0000988843 00000 n 0000989029 00000 n 0000989215 00000 n 0000991994 00000 n 0000989401 00000 n 0000989585 00000 n 0000989768 00000 n 0000992116 00000 n 0000989952 00000 n 0000992239 00000 n 0000990138 00000 n 0000992362 00000 n 0000990324 00000 n 0000992485 00000 n 0000990510 00000 n 0000990696 00000 n 0000992607 00000 n 0000990882 00000 n 0000991068 00000 n 0000992728 00000 n 0000991254 00000 n 0000991440 00000 n 0000999263 00000 n 0000995505 00000 n 0000992962 00000 n 0000997972 00000 n 0000998031 00000 n 0000995748 00000 n 0000995932 00000 n 0000998154 00000 n 0000996118 00000 n 0000996304 00000 n 0000998277 00000 n 0000996490 00000 n 0000996675 00000 n 0000998400 00000 n 0000996861 00000 n 0000997047 00000 n 0000998523 00000 n 0000997233 00000 n 0000997418 00000 n 0000998646 00000 n 0000997603 00000 n 0000997789 00000 n 0000998821 00000 n 0001005117 00000 n 0001003248 00000 n 0000999389 00000 n 0001004882 00000 n 0001005058 00000 n 0001003455 00000 n 0001003641 00000 n 0001003797 00000 n 0001003983 00000 n 0001004139 00000 n 0001004325 00000 n 0001004511 00000 n 0001004697 00000 n 0001013309 00000 n 0001009523 00000 n 0001005271 00000 n 0001013128 00000 n 0001009829 00000 n 0001010015 00000 n 0001010171 00000 n 0001010354 00000 n 0001010540 00000 n 0001010723 00000 n 0001010906 00000 n 0001011091 00000 n 0001011247 00000 n 0001013250 00000 n 0001011433 00000 n 0001011614 00000 n 0001011796 00000 n 0001011948 00000 n 0001012104 00000 n 0001012259 00000 n 0001012415 00000 n 0001012600 00000 n 0001012786 00000 n 0001012972 00000 n 0001019357 00000 n 0001017217 00000 n 0001013436 00000 n 0001019298 00000 n 0001017442 00000 n 0001017628 00000 n 0001017814 00000 n 0001018000 00000 n 0001018186 00000 n 0001018372 00000 n 0001018556 00000 n 0001018742 00000 n 0001018927 00000 n 0001019113 00000 n 0001026441 00000 n 0001023634 00000 n 0001019498 00000 n 0001025970 00000 n 0001023877 00000 n 0001024063 00000 n 0001024219 00000 n 0001024402 00000 n 0001024585 00000 n 0001024768 00000 n 0001024953 00000 n 0001026029 00000 n 0001025109 00000 n 0001026088 00000 n 0001026147 00000 n 0001026206 00000 n 0001025294 00000 n 0001026265 00000 n 0001025449 00000 n 0001026323 00000 n 0001025634 00000 n 0001025820 00000 n 0001026382 00000 n 0001626076 00000 n 0001034887 00000 n 0001030352 00000 n 0001026568 00000 n 0001034769 00000 n 0001034828 00000 n 0001030685 00000 n 0001030870 00000 n 0001031056 00000 n 0001031242 00000 n 0001031428 00000 n 0001031614 00000 n 0001031800 00000 n 0001031985 00000 n 0001032170 00000 n 0001032355 00000 n 0001032541 00000 n 0001032727 00000 n 0001032912 00000 n 0001033097 00000 n 0001033282 00000 n 0001033468 00000 n 0001033653 00000 n 0001033839 00000 n 0001034025 00000 n 0001034211 00000 n 0001034397 00000 n 0001034583 00000 n 0001040674 00000 n 0001039731 00000 n 0001035013 00000 n 0001040615 00000 n 0001039902 00000 n 0001040088 00000 n 0001040244 00000 n 0001040430 00000 n 0001046365 00000 n 0001044480 00000 n 0001040773 00000 n 0001046306 00000 n 0001044696 00000 n 0001044852 00000 n 0001045038 00000 n 0001045222 00000 n 0001045408 00000 n 0001045594 00000 n 0001045780 00000 n 0001045964 00000 n 0001046120 00000 n 0001052213 00000 n 0001050527 00000 n 0001046478 00000 n 0001052095 00000 n 0001050734 00000 n 0001050919 00000 n 0001051105 00000 n 0001051261 00000 n 0001051417 00000 n 0001051573 00000 n 0001051755 00000 n 0001052154 00000 n 0001051941 00000 n 0001060299 00000 n 0001056658 00000 n 0001052339 00000 n 0001059945 00000 n 0001056955 00000 n 0001057111 00000 n 0001057296 00000 n 0001057482 00000 n 0001060004 00000 n 0001057638 00000 n 0001060063 00000 n 0001057823 00000 n 0001058008 00000 n 0001058191 00000 n 0001058374 00000 n 0001058524 00000 n 0001060122 00000 n 0001058679 00000 n 0001058835 00000 n 0001060240 00000 n 0001059018 00000 n 0001059174 00000 n 0001059330 00000 n 0001059485 00000 n 0001059641 00000 n 0001059797 00000 n 0001068314 00000 n 0001063746 00000 n 0001060426 00000 n 0001068078 00000 n 0001064088 00000 n 0001064244 00000 n 0001064431 00000 n 0001064587 00000 n 0001064742 00000 n 0001064925 00000 n 0001065107 00000 n 0001065290 00000 n 0001065476 00000 n 0001065662 00000 n 0001065817 00000 n 0001065999 00000 n 0001066155 00000 n 0001066343 00000 n 0001068196 00000 n 0001066529 00000 n 0001066684 00000 n 0001066870 00000 n 0001067056 00000 n 0001067241 00000 n 0001067397 00000 n 0001067583 00000 n 0001067769 00000 n 0001067923 00000 n 0001626201 00000 n 0001073871 00000 n 0001071123 00000 n 0001068455 00000 n 0001073576 00000 n 0001073635 00000 n 0001071375 00000 n 0001071531 00000 n 0001071717 00000 n 0001071903 00000 n 0001072058 00000 n 0001072243 00000 n 0001072398 00000 n 0001073753 00000 n 0001072553 00000 n 0001072739 00000 n 0001072925 00000 n 0001073081 00000 n 0001073264 00000 n 0001073420 00000 n 0001078675 00000 n 0001077540 00000 n 0001073998 00000 n 0001078557 00000 n 0001078616 00000 n 0001077720 00000 n 0001077876 00000 n 0001078061 00000 n 0001078246 00000 n 0001078401 00000 n 0001083774 00000 n 0001081863 00000 n 0001078802 00000 n 0001083715 00000 n 0001082079 00000 n 0001082235 00000 n 0001082422 00000 n 0001082607 00000 n 0001082792 00000 n 0001082976 00000 n 0001083161 00000 n 0001083346 00000 n 0001083530 00000 n 0001088064 00000 n 0001086604 00000 n 0001083900 00000 n 0001087707 00000 n 0001086784 00000 n 0001086969 00000 n 0001087154 00000 n 0001087339 00000 n 0001087521 00000 n 0001087883 00000 n 0001091800 00000 n 0001089709 00000 n 0001088177 00000 n 0001091214 00000 n 0001091448 00000 n 0001089907 00000 n 0001090092 00000 n 0001090279 00000 n 0001090466 00000 n 0001090653 00000 n 0001090840 00000 n 0001091027 00000 n 0001091623 00000 n 0001091682 00000 n 0001091741 00000 n 0001097375 00000 n 0001097497 00000 n 0001097620 00000 n 0001097743 00000 n 0001097866 00000 n 0001098285 00000 n 0001094208 00000 n 0001091912 00000 n 0001097257 00000 n 0001097316 00000 n 0001097439 00000 n 0001097561 00000 n 0001094478 00000 n 0001097684 00000 n 0001094660 00000 n 0001097807 00000 n 0001097930 00000 n 0001098111 00000 n 0001094843 00000 n 0001098170 00000 n 0001095032 00000 n 0001095221 00000 n 0001095409 00000 n 0001095598 00000 n 0001095785 00000 n 0001095968 00000 n 0001096151 00000 n 0001096334 00000 n 0001096517 00000 n 0001096700 00000 n 0001096883 00000 n 0001097068 00000 n 0001626326 00000 n 0001104604 00000 n 0001104780 00000 n 0001105016 00000 n 0001105074 00000 n 0001101269 00000 n 0001098452 00000 n 0001104487 00000 n 0001104663 00000 n 0001104839 00000 n 0001101548 00000 n 0001101736 00000 n 0001101919 00000 n 0001102102 00000 n 0001102285 00000 n 0001102466 00000 n 0001102649 00000 n 0001102832 00000 n 0001103017 00000 n 0001104957 00000 n 0001103205 00000 n 0001103388 00000 n 0001103571 00000 n 0001103754 00000 n 0001103936 00000 n 0001104119 00000 n 0001104302 00000 n 0001109998 00000 n 0001107357 00000 n 0001105201 00000 n 0001109647 00000 n 0001109706 00000 n 0001107591 00000 n 0001107779 00000 n 0001109881 00000 n 0001107968 00000 n 0001109939 00000 n 0001108154 00000 n 0001108341 00000 n 0001108528 00000 n 0001108715 00000 n 0001108901 00000 n 0001109086 00000 n 0001109273 00000 n 0001109460 00000 n 0001493936 00000 n 0001491883 00000 n 0001493773 00000 n 0001491411 00000 n 0001489065 00000 n 0001491246 00000 n 0001114563 00000 n 0001114739 00000 n 0001114857 00000 n 0001116579 00000 n 0001116697 00000 n 0001116814 00000 n 0001116932 00000 n 0001119768 00000 n 0001119886 00000 n 0001114916 00000 n 0001112530 00000 n 0001110166 00000 n 0001114388 00000 n 0001112746 00000 n 0001112932 00000 n 0001113118 00000 n 0001113304 00000 n 0001113490 00000 n 0001113676 00000 n 0001113862 00000 n 0001114048 00000 n 0001114234 00000 n 0001114622 00000 n 0001114798 00000 n 0001116991 00000 n 0001116338 00000 n 0001115071 00000 n 0001116461 00000 n 0001116520 00000 n 0001116638 00000 n 0001116756 00000 n 0001116873 00000 n 0001120180 00000 n 0001118926 00000 n 0001117105 00000 n 0001119650 00000 n 0001119709 00000 n 0001119827 00000 n 0001119945 00000 n 0001120121 00000 n 0001119088 00000 n 0001119276 00000 n 0001119464 00000 n 0001144670 00000 n 0001144788 00000 n 0001144910 00000 n 0001125369 00000 n 0001122226 00000 n 0001120347 00000 n 0001125310 00000 n 0001122496 00000 n 0001122684 00000 n 0001122872 00000 n 0001123059 00000 n 0001123247 00000 n 0001123435 00000 n 0001123623 00000 n 0001123810 00000 n 0001123998 00000 n 0001124186 00000 n 0001124372 00000 n 0001124560 00000 n 0001124748 00000 n 0001124936 00000 n 0001125122 00000 n 0001626451 00000 n 0001145033 00000 n 0001145156 00000 n 0001145279 00000 n 0001145401 00000 n 0001145524 00000 n 0001145647 00000 n 0001145769 00000 n 0001145892 00000 n 0001153908 00000 n 0001154031 00000 n 0001154154 00000 n 0001154276 00000 n 0001154399 00000 n 0001154522 00000 n 0001154645 00000 n 0001135670 00000 n 0001128585 00000 n 0001125468 00000 n 0001135377 00000 n 0001135436 00000 n 0001129008 00000 n 0001129195 00000 n 0001129414 00000 n 0001129634 00000 n 0001129854 00000 n 0001130073 00000 n 0001130293 00000 n 0001130512 00000 n 0001130731 00000 n 0001130950 00000 n 0001131170 00000 n 0001131388 00000 n 0001131607 00000 n 0001131826 00000 n 0001132045 00000 n 0001132265 00000 n 0001135495 00000 n 0001132482 00000 n 0001132669 00000 n 0001132822 00000 n 0001133010 00000 n 0001133166 00000 n 0001133354 00000 n 0001133510 00000 n 0001133698 00000 n 0001133885 00000 n 0001135554 00000 n 0001134073 00000 n 0001134260 00000 n 0001134447 00000 n 0001134632 00000 n 0001134818 00000 n 0001135005 00000 n 0001135192 00000 n 0001154826 00000 n 0001154944 00000 n 0001155008 00000 n 0001155072 00000 n 0001155136 00000 n 0001155200 00000 n 0001158680 00000 n 0001158744 00000 n 0001158808 00000 n 0001158872 00000 n 0001158936 00000 n 0001159000 00000 n 0001159064 00000 n 0001159128 00000 n 0001159250 00000 n 0001159368 00000 n 0001167459 00000 n 0001171020 00000 n 0001171196 00000 n 0001171314 00000 n 0001173144 00000 n 0001145956 00000 n 0001138134 00000 n 0001135783 00000 n 0001144553 00000 n 0001144729 00000 n 0001138557 00000 n 0001138745 00000 n 0001138933 00000 n 0001144852 00000 n 0001139120 00000 n 0001139308 00000 n 0001139496 00000 n 0001144974 00000 n 0001139683 00000 n 0001139870 00000 n 0001140057 00000 n 0001145097 00000 n 0001140244 00000 n 0001140431 00000 n 0001140618 00000 n 0001145220 00000 n 0001140806 00000 n 0001140994 00000 n 0001141182 00000 n 0001145342 00000 n 0001141369 00000 n 0001141557 00000 n 0001141745 00000 n 0001145465 00000 n 0001141930 00000 n 0001142118 00000 n 0001142306 00000 n 0001142494 00000 n 0001145588 00000 n 0001142681 00000 n 0001142869 00000 n 0001143057 00000 n 0001145711 00000 n 0001143244 00000 n 0001143431 00000 n 0001143619 00000 n 0001143807 00000 n 0001145833 00000 n 0001143993 00000 n 0001144181 00000 n 0001144367 00000 n 0001155263 00000 n 0001148353 00000 n 0001146055 00000 n 0001153790 00000 n 0001153849 00000 n 0001148731 00000 n 0001148919 00000 n 0001149107 00000 n 0001149295 00000 n 0001153972 00000 n 0001149482 00000 n 0001149669 00000 n 0001149857 00000 n 0001150045 00000 n 0001154095 00000 n 0001150232 00000 n 0001150420 00000 n 0001150608 00000 n 0001154218 00000 n 0001150795 00000 n 0001150983 00000 n 0001151171 00000 n 0001154340 00000 n 0001151355 00000 n 0001151543 00000 n 0001151731 00000 n 0001151919 00000 n 0001154463 00000 n 0001152105 00000 n 0001152292 00000 n 0001152480 00000 n 0001154586 00000 n 0001152665 00000 n 0001152852 00000 n 0001153039 00000 n 0001154709 00000 n 0001153226 00000 n 0001153414 00000 n 0001153602 00000 n 0001154885 00000 n 0001159427 00000 n 0001157898 00000 n 0001155376 00000 n 0001158621 00000 n 0001159309 00000 n 0001158060 00000 n 0001158248 00000 n 0001158434 00000 n 0001163492 00000 n 0001162651 00000 n 0001159581 00000 n 0001163374 00000 n 0001163433 00000 n 0001162813 00000 n 0001163001 00000 n 0001163189 00000 n 0001167581 00000 n 0001166676 00000 n 0001163633 00000 n 0001167400 00000 n 0001166838 00000 n 0001167523 00000 n 0001167026 00000 n 0001167214 00000 n 0001626576 00000 n 0001171436 00000 n 0001170366 00000 n 0001167722 00000 n 0001170489 00000 n 0001170548 00000 n 0001170607 00000 n 0001170666 00000 n 0001170725 00000 n 0001170843 00000 n 0001170961 00000 n 0001171079 00000 n 0001171255 00000 n 0001171378 00000 n 0001173326 00000 n 0001172962 00000 n 0001171576 00000 n 0001173085 00000 n 0001173203 00000 n 0001177541 00000 n 0001175566 00000 n 0001173426 00000 n 0001177072 00000 n 0001177189 00000 n 0001175764 00000 n 0001175951 00000 n 0001176138 00000 n 0001176324 00000 n 0001176511 00000 n 0001176698 00000 n 0001176885 00000 n 0001177364 00000 n 0001177423 00000 n 0001177482 00000 n 0001179883 00000 n 0001180000 00000 n 0001182230 00000 n 0001182347 00000 n 0001182464 00000 n 0001180118 00000 n 0001179642 00000 n 0001177668 00000 n 0001179765 00000 n 0001179824 00000 n 0001179942 00000 n 0001180059 00000 n 0001182582 00000 n 0001182048 00000 n 0001180245 00000 n 0001182171 00000 n 0001182289 00000 n 0001182405 00000 n 0001182523 00000 n 0001194487 00000 n 0001185287 00000 n 0001182709 00000 n 0001194369 00000 n 0001194428 00000 n 0001185926 00000 n 0001186078 00000 n 0001186229 00000 n 0001186380 00000 n 0001186531 00000 n 0001186682 00000 n 0001186832 00000 n 0001186982 00000 n 0001187132 00000 n 0001187283 00000 n 0001187434 00000 n 0001187585 00000 n 0001187736 00000 n 0001187887 00000 n 0001188038 00000 n 0001188189 00000 n 0001188341 00000 n 0001188493 00000 n 0001188645 00000 n 0001188796 00000 n 0001188947 00000 n 0001189098 00000 n 0001189249 00000 n 0001189400 00000 n 0001189550 00000 n 0001189699 00000 n 0001189850 00000 n 0001190002 00000 n 0001190153 00000 n 0001190304 00000 n 0001190455 00000 n 0001190604 00000 n 0001190755 00000 n 0001190906 00000 n 0001191057 00000 n 0001191208 00000 n 0001191358 00000 n 0001191509 00000 n 0001191660 00000 n 0001191810 00000 n 0001191961 00000 n 0001192112 00000 n 0001192263 00000 n 0001192414 00000 n 0001192565 00000 n 0001192716 00000 n 0001192866 00000 n 0001193016 00000 n 0001193167 00000 n 0001193318 00000 n 0001193469 00000 n 0001193620 00000 n 0001193771 00000 n 0001193920 00000 n 0001194071 00000 n 0001194221 00000 n 0001626701 00000 n 0001208239 00000 n 0001197529 00000 n 0001194573 00000 n 0001208180 00000 n 0001198258 00000 n 0001198408 00000 n 0001198559 00000 n 0001198710 00000 n 0001198860 00000 n 0001199011 00000 n 0001199160 00000 n 0001199311 00000 n 0001199460 00000 n 0001199611 00000 n 0001199760 00000 n 0001199911 00000 n 0001200062 00000 n 0001200213 00000 n 0001200364 00000 n 0001200515 00000 n 0001200666 00000 n 0001200817 00000 n 0001200968 00000 n 0001201119 00000 n 0001201270 00000 n 0001201422 00000 n 0001201574 00000 n 0001201724 00000 n 0001201874 00000 n 0001202024 00000 n 0001202175 00000 n 0001202324 00000 n 0001202473 00000 n 0001202623 00000 n 0001202773 00000 n 0001202923 00000 n 0001203072 00000 n 0001203221 00000 n 0001203370 00000 n 0001203520 00000 n 0001203670 00000 n 0001203820 00000 n 0001203969 00000 n 0001204118 00000 n 0001204268 00000 n 0001204418 00000 n 0001204568 00000 n 0001204718 00000 n 0001204868 00000 n 0001205018 00000 n 0001205168 00000 n 0001205318 00000 n 0001205468 00000 n 0001205619 00000 n 0001205770 00000 n 0001205921 00000 n 0001206072 00000 n 0001206223 00000 n 0001206374 00000 n 0001206525 00000 n 0001206676 00000 n 0001206827 00000 n 0001206978 00000 n 0001207128 00000 n 0001207278 00000 n 0001207428 00000 n 0001207578 00000 n 0001207729 00000 n 0001207880 00000 n 0001208031 00000 n 0001219858 00000 n 0001210878 00000 n 0001208325 00000 n 0001219799 00000 n 0001211508 00000 n 0001211659 00000 n 0001211810 00000 n 0001211961 00000 n 0001212111 00000 n 0001212261 00000 n 0001212412 00000 n 0001212562 00000 n 0001212712 00000 n 0001212861 00000 n 0001213012 00000 n 0001213163 00000 n 0001213314 00000 n 0001213465 00000 n 0001213616 00000 n 0001213767 00000 n 0001213918 00000 n 0001214069 00000 n 0001214220 00000 n 0001214371 00000 n 0001214522 00000 n 0001214673 00000 n 0001214824 00000 n 0001214975 00000 n 0001215126 00000 n 0001215277 00000 n 0001215429 00000 n 0001215580 00000 n 0001215729 00000 n 0001215880 00000 n 0001216032 00000 n 0001216183 00000 n 0001216333 00000 n 0001216483 00000 n 0001216634 00000 n 0001216785 00000 n 0001216936 00000 n 0001217087 00000 n 0001217238 00000 n 0001217389 00000 n 0001217540 00000 n 0001217691 00000 n 0001217842 00000 n 0001217993 00000 n 0001218144 00000 n 0001218295 00000 n 0001218445 00000 n 0001218596 00000 n 0001218747 00000 n 0001218897 00000 n 0001219047 00000 n 0001219197 00000 n 0001219348 00000 n 0001219499 00000 n 0001219650 00000 n 0001235114 00000 n 0001223432 00000 n 0001219944 00000 n 0001235055 00000 n 0001224215 00000 n 0001224366 00000 n 0001224517 00000 n 0001224667 00000 n 0001224817 00000 n 0001224968 00000 n 0001225119 00000 n 0001225270 00000 n 0001225421 00000 n 0001225570 00000 n 0001225720 00000 n 0001225871 00000 n 0001226020 00000 n 0001226171 00000 n 0001226321 00000 n 0001226472 00000 n 0001226624 00000 n 0001226772 00000 n 0001226923 00000 n 0001227074 00000 n 0001227225 00000 n 0001227376 00000 n 0001227526 00000 n 0001227676 00000 n 0001227827 00000 n 0001227978 00000 n 0001228129 00000 n 0001228279 00000 n 0001228430 00000 n 0001228581 00000 n 0001228732 00000 n 0001228883 00000 n 0001229034 00000 n 0001229183 00000 n 0001229333 00000 n 0001229483 00000 n 0001229634 00000 n 0001229785 00000 n 0001229934 00000 n 0001230083 00000 n 0001230232 00000 n 0001230382 00000 n 0001230532 00000 n 0001230682 00000 n 0001230832 00000 n 0001230982 00000 n 0001231132 00000 n 0001231283 00000 n 0001231434 00000 n 0001231585 00000 n 0001231736 00000 n 0001231886 00000 n 0001232036 00000 n 0001232187 00000 n 0001232337 00000 n 0001232488 00000 n 0001232639 00000 n 0001232790 00000 n 0001232939 00000 n 0001233089 00000 n 0001233240 00000 n 0001233390 00000 n 0001233541 00000 n 0001233691 00000 n 0001233841 00000 n 0001233993 00000 n 0001234145 00000 n 0001234297 00000 n 0001234449 00000 n 0001234601 00000 n 0001234753 00000 n 0001234905 00000 n 0001248202 00000 n 0001238275 00000 n 0001235200 00000 n 0001248143 00000 n 0001238959 00000 n 0001239111 00000 n 0001239263 00000 n 0001239414 00000 n 0001239565 00000 n 0001239713 00000 n 0001239863 00000 n 0001240014 00000 n 0001240163 00000 n 0001240314 00000 n 0001240464 00000 n 0001240614 00000 n 0001240765 00000 n 0001240916 00000 n 0001241067 00000 n 0001241218 00000 n 0001241369 00000 n 0001241520 00000 n 0001241671 00000 n 0001241821 00000 n 0001241972 00000 n 0001242123 00000 n 0001242274 00000 n 0001242425 00000 n 0001242575 00000 n 0001242725 00000 n 0001242875 00000 n 0001243026 00000 n 0001243177 00000 n 0001243327 00000 n 0001243478 00000 n 0001243629 00000 n 0001243780 00000 n 0001243931 00000 n 0001244082 00000 n 0001244232 00000 n 0001244383 00000 n 0001244532 00000 n 0001244683 00000 n 0001244834 00000 n 0001244984 00000 n 0001245133 00000 n 0001245282 00000 n 0001245431 00000 n 0001245582 00000 n 0001245732 00000 n 0001245883 00000 n 0001246034 00000 n 0001246185 00000 n 0001246336 00000 n 0001246486 00000 n 0001246636 00000 n 0001246786 00000 n 0001246937 00000 n 0001247087 00000 n 0001247238 00000 n 0001247389 00000 n 0001247540 00000 n 0001247691 00000 n 0001247842 00000 n 0001247993 00000 n 0001263699 00000 n 0001251535 00000 n 0001248288 00000 n 0001263640 00000 n 0001252345 00000 n 0001252495 00000 n 0001252645 00000 n 0001252796 00000 n 0001252947 00000 n 0001253097 00000 n 0001253246 00000 n 0001253397 00000 n 0001253547 00000 n 0001253698 00000 n 0001253848 00000 n 0001253999 00000 n 0001254149 00000 n 0001254299 00000 n 0001254450 00000 n 0001254601 00000 n 0001254752 00000 n 0001254903 00000 n 0001255054 00000 n 0001255204 00000 n 0001255354 00000 n 0001255504 00000 n 0001255654 00000 n 0001255805 00000 n 0001255956 00000 n 0001256107 00000 n 0001256258 00000 n 0001256409 00000 n 0001256560 00000 n 0001256711 00000 n 0001256862 00000 n 0001257012 00000 n 0001257163 00000 n 0001257314 00000 n 0001257465 00000 n 0001257616 00000 n 0001257767 00000 n 0001257917 00000 n 0001258065 00000 n 0001258216 00000 n 0001258367 00000 n 0001258517 00000 n 0001258668 00000 n 0001258819 00000 n 0001258969 00000 n 0001259120 00000 n 0001259270 00000 n 0001259421 00000 n 0001259571 00000 n 0001259721 00000 n 0001259872 00000 n 0001260023 00000 n 0001260174 00000 n 0001260325 00000 n 0001260476 00000 n 0001260627 00000 n 0001260778 00000 n 0001260929 00000 n 0001261079 00000 n 0001261230 00000 n 0001261381 00000 n 0001261532 00000 n 0001261682 00000 n 0001261832 00000 n 0001261983 00000 n 0001262133 00000 n 0001262284 00000 n 0001262434 00000 n 0001262584 00000 n 0001262735 00000 n 0001262886 00000 n 0001263037 00000 n 0001263188 00000 n 0001263339 00000 n 0001263490 00000 n 0001276188 00000 n 0001266418 00000 n 0001263785 00000 n 0001276129 00000 n 0001267093 00000 n 0001267243 00000 n 0001267394 00000 n 0001267545 00000 n 0001267696 00000 n 0001267847 00000 n 0001267998 00000 n 0001268148 00000 n 0001268299 00000 n 0001268449 00000 n 0001268600 00000 n 0001268751 00000 n 0001268902 00000 n 0001269052 00000 n 0001269202 00000 n 0001269352 00000 n 0001269502 00000 n 0001269652 00000 n 0001269802 00000 n 0001269953 00000 n 0001270104 00000 n 0001270255 00000 n 0001270406 00000 n 0001270556 00000 n 0001270707 00000 n 0001270858 00000 n 0001271009 00000 n 0001271160 00000 n 0001271311 00000 n 0001271462 00000 n 0001271613 00000 n 0001271762 00000 n 0001271913 00000 n 0001272064 00000 n 0001272215 00000 n 0001272365 00000 n 0001272515 00000 n 0001272666 00000 n 0001272817 00000 n 0001272967 00000 n 0001273117 00000 n 0001273267 00000 n 0001273418 00000 n 0001273569 00000 n 0001273720 00000 n 0001273871 00000 n 0001274022 00000 n 0001274173 00000 n 0001274324 00000 n 0001274475 00000 n 0001274625 00000 n 0001274775 00000 n 0001274925 00000 n 0001275075 00000 n 0001275226 00000 n 0001275376 00000 n 0001275527 00000 n 0001275678 00000 n 0001275829 00000 n 0001275980 00000 n 0001626826 00000 n 0001293069 00000 n 0001279791 00000 n 0001276274 00000 n 0001293010 00000 n 0001280664 00000 n 0001280815 00000 n 0001280966 00000 n 0001281116 00000 n 0001281266 00000 n 0001281417 00000 n 0001281568 00000 n 0001281719 00000 n 0001281868 00000 n 0001282019 00000 n 0001282168 00000 n 0001282319 00000 n 0001282469 00000 n 0001282620 00000 n 0001282771 00000 n 0001282922 00000 n 0001283073 00000 n 0001283223 00000 n 0001283373 00000 n 0001283523 00000 n 0001283674 00000 n 0001283825 00000 n 0001283976 00000 n 0001284126 00000 n 0001284277 00000 n 0001284428 00000 n 0001284579 00000 n 0001284730 00000 n 0001284879 00000 n 0001285030 00000 n 0001285182 00000 n 0001285333 00000 n 0001285484 00000 n 0001285634 00000 n 0001285784 00000 n 0001285934 00000 n 0001286083 00000 n 0001286233 00000 n 0001286383 00000 n 0001286534 00000 n 0001286685 00000 n 0001286836 00000 n 0001286987 00000 n 0001287138 00000 n 0001287289 00000 n 0001287439 00000 n 0001287590 00000 n 0001287741 00000 n 0001287892 00000 n 0001288043 00000 n 0001288194 00000 n 0001288345 00000 n 0001288496 00000 n 0001288645 00000 n 0001288794 00000 n 0001288943 00000 n 0001289093 00000 n 0001289244 00000 n 0001289394 00000 n 0001289545 00000 n 0001289696 00000 n 0001289847 00000 n 0001289997 00000 n 0001290147 00000 n 0001290298 00000 n 0001290448 00000 n 0001290599 00000 n 0001290749 00000 n 0001290900 00000 n 0001291051 00000 n 0001291202 00000 n 0001291353 00000 n 0001291504 00000 n 0001291655 00000 n 0001291805 00000 n 0001291956 00000 n 0001292107 00000 n 0001292258 00000 n 0001292409 00000 n 0001292560 00000 n 0001292711 00000 n 0001292861 00000 n 0001312295 00000 n 0001297108 00000 n 0001293155 00000 n 0001312236 00000 n 0001298089 00000 n 0001298238 00000 n 0001298388 00000 n 0001298538 00000 n 0001298688 00000 n 0001298839 00000 n 0001298989 00000 n 0001299140 00000 n 0001299290 00000 n 0001299440 00000 n 0001299590 00000 n 0001299740 00000 n 0001299891 00000 n 0001300039 00000 n 0001300190 00000 n 0001300340 00000 n 0001300491 00000 n 0001300642 00000 n 0001300793 00000 n 0001300943 00000 n 0001301094 00000 n 0001301245 00000 n 0001301395 00000 n 0001301546 00000 n 0001301697 00000 n 0001301848 00000 n 0001301999 00000 n 0001302150 00000 n 0001302301 00000 n 0001302451 00000 n 0001302602 00000 n 0001302753 00000 n 0001302904 00000 n 0001303055 00000 n 0001303205 00000 n 0001303355 00000 n 0001303506 00000 n 0001303656 00000 n 0001303807 00000 n 0001303957 00000 n 0001304108 00000 n 0001304258 00000 n 0001304409 00000 n 0001304560 00000 n 0001304711 00000 n 0001304861 00000 n 0001305011 00000 n 0001305161 00000 n 0001305311 00000 n 0001305461 00000 n 0001305611 00000 n 0001305762 00000 n 0001305913 00000 n 0001306063 00000 n 0001306212 00000 n 0001306362 00000 n 0001306513 00000 n 0001306664 00000 n 0001306815 00000 n 0001306966 00000 n 0001307114 00000 n 0001307264 00000 n 0001307412 00000 n 0001307563 00000 n 0001307713 00000 n 0001307864 00000 n 0001308015 00000 n 0001308166 00000 n 0001308317 00000 n 0001308468 00000 n 0001308619 00000 n 0001308770 00000 n 0001308921 00000 n 0001309072 00000 n 0001309223 00000 n 0001309374 00000 n 0001309525 00000 n 0001309676 00000 n 0001309827 00000 n 0001309978 00000 n 0001310129 00000 n 0001310279 00000 n 0001310430 00000 n 0001310581 00000 n 0001310732 00000 n 0001310883 00000 n 0001311033 00000 n 0001311184 00000 n 0001311334 00000 n 0001311485 00000 n 0001311636 00000 n 0001311787 00000 n 0001311938 00000 n 0001312087 00000 n 0001326142 00000 n 0001315420 00000 n 0001312381 00000 n 0001326083 00000 n 0001316149 00000 n 0001316300 00000 n 0001316451 00000 n 0001316602 00000 n 0001316753 00000 n 0001316900 00000 n 0001317050 00000 n 0001317201 00000 n 0001317351 00000 n 0001317502 00000 n 0001317652 00000 n 0001317803 00000 n 0001317953 00000 n 0001318103 00000 n 0001318253 00000 n 0001318404 00000 n 0001318555 00000 n 0001318706 00000 n 0001318857 00000 n 0001319008 00000 n 0001319159 00000 n 0001319310 00000 n 0001319461 00000 n 0001319612 00000 n 0001319762 00000 n 0001319913 00000 n 0001320062 00000 n 0001320213 00000 n 0001320362 00000 n 0001320513 00000 n 0001320664 00000 n 0001320813 00000 n 0001320964 00000 n 0001321114 00000 n 0001321264 00000 n 0001321415 00000 n 0001321565 00000 n 0001321716 00000 n 0001321866 00000 n 0001322017 00000 n 0001322168 00000 n 0001322318 00000 n 0001322468 00000 n 0001322618 00000 n 0001322768 00000 n 0001322919 00000 n 0001323069 00000 n 0001323220 00000 n 0001323371 00000 n 0001323522 00000 n 0001323673 00000 n 0001323823 00000 n 0001323974 00000 n 0001324125 00000 n 0001324276 00000 n 0001324427 00000 n 0001324578 00000 n 0001324728 00000 n 0001324878 00000 n 0001325028 00000 n 0001325178 00000 n 0001325329 00000 n 0001325480 00000 n 0001325631 00000 n 0001325782 00000 n 0001325933 00000 n 0001341949 00000 n 0001329457 00000 n 0001326228 00000 n 0001341890 00000 n 0001330285 00000 n 0001330436 00000 n 0001330587 00000 n 0001330738 00000 n 0001330888 00000 n 0001331039 00000 n 0001331189 00000 n 0001331340 00000 n 0001331490 00000 n 0001331640 00000 n 0001331790 00000 n 0001331941 00000 n 0001332092 00000 n 0001332243 00000 n 0001332394 00000 n 0001332544 00000 n 0001332695 00000 n 0001332845 00000 n 0001332996 00000 n 0001333147 00000 n 0001333298 00000 n 0001333449 00000 n 0001333600 00000 n 0001333751 00000 n 0001333902 00000 n 0001334053 00000 n 0001334204 00000 n 0001334355 00000 n 0001334506 00000 n 0001334657 00000 n 0001334808 00000 n 0001334959 00000 n 0001335109 00000 n 0001335259 00000 n 0001335409 00000 n 0001335560 00000 n 0001335711 00000 n 0001335862 00000 n 0001336014 00000 n 0001336166 00000 n 0001336317 00000 n 0001336467 00000 n 0001336618 00000 n 0001336769 00000 n 0001336920 00000 n 0001337071 00000 n 0001337221 00000 n 0001337371 00000 n 0001337521 00000 n 0001337672 00000 n 0001337822 00000 n 0001337973 00000 n 0001338124 00000 n 0001338274 00000 n 0001338425 00000 n 0001338575 00000 n 0001338726 00000 n 0001338876 00000 n 0001339027 00000 n 0001339178 00000 n 0001339328 00000 n 0001339479 00000 n 0001339630 00000 n 0001339781 00000 n 0001339932 00000 n 0001340083 00000 n 0001340234 00000 n 0001340385 00000 n 0001340536 00000 n 0001340687 00000 n 0001340838 00000 n 0001340988 00000 n 0001341138 00000 n 0001341288 00000 n 0001341439 00000 n 0001341590 00000 n 0001341741 00000 n 0001361166 00000 n 0001345919 00000 n 0001342035 00000 n 0001361107 00000 n 0001346900 00000 n 0001347051 00000 n 0001347202 00000 n 0001347354 00000 n 0001347505 00000 n 0001347657 00000 n 0001347808 00000 n 0001347960 00000 n 0001348111 00000 n 0001348261 00000 n 0001348411 00000 n 0001348561 00000 n 0001348713 00000 n 0001348864 00000 n 0001349016 00000 n 0001349168 00000 n 0001349320 00000 n 0001349472 00000 n 0001349624 00000 n 0001349775 00000 n 0001349927 00000 n 0001350079 00000 n 0001350231 00000 n 0001350382 00000 n 0001350534 00000 n 0001350685 00000 n 0001350837 00000 n 0001350988 00000 n 0001351140 00000 n 0001351292 00000 n 0001351443 00000 n 0001351595 00000 n 0001351746 00000 n 0001351897 00000 n 0001352048 00000 n 0001352200 00000 n 0001352352 00000 n 0001352503 00000 n 0001352655 00000 n 0001352806 00000 n 0001352958 00000 n 0001353108 00000 n 0001353260 00000 n 0001353412 00000 n 0001353563 00000 n 0001353715 00000 n 0001353867 00000 n 0001354018 00000 n 0001354169 00000 n 0001354321 00000 n 0001354473 00000 n 0001354625 00000 n 0001354777 00000 n 0001354929 00000 n 0001355081 00000 n 0001355233 00000 n 0001355384 00000 n 0001355535 00000 n 0001355685 00000 n 0001355836 00000 n 0001355987 00000 n 0001356138 00000 n 0001356288 00000 n 0001356439 00000 n 0001356590 00000 n 0001356741 00000 n 0001356891 00000 n 0001357042 00000 n 0001357192 00000 n 0001357343 00000 n 0001357494 00000 n 0001357645 00000 n 0001357796 00000 n 0001357947 00000 n 0001358098 00000 n 0001358248 00000 n 0001358399 00000 n 0001358549 00000 n 0001358700 00000 n 0001358850 00000 n 0001359001 00000 n 0001359151 00000 n 0001359301 00000 n 0001359452 00000 n 0001359602 00000 n 0001359753 00000 n 0001359903 00000 n 0001360054 00000 n 0001360205 00000 n 0001360356 00000 n 0001360507 00000 n 0001360657 00000 n 0001360808 00000 n 0001360958 00000 n 0001377313 00000 n 0001364790 00000 n 0001361252 00000 n 0001377254 00000 n 0001365618 00000 n 0001365767 00000 n 0001365918 00000 n 0001366069 00000 n 0001366219 00000 n 0001366370 00000 n 0001366520 00000 n 0001366671 00000 n 0001366820 00000 n 0001366971 00000 n 0001367121 00000 n 0001367270 00000 n 0001367422 00000 n 0001367574 00000 n 0001367725 00000 n 0001367876 00000 n 0001368026 00000 n 0001368176 00000 n 0001368327 00000 n 0001368478 00000 n 0001368629 00000 n 0001368780 00000 n 0001368931 00000 n 0001369082 00000 n 0001369233 00000 n 0001369385 00000 n 0001369537 00000 n 0001369688 00000 n 0001369840 00000 n 0001369992 00000 n 0001370144 00000 n 0001370295 00000 n 0001370447 00000 n 0001370599 00000 n 0001370751 00000 n 0001370903 00000 n 0001371054 00000 n 0001371205 00000 n 0001371356 00000 n 0001371506 00000 n 0001371657 00000 n 0001371809 00000 n 0001371961 00000 n 0001372113 00000 n 0001372264 00000 n 0001372415 00000 n 0001372567 00000 n 0001372718 00000 n 0001372869 00000 n 0001373020 00000 n 0001373172 00000 n 0001373324 00000 n 0001373476 00000 n 0001373628 00000 n 0001373780 00000 n 0001373932 00000 n 0001374084 00000 n 0001374235 00000 n 0001374386 00000 n 0001374537 00000 n 0001374689 00000 n 0001374841 00000 n 0001374993 00000 n 0001375145 00000 n 0001375297 00000 n 0001375449 00000 n 0001375599 00000 n 0001375750 00000 n 0001375901 00000 n 0001376052 00000 n 0001376202 00000 n 0001376353 00000 n 0001376504 00000 n 0001376655 00000 n 0001376805 00000 n 0001376956 00000 n 0001377106 00000 n 0001626951 00000 n 0001390361 00000 n 0001380407 00000 n 0001377399 00000 n 0001390302 00000 n 0001381091 00000 n 0001381242 00000 n 0001381392 00000 n 0001381543 00000 n 0001381694 00000 n 0001381845 00000 n 0001381995 00000 n 0001382146 00000 n 0001382296 00000 n 0001382446 00000 n 0001382596 00000 n 0001382746 00000 n 0001382897 00000 n 0001383048 00000 n 0001383200 00000 n 0001383352 00000 n 0001383504 00000 n 0001383656 00000 n 0001383808 00000 n 0001383960 00000 n 0001384112 00000 n 0001384264 00000 n 0001384416 00000 n 0001384567 00000 n 0001384717 00000 n 0001384867 00000 n 0001385015 00000 n 0001385166 00000 n 0001385316 00000 n 0001385466 00000 n 0001385616 00000 n 0001385767 00000 n 0001385917 00000 n 0001386067 00000 n 0001386217 00000 n 0001386368 00000 n 0001386519 00000 n 0001386669 00000 n 0001386820 00000 n 0001386971 00000 n 0001387123 00000 n 0001387275 00000 n 0001387427 00000 n 0001387579 00000 n 0001387731 00000 n 0001387883 00000 n 0001388035 00000 n 0001388186 00000 n 0001388337 00000 n 0001388488 00000 n 0001388640 00000 n 0001388792 00000 n 0001388944 00000 n 0001389095 00000 n 0001389246 00000 n 0001389395 00000 n 0001389546 00000 n 0001389697 00000 n 0001389849 00000 n 0001390001 00000 n 0001390153 00000 n 0001408109 00000 n 0001394446 00000 n 0001390447 00000 n 0001408050 00000 n 0001395337 00000 n 0001395488 00000 n 0001395639 00000 n 0001395789 00000 n 0001395939 00000 n 0001396089 00000 n 0001396240 00000 n 0001396391 00000 n 0001396542 00000 n 0001396692 00000 n 0001396843 00000 n 0001396993 00000 n 0001397143 00000 n 0001397293 00000 n 0001397444 00000 n 0001397595 00000 n 0001397746 00000 n 0001397897 00000 n 0001398048 00000 n 0001398200 00000 n 0001398352 00000 n 0001398504 00000 n 0001398655 00000 n 0001398807 00000 n 0001398958 00000 n 0001399110 00000 n 0001399261 00000 n 0001399413 00000 n 0001399564 00000 n 0001399716 00000 n 0001399868 00000 n 0001400020 00000 n 0001400172 00000 n 0001400323 00000 n 0001400475 00000 n 0001400626 00000 n 0001400776 00000 n 0001400927 00000 n 0001401079 00000 n 0001401231 00000 n 0001401382 00000 n 0001401534 00000 n 0001401685 00000 n 0001401837 00000 n 0001401988 00000 n 0001402140 00000 n 0001402291 00000 n 0001402443 00000 n 0001402595 00000 n 0001402745 00000 n 0001402897 00000 n 0001403048 00000 n 0001403200 00000 n 0001403351 00000 n 0001403503 00000 n 0001403655 00000 n 0001403807 00000 n 0001403959 00000 n 0001404111 00000 n 0001404263 00000 n 0001404415 00000 n 0001404567 00000 n 0001404718 00000 n 0001404870 00000 n 0001405021 00000 n 0001405172 00000 n 0001405324 00000 n 0001405476 00000 n 0001405628 00000 n 0001405780 00000 n 0001405932 00000 n 0001406083 00000 n 0001406234 00000 n 0001406385 00000 n 0001406536 00000 n 0001406687 00000 n 0001406838 00000 n 0001406990 00000 n 0001407142 00000 n 0001407294 00000 n 0001407446 00000 n 0001407597 00000 n 0001407749 00000 n 0001407900 00000 n 0001423239 00000 n 0001411498 00000 n 0001408195 00000 n 0001423180 00000 n 0001412281 00000 n 0001412432 00000 n 0001412583 00000 n 0001412733 00000 n 0001412883 00000 n 0001413033 00000 n 0001413184 00000 n 0001413335 00000 n 0001413486 00000 n 0001413637 00000 n 0001413788 00000 n 0001413939 00000 n 0001414090 00000 n 0001414240 00000 n 0001414390 00000 n 0001414541 00000 n 0001414693 00000 n 0001414845 00000 n 0001414997 00000 n 0001415149 00000 n 0001415301 00000 n 0001415453 00000 n 0001415605 00000 n 0001415757 00000 n 0001415909 00000 n 0001416061 00000 n 0001416213 00000 n 0001416365 00000 n 0001416517 00000 n 0001416669 00000 n 0001416821 00000 n 0001416973 00000 n 0001417123 00000 n 0001417273 00000 n 0001417424 00000 n 0001417575 00000 n 0001417727 00000 n 0001417878 00000 n 0001418030 00000 n 0001418180 00000 n 0001418332 00000 n 0001418482 00000 n 0001418634 00000 n 0001418785 00000 n 0001418936 00000 n 0001419088 00000 n 0001419239 00000 n 0001419391 00000 n 0001419542 00000 n 0001419693 00000 n 0001419844 00000 n 0001419996 00000 n 0001420147 00000 n 0001420299 00000 n 0001420451 00000 n 0001420603 00000 n 0001420755 00000 n 0001420907 00000 n 0001421059 00000 n 0001421211 00000 n 0001421362 00000 n 0001421513 00000 n 0001421664 00000 n 0001421816 00000 n 0001421968 00000 n 0001422120 00000 n 0001422272 00000 n 0001422424 00000 n 0001422576 00000 n 0001422728 00000 n 0001422880 00000 n 0001423031 00000 n 0001439147 00000 n 0001426746 00000 n 0001423325 00000 n 0001439088 00000 n 0001427565 00000 n 0001427715 00000 n 0001427867 00000 n 0001428019 00000 n 0001428171 00000 n 0001428323 00000 n 0001428474 00000 n 0001428626 00000 n 0001428777 00000 n 0001428928 00000 n 0001429079 00000 n 0001429230 00000 n 0001429382 00000 n 0001429532 00000 n 0001429684 00000 n 0001429836 00000 n 0001429988 00000 n 0001430140 00000 n 0001430292 00000 n 0001430444 00000 n 0001430596 00000 n 0001430748 00000 n 0001430900 00000 n 0001431051 00000 n 0001431203 00000 n 0001431355 00000 n 0001431506 00000 n 0001431658 00000 n 0001431809 00000 n 0001431961 00000 n 0001432111 00000 n 0001432263 00000 n 0001432415 00000 n 0001432567 00000 n 0001432718 00000 n 0001432870 00000 n 0001433021 00000 n 0001433173 00000 n 0001433324 00000 n 0001433476 00000 n 0001433628 00000 n 0001433780 00000 n 0001433932 00000 n 0001434084 00000 n 0001434236 00000 n 0001434388 00000 n 0001434538 00000 n 0001434690 00000 n 0001434842 00000 n 0001434993 00000 n 0001435144 00000 n 0001435295 00000 n 0001435447 00000 n 0001435599 00000 n 0001435751 00000 n 0001435903 00000 n 0001436055 00000 n 0001436207 00000 n 0001436359 00000 n 0001436510 00000 n 0001436661 00000 n 0001436812 00000 n 0001436964 00000 n 0001437116 00000 n 0001437268 00000 n 0001437420 00000 n 0001437572 00000 n 0001437724 00000 n 0001437876 00000 n 0001438028 00000 n 0001438180 00000 n 0001438332 00000 n 0001438484 00000 n 0001438636 00000 n 0001438788 00000 n 0001438939 00000 n 0001458689 00000 n 0001443319 00000 n 0001439233 00000 n 0001458630 00000 n 0001444309 00000 n 0001444461 00000 n 0001444613 00000 n 0001444765 00000 n 0001444916 00000 n 0001445067 00000 n 0001445218 00000 n 0001445369 00000 n 0001445520 00000 n 0001445671 00000 n 0001445822 00000 n 0001445973 00000 n 0001446125 00000 n 0001446277 00000 n 0001446429 00000 n 0001446581 00000 n 0001446733 00000 n 0001446885 00000 n 0001447037 00000 n 0001447189 00000 n 0001447341 00000 n 0001447493 00000 n 0001447643 00000 n 0001447794 00000 n 0001447944 00000 n 0001448094 00000 n 0001448244 00000 n 0001448395 00000 n 0001448546 00000 n 0001448697 00000 n 0001448848 00000 n 0001448999 00000 n 0001449150 00000 n 0001449300 00000 n 0001449451 00000 n 0001449602 00000 n 0001449753 00000 n 0001449904 00000 n 0001450054 00000 n 0001450204 00000 n 0001450354 00000 n 0001450502 00000 n 0001450651 00000 n 0001450802 00000 n 0001450953 00000 n 0001451104 00000 n 0001451255 00000 n 0001451405 00000 n 0001451556 00000 n 0001451706 00000 n 0001451857 00000 n 0001452007 00000 n 0001452158 00000 n 0001452309 00000 n 0001452460 00000 n 0001452611 00000 n 0001452762 00000 n 0001452913 00000 n 0001453063 00000 n 0001453212 00000 n 0001453363 00000 n 0001453514 00000 n 0001453665 00000 n 0001453815 00000 n 0001453966 00000 n 0001454117 00000 n 0001454267 00000 n 0001454418 00000 n 0001454569 00000 n 0001454719 00000 n 0001454869 00000 n 0001455020 00000 n 0001455171 00000 n 0001455321 00000 n 0001455471 00000 n 0001455622 00000 n 0001455772 00000 n 0001455923 00000 n 0001456073 00000 n 0001456224 00000 n 0001456374 00000 n 0001456525 00000 n 0001456676 00000 n 0001456826 00000 n 0001456977 00000 n 0001457127 00000 n 0001457278 00000 n 0001457428 00000 n 0001457578 00000 n 0001457729 00000 n 0001457880 00000 n 0001458030 00000 n 0001458181 00000 n 0001458332 00000 n 0001458482 00000 n 0001475942 00000 n 0001462603 00000 n 0001458775 00000 n 0001475883 00000 n 0001463476 00000 n 0001463626 00000 n 0001463777 00000 n 0001463928 00000 n 0001464079 00000 n 0001464229 00000 n 0001464379 00000 n 0001464529 00000 n 0001464680 00000 n 0001464831 00000 n 0001464982 00000 n 0001465133 00000 n 0001465284 00000 n 0001465435 00000 n 0001465586 00000 n 0001465736 00000 n 0001465886 00000 n 0001466036 00000 n 0001466187 00000 n 0001466338 00000 n 0001466490 00000 n 0001466641 00000 n 0001466793 00000 n 0001466944 00000 n 0001467095 00000 n 0001467247 00000 n 0001467399 00000 n 0001467551 00000 n 0001467703 00000 n 0001467855 00000 n 0001468007 00000 n 0001468159 00000 n 0001468311 00000 n 0001468463 00000 n 0001468613 00000 n 0001468764 00000 n 0001468916 00000 n 0001469068 00000 n 0001469220 00000 n 0001469372 00000 n 0001469523 00000 n 0001469674 00000 n 0001469824 00000 n 0001469976 00000 n 0001470126 00000 n 0001470278 00000 n 0001470430 00000 n 0001470582 00000 n 0001470732 00000 n 0001470883 00000 n 0001471033 00000 n 0001471184 00000 n 0001471335 00000 n 0001471487 00000 n 0001471639 00000 n 0001471791 00000 n 0001471943 00000 n 0001472095 00000 n 0001472247 00000 n 0001472399 00000 n 0001472550 00000 n 0001472702 00000 n 0001472852 00000 n 0001473004 00000 n 0001473155 00000 n 0001473307 00000 n 0001473459 00000 n 0001473611 00000 n 0001473763 00000 n 0001473913 00000 n 0001474064 00000 n 0001474215 00000 n 0001474367 00000 n 0001474518 00000 n 0001474669 00000 n 0001474821 00000 n 0001474973 00000 n 0001475125 00000 n 0001475277 00000 n 0001475429 00000 n 0001475581 00000 n 0001475733 00000 n 0001627076 00000 n 0001488627 00000 n 0001478831 00000 n 0001476028 00000 n 0001488568 00000 n 0001479506 00000 n 0001479658 00000 n 0001479810 00000 n 0001479961 00000 n 0001480112 00000 n 0001480263 00000 n 0001480415 00000 n 0001480567 00000 n 0001480719 00000 n 0001480871 00000 n 0001481023 00000 n 0001481175 00000 n 0001481327 00000 n 0001481478 00000 n 0001481629 00000 n 0001481780 00000 n 0001481932 00000 n 0001482084 00000 n 0001482235 00000 n 0001482387 00000 n 0001482537 00000 n 0001482689 00000 n 0001482840 00000 n 0001482991 00000 n 0001483142 00000 n 0001483294 00000 n 0001483444 00000 n 0001483594 00000 n 0001483744 00000 n 0001483894 00000 n 0001484044 00000 n 0001484192 00000 n 0001484344 00000 n 0001484496 00000 n 0001484647 00000 n 0001484798 00000 n 0001484948 00000 n 0001485099 00000 n 0001485250 00000 n 0001485401 00000 n 0001485552 00000 n 0001485703 00000 n 0001485854 00000 n 0001486005 00000 n 0001486155 00000 n 0001486306 00000 n 0001486456 00000 n 0001486606 00000 n 0001486757 00000 n 0001486907 00000 n 0001487057 00000 n 0001487208 00000 n 0001487359 00000 n 0001487510 00000 n 0001487661 00000 n 0001487812 00000 n 0001487964 00000 n 0001488115 00000 n 0001488266 00000 n 0001488417 00000 n 0001491776 00000 n 0001491623 00000 n 0001494182 00000 n 0001494153 00000 n 0001494284 00000 n 0001511230 00000 n 0001513879 00000 n 0001513853 00000 n 0001516869 00000 n 0001516764 00000 n 0001518856 00000 n 0001518761 00000 n 0001521913 00000 n 0001521752 00000 n 0001527763 00000 n 0001527494 00000 n 0001531489 00000 n 0001531219 00000 n 0001541998 00000 n 0001541677 00000 n 0001558840 00000 n 0001579811 00000 n 0001599524 00000 n 0001622169 00000 n 0001627165 00000 n 0001627289 00000 n 0001627415 00000 n 0001627541 00000 n 0001627667 00000 n 0001627793 00000 n 0001627910 00000 n 0001628020 00000 n 0001641920 00000 n 0001715324 00000 n 0001715365 00000 n 0001715405 00000 n 0001715539 00000 n trailer << /Size 7328 /Root 7326 0 R /Info 7327 0 R /ID [ ] >> startxref 1715821 %%EOF pywcs-1.11-4.8.2/wcslib/THANKS0000664000076400007640000000251711700600600016227 0ustar mdboommdboom00000000000000I would like to acknowledge the following people who have contributed to WCSLIB and/or PGSBOX in some way over the past 15 years - via bug reports, patches, suggestions for improvements, positive feedback, etc. James M. Anderson Robbie Auld Klaus Banse David Barnes David Berry Emmanuel Bertin Jeremy Brewer Wim Brouw Peter Bunclark Pan Chai Charles Copley Neil Crighton Cesar Enrique Garcia Dabo Lindsey Davis Ger van Diepen Patrick Dowler Michael Droettboom Rick Ebert Ken Ebisawa Sébastien Fabbro Bob Garwood Brian Glendenning Eric Greisen Michael Halle Booth Hartley Phil Hodge Bryan Irby Justin Jonas Yves Jung David Kaplan Daniel S. Katz Neil Killeen David King Paul F. Kunz Jonas Møller Larsen Jim Lewis Marco Lombardi Lars Kristian Lundin Robert Lupton Craig Markwardt Malte Marquarding Tom Marsh Sean Mattingly Dave McConnell Thomas A. McGlynn Michelle Miller Doug Mink August Muench Fergal Mullally Clive Page Sergio Pascual Bill Pence Olivier Perdereau Dirk Petry Ray Plante Niruj Mohan Ramanujam Harold Ravlin Boud Roukema Keith A. Scollick Arno Schoenmakers Hanno Spreeuw Ole Streicher (Debian maintainer) Hans Terlouw Peter Teuben Harro Verkouter John C. Vernaleo Martin Vogelaar Stephen Walton Boyd Waters Randall Wayth Matthew Whiting Peter Williams Daren Scot Wilson Tony Wong $Id: THANKS,v 4.8.1.2 2011/09/16 04:48:44 cal103 Exp cal103 $ pywcs-1.11-4.8.2/wcslib/GNUmakefile0000664000076400007640000001377211700600600017373 0ustar mdboommdboom00000000000000#----------------------------------------------------------------------------- # GNU makefile for building WCSLIB 4.8 # # 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.8.1.2 2011/10/04 07:49:19 cal103 Exp cal103 $ #----------------------------------------------------------------------------- # Get configure settings. include makedefs .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 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.11-4.8.2/setup.cfg0000664000076400007640000000362611700600601015655 0ustar mdboommdboom00000000000000[metadata] name = pywcs version = 1.10-4.8 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.5 requires-dist = pyfits (>=2.4.0) numpy (>=1.5.1) [files] packages_root = lib packages = pywcs pywcs.tests package_data = pywcs = include/*.h include/wcslib/*.h pywcs.tests = data/*.hdr maps/*.hdr spectra/*.hdr [global] commands = stsci.distutils.command.easier_install.easier_install setup_hooks = 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/wcslib_wrap.c src/wcslib_tabprm_wrap.c src/wcslib_units_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 [easy_install] find-links = .. pywcs-1.11-4.8.2/README0000664000076400007640000000211311700600601014702 0ustar mdboommdboom00000000000000Introduction ------------ 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: support@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.11-4.8.2/MANIFEST.in0000664000076400007640000000041511701362302015567 0ustar mdboommdboom00000000000000include 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 *.hdrpywcs-1.11-4.8.2/PKG-INFO0000664000076400007640000000043611701362314015134 0ustar mdboommdboom00000000000000Metadata-Version: 1.0 Name: pywcs Version: 1.11-4.8.2 Summary: Python wrappers to WCSLIB Home-page: http://projects.scipy.org/astropy/astrolib/wiki/WikiStart Author: Michael Droettboom Author-email: mdroe@stsci.edu License: UNKNOWN Description: UNKNOWN Platform: unix Platform: windows pywcs-1.11-4.8.2/CHANGELOG0000664000076400007640000000561711701356577015275 0ustar mdboommdboom00000000000000Version 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.11-4.8.2/LICENSE0000664000076400007640000000267511701361101015044 0ustar mdboommdboom00000000000000Copyright (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.11-4.8.2/src/0000775000076400007640000000000011701362314014623 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/src/pipeline.c0000664000076400007640000001714711701361100016576 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/wcslib_wtbarr_wrap.h0000664000076400007640000000351311701361100020663 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/wcslib_wtbarr_wrap.c0000664000076400007640000002100611701361100020653 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/sip_wrap.c0000664000076400007640000003326611701361100016615 0ustar mdboommdboom00000000000000/* 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]; dims[0] = (npy_intp)self->x.a_order + 1; dims[1] = (npy_intp)self->x.a_order + 1; if (is_null(self->x.a)) { return NULL; } 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]; dims[0] = (npy_intp)self->x.b_order + 1; dims[1] = (npy_intp)self->x.b_order + 1; if (is_null(self->x.b)) { return NULL; } 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]; dims[0] = (npy_intp)self->x.ap_order + 1; dims[1] = (npy_intp)self->x.ap_order + 1; if (is_null(self->x.ap)) { return NULL; } 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]; dims[0] = (npy_intp)self->x.bp_order + 1; dims[1] = (npy_intp)self->x.bp_order + 1; if (is_null(self->x.bp)) { return NULL; } 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.11-4.8.2/src/wcslib_tabprm_wrap.h0000664000076400007640000000351311701361100020647 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/distortion_wrap.c0000664000076400007640000002432611701361100020215 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/pywcs_api.c0000664000076400007640000000554411701361077017002 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/wcslib_wrap.c0000664000076400007640000022332311701361077017315 0ustar mdboommdboom00000000000000/* 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 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 == -1 || 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 == -1 || 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 == -1 || 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[NWCSFIX] = { {"datfix", DATFIX}, {"unitfix", UNITFIX}, {"celfix", CELFIX}, {"spcfix", SPCFIX}, {"cylfix", CYLFIX}, {NULL} }; 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); } /* TODO: Use wcsfixi */ 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]; if (msg_index > 0 && msg_index < 11) { message = err[message_map[i].index].msg; } else if (msg_index == 0) { message = "Success"; } else { 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 == -1 || 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 == -1 || 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.11-4.8.2/src/sip_wrap.h0000664000076400007640000000333111701361077016625 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/str_list_proxy.h0000664000076400007640000000422111701361076020103 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/docstrings.c0000664000076400007640000021200311701361624017147 0ustar mdboommdboom00000000000000/* 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[1018]; 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[1014]; 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[445]; char doc_get_offset[103]; char doc_get_pc[384]; 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[1085]; 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[3096]; 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``, and the deprecated ", 256); strncpy(doc_cd + 256, "``CDi_ja`` and\n``CROTAia`` keywords. Although the deprecated versions may not\nformally co-exist with ``PCi_ja``, the approach here is simply to\nignore them if given in conjunction with ``PCi_ja``.\n\n`~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and\n`~pywc", 256); strncpy(doc_cd + 512, "s.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_ja`` by `~pywcs.Wcsprm.set` and are\nnowhere visible ", 256); strncpy(doc_cd + 768, "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, `set` reverts to a unity ``PCi_ja``\nmatrix.\n", 250); 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``, and the deprecated ``CD", 256); strncpy(doc_crota + 256, "i_ja`` and\n``CROTAia`` keywords. Although the deprecated versions may not\nformally co-exist with ``PCi_ja``, the approach here is simply to\nignore them if given in conjunction with ``PCi_ja``.\n\n`~pywcs.Wcsprm.has_pc`, `~pywcs.Wcsprm.has_cd` and\n`~pywcs.Wc", 256); strncpy(doc_crota + 512, "sprm.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_ja`` by `~pywcs.Wcsprm.set` and are\nnowhere visible to t", 256); strncpy(doc_crota + 768, "he 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, `set` reverts to a unity ``PCi_ja``\nmatrix.\n", 246); 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 specifies\nthe linear transformation m", 256); strncpy(doc_get_cdelt + 256, "atrix in one of the deprecated ``CDi_ja``\nor ``CROTAia`` forms. This is useful when you want access to the\nlinear transformation matrix, but don\'t care how it was specified in\nthe header.\n", 189); 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 deprecated ``CDi_ja``\nor ``CROTAia`` form", 256); strncpy(doc_get_pc + 256, "s. This is useful when you want access to the\nlinear transformation matrix, but don\'t care how it was specified in\nthe header.\n", 128); 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``, and the deprecated ``CDi_ja`` and\n``CROTAia`` keywords. Although the deprecated versions may not\nformally co-exist with ``PCi_ja``, the approach here is simply to\nignore them if given in conjunction with ``P", 256); strncpy(doc_pc + 512, "Ci_ja``.\n\n`~pywcs.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 immedi", 256); strncpy(doc_pc + 768, "ately to ``PCi_ja`` 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 th", 256); strncpy(doc_pc + 1024, "e latitude axis, `set` reverts to a unity ``PCi_ja``\nmatrix.\n", 61); 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- *axes*: int or a sequence.\n\n", 256); strncpy(doc_sub + 512, " - 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 numbers\n (1-relative) or special axis identifiers (see below). Order is\n significant; ``axes[0]`` is the axis number o", 256); strncpy(doc_sub + 768, "f the input image that\n corresponds to the first axis in the subimage, etc.\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 - ``\'l", 256); strncpy(doc_sub + 1024, "ongitude\'`` / ``WCSSUB_LONGITUDE``: Celestial longitude\n\n - ``\'latitude\'`` / ``WCSSUB_LATITUDE``: Celestial latitude\n\n - ``\'cubeface\'`` / ``WCSSUB_CUBEFACE``: Quadcube ``CUBEFACE`` axis\n\n - ``\'spectral\'`` / ``WCSSUB_SPECTRAL``: Spectral axis\n\n - ``\'sto", 256); strncpy(doc_sub + 1280, "kes\'`` / ``WCSSUB_STOKES``: Stokes axis\n\n - ``\'celestial\'`` / ``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**Exc", 256); strncpy(doc_sub + 1536, "eptions:**\n\n- `MemoryError`: Memory allocation failed.\n\n- `InvalidSubimageSpecificationError`: Invalid subimage specification\n (no spectral axis).\n\n- `NonseparableSubimageCoordinateSystem`: Non-separable subimage\n coordinate system.\n\n.. note::\n\n Combina", 256); strncpy(doc_sub + 1792, "tions of subimage axes of particular types may be extracted\n 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 |", 256); strncpy(doc_sub + 2048, " WCSSUB_SPECTRAL])\n\n would extract the longitude, latitude, 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 ", 256); strncpy(doc_sub + 2304, "the combination\n ``WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_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 ", 256); strncpy(doc_sub + 2560, "-(WCSSUB_SPECTRAL | WCSSUB_STOKES)])\n\n The last of these specifies 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 ", 256); strncpy(doc_sub + 2816, "not subsequently (via ``axes[3]``). Likewise for\n the latitude 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 a", 256); strncpy(doc_sub + 3072, "xes in the input image.\n", 24); 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.11-4.8.2/src/pyutil.c0000664000076400007640000005344311701361076016332 0ustar mdboommdboom00000000000000/* 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 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 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.11-4.8.2/src/sip.h0000664000076400007640000001306311701361076015576 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/docstrings.h0000664000076400007640000000772211701361624017166 0ustar mdboommdboom00000000000000/* 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); 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[1018]; 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[1014]; 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[445]; extern char doc_get_offset[103]; extern char doc_get_pc[384]; 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[1085]; 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[3096]; 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.11-4.8.2/src/wcslib_units_wrap.h0000664000076400007640000000372311701361076020543 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/util.h0000664000076400007640000000366011701361076015762 0ustar mdboommdboom00000000000000/* 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 inline #endif #ifdef _MSC_VER #define 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.11-4.8.2/src/pywcs_api.h0000664000076400007640000001401011701361076016772 0ustar mdboommdboom00000000000000/* 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 "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.11-4.8.2/src/distortion_wrap.h0000664000076400007640000000352611701361075020234 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/sip.c0000664000076400007640000002143211701361074015566 0ustar mdboommdboom00000000000000/* 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; } } if (scratch_size > 0) { 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 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.11-4.8.2/src/wcslib_units_wrap.c0000664000076400007640000002537311701361074020541 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/pywcs.h0000664000076400007640000000362511701361074016151 0ustar mdboommdboom00000000000000/* 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__ /* 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.11-4.8.2/src/wcslib_wrap.h0000664000076400007640000000347111701361074017317 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/distortion.h0000664000076400007640000000777111701361074017210 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/util.c0000664000076400007640000000404211701361073015745 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/distortion.c0000664000076400007640000001601311701361073017167 0ustar mdboommdboom00000000000000/* 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 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 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 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 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]); } } 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.11-4.8.2/src/pywcs.c0000664000076400007640000006403211701361073016142 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/isnan.h0000664000076400007640000000223611421352016016104 0ustar mdboommdboom00000000000000#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.11-4.8.2/src/pyutil.h0000664000076400007640000002217311701361073016330 0ustar mdboommdboom00000000000000/* 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 inline void offset_c_array( double* value, npy_intp size, double offset) { double* end = value + size; for ( ; value != end; ++value) { *value += offset; } } static inline void nan2undefined( double* value, unsigned int nvalues) { double* end = value + nvalues; for ( ; value != end; ++value) { if (isnan64(*value)) { *value = UNDEFINED; } } } static 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 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 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 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 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 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 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 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 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 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 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 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.11-4.8.2/src/wcslib_tabprm_wrap.c0000664000076400007640000003016711701361073020660 0ustar mdboommdboom00000000000000/* 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 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(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.11-4.8.2/src/pipeline.h0000664000076400007640000000731411701361072016606 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/src/wcsconfig.h0000664000076400007640000000020711700705001016746 0ustar mdboommdboom00000000000000 /* WCSLIB library version number. */ #define WCSLIB_VERSION 4.8.2 /* 64-bit integer data type. */ #define WCSLIB_INT64 long long int pywcs-1.11-4.8.2/src/str_list_proxy.c0000664000076400007640000002040011701361535020073 0ustar mdboommdboom00000000000000/* 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.11-4.8.2/setup.py0000664000076400007640000000030011700704761015544 0ustar mdboommdboom00000000000000#!/usr/bin/env python from __future__ import division # confidence high try: import stsci.tools.stsci_distutils_hack as H except ImportError: import stsci_distutils_hack as H H.run() pywcs-1.11-4.8.2/stsci_distutils_hack.py0000664000076400007640000002152111701356715020636 0ustar mdboommdboom00000000000000# # $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.11-4.8.2/defsetup.py0000764000076400007640000002205611701357660016243 0ustar mdboommdboom00000000000000#!/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 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.8.2" 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 """ % (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 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': 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/spectra', ['lib/pywcs/tests/spectra/*.hdr']), ( 'pywcs/tests/data', ['lib/pywcs/tests/data/*.hdr']) ], 'package_dir' : { 'pywcs' : 'lib/pywcs', 'pywcs.tests' : 'lib/pywcs/tests'}, } pywcs-1.11-4.8.2/lib/0000775000076400007640000000000011701362314014602 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/lib/pywcs/0000775000076400007640000000000011701362314015747 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/lib/pywcs/tests/0000775000076400007640000000000011701362314017111 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/lib/pywcs/tests/test_wcsprm.py0000664000076400007640000003224111701357464022051 0ustar mdboommdboom00000000000000import 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.dirname(__file__) 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') assert w.datfix() == 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') assert w.fix() == { 'cylfix': 'No change', 'datfix': 'Success', '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() == 0 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.11-4.8.2/lib/pywcs/tests/spectra/0000775000076400007640000000000011701362314020552 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/lib/pywcs/tests/spectra/orion-freq-4.hdr0000664000076400007640000007366011700600636023510 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/spectra/orion-velo-1.hdr0000664000076400007640000007176011700600636023514 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/spectra/orion-freq-1.hdr0000664000076400007640000007330011700600636023474 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/spectra/orion-wave-4.hdr0000664000076400007640000007222011700600636023504 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/spectra/orion-velo-4.hdr0000664000076400007640000007234011700600636023512 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/spectra/orion-wave-1.hdr0000664000076400007640000007164011700600636023506 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/__init__.py0000664000076400007640000000000111700600636021212 0ustar mdboommdboom00000000000000 pywcs-1.11-4.8.2/lib/pywcs/tests/maps/0000775000076400007640000000000011701362314020051 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/lib/pywcs/tests/maps/1904-66_ZPN.hdr0000664000076400007640000002506011700600633022126 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_CYP.hdr0000664000076400007640000002222011700600633022105 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_SIN.hdr0000664000076400007640000002222011700600633022103 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_NCP.hdr0000664000076400007640000002222011700600633022072 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_QSC.hdr0000664000076400007640000002176011700600633022110 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_BON.hdr0000664000076400007640000002210011700600633022065 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_AZP.hdr0000664000076400007640000002222011700600633022104 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_SFL.hdr0000664000076400007640000002176011700600633022106 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_ARC.hdr0000664000076400007640000002176011700600633022067 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_ZEA.hdr0000664000076400007640000002176011700600633022101 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_CEA.hdr0000664000076400007640000002210011700600633022037 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_PAR.hdr0000664000076400007640000002176011700600633022104 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_TAN.hdr0000664000076400007640000002176011700600633022104 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_COD.hdr0000664000076400007640000002222011700600633022057 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_CAR.hdr0000664000076400007640000002176011700600633022067 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_STG.hdr0000664000076400007640000002176011700600633022117 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_AIR.hdr0000664000076400007640000002210011700600633022062 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_SZP.hdr0000664000076400007640000002234011700600633022131 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_CSC.hdr0000664000076400007640000002176011700600633022072 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_COO.hdr0000664000076400007640000002222011700600633022072 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_MOL.hdr0000664000076400007640000002176011700600633022111 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_COP.hdr0000664000076400007640000002222011700600633022073 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_HPX.hdr0000664000076400007640000002234011700600633022114 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_AIT.hdr0000664000076400007640000002176011700600633022077 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_MER.hdr0000664000076400007640000002176011700600633022105 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_TSC.hdr0000664000076400007640000002176011700600633022113 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_PCO.hdr0000664000076400007640000002176011700600633022103 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/maps/1904-66_COE.hdr0000664000076400007640000002222011700600633022060 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/test.py0000775000076400007640000001713311700600636020453 0ustar mdboommdboom00000000000000import 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.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. 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.11-4.8.2/lib/pywcs/tests/data/0000775000076400007640000000000011701362314020022 5ustar mdboommdboom00000000000000pywcs-1.11-4.8.2/lib/pywcs/tests/data/3d_cd.hdr0000664000076400007640000000241711700600636021502 0ustar mdboommdboom00000000000000CD1_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.11-4.8.2/lib/pywcs/tests/data/outside_sky.hdr0000664000076400007640000000267711700600636023100 0ustar mdboommdboom00000000000000SIMPLE = 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.11-4.8.2/lib/pywcs/tests/test_profiling.py0000664000076400007640000000723411700600636022522 0ustar mdboommdboom00000000000000import 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.11-4.8.2/lib/pywcs/__init__.py0000664000076400007640000000666711701361534020102 0ustar mdboommdboom00000000000000# 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 pywcs import * __version__ = "1.11-4.7" pywcs-1.11-4.8.2/lib/pywcs/pywcs.py0000664000076400007640000012216511701361534017500 0ustar mdboommdboom00000000000000# 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 copy import sys # 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) # 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): """ - *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. .. 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): 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 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) 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) 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): """ Create a `Paper IV`_ type lookup table for detector to image plane correction. """ cpdis = [None, None] crpix = [0.,0.] crval = [0.,0.] cdelt = [1.,1.] 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: 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) axiscorr = header.get('AXISCORR', None) if axiscorr == 1: return (cpdis, None) else: return (None, cpdis) 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 _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: 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"]) 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) elif "B_ORDER" in header: raise ValueError( "B_ORDER provided without corresponding A_ORDER " "keyword for SIP distortion") else: a = None b = None if "AP_ORDER" in header: 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"]) 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) elif "BP_ORDER" in header: 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 _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_header(self, relax=False): """ Generate a `pyfits`_ header object with the WCS information stored in this object. .. warning:: This function does not write out SIP or Paper IV distortion keywords, yet, only the core WCS support by `wcslib`_. 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. Returns a `pyfits`_ Header object. """ if not HAS_PYFITS: raise ImportError( "pyfits is required to generate a FITS header") 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) return pyfits.Header(cards) def to_header_string(self, relax=False): """ Identical to `to_header`, but returns a string containing the header cards. """ return self.to_header(self, relax).to_string() 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 pywcs-1.11-4.8.2/lib/pywcs/_docutil.py0000664000076400007640000000557111701361534020136 0ustar mdboommdboom00000000000000# 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)