diff --git a/docs/source/about.md b/docs/source/about.md index abbeccc97..1314edd2e 100644 --- a/docs/source/about.md +++ b/docs/source/about.md @@ -10,10 +10,18 @@ function (PSF) modelling technique. The code has been designed to facilitate the inclusion of new or improved processing steps to adapt to advances made in the coming years. +```{figure} https://www.skysurvey.cc/wp-content/uploads/2022/04/UNIONS-Logo-TextBlack-1K-300x82.png +--- +figclass: margin +alt: UNIONS logo +target: https://www.skysurvey.cc/ +--- +``` + The primary application of ShapePipe so far has been to the Ultraviolet -Near-Infrared Optical Northern Survey (UNIONS) data (see {cite:t}`guinot:21` +Near-Infrared Optical Northern Survey (UNIONS) data (see {cite:t}`guinot:22` and Kilbinger et al., in prep). We plan to add features and find new applications for ShapePipe and will update this documentation accordingly. For more details on the first public release -of ShapePipe please see Farrens et al. (in prep). +of ShapePipe please see {cite:t}`farrens:22b`. diff --git a/docs/source/basic_execution.md b/docs/source/basic_execution.md index fade00674..9e7ca63b4 100644 --- a/docs/source/basic_execution.md +++ b/docs/source/basic_execution.md @@ -5,14 +5,14 @@ ShapePipe pipelines are launched and managed via the `shapepipe_run` script. A list of command line arguments can be displayed using the `--help` option: +```{seealso} +:class: margin +The `shapepipe` environment will need to be built and activated in order to run this script (see [Installation](installation.md)). +``` ```bash shapepipe_run --help ``` -```{warning} -The `shapepipe` environment will need to be built and activated in order to run this script (see [Installation](installation.md)). -``` - The options for defining a pipeline are managed via a [configuration file](configuration.md). diff --git a/docs/source/conf.py b/docs/source/conf.py index 8ea294407..a191341a1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -25,7 +25,7 @@ # The short X.Y version version = '1.0' # The full version, including alpha/beta/rc tags -release = '1.0.0' +release = '1.0.1' # -- General configuration --------------------------------------------------- @@ -113,7 +113,12 @@ 'use_issues_button': True, 'use_download_button': False, 'use_fullscreen_button': False, + 'use_edit_page_button': True, + 'path_to_docs': 'docs/source', + 'extra_navbar': "

", } +html_collapsible_definitions = True +html_awesome_headerlinks = True # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -153,4 +158,5 @@ # -- BibTeX Setting ---------------------------------------------- bibtex_bibfiles = ['refs.bib'] -bibtex_default_style = 'alpha' +bibtex_default_style = 'unsrt' +bibtex_reference_style = 'author_year' diff --git a/docs/source/contributors.md b/docs/source/contributors.md index d1f850450..a9ab324ec 100644 --- a/docs/source/contributors.md +++ b/docs/source/contributors.md @@ -7,6 +7,34 @@ possible applications of the package. Below will list the individuals who have contributed to the development of ShapePipe so far. +```{figure} https://avatars.githubusercontent.com/u/6851839?v=4 +--- +figclass: margin +alt: Samuel Farrens +width: 25% +target: https://github.com/sfarrens +--- +Samuel Farrens +``` +```{figure} https://avatars.githubusercontent.com/u/39480528?v=4 +--- +figclass: margin +alt: Axel Guinot +width: 25% +target: https://github.com/aguinot +--- +Axel Guinot +``` +```{figure} https://avatars.githubusercontent.com/u/4549196?v=4 +--- +figclass: margin +alt: Martin Kilbinger +width: 25% +target: https://github.com/martinkilbinger +--- +Martin Kilbinger +``` + ## Maintainers - [Samuel Farrens](https://github.com/sfarrens) : Development lead, core package developer, performance and debugging diff --git a/docs/source/index.rst b/docs/source/index.rst index b70f77905..8a030bfe7 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -4,6 +4,12 @@ ShapePipe .. Include table of contents .. include:: toc.rst +.. figure:: img/cosmostat_logo.jpg + :figclass: margin + :width: 100% + :alt: CosmoStat Logo + :target: http://www.cosmostat.org/ + ShapePipe is a galaxy shape measurement pipeline developed within the |link-to-cosmostat| lab at CEA Paris-Saclay. @@ -13,9 +19,7 @@ we invite you to |link-to-issues| on the GitHub repository an we will do our best to help you. We kindly request that if you use ShapePipe for your academic work that you -cite :cite:`guinot:21` and Farrens et al. (in prep). - -|CS_LOGO| +cite :cite:t:`guinot:22` and :cite:t:`farrens:22b`. .. |link-to-cosmostat| raw:: html @@ -25,8 +29,3 @@ cite :cite:`guinot:21` and Farrens et al. (in prep). open an issue - -.. |CS_LOGO| image:: img/cosmostat_logo.jpg - :width: 45% - :alt: CosmoStat Logo - :target: http://www.cosmostat.org/ diff --git a/docs/source/installation.md b/docs/source/installation.md index 2c9873b49..bfe4e8096 100644 --- a/docs/source/installation.md +++ b/docs/source/installation.md @@ -1,6 +1,6 @@ # Installation -```{important} +```{attention} ShapePipe was not designed to be a stand-alone Python library. Instead users are expected to install the full ShapePipe environment on the system(s) where data should be processed. @@ -8,19 +8,24 @@ data should be processed. ## Standard Installation -The standard installation of ShapePipe manages [dependencies](dependencies.md) -and scripts using a [Conda](https://docs.conda.io/en/latest/) environment. -Therefore, to follow the standard installation Conda must be available on the -system. - ```{tip} +:class: margin Check out [Miniconda](https://docs.conda.io/en/latest/miniconda.html) for a light weight and easy installation of Conda. ``` +The standard installation of ShapePipe manages [dependencies](dependencies.md) +and scripts using a [Conda](https://docs.conda.io/en/latest/) environment. +Therefore, to follow the standard installation Conda must be available on the +system. + The ShapePipe package should first be cloned (or downloaded) from the [GitHub repository](https://github.com/CosmoStat/shapepipe). +```{note} +:class: margin +Developers should simply clone the repository as usual. +``` ```bash git clone -b --depth 1 git@github.com:CosmoStat/shapepipe.git cd shapepipe @@ -32,10 +37,6 @@ where `` is a [latest release](https://github.com/CosmoStat/shapepipe/releases/latest) unless you want to reproduce an older set of results. -```{note} -Developers should simply clone the repository as usual. -``` - Then, the entire ShapePipe environment, including dependencies, can be built using the `install_shapepipe` script as follows. @@ -93,15 +94,15 @@ entire ShapePipe environment. ## Installing the ShapePipe Library Only -```{warning} -Note, this method will not include any system executables or examples. -``` - The ShapePipe library, i.e. the core package not including module dependencies, can be installed in the following ways. After cloning the repository. +```{warning} +:class: margin +Note, this method will not include any system executables or examples. +``` ```bash pip install . ``` diff --git a/docs/source/module_develop.md b/docs/source/module_develop.md index dd82d2e2a..3df8fe88c 100644 --- a/docs/source/module_develop.md +++ b/docs/source/module_develop.md @@ -67,6 +67,12 @@ def example_module(*args): In the specific case of a module that executes an executable available on the system, the module runner should also import the `execute` function. +```{note} +:class: margin +If no `stdout` or `stderr` are provided by the given module, the module +runner should simply return `None, None`. +``` + ```python from shapepipe.modules.module_decorator import module_runner from shapepipe.modules.module_name_package.module_name import ... @@ -84,10 +90,7 @@ def example_module(*args): return stdout, stderr ``` -```{note} -If no `stdout` or `stderr` are provided by the given module, the the module -runner should simply return `None, None`. -``` + The module runner decorator takes the following keyword arguments: diff --git a/docs/source/refs.bib b/docs/source/refs.bib index f2f5c933d..7dcb046c5 100644 --- a/docs/source/refs.bib +++ b/docs/source/refs.bib @@ -318,11 +318,36 @@ @ARTICLE{farrens:22 adsnote = {Provided by the SAO/NASA Astrophysics Data System} } -@article{guinot:21, - author = {{Guinot}, A. and {Kilbinger}, M. and {Farrens}, S. and others}, +@ARTICLE{farrens:22b, + author = {{Farrens}, S. and {Guinot}, A. and {Kilbinger}, M. and {Liaudat}, T. and {Baumont}, L. and {Jimenez}, X. and {Peel}, A. and {Pujol}, A. and {Schmitz}, M. and {Starck}, J. -L. and {Vitorelli}, A.~Z.}, + title = "{ShapePipe: A modular weak-lensing processing and analysis pipeline}", + journal = {arXiv e-prints}, + keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Astrophysics - Cosmology and Nongalactic Astrophysics}, + year = 2022, + month = jun, + eid = {arXiv:2206.14689}, + pages = {arXiv:2206.14689}, +archivePrefix = {arXiv}, + eprint = {2206.14689}, + primaryClass = {astro-ph.IM}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2022arXiv220614689F}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} +} + +@ARTICLE{guinot:22, + author = {{Guinot}, Axel and {Kilbinger}, Martin and {Farrens}, Samuel and {Peel}, Austin and {Pujol}, Arnau and {Schmitz}, Morgan and {Starck}, Jean-Luc and {Erben}, Thomas and {Gavazzi}, Raphael and {Gwyn}, Stephen and {Hudson}, Michael J. and {Hiledebrandt}, Hendrik and {Liaudat}, Tobias and {Miller}, Lance and {Spitzer}, Isaac and {Van Waerbeke}, Ludovic and {Cuillandre}, Jean-Charles and {Fabbro}, S{\'e}bastien and {McConnachie}, Alan}, title = "{ShapePipe: a new shape measurement pipeline and weak-lensing application to UNIONS/CFIS data}", - journal = {Submitted to \aap}, - year = 2021, + journal = {arXiv e-prints}, + keywords = {Astrophysics - Cosmology and Nongalactic Astrophysics}, + year = 2022, + month = apr, + eid = {arXiv:2204.04798}, + pages = {arXiv:2204.04798}, +archivePrefix = {arXiv}, + eprint = {2204.04798}, + primaryClass = {astro-ph.CO}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2022arXiv220404798G}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} } @ARTICLE{harnois:15, @@ -437,33 +462,33 @@ @ARTICLE{jarvis:04 adsnote = {Provided by the SAO/NASA Astrophysics Data System} } -@ARTICLE{jarvis:16, - author = {{Jarvis}, M. and {Sheldon}, E. and {Zuntz}, J. and {Kacprzak}, T. and +@ARTICLE{jarvis:16, + author = {{Jarvis}, M. and {Sheldon}, E. and {Zuntz}, J. and {Kacprzak}, T. and {Bridle}, S.~L. and {Amara}, A. and {Armstrong}, R. and {Becker}, M.~R. and {Bernstein}, G.~M. and {Bonnett}, C. and {Chang}, C. and {Das}, R. and - {Dietrich}, J.~P. and {Drlica-Wagner}, A. and {Eifler}, T.~F. and + {Dietrich}, J.~P. and {Drlica-Wagner}, A. and {Eifler}, T.~F. and {Gangkofner}, C. and {Gruen}, D. and {Hirsch}, M. and {Huff}, E.~M. and - {Jain}, B. and {Kent}, S. and {Kirk}, D. and {MacCrann}, N. and + {Jain}, B. and {Kent}, S. and {Kirk}, D. and {MacCrann}, N. and {Melchior}, P. and {Plazas}, A.~A. and {Refregier}, A. and {Rowe}, B. and - {Rykoff}, E.~S. and {Samuroff}, S. and {S{\'a}nchez}, C. and - {Suchyta}, E. and {Troxel}, M.~A. and {Vikram}, V. and {Abbott}, T. and + {Rykoff}, E.~S. and {Samuroff}, S. and {S{\'a}nchez}, C. and + {Suchyta}, E. and {Troxel}, M.~A. and {Vikram}, V. and {Abbott}, T. and {Abdalla}, F.~B. and {Allam}, S. and {Annis}, J. and {Benoit-L{\'e}vy}, A. and {Bertin}, E. and {Brooks}, D. and {Buckley-Geer}, E. and {Burke}, D.~L. and {Capozzi}, D. and {Carnero Rosell}, A. and {Carrasco Kind}, M. and - {Carretero}, J. and {Castander}, F.~J. and {Clampitt}, J. and + {Carretero}, J. and {Castander}, F.~J. and {Clampitt}, J. and {Crocce}, M. and {Cunha}, C.~E. and {D'Andrea}, C.~B. and {da Costa}, L.~N. and - {DePoy}, D.~L. and {Desai}, S. and {Diehl}, H.~T. and {Doel}, P. and + {DePoy}, D.~L. and {Desai}, S. and {Diehl}, H.~T. and {Doel}, P. and {Fausti Neto}, A. and {Flaugher}, B. and {Fosalba}, P. and {Frieman}, J. and - {Gaztanaga}, E. and {Gerdes}, D.~W. and {Gruendl}, R.~A. and + {Gaztanaga}, E. and {Gerdes}, D.~W. and {Gruendl}, R.~A. and {Gutierrez}, G. and {Honscheid}, K. and {James}, D.~J. and {Kuehn}, K. and - {Kuropatkin}, N. and {Lahav}, O. and {Li}, T.~S. and {Lima}, M. and + {Kuropatkin}, N. and {Lahav}, O. and {Li}, T.~S. and {Lima}, M. and {March}, M. and {Martini}, P. and {Miquel}, R. and {Mohr}, J.~J. and - {Neilsen}, E. and {Nord}, B. and {Ogando}, R. and {Reil}, K. and + {Neilsen}, E. and {Nord}, B. and {Ogando}, R. and {Reil}, K. and {Romer}, A.~K. and {Roodman}, A. and {Sako}, M. and {Sanchez}, E. and {Scarpine}, V. and {Schubnell}, M. and {Sevilla-Noarbe}, I. and - {Smith}, R.~C. and {Soares-Santos}, M. and {Sobreira}, F. and + {Smith}, R.~C. and {Soares-Santos}, M. and {Sobreira}, F. and {Swanson}, M.~E.~C. and {Tarle}, G. and {Thaler}, J. and {Thomas}, D. and - {Walker}, A.~R. and {Wechsler}, R.~H.}, + {Walker}, A.~R. and {Wechsler}, R.~H.}, title = "{The DES Science Verification weak lensing shear catalogues}", journal = {\mnras}, archivePrefix = "arXiv", diff --git a/docs/source/understanding_api.md b/docs/source/understanding_api.md index 47d4a7a9c..33719681f 100644 --- a/docs/source/understanding_api.md +++ b/docs/source/understanding_api.md @@ -1,13 +1,14 @@ # Understanding the API Documentation -This page aims to help ShapePipe users and developers understand the -Application Programming Interface (API) documentation. - ```{note} +:class: margin If you are already familiar with this type of documentation you can skip this page. ``` +This page aims to help ShapePipe users and developers understand the +Application Programming Interface (API) documentation. + ## What Are API Docs? The API documentation is designed to communicate in clear way what each class @@ -18,6 +19,13 @@ with three double quotes `"""`) written in the code. ## Standard API Docs +```{note} +:class: margin +If an optional argument does not explicitly specify the default parameter value +then the user should expect that this means the default will be `None`, `''`, +`[]`, etc. depending on the input data type. +``` + All the classes/functions include a short description of what they do. This is followed by a `Parameters` section containing a bullet point list of the expected input arguments. For each parameter you will see in brackets the @@ -25,12 +33,6 @@ expected input type (e.g. `int`, `float`, `list`, etc.) followed by a brief description of what the argument is for. Parameters listed as *optional* in the brackets do not need to be provided and will default to some predefined value. -```{note} -If an optional argument does not explicitly specify the default parameter value -then the user should expect that this means the default will be `None`, `''`, -`[]`, etc. depending on the input data type. -``` - For functions that return objects a `Returns` section will follow the `Parameters` section. This will provide a brief description of what is provided by this function. Following `Returns` you will always find `Return type`, which diff --git a/example/cfis/config.mask b/example/cfis/config.mask index a1f6fbb4b..9a147bdcd 100644 --- a/example/cfis/config.mask +++ b/example/cfis/config.mask @@ -1,4 +1,4 @@ -# Mask module configuration file +# Mask module configuration file for single-exposure images ## Paths to executables [PROGRAM_PATH] @@ -51,12 +51,23 @@ SPIKE_REG_FILE = spike.reg MESSIER_MAKE = True -MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.npy +MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.fits MESSIER_SIZE_PLUS = 0. MESSIER_FLAG_VALUE = 16 -# -------------------------- Missing data parameters ------------------------------ +## NGC mask +[NGC_PARAMETERS] + +NGC_MAKE = True + +NGC_CAT_PATH = $SP_CONFIG/mask_default/ngc_cat.fits +NGC_SIZE_PLUS = 0. +NGC_FLAG_VALUE = 32 + + + +## Missing data parameters [MD_PARAMETERS] MD_MAKE = False @@ -66,11 +77,10 @@ MD_THRESH_REMOVE = 0.75 MD_REMOVE = False -# ----------------------------- Other parameters ---------------------------------- +## Other parameters [OTHER] TEMP_DIRECTORY = .temp KEEP_REG_FILE = False KEEP_INDIVIDUAL_MASK = False - diff --git a/example/cfis/config_GitFeGie_vos.ini b/example/cfis/config_GitFeGie_vos.ini index 40c98cd16..fd3207bb3 100644 --- a/example/cfis/config_GitFeGie_vos.ini +++ b/example/cfis/config_GitFeGie_vos.ini @@ -18,7 +18,7 @@ RUN_DATETIME = True [EXECUTION] # Module name, single string or comma-separated list of valid module runner names -MODULE = get_images_runner, find_exposures_runner, get_images_runner +MODULE = get_images_runner, find_exposures_runner, get_images_runner # Parallel processing mode, SMP or MPI MODE = SMP @@ -146,4 +146,3 @@ N_TRY = 3 # Retrieve command options, optional RETRIEVE_OPTIONS = --certfile=$VM_HOME/.ssl/cadcproxy.pem - diff --git a/example/cfis/config_MaMa.ini b/example/cfis/config_MaMa.ini index 102a9aa5e..cc4b7f9c4 100644 --- a/example/cfis/config_MaMa.ini +++ b/example/cfis/config_MaMa.ini @@ -44,7 +44,7 @@ OUTPUT_DIR = $SP_RUN/output [JOB] # Batch size of parallel processing (optional), default is 1, i.e. run all jobs in serial -SMP_BATCH_SIZE = 4 +SMP_BATCH_SIZE = 8 # Timeout value (optional), default is None, i.e. no timeout limit applied TIMEOUT = 96:00:00 diff --git a/example/cfis/config_MsPl_mccd.ini b/example/cfis/config_MsPl_mccd.ini index 495062878..ef8698e0f 100644 --- a/example/cfis/config_MsPl_mccd.ini +++ b/example/cfis/config_MsPl_mccd.ini @@ -1,4 +1,5 @@ -# ShapePipe configuration file for post-processing. +# ShapePipe configuration file for post-processing +# and validation; # merge star cat and PSF plots. @@ -76,7 +77,13 @@ NUMBERING_SCHEME = -0000000 FILE_PATTERN = full_starcat FILE_EXT = .fits +PSF = mccd + +# Options for focal-plane plots PLOT_MEANSHAPES = True + +# X_GRID, Y_GRID: correspond to the number of bins in each direction of each +# CCD from the focal plane. Ex: each CCD will be binned in 5x10 regular grids. X_GRID = 5 Y_GRID = 10 @@ -84,17 +91,15 @@ Y_GRID = 10 MAX_E = 0.05 MAX_DE = 0.005 -PSF = mccd PLOT_HISTOGRAMS = True -REMOVE_OUTLIERS = False -# X_GRID, Y_GRID: correspond to the number of bins in each direction of each -# CCD from the focal plane. Ex: each CCD will be binned in 5x10 regular grids. -# # REMOVE_OUTLIERS: Remove validated stars that are outliers in terms of shape # before drawing the plots. +REMOVE_OUTLIERS = False +# Options for rho statistics plots PLOT_RHO_STATS = True + RHO_STATS_STYLE = HSC RHO_STATS_YLIM_L = 1e-10, 4e-5 diff --git a/example/cfis/config_Rc.ini b/example/cfis/config_Rc.ini index 024641a04..8c24d1e81 100644 --- a/example/cfis/config_Rc.ini +++ b/example/cfis/config_Rc.ini @@ -65,5 +65,3 @@ N_RANDOM = 50000 # N_RANDOM is per square degrees if True DENSITY = True - -TILE_LIST = $SP_CONFIG/tiles_all_order.txt diff --git a/example/cfis/config_exp_SpMh.ini b/example/cfis/config_exp_SpMh.ini index c5057ac1c..76f87ddd7 100644 --- a/example/cfis/config_exp_SpMh.ini +++ b/example/cfis/config_exp_SpMh.ini @@ -45,7 +45,7 @@ OUTPUT_DIR = $SP_RUN/output [JOB] # Batch size of parallel processing (optional), default is 1, i.e. run all jobs in serial -SMP_BATCH_SIZE = 4 +SMP_BATCH_SIZE = 16 # Timeout value (optional), default is None, i.e. no timeout limit applied TIMEOUT = 96:00:00 diff --git a/example/cfis/config_make_cat_mccd.ini b/example/cfis/config_make_cat_mccd.ini index eb3900fdf..b4d6d886a 100644 --- a/example/cfis/config_make_cat_mccd.ini +++ b/example/cfis/config_make_cat_mccd.ini @@ -73,7 +73,5 @@ SM_DO_CLASSIFICATION = True SM_STAR_STRESH = 0.003 SM_GAL_THRESH = 0.01 -TILE_LIST = $SP_CONFIG/tiles_all_order.txt - SHAPE_MEASUREMENT_TYPE = ngmix #, galsim diff --git a/example/cfis/config_make_cat_psfex.ini b/example/cfis/config_make_cat_psfex.ini index a3f4b763e..fdf5414b5 100644 --- a/example/cfis/config_make_cat_psfex.ini +++ b/example/cfis/config_make_cat_psfex.ini @@ -74,6 +74,4 @@ SM_DO_CLASSIFICATION = True SM_STAR_THRESH = 0.003 SM_GAL_THRESH = 0.01 -TILE_LIST = $SP_CONFIG/tiles_all_order.txt - SHAPE_MEASUREMENT_TYPE = ngmix diff --git a/example/cfis/config_tile.mask b/example/cfis/config_tile.mask index d3eed92fb..4381d61b9 100644 --- a/example/cfis/config_tile.mask +++ b/example/cfis/config_tile.mask @@ -1,4 +1,6 @@ -# ----------------------------- Path ---------------------------------- +# Mask module config file for tiles + +## Paths to executables [PROGRAM_PATH] WW_PATH = ww @@ -8,7 +10,7 @@ WW_CONFIG_FILE = $SP_CONFIG/mask_default/default.ww # (e.g. no internet access on run nodes) CDSCLIENT_PATH = findgsc2.2 -# ----------------------------- Border parameters ---------------------------------- +## Border parameters [BORDER_PARAMETERS] BORDER_MAKE = False @@ -17,7 +19,7 @@ BORDER_WIDTH = 0 BORDER_FLAG_VALUE = 4 -# ----------------------------- Halo parameters ---------------------------------- +## Halo parameters [HALO_PARAMETERS] HALO_MAKE = True @@ -30,7 +32,7 @@ HALO_FLAG_VALUE = 2 HALO_REG_FILE = halo.reg -# ------------------------- Diffraction pike parameters ------------------------------ +## Diffraction pike parameters [SPIKE_PARAMETERS] SPIKE_MAKE = True @@ -43,24 +45,33 @@ SPIKE_FLAG_VALUE = 128 SPIKE_REG_FILE = spike.reg -# ---------------------------- Messier parameters --------------------------------- +## Messier parameters [MESSIER_PARAMETERS] MESSIER_MAKE = True -MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.npy +MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.fits MESSIER_PIXEL_SCALE = 0.187 MESSIER_SIZE_PLUS = 0. MESSIER_FLAG_VALUE = 16 +## NGC mask +[NGC_PARAMETERS] + +NGC_MAKE = True + +NGC_CAT_PATH = $SP_CONFIG/mask_default/ngc_cat.fits +NGC_SIZE_PLUS = 0. +NGC_FLAG_VALUE = 32 + -# -------------------------------- External flag ---------------------------------- +## External flag [EXTERNAL_FLAG] EF_MAKE = False -# -------------------------- Missing data parameters ------------------------------ +## Missing data parameters [MD_PARAMETERS] MD_MAKE = False @@ -70,7 +81,7 @@ MD_THRESH_REMOVE = 0.75 MD_REMOVE = False -# ----------------------------- Other parameters ---------------------------------- +## Other parameters [OTHER] KEEP_REG_FILE = False diff --git a/example/cfis/config_tile_Sx_exp_mccd.ini b/example/cfis/config_tile_Sx_exp_mccd.ini index 6c287fcbc..66e041e10 100644 --- a/example/cfis/config_tile_Sx_exp_mccd.ini +++ b/example/cfis/config_tile_Sx_exp_mccd.ini @@ -21,8 +21,7 @@ RUN_NAME = run_sp_tile_Sx_exp_SxSePsf # Module name, single string or comma-separated list of valid module runner names MODULE = sextractor_runner, sextractor_runner, setools_runner, mccd_preprocessing_runner, mccd_fit_val_runner, - merge_starcat_runner, mccd_plots_runner, - mccd_interp_runner + merge_starcat_runner, mccd_plots_runner # Run mode, SMP or MPI MODE = SMP @@ -284,34 +283,3 @@ PLOT_RHO_STATS = False # RHO_STATS_STYLE: can be 'HSC' or 'DES' RHO_STATS_STYLE = HSC - - -[MCCD_INTERP_RUNNER] - -# MODE: Define the way the MCCD interpolation will run. -# CLASSIC for classical run. -# MULTI-EPOCH for multi epoch. -MODE = CLASSIC - -# Position parameter names -# for multi-epoch XWIN_WORLD,YWIN_WORLD -# For classical XWIN_IMAGE,YWIN_IMAGE: -POSITION_PARAMS = XWIN_IMAGE,YWIN_IMAGE - -# Get PSF shapes calculated and saved on the output dict -GET_SHAPES = True - -# Directory with PSF models -PSF_MODEL_DIR = /Users/tliaudat/Documents/PhD/codes/venv_p3/MCCD_pipeline_integration/test_val_data/fitted_model/ - -# PSF model patterns -PSF_MODEL_PATTERN = fitted_model - -# PSF model separator -PSF_MODEL_SEPARATOR = - - -# For multi-epoch purposes -ME_LOG_WCS = $SP_RUN/output/log_exp_headers.sqlite - - - diff --git a/example/cfis/config_valjoint_Pl_mccd.ini b/example/cfis/config_valjoint_Pl_mccd.ini new file mode 100644 index 000000000..65c5ae48b --- /dev/null +++ b/example/cfis/config_valjoint_Pl_mccd.ini @@ -0,0 +1,94 @@ +# ShapePipe configuration file for validation of +# joint catalogue; +# PSF plots. + + +## Default ShapePipe options +[DEFAULT] + +# verbose mode (optional), default: True, print messages on terminal +VERBOSE = True + +# Name of run (optional) default: shapepipe_run +RUN_NAME = run_sp_Pl + + +## ShapePipe execution options +[EXECUTION] + +# MODULE (required) must be a valid module runner name (or a comma separated list of names) +MODULE = mccd_plots_runner + +# Parallel processing mode, SMP or MPI +MODE = SMP + + +## ShapePipe file handling options +[FILE] + +# Log file master name, optional, default: shapepipe +LOG_NAME = log_sp + +# Runner log file name, optional, default: shapepipe_runs +RUN_LOG_NAME = log_run_sp + +# INPUT_DIR (required) must be a valid directory containing input files for the first module +INPUT_DIR = ./SP + +# OUTPUT_DIR (required) must be a valid directory to write the pipeline output files +OUTPUT_DIR = ./output + +# FILE_PATTERN (opional) list of string patterns to identify input files +FILE_PATTERN = unions_shapepipe_psf_2022_v1.0.2 + +# FILE_EXT (opional) list of string extensions to identify input files +FILE_EXT = .fits + + +## ShapePipe job handling options +[JOB] + +# BATCH_SIZE (optional) default is 1, i.e. run all jobs in serial +SMP_BATCH_SIZE = 2 + +# TIMEOUT (optional) default is None, i.e. no timeout limit applied +TIMEOUT = 10:00:00 + + +## Module options +[MCCD_PLOTS_RUNNER] + +# NUMBERING_SCHEME (optional) string with numbering pattern for input files +NUMBERING_SCHEME = + +HDU = 1 + +PSF = mccd + +# Options for focal-plane plots +PLOT_MEANSHAPES = True + +# X_GRID, Y_GRID: correspond to the number of bins in each direction of each +# CCD from the focal plane. Ex: each CCD will be binned in 5x10 regular grids. +X_GRID = 20 +Y_GRID = 40 + +# Optional: max values for elliptity and residual ellipticities +MAX_E = 0.05 +MAX_DE = 0.005 + +PLOT_HISTOGRAMS = True + +# REMOVE_OUTLIERS: Remove validated stars that are outliers in terms of shape +# before drawing the plots. +REMOVE_OUTLIERS = False + + +# Options for rho statistics plots +PLOT_RHO_STATS = True + +# RHO_STATS_STYLE: can be 'HSC' or 'DES' +RHO_STATS_STYLE = HSC + +RHO_STATS_YLIM_L = 1e-10, 4e-5 +eHO_STATS_YLIM_R = 1e-8, 4e-5 diff --git a/example/cfis/final_cat.param b/example/cfis/final_cat.param index 9bbbec7a0..6372a13e8 100644 --- a/example/cfis/final_cat.param +++ b/example/cfis/final_cat.param @@ -76,10 +76,6 @@ NGMIX_FLUX_ERR_2M NGMIX_FLUX_ERR_2P NGMIX_FLUX_ERR_NOSHEAR -# Flag for multiple objects due to overlapping -# tiles -FLAG_TILING - # magnitude, mainly for plots MAG_AUTO diff --git a/example/cfis/mask_default/Messier_catalog_updated.fits b/example/cfis/mask_default/Messier_catalog_updated.fits new file mode 100644 index 000000000..6a9f00096 Binary files /dev/null and b/example/cfis/mask_default/Messier_catalog_updated.fits differ diff --git a/example/cfis/mask_default/Messier_catalog_updated.npy b/example/cfis/mask_default/Messier_catalog_updated.npy deleted file mode 100644 index 2a59780e3..000000000 Binary files a/example/cfis/mask_default/Messier_catalog_updated.npy and /dev/null differ diff --git a/example/cfis/mask_default/ngc_cat.fits b/example/cfis/mask_default/ngc_cat.fits new file mode 100644 index 000000000..f51546da7 Binary files /dev/null and b/example/cfis/mask_default/ngc_cat.fits differ diff --git a/example/cfis/tiles_all_order.txt b/example/cfis/tiles_all_order.txt deleted file mode 100644 index 6641559b4..000000000 --- a/example/cfis/tiles_all_order.txt +++ /dev/null @@ -1,12621 +0,0 @@ -245.292 -230.293 -240.292 -247.291 -257.286 -245.290 -270.282 -271.283 -261.283 -264.286 -243.291 -249.289 -260.285 -253.289 -267.282 -251.289 -235.293 -268.284 -238.292 -256.288 -232.293 -253.287 -265.285 -262.283 -251.288 -242.293 -265.286 -266.283 -260.286 -258.287 -250.290 -228.294 -248.289 -266.286 -262.285 -246.288 -247.288 -239.294 -239.292 -275.282 -234.292 -266.282 -239.291 -261.284 -248.288 -267.285 -242.291 -241.290 -255.289 -267.284 -257.287 -255.286 -235.292 -272.284 -248.291 -256.287 -252.287 -267.283 -234.294 -252.286 -254.285 -244.289 -259.286 -242.289 -244.291 -242.292 -236.292 -262.286 -240.293 -251.287 -246.291 -241.293 -238.293 -247.290 -245.291 -247.289 -278.282 -236.294 -264.284 -237.294 -254.287 -231.293 -257.285 -249.291 -235.295 -271.284 -233.293 -256.285 -269.282 -234.295 -235.294 -246.292 -228.295 -258.285 -260.284 -262.282 -230.295 -240.294 -256.289 -264.283 -255.285 -261.287 -252.288 -268.283 -259.283 -258.288 -268.282 -234.293 -272.283 -237.291 -260.287 -224.295 -248.287 -231.295 -270.283 -259.285 -259.288 -236.295 -226.295 -245.289 -237.295 -243.289 -230.294 -261.286 -269.285 -236.291 -238.294 -258.284 -227.295 -263.282 -265.282 -240.291 -271.282 -241.292 -273.283 -232.294 -263.285 -259.284 -254.288 -260.283 -233.294 -251.290 -249.290 -243.293 -263.284 -231.294 -250.288 -240.290 -239.290 -274.282 -238.291 -247.292 -243.290 -254.289 -262.284 -244.292 -248.290 -252.290 -263.286 -232.295 -225.295 -243.292 -259.287 -261.285 -257.288 -237.293 -276.282 -264.282 -255.287 -265.284 -263.283 -244.290 -255.288 -246.290 -272.282 -229.294 -275.283 -266.284 -266.285 -250.287 -264.285 -258.286 -265.283 -227.294 -233.295 -269.284 -274.283 -233.292 -242.290 -268.285 -254.286 -252.289 -250.289 -273.282 -250.291 -249.287 -229.295 -262.287 -256.286 -270.284 -269.283 -257.284 -236.293 -253.288 -239.293 -241.291 -246.289 -249.288 -253.290 -251.286 -245.288 -237.292 -241.283 -239.284 -242.283 -234.286 -237.285 -240.284 -232.287 -243.283 -235.286 -238.285 -230.288 -241.284 -216.293 -219.292 -233.287 -244.283 -222.291 -236.286 -239.285 -242.284 -231.288 -217.293 -234.287 -220.292 -245.283 -237.286 -223.291 -240.285 -243.284 -232.288 -215.294 -235.287 -218.293 -246.283 -221.292 -238.286 -224.291 -241.285 -210.296 -207.297 -244.284 -233.288 -213.295 -216.294 -247.283 -236.287 -219.293 -222.292 -239.286 -242.285 -245.284 -208.297 -205.298 -234.288 -214.295 -211.296 -248.283 -237.287 -217.294 -220.293 -240.286 -223.292 -243.285 -246.284 -235.288 -265.277 -249.283 -212.296 -209.297 -206.298 -203.299 -238.287 -218.294 -215.295 -241.286 -221.293 -268.276 -224.292 -263.278 -244.285 -247.284 -266.277 -250.283 -236.288 -239.287 -269.276 -216.295 -213.296 -210.297 -207.298 -204.299 -201.300 -198.301 -242.286 -222.293 -219.294 -264.278 -245.285 -225.292 -248.284 -267.277 -237.288 -262.279 -240.287 -270.276 -243.286 -217.295 -214.296 -211.297 -208.298 -265.278 -246.285 -223.293 -220.294 -205.299 -202.300 -226.292 -199.301 -196.302 -268.277 -260.280 -249.284 -235.289 -271.276 -263.279 -238.288 -241.287 -266.278 -244.286 -258.281 -247.285 -224.293 -221.294 -218.295 -215.296 -212.297 -209.298 -206.299 -269.277 -261.280 -250.284 -227.292 -203.300 -200.301 -272.276 -264.279 -253.283 -236.289 -197.302 -239.288 -256.282 -242.287 -267.278 -259.281 -245.286 -270.277 -248.285 -262.280 -251.284 -225.293 -222.294 -219.295 -216.296 -213.297 -228.292 -210.298 -207.299 -273.276 -265.279 -254.283 -204.300 -237.289 -201.301 -268.278 -257.282 -240.288 -198.302 -243.287 -260.281 -246.286 -271.277 -249.285 -263.280 -252.284 -226.293 -223.294 -220.295 -217.296 -266.279 -255.283 -229.292 -214.297 -211.298 -208.299 -269.278 -258.282 -241.288 -205.300 -244.287 -202.301 -272.277 -261.281 -247.286 -199.302 -250.285 -264.280 -253.284 -267.279 -256.283 -227.293 -224.294 -230.292 -221.295 -218.296 -215.297 -270.278 -259.282 -239.289 -212.298 -262.281 -245.287 -242.288 -209.299 -273.277 -248.286 -206.300 -265.280 -203.301 -251.285 -268.279 -254.284 -257.283 -271.278 -231.292 -228.293 -260.282 -240.289 -237.290 -225.294 -222.295 -219.296 -263.281 -243.288 -216.297 -274.277 -246.287 -213.298 -266.280 -249.286 -210.299 -252.285 -207.300 -269.279 -255.284 -204.301 -188.306 -258.283 -272.278 -201.302 -185.307 -261.282 -235.291 -232.292 -275.277 -264.281 -241.289 -238.290 -229.293 -226.294 -223.295 -247.287 -244.288 -220.296 -182.308 -267.280 -250.286 -217.297 -253.285 -214.298 -270.279 -256.284 -211.299 -208.300 -273.278 -205.301 -189.306 -276.277 -265.281 -186.307 -268.280 -221.296 -271.279 -218.297 -215.298 -183.308 -274.278 -212.299 -277.277 -209.300 -266.281 -269.280 -206.301 -190.306 -272.279 -203.302 -222.296 -187.307 -275.278 -219.297 -216.298 -278.277 -213.299 -267.281 -281.276 -270.280 -210.300 -273.279 -253.286 -207.301 -276.278 -223.296 -191.306 -279.277 -220.297 -268.281 -217.298 -188.307 -271.280 -214.299 -274.279 -211.300 -277.278 -208.301 -280.277 -224.296 -205.302 -269.281 -221.297 -192.306 -272.280 -218.298 -275.279 -215.299 -189.307 -212.300 -270.281 -209.301 -225.296 -273.280 -222.297 -276.279 -206.302 -219.298 -193.306 -216.299 -190.307 -271.281 -213.300 -274.280 -226.296 -210.301 -277.279 -223.297 -207.302 -220.298 -194.306 -272.281 -217.299 -275.280 -278.279 -214.300 -191.307 -227.296 -211.301 -224.297 -221.298 -208.302 -273.281 -276.280 -279.279 -218.299 -195.306 -215.300 -228.296 -192.307 -225.297 -212.301 -274.281 -277.280 -222.298 -209.302 -280.279 -219.299 -206.303 -196.306 -216.300 -229.296 -278.280 -275.281 -281.279 -226.297 -213.301 -193.307 -223.298 -210.302 -220.299 -207.303 -279.280 -276.281 -230.296 -217.300 -197.306 -282.279 -227.297 -214.301 -194.307 -224.298 -211.302 -277.281 -221.299 -201.305 -280.280 -283.279 -231.296 -218.300 -208.303 -198.306 -228.297 -215.301 -225.298 -278.281 -195.307 -284.279 -281.280 -212.302 -222.299 -202.305 -232.296 -219.300 -209.303 -229.297 -199.306 -279.281 -216.301 -285.279 -282.280 -226.298 -206.304 -196.307 -223.299 -213.302 -233.296 -203.305 -220.300 -283.280 -280.281 -277.282 -230.297 -210.303 -286.279 -217.301 -200.306 -227.298 -207.304 -224.299 -214.302 -234.296 -197.307 -284.280 -281.281 -204.305 -287.279 -244.293 -221.300 -263.287 -231.297 -211.303 -260.288 -241.294 -257.289 -228.298 -254.290 -218.301 -201.306 -238.295 -208.304 -251.291 -288.279 -285.280 -282.281 -279.282 -276.283 -273.284 -248.292 -235.296 -225.299 -215.302 -270.285 -267.286 -264.287 -245.293 -198.307 -261.288 -232.297 -222.300 -205.305 -258.289 -212.303 -242.294 -255.290 -229.298 -239.295 -219.301 -289.279 -286.280 -283.281 -280.282 -277.283 -274.284 -252.291 -202.306 -271.285 -249.292 -226.299 -209.304 -268.286 -236.296 -265.287 -216.302 -262.288 -246.293 -259.289 -233.297 -223.300 -199.307 -243.294 -206.305 -287.280 -284.281 -256.290 -213.303 -290.279 -281.282 -278.283 -275.284 -253.291 -240.295 -230.298 -272.285 -220.301 -269.286 -250.292 -266.287 -237.296 -227.299 -203.306 -263.288 -210.304 -247.293 -217.302 -260.289 -234.297 -291.279 -288.280 -285.281 -257.290 -244.294 -224.300 -282.282 -279.283 -276.284 -207.305 -200.307 -273.285 -254.291 -214.303 -270.286 -241.295 -231.298 -267.287 -251.292 -221.301 -264.288 -238.296 -228.299 -261.289 -248.293 -211.304 -204.306 -292.279 -289.280 -286.281 -283.282 -218.302 -280.283 -258.290 -245.294 -235.297 -277.284 -274.285 -225.300 -255.291 -271.286 -242.295 -232.298 -208.305 -201.307 -268.287 -252.292 -215.303 -265.288 -222.301 -239.296 -293.279 -290.280 -287.281 -284.282 -262.289 -249.293 -229.299 -278.284 -259.290 -246.294 -236.297 -212.304 -205.306 -275.285 -219.302 -272.286 -256.291 -226.300 -269.287 -243.295 -253.292 -233.298 -294.279 -266.288 -216.303 -209.305 -291.280 -288.281 -263.289 -240.296 -223.301 -202.307 -250.293 -260.290 -276.285 -273.286 -247.294 -237.297 -257.291 -220.302 -213.304 -206.306 -270.287 -227.300 -295.279 -292.280 -267.288 -254.292 -244.295 -289.281 -234.298 -264.289 -251.293 -241.296 -224.301 -217.303 -210.305 -261.290 -203.307 -248.294 -271.287 -258.291 -238.297 -296.279 -293.280 -221.302 -214.304 -290.281 -268.288 -255.292 -245.295 -207.306 -235.298 -265.289 -252.293 -242.296 -262.290 -218.303 -211.305 -259.291 -249.294 -204.307 -297.279 -294.280 -291.281 -239.297 -256.292 -246.295 -266.289 -222.302 -215.304 -236.298 -208.306 -253.293 -263.290 -243.296 -298.279 -295.280 -292.281 -260.291 -250.294 -219.303 -212.305 -240.297 -205.307 -257.292 -267.289 -247.295 -264.290 -254.293 -237.298 -299.279 -296.280 -244.296 -209.306 -293.281 -261.291 -251.294 -241.297 -213.305 -258.292 -248.295 -206.307 -300.279 -297.280 -255.293 -294.281 -238.298 -245.296 -252.294 -210.306 -259.292 -242.297 -301.279 -249.295 -298.280 -295.281 -256.293 -239.298 -207.307 -246.296 -253.294 -302.279 -243.297 -299.280 -250.295 -296.281 -240.298 -247.296 -208.307 -254.294 -300.280 -297.281 -244.297 -251.295 -248.296 -241.298 -255.294 -209.307 -252.295 -245.297 -249.296 -242.298 -253.295 -246.297 -250.296 -243.298 -247.297 -244.298 -248.297 -000.239 -000.240 -000.241 -000.242 -000.243 -000.244 -000.245 -000.246 -000.247 -000.248 -000.249 -000.250 -000.251 -000.252 -001.239 -001.240 -001.241 -001.242 -001.243 -001.244 -001.245 -001.246 -001.247 -001.248 -001.249 -001.250 -001.251 -001.252 -002.239 -002.240 -002.241 -002.242 -002.243 -002.244 -002.245 -002.246 -002.247 -002.248 -002.249 -002.250 -002.251 -002.252 -003.239 -003.240 -003.241 -003.242 -003.243 -003.244 -003.245 -003.246 -003.247 -003.248 -003.249 -003.250 -003.251 -003.252 -004.239 -004.240 -004.241 -004.242 -004.243 -004.244 -004.245 -004.246 -004.247 -004.248 -004.249 -004.250 -004.251 -004.252 -005.239 -005.240 -005.241 -005.242 -005.243 -005.244 -005.245 -005.246 -005.247 -005.248 -005.249 -005.250 -005.251 -005.252 -006.239 -006.240 -006.241 -006.242 -006.243 -006.244 -006.245 -006.246 -006.247 -006.248 -006.249 -006.250 -006.251 -006.252 -007.239 -007.240 -007.241 -007.242 -007.243 -007.244 -007.245 -007.246 -007.247 -007.248 -007.249 -007.250 -007.251 -007.252 -008.239 -008.240 -008.241 -008.242 -008.243 -008.244 -008.245 -008.246 -008.247 -008.248 -008.249 -008.250 -008.251 -008.252 -009.239 -009.240 -009.241 -009.242 -009.243 -009.244 -009.245 -009.246 -009.247 -009.248 -009.249 -009.250 -009.251 -009.252 -010.239 -010.240 -010.241 -010.242 -010.243 -010.244 -010.245 -010.246 -010.247 -010.248 -010.249 -010.250 -010.251 -010.252 -011.239 -011.240 -011.241 -011.242 -011.243 -011.244 -011.245 -011.246 -011.247 -011.248 -011.249 -011.250 -011.251 -011.252 -012.239 -012.240 -012.241 -012.242 -012.243 -012.244 -012.245 -012.246 -012.247 -012.248 -012.249 -012.250 -012.251 -012.252 -013.239 -013.240 -013.241 -013.242 -013.243 -013.244 -013.245 -013.246 -013.247 -013.248 -013.249 -013.250 -014.239 -013.251 -013.252 -014.240 -014.241 -014.242 -014.243 -014.244 -014.245 -014.246 -014.247 -014.248 -014.249 -014.250 -015.239 -014.251 -015.240 -015.241 -015.242 -014.252 -015.243 -015.244 -015.245 -015.246 -015.247 -015.248 -015.249 -016.239 -016.240 -015.250 -015.251 -016.241 -016.242 -015.252 -016.243 -016.244 -016.245 -016.246 -016.247 -016.248 -016.249 -017.239 -017.240 -016.250 -016.251 -017.241 -017.242 -016.252 -017.243 -017.244 -017.245 -017.246 -017.247 -018.239 -017.248 -017.249 -018.240 -018.241 -017.250 -017.251 -018.242 -017.252 -018.243 -018.244 -018.245 -018.246 -018.247 -019.239 -018.248 -018.249 -019.240 -019.241 -018.250 -019.242 -019.243 -018.251 -018.252 -019.244 -019.245 -019.246 -019.247 -020.239 -020.240 -019.248 -019.249 -020.241 -019.250 -020.242 -020.243 -019.251 -019.252 -020.244 -020.245 -020.246 -020.247 -021.239 -021.240 -020.248 -020.249 -021.241 -021.242 -020.250 -021.243 -020.251 -021.244 -021.245 -020.252 -021.246 -022.239 -021.247 -022.240 -021.248 -021.249 -022.241 -022.242 -021.250 -022.243 -021.251 -022.244 -022.245 -021.252 -022.246 -023.239 -022.247 -023.240 -023.241 -022.248 -022.249 -023.242 -022.250 -023.243 -022.251 -023.244 -023.245 -022.252 -023.246 -024.239 -023.247 -024.240 -024.241 -023.248 -024.242 -023.249 -023.250 -024.243 -023.251 -024.244 -024.245 -023.252 -024.246 -025.239 -025.240 -024.247 -025.241 -024.248 -025.242 -024.249 -024.250 -025.243 -025.244 -024.251 -025.245 -024.252 -026.239 -025.246 -026.240 -025.247 -026.241 -025.248 -026.242 -026.243 -025.249 -026.244 -025.250 -026.245 -025.251 -027.239 -026.246 -025.252 -027.240 -026.247 -027.241 -027.242 -026.248 -027.243 -026.249 -027.244 -026.250 -027.245 -026.251 -028.239 -027.246 -026.252 -028.240 -028.241 -027.247 -028.242 -027.248 -028.243 -027.249 -028.244 -027.250 -028.245 -027.251 -029.239 -029.240 -028.246 -027.252 -029.241 -028.247 -029.242 -028.248 -029.243 -028.249 -029.244 -028.250 -030.239 -029.245 -028.251 -030.240 -029.246 -028.252 -030.241 -029.247 -030.242 -029.248 -030.243 -029.249 -030.244 -029.250 -031.239 -030.245 -029.251 -031.240 -030.246 -029.252 -031.241 -030.247 -031.242 -030.248 -031.243 -030.249 -031.244 -030.250 -032.239 -031.245 -030.251 -032.240 -031.246 -030.252 -032.241 -031.247 -032.242 -031.248 -032.243 -031.249 -032.244 -031.250 -033.239 -032.245 -031.251 -033.240 -033.241 -032.246 -033.242 -032.247 -031.252 -032.248 -033.243 -032.249 -034.239 -033.244 -032.250 -034.240 -033.245 -034.241 -033.246 -032.251 -034.242 -033.247 -032.252 -034.243 -033.248 -034.244 -033.249 -035.239 -033.250 -035.240 -034.245 -035.241 -034.246 -033.251 -035.242 -034.247 -033.252 -035.243 -034.248 -035.244 -034.249 -036.239 -035.245 -036.240 -034.250 -036.241 -035.246 -034.251 -036.242 -035.247 -034.252 -036.243 -035.248 -036.244 -035.249 -037.239 -036.245 -037.240 -035.250 -037.241 -036.246 -035.251 -037.242 -036.247 -035.252 -037.243 -036.248 -037.244 -036.249 -038.240 -037.245 -036.250 -038.241 -037.246 -036.251 -038.242 -037.247 -036.252 -038.243 -037.248 -038.244 -037.249 -039.240 -038.245 -039.241 -037.250 -039.242 -038.246 -037.251 -038.247 -039.243 -038.248 -037.252 -039.244 -040.240 -039.245 -038.249 -040.241 -038.250 -040.242 -039.246 -038.251 -039.247 -040.243 -039.248 -038.252 -040.244 -041.240 -040.245 -039.249 -041.241 -040.246 -039.250 -041.242 -041.243 -040.247 -039.251 -040.248 -042.240 -041.244 -041.245 -040.249 -042.241 -041.246 -040.250 -042.242 -042.243 -041.247 -041.248 -043.240 -042.244 -042.245 -041.249 -043.241 -042.246 -041.250 -043.242 -043.243 -042.247 -042.248 -044.240 -043.244 -044.241 -043.245 -042.249 -043.246 -042.250 -044.242 -044.243 -043.247 -044.244 -043.248 -045.240 -045.241 -044.245 -043.249 -045.242 -044.246 -043.250 -046.239 -045.243 -044.247 -045.244 -044.248 -046.240 -046.241 -045.245 -044.249 -046.242 -045.246 -044.250 -047.239 -046.243 -045.247 -047.240 -046.244 -045.248 -047.241 -046.245 -045.249 -047.242 -046.246 -045.250 -048.239 -047.243 -046.247 -048.240 -047.244 -046.248 -048.241 -047.245 -046.249 -048.242 -047.246 -048.243 -046.250 -047.247 -049.240 -048.244 -047.248 -049.241 -048.245 -047.249 -049.242 -048.246 -050.239 -049.243 -047.250 -048.247 -050.240 -049.244 -048.248 -050.241 -049.245 -048.249 -050.242 -049.246 -051.239 -050.243 -048.250 -051.240 -049.247 -050.244 -051.241 -050.245 -049.248 -051.242 -049.249 -050.246 -052.239 -051.243 -052.240 -050.247 -051.244 -052.241 -051.245 -050.248 -052.242 -051.246 -052.243 -053.240 -051.247 -052.244 -053.241 -052.245 -051.248 -053.242 -052.246 -053.243 -054.240 -053.244 -052.247 -054.241 -053.245 -052.248 -054.242 -053.246 -054.243 -055.240 -054.244 -053.247 -055.241 -054.245 -053.248 -055.242 -054.246 -056.240 -055.243 -055.244 -054.247 -056.241 -055.245 -054.248 -056.242 -056.243 -055.246 -057.240 -056.244 -055.247 -057.241 -057.242 -056.245 -055.248 -057.243 -056.246 -058.240 -057.244 -056.247 -058.241 -058.242 -057.245 -056.248 -058.243 -057.246 -059.240 -059.241 -058.244 -057.247 -059.242 -058.245 -057.248 -060.240 -059.243 -058.246 -060.241 -059.244 -058.247 -060.242 -059.245 -058.248 -061.240 -060.243 -059.246 -061.241 -060.244 -059.247 -061.242 -060.245 -059.248 -062.240 -061.243 -060.246 -062.241 -061.244 -060.247 -063.239 -062.242 -061.245 -063.240 -062.243 -061.246 -063.241 -062.244 -061.247 -062.245 -064.240 -062.246 -590.240 -587.241 -593.239 -594.239 -591.240 -588.241 -585.242 -595.239 -592.240 -589.241 -586.242 -583.243 -596.239 -593.240 -590.241 -587.242 -584.243 -594.240 -597.239 -591.241 -588.242 -585.243 -582.244 -598.239 -595.240 -592.241 -589.242 -586.243 -583.244 -599.239 -596.240 -593.241 -590.242 -587.243 -584.244 -581.245 -600.239 -597.240 -594.241 -591.242 -588.243 -585.244 -582.245 -601.239 -598.240 -595.241 -592.242 -589.243 -586.244 -583.245 -602.239 -599.240 -580.246 -596.241 -593.242 -590.243 -587.244 -584.245 -603.239 -600.240 -597.241 -581.246 -594.242 -591.243 -578.247 -588.244 -585.245 -604.239 -601.240 -598.241 -582.246 -595.242 -592.243 -579.247 -589.244 -586.245 -605.239 -602.240 -599.241 -583.246 -596.242 -593.243 -580.247 -590.244 -587.245 -606.239 -603.240 -600.241 -597.242 -584.246 -594.243 -591.244 -581.247 -588.245 -578.248 -607.239 -604.240 -601.241 -598.242 -585.246 -595.243 -592.244 -582.247 -589.245 -579.248 -608.239 -605.240 -602.241 -599.242 -586.246 -596.243 -576.249 -593.244 -583.247 -590.245 -580.248 -609.239 -606.240 -603.241 -600.242 -587.246 -597.243 -577.249 -594.244 -584.247 -610.239 -591.245 -581.248 -574.250 -607.240 -604.241 -601.242 -588.246 -598.243 -578.249 -595.244 -585.247 -611.239 -608.240 -592.245 -582.248 -575.250 -605.241 -602.242 -589.246 -599.243 -579.249 -596.244 -586.247 -612.239 -609.240 -593.245 -583.248 -576.250 -606.241 -603.242 -590.246 -600.243 -580.249 -597.244 -587.247 -594.245 -613.239 -610.240 -607.241 -584.248 -577.250 -604.242 -591.246 -601.243 -581.249 -598.244 -588.247 -614.239 -595.245 -611.240 -608.241 -585.248 -578.250 -605.242 -592.246 -602.243 -582.249 -575.251 -599.244 -589.247 -615.239 -612.240 -596.245 -609.241 -586.248 -579.250 -606.242 -593.246 -572.252 -603.243 -583.249 -600.244 -590.247 -576.251 -616.239 -613.240 -597.245 -569.253 -610.241 -587.248 -580.250 -607.242 -594.246 -573.252 -604.243 -601.244 -584.249 -591.247 -577.251 -617.239 -614.240 -598.245 -570.253 -611.241 -588.248 -581.250 -608.242 -595.246 -605.243 -574.252 -602.244 -585.249 -618.239 -592.247 -578.251 -615.240 -612.241 -599.245 -609.242 -589.248 -582.250 -596.246 -606.243 -575.252 -603.244 -586.249 -619.239 -616.240 -593.247 -579.251 -613.241 -600.245 -610.242 -590.248 -597.246 -583.250 -607.243 -576.252 -604.244 -587.249 -620.239 -617.240 -594.247 -580.251 -614.241 -601.245 -611.242 -591.248 -608.243 -598.246 -584.250 -577.252 -605.244 -588.249 -621.239 -618.240 -595.247 -581.251 -615.241 -602.245 -612.242 -592.248 -609.243 -599.246 -585.250 -578.252 -622.239 -606.244 -589.249 -619.240 -596.247 -582.251 -616.241 -603.245 -613.242 -593.248 -610.243 -600.246 -586.250 -579.252 -623.239 -607.244 -620.240 -617.241 -597.247 -590.249 -604.245 -583.251 -614.242 -594.248 -611.243 -601.246 -587.250 -624.239 -621.240 -608.244 -580.252 -618.241 -598.247 -591.249 -615.242 -605.245 -584.251 -595.248 -612.243 -602.246 -588.250 -625.239 -622.240 -609.244 -581.252 -619.241 -599.247 -592.249 -616.242 -606.245 -585.251 -613.243 -603.246 -596.248 -589.250 -626.239 -610.244 -623.240 -273.242 -256.253 -258.252 -275.241 -255.254 -260.251 -274.242 -271.244 -268.246 -277.240 -262.250 -257.253 -252.256 -245.260 -273.243 -270.245 -259.252 -254.255 -247.259 -276.241 -264.249 -249.258 -279.239 -261.251 -256.254 -275.242 -272.244 -269.246 -266.248 -251.257 -244.261 -278.240 -263.250 -258.253 -253.256 -246.260 -277.241 -274.243 -271.245 -268.247 -260.252 -255.255 -248.259 -265.249 -250.258 -280.239 -262.251 -257.254 -276.242 -273.244 -270.246 -267.248 -252.257 -243.262 -279.240 -264.250 -259.253 -245.261 -254.256 -247.260 -278.241 -275.243 -272.245 -269.247 -261.252 -256.255 -249.259 -281.239 -266.249 -274.244 -263.251 -258.254 -251.258 -277.242 -271.246 -268.248 -253.257 -280.240 -260.253 -244.262 -273.245 -265.250 -255.256 -246.261 -279.241 -276.243 -270.247 -262.252 -248.260 -267.249 -257.255 -250.259 -275.244 -264.251 -252.258 -281.240 -278.242 -272.246 -269.248 -259.254 -261.253 -254.257 -277.243 -274.245 -266.250 -256.256 -280.241 -271.247 -263.252 -268.249 -258.255 -279.242 -276.244 -282.240 -273.246 -270.248 -265.251 -260.254 -253.258 -255.257 -278.243 -275.245 -267.250 -262.253 -281.241 -272.247 -257.256 -269.249 -264.252 -259.255 -280.242 -277.244 -283.240 -274.246 -271.248 -266.251 -261.254 -254.258 -282.241 -279.243 -276.245 -268.250 -263.253 -256.257 -273.247 -258.256 -270.249 -265.252 -281.242 -278.244 -275.246 -260.255 -284.240 -272.248 -267.251 -262.254 -255.258 -283.241 -280.243 -277.245 -269.250 -264.253 -257.257 -274.247 -259.256 -271.249 -266.252 -285.240 -282.242 -279.244 -276.246 -261.255 -273.248 -268.251 -263.254 -256.258 -284.241 -281.243 -278.245 -270.250 -265.253 -258.257 -275.247 -272.249 -267.252 -260.256 -286.240 -283.242 -280.244 -277.246 -262.255 -269.251 -274.248 -264.254 -257.258 -285.241 -282.243 -279.245 -271.250 -276.247 -266.253 -259.257 -273.249 -268.252 -261.256 -287.240 -284.242 -281.244 -278.246 -270.251 -263.255 -275.248 -265.254 -286.241 -283.243 -280.245 -272.250 -258.258 -277.247 -267.253 -260.257 -285.242 -274.249 -262.256 -288.240 -282.244 -279.246 -269.252 -271.251 -264.255 -287.241 -284.243 -276.248 -266.254 -281.245 -273.250 -259.258 -278.247 -268.253 -286.242 -275.249 -261.257 -289.240 -283.244 -280.246 -270.252 -263.256 -265.255 -288.241 -285.243 -277.248 -272.251 -282.245 -274.250 -267.254 -279.247 -269.253 -260.258 -290.240 -287.242 -284.244 -262.257 -281.246 -276.249 -271.252 -264.256 -266.255 -253.262 -292.239 -289.241 -286.243 -278.248 -273.251 -283.245 -268.254 -259.259 -280.247 -275.250 -270.253 -261.258 -291.240 -288.242 -285.244 -263.257 -282.246 -277.249 -272.252 -265.256 -293.239 -290.241 -287.243 -279.248 -274.251 -267.255 -256.261 -254.262 -284.245 -269.254 -281.247 -276.250 -260.259 -292.240 -289.242 -286.244 -271.253 -262.258 -283.246 -278.249 -273.252 -264.257 -266.256 -294.239 -291.241 -288.243 -280.248 -275.251 -268.255 -255.262 -285.245 -270.254 -257.261 -282.247 -277.250 -261.259 -259.260 -293.240 -290.242 -287.244 -272.253 -263.258 -284.246 -279.249 -274.252 -265.257 -292.241 -267.256 -295.239 -289.243 -281.248 -276.251 -269.255 -252.264 -250.265 -248.266 -286.245 -258.261 -256.262 -254.263 -246.267 -244.268 -294.240 -291.242 -283.247 -278.250 -271.254 -260.260 -288.244 -273.253 -262.259 -285.246 -280.249 -266.257 -264.258 -293.241 -275.252 -268.256 -290.243 -287.245 -282.248 -277.251 -270.255 -255.263 -253.264 -251.265 -249.266 -295.240 -292.242 -284.247 -279.250 -272.254 -259.261 -257.262 -247.267 -245.268 -289.244 -274.253 -263.259 -261.260 -286.246 -281.249 -265.258 -294.241 -291.243 -276.252 -267.257 -288.245 -283.248 -278.251 -269.256 -271.255 -296.240 -293.242 -285.247 -280.250 -273.254 -258.262 -256.263 -254.264 -252.265 -250.266 -248.267 -290.244 -262.260 -260.261 -246.268 -287.246 -282.249 -275.253 -266.258 -264.259 -295.241 -292.243 -277.252 -268.257 -289.245 -284.248 -270.256 -279.251 -272.255 -297.240 -294.242 -286.247 -281.250 -274.254 -291.244 -261.261 -259.262 -257.263 -255.264 -253.265 -251.266 -249.267 -288.246 -283.249 -276.253 -265.259 -263.260 -247.268 -296.241 -293.243 -278.252 -267.258 -290.245 -285.248 -269.257 -280.251 -271.256 -298.240 -295.242 -287.247 -282.250 -273.255 -292.244 -275.254 -258.263 -256.264 -297.241 -289.246 -284.249 -277.253 -264.260 -262.261 -260.262 -254.265 -252.266 -250.267 -294.243 -279.252 -268.258 -266.259 -248.268 -291.245 -286.248 -270.257 -299.240 -281.251 -272.256 -296.242 -293.244 -288.247 -283.250 -274.255 -276.254 -298.241 -290.246 -285.249 -278.253 -263.261 -261.262 -259.263 -257.264 -255.265 -295.243 -280.252 -267.259 -265.260 -253.266 -251.267 -292.245 -287.248 -271.257 -269.258 -300.240 -297.242 -282.251 -273.256 -294.244 -289.247 -284.250 -275.255 -277.254 -299.241 -291.246 -286.249 -279.253 -296.243 -266.260 -264.261 -262.262 -260.263 -258.264 -256.265 -293.245 -288.248 -281.252 -270.258 -268.259 -254.266 -252.267 -301.240 -298.242 -283.251 -272.257 -295.244 -290.247 -276.255 -274.256 -285.250 -278.254 -300.241 -292.246 -287.249 -297.243 -280.253 -265.261 -263.262 -261.263 -294.245 -289.248 -282.252 -269.259 -267.260 -259.264 -257.265 -255.266 -302.240 -299.242 -284.251 -273.257 -271.258 -253.267 -296.244 -291.247 -275.256 -286.250 -277.255 -301.241 -293.246 -288.249 -279.254 -298.243 -281.253 -303.240 -295.245 -290.248 -283.252 -268.260 -266.261 -264.262 -262.263 -260.264 -300.242 -285.251 -272.258 -270.259 -258.265 -256.266 -297.244 -292.247 -276.256 -274.257 -254.267 -302.241 -287.250 -278.255 -299.243 -294.246 -289.249 -280.254 -282.253 -304.240 -296.245 -291.248 -284.252 -301.242 -273.258 -271.259 -269.260 -267.261 -265.262 -263.263 -261.264 -259.265 -298.244 -293.247 -286.251 -275.257 -257.266 -306.239 -303.241 -288.250 -279.255 -277.256 -255.267 -300.243 -295.246 -290.249 -281.254 -253.268 -283.253 -305.240 -297.245 -292.248 -285.252 -302.242 -270.260 -268.261 -266.262 -264.263 -299.244 -294.247 -287.251 -276.257 -274.258 -272.259 -262.264 -260.265 -307.239 -304.241 -289.250 -278.256 -258.266 -301.243 -296.246 -280.255 -256.267 -291.249 -284.253 -282.254 -306.240 -303.242 -298.245 -293.248 -286.252 -308.239 -300.244 -295.247 -288.251 -275.258 -273.259 -271.260 -269.261 -267.262 -265.263 -305.241 -290.250 -279.256 -277.257 -263.264 -261.265 -302.243 -297.246 -281.255 -259.266 -257.267 -307.240 -292.249 -283.254 -255.268 -304.242 -299.245 -294.248 -285.253 -287.252 -309.239 -301.244 -296.247 -289.251 -274.259 -272.260 -270.261 -306.241 -291.250 -278.257 -276.258 -268.262 -266.263 -264.264 -303.243 -298.246 -282.255 -280.256 -262.265 -308.240 -293.249 -284.254 -260.266 -258.267 -305.242 -300.245 -295.248 -286.253 -288.252 -302.244 -297.247 -290.251 -307.241 -292.250 -277.258 -275.259 -273.260 -271.261 -269.262 -267.263 -304.243 -299.246 -281.256 -279.257 -265.264 -309.240 -301.245 -294.249 -285.254 -283.255 -263.265 -261.266 -306.242 -296.248 -287.253 -259.267 -303.244 -289.252 -308.241 -298.247 -291.251 -293.250 -276.259 -274.260 -305.243 -300.246 -282.256 -280.257 -278.258 -272.261 -270.262 -268.263 -310.240 -302.245 -295.249 -284.255 -307.242 -297.248 -288.253 -286.254 -304.244 -290.252 -309.241 -299.247 -292.251 -306.243 -301.246 -294.250 -281.257 -279.258 -277.259 -275.260 -273.261 -271.262 -311.240 -303.245 -296.249 -285.255 -283.256 -308.242 -298.248 -287.254 -305.244 -291.252 -289.253 -310.241 -300.247 -293.251 -307.243 -302.246 -312.240 -295.250 -280.258 -278.259 -276.260 -309.242 -304.245 -297.249 -286.255 -284.256 -282.257 -274.261 -299.248 -288.254 -306.244 -290.253 -311.241 -301.247 -292.252 -308.243 -303.246 -294.251 -313.240 -296.250 -310.242 -305.245 -298.249 -285.256 -283.257 -281.258 -279.259 -277.260 -275.261 -300.248 -289.254 -287.255 -273.262 -307.244 -291.253 -312.241 -302.247 -293.252 -309.243 -304.246 -295.251 -314.240 -297.250 -311.242 -306.245 -299.249 -284.257 -282.258 -280.259 -301.248 -288.255 -286.256 -278.260 -276.261 -274.262 -313.241 -308.244 -292.253 -290.254 -303.247 -294.252 -310.243 -305.246 -296.251 -315.240 -298.250 -312.242 -307.245 -300.249 -302.248 -289.255 -287.256 -285.257 -283.258 -281.259 -279.260 -277.261 -314.241 -309.244 -293.253 -291.254 -275.262 -304.247 -295.252 -273.263 -316.240 -311.243 -306.246 -297.251 -299.250 -313.242 -308.245 -301.249 -303.248 -288.256 -286.257 -284.258 -282.259 -315.241 -310.244 -292.254 -290.255 -280.260 -278.261 -305.247 -296.252 -294.253 -276.262 -274.263 -317.240 -312.243 -307.246 -298.251 -300.250 -314.242 -309.245 -302.249 -319.239 -304.248 -316.241 -311.244 -293.254 -291.255 -289.256 -287.257 -285.258 -283.259 -281.260 -313.243 -306.247 -295.253 -279.261 -277.262 -318.240 -308.246 -299.251 -297.252 -275.263 -315.242 -301.250 -320.239 -310.245 -303.249 -305.248 -317.241 -312.244 -292.255 -290.256 -288.257 -286.258 -284.259 -314.243 -307.247 -296.253 -294.254 -282.260 -280.261 -319.240 -309.246 -300.251 -298.252 -278.262 -316.242 -302.250 -276.263 -321.239 -311.245 -304.249 -318.241 -313.244 -306.248 -291.256 -289.257 -287.258 -315.243 -308.247 -297.253 -295.254 -293.255 -285.259 -283.260 -320.240 -310.246 -299.252 -281.261 -279.262 -317.242 -303.250 -301.251 -322.239 -312.245 -305.249 -319.241 -314.244 -307.248 -321.240 -316.243 -309.247 -296.254 -294.255 -292.256 -290.257 -288.258 -286.259 -311.246 -300.252 -298.253 -284.260 -318.242 -302.251 -323.239 -313.245 -304.250 -320.241 -315.244 -306.249 -308.248 -322.240 -317.243 -310.247 -297.254 -295.255 -293.256 -291.257 -289.258 -312.246 -301.252 -299.253 -287.259 -285.260 -319.242 -303.251 -283.261 -314.245 -305.250 -321.241 -316.244 -307.249 -309.248 -323.240 -318.243 -311.247 -296.255 -294.256 -313.246 -302.252 -300.253 -298.254 -292.257 -290.258 -288.259 -320.242 -315.245 -304.251 -286.260 -284.261 -306.250 -322.241 -317.244 -308.249 -310.248 -324.240 -319.243 -312.247 -321.242 -314.246 -301.253 -299.254 -297.255 -295.256 -293.257 -291.258 -316.245 -305.251 -303.252 -289.259 -287.260 -323.241 -307.250 -285.261 -318.244 -309.249 -283.262 -325.240 -311.248 -281.263 -320.243 -313.247 -279.264 -322.242 -315.246 -302.253 -300.254 -298.255 -296.256 -294.257 -317.245 -306.251 -304.252 -292.258 -290.259 -324.241 -308.250 -288.260 -319.244 -310.249 -286.261 -326.240 -321.243 -312.248 -284.262 -314.247 -282.263 -323.242 -316.246 -301.254 -299.255 -297.256 -318.245 -307.251 -305.252 -303.253 -295.257 -293.258 -325.241 -309.250 -291.259 -289.260 -320.244 -311.249 -287.261 -327.240 -322.243 -313.248 -285.262 -315.247 -283.263 -324.242 -317.246 -319.245 -306.252 -304.253 -302.254 -300.255 -298.256 -296.257 -281.264 -326.241 -310.250 -308.251 -294.258 -292.259 -321.244 -312.249 -290.260 -328.240 -323.243 -314.248 -288.261 -316.247 -286.262 -325.242 -318.246 -284.263 -320.245 -307.252 -305.253 -303.254 -301.255 -299.256 -327.241 -322.244 -311.250 -309.251 -297.257 -295.258 -329.240 -313.249 -293.259 -291.260 -324.243 -315.248 -289.261 -317.247 -287.262 -326.242 -319.246 -328.241 -321.245 -306.253 -304.254 -302.255 -285.263 -323.244 -312.250 -310.251 -308.252 -300.256 -298.257 -296.258 -330.240 -314.249 -294.259 -325.243 -316.248 -292.260 -327.242 -318.247 -290.261 -320.246 -288.262 -329.241 -322.245 -286.263 -324.244 -311.251 -309.252 -307.253 -305.254 -303.255 -301.256 -299.257 -331.240 -315.249 -313.250 -297.258 -326.243 -317.248 -295.259 -293.260 -328.242 -319.247 -291.261 -321.246 -330.241 -323.245 -289.262 -325.244 -312.251 -310.252 -308.253 -306.254 -304.255 -302.256 -287.263 -332.240 -316.249 -314.250 -300.257 -298.258 -327.243 -318.248 -296.259 -334.239 -329.242 -320.247 -294.260 -322.246 -331.241 -324.245 -326.244 -313.251 -311.252 -309.253 -307.254 -305.255 -333.240 -328.243 -317.249 -315.250 -303.256 -301.257 -319.248 -299.258 -335.239 -330.242 -321.247 -297.259 -295.260 -323.246 -332.241 -325.245 -293.261 -334.240 -327.244 -314.251 -312.252 -310.253 -308.254 -291.262 -329.243 -318.249 -316.250 -306.255 -304.256 -302.257 -289.263 -336.239 -300.258 -331.242 -322.247 -298.259 -333.241 -324.246 -296.260 -326.245 -335.240 -328.244 -330.243 -309.254 -307.255 -305.256 -292.262 -303.257 -290.263 -332.242 -301.258 -299.259 -334.241 -325.246 -327.245 -297.260 -336.240 -329.244 -295.261 -331.243 -293.262 -333.242 -306.256 -304.257 -302.258 -291.263 -335.241 -326.246 -300.259 -289.264 -328.245 -337.240 -330.244 -332.243 -334.242 -294.262 -292.263 -336.241 -329.245 -327.246 -338.240 -290.264 -331.244 -333.243 -335.242 -295.262 -328.246 -337.241 -330.245 -293.263 -339.240 -332.244 -291.264 -334.243 -336.242 -338.241 -329.246 -331.245 -340.240 -333.244 -294.263 -335.243 -337.242 -339.241 -330.246 -332.245 -341.240 -334.244 -336.243 -338.242 -340.241 -331.246 -333.245 -342.240 -335.244 -337.243 -339.242 -341.241 -332.246 -343.240 -334.245 -336.244 -338.243 -340.242 -342.241 -333.246 -344.240 -335.245 -337.244 -339.243 -341.242 -343.241 -334.246 -345.240 -336.245 -338.244 -340.243 -342.242 -344.241 -335.246 -337.245 -339.244 -341.243 -343.242 -345.241 -340.244 -126.288 -120.292 -117.294 -128.287 -125.289 -114.296 -119.293 -116.295 -130.286 -127.288 -124.290 -113.297 -121.292 -118.294 -129.287 -126.289 -115.296 -123.291 -120.293 -112.298 -134.284 -131.286 -128.288 -117.295 -125.290 -122.292 -114.297 -136.283 -133.285 -119.294 -130.287 -127.289 -124.291 -116.296 -138.282 -135.284 -121.293 -141.280 -132.286 -129.288 -113.298 -126.290 -118.295 -140.281 -137.283 -123.292 -115.297 -143.279 -134.285 -131.287 -128.289 -120.294 -125.291 -139.282 -117.296 -145.278 -142.280 -136.284 -133.286 -122.293 -130.288 -127.290 -119.295 -114.298 -141.281 -138.283 -147.277 -144.279 -135.285 -124.292 -132.287 -116.297 -153.273 -129.289 -121.294 -143.280 -140.282 -126.291 -156.271 -149.276 -146.278 -137.284 -134.286 -118.296 -152.274 -131.288 -123.293 -155.272 -145.279 -142.281 -139.283 -128.290 -158.270 -148.277 -136.285 -120.295 -151.275 -133.287 -125.292 -161.268 -154.273 -130.289 -157.271 -147.278 -144.280 -141.282 -122.294 -117.297 -150.276 -138.284 -127.291 -160.269 -153.274 -135.286 -156.272 -132.288 -124.293 -119.296 -163.267 -159.270 -149.277 -146.279 -143.281 -140.283 -152.275 -137.285 -129.290 -170.262 -162.268 -155.273 -134.287 -121.295 -174.259 -158.271 -126.292 -169.263 -165.266 -151.276 -148.278 -145.280 -142.282 -131.289 -173.260 -161.269 -154.274 -139.284 -123.294 -118.297 -168.264 -164.267 -157.272 -136.286 -128.291 -172.261 -160.270 -133.288 -176.258 -153.275 -150.277 -147.279 -144.281 -125.293 -120.296 -171.262 -167.265 -163.268 -156.273 -141.283 -138.285 -130.290 -175.259 -159.271 -170.263 -166.266 -135.287 -122.295 -174.260 -162.269 -155.274 -152.276 -149.278 -146.280 -143.282 -127.292 -178.257 -169.264 -165.267 -158.272 -140.284 -132.289 -173.261 -161.270 -137.286 -124.294 -182.254 -177.258 -168.265 -151.277 -148.279 -129.291 -119.297 -176.259 -172.262 -164.268 -157.273 -154.275 -145.281 -134.288 -181.255 -160.271 -142.283 -126.293 -180.256 -175.260 -171.263 -167.266 -139.285 -131.290 -121.296 -163.269 -153.276 -150.278 -147.280 -136.287 -184.253 -179.257 -174.261 -170.264 -166.267 -159.272 -156.274 -144.282 -178.258 -141.284 -133.289 -128.292 -123.295 -183.254 -173.262 -169.265 -162.270 -182.255 -177.259 -165.268 -155.275 -152.277 -149.279 -138.286 -181.256 -172.263 -158.273 -146.281 -135.288 -130.291 -125.294 -120.297 -176.260 -168.266 -161.271 -143.283 -186.252 -180.257 -164.269 -140.285 -127.293 -185.253 -175.261 -171.264 -167.267 -157.274 -154.276 -151.278 -148.280 -132.290 -122.296 -184.254 -179.258 -160.272 -145.282 -137.287 -183.255 -178.259 -174.262 -170.265 -163.270 -142.284 -129.292 -189.250 -166.268 -134.289 -124.295 -188.251 -182.256 -177.260 -173.263 -169.266 -159.273 -156.275 -153.277 -150.279 -139.286 -187.252 -181.257 -162.271 -147.281 -131.291 -186.253 -176.261 -172.264 -165.269 -144.283 -136.288 -126.294 -185.254 -180.258 -168.267 -158.274 -155.276 -152.278 -141.285 -121.297 -191.249 -175.262 -161.272 -149.280 -133.290 -190.250 -184.255 -179.259 -171.265 -164.270 -146.282 -138.287 -128.293 -197.244 -189.251 -183.256 -167.268 -143.284 -123.296 -196.245 -188.252 -178.260 -174.263 -170.266 -160.273 -157.275 -154.277 -135.289 -130.292 -195.246 -194.247 -187.253 -182.257 -163.271 -151.279 -148.281 -140.286 -125.295 -186.254 -177.261 -173.264 -166.269 -192.249 -181.258 -169.267 -145.283 -137.288 -132.291 -203.239 -202.240 -201.241 -191.250 -185.255 -180.259 -176.262 -172.265 -162.272 -159.274 -156.276 -153.278 -142.285 -127.294 -200.242 -199.243 -198.244 -190.251 -184.256 -165.270 -150.280 -122.297 -197.245 -189.252 -179.260 -175.263 -168.268 -147.282 -139.287 -134.290 -196.246 -195.247 -188.253 -183.257 -171.266 -161.273 -158.275 -144.284 -129.293 -194.248 -178.261 -164.271 -155.277 -152.279 -124.296 -193.249 -187.254 -182.258 -174.264 -167.269 -149.281 -141.286 -136.289 -131.292 -204.239 -203.240 -202.241 -201.242 -192.250 -186.255 -170.267 -200.243 -199.244 -191.251 -181.259 -177.262 -173.265 -163.272 -160.274 -157.276 -146.283 -126.295 -198.245 -197.246 -190.252 -185.256 -166.270 -154.278 -138.288 -133.291 -196.247 -180.260 -176.263 -169.268 -151.280 -143.285 -128.294 -195.248 -189.253 -184.257 -172.266 -148.282 -194.249 -188.254 -183.258 -179.261 -175.264 -165.271 -162.273 -159.275 -156.277 -140.287 -135.290 -123.297 -205.239 -204.240 -203.241 -202.242 -193.250 -168.269 -153.279 -145.284 -130.293 -201.243 -200.244 -192.251 -187.255 -182.259 -178.262 -171.267 -150.281 -125.296 -199.245 -198.246 -191.252 -186.256 -174.265 -164.272 -161.274 -142.286 -137.289 -132.292 -197.247 -181.260 -167.270 -158.276 -155.278 -147.283 -196.248 -190.253 -185.257 -177.263 -170.268 -152.280 -139.288 -127.295 -195.249 -189.254 -173.266 -144.285 -134.291 -205.240 -204.241 -203.242 -194.250 -184.258 -180.261 -176.264 -166.271 -163.273 -160.275 -149.282 -129.294 -202.243 -201.244 -193.251 -188.255 -169.269 -157.277 -141.287 -200.245 -199.246 -183.259 -179.262 -172.267 -154.279 -146.284 -136.290 -198.247 -192.252 -187.256 -175.265 -151.281 -131.293 -124.297 -197.248 -191.253 -186.257 -182.260 -178.263 -168.270 -165.272 -162.274 -159.276 -143.286 -138.289 -206.240 -196.249 -171.268 -156.278 -148.283 -133.292 -126.296 -205.241 -204.242 -203.243 -195.250 -190.254 -185.258 -181.261 -174.266 -153.280 -202.244 -194.251 -189.255 -177.264 -167.271 -164.273 -145.285 -140.288 -128.295 -201.245 -200.246 -184.259 -173.267 -170.269 -161.275 -158.277 -150.282 -135.291 -199.247 -193.252 -188.256 -180.262 -155.279 -130.294 -198.248 -192.253 -183.260 -176.265 -147.284 -142.287 -137.290 -207.240 -206.241 -197.249 -187.257 -179.263 -169.270 -166.272 -163.274 -152.281 -205.242 -204.243 -196.250 -191.254 -175.266 -172.268 -160.276 -144.286 -132.293 -125.297 -203.244 -190.255 -186.258 -182.261 -157.278 -149.283 -139.289 -202.245 -201.246 -195.251 -178.264 -168.271 -154.280 -134.292 -127.296 -200.247 -194.252 -189.256 -185.259 -181.262 -174.267 -171.269 -165.273 -162.275 -146.285 -141.288 -199.248 -193.253 -177.265 -159.277 -151.282 -129.295 -208.240 -207.241 -198.249 -188.257 -184.260 -156.279 -136.291 -206.242 -205.243 -197.250 -192.254 -180.263 -173.268 -170.270 -167.272 -164.274 -148.284 -143.287 -204.244 -203.245 -187.258 -183.261 -176.266 -161.276 -153.281 -131.294 -202.246 -196.251 -191.255 -179.264 -158.278 -201.247 -195.252 -186.259 -150.283 -145.286 -133.293 -200.248 -190.256 -182.262 -175.267 -172.269 -169.271 -166.273 -163.275 -155.280 -126.297 -209.240 -208.241 -207.242 -199.249 -194.253 -178.265 -160.277 -147.285 -135.292 -206.243 -193.254 -189.257 -185.260 -181.263 -152.282 -142.288 -205.244 -204.245 -198.250 -174.268 -171.270 -168.272 -157.279 -203.246 -197.251 -192.255 -188.258 -184.261 -177.266 -165.274 -149.284 -144.287 -202.247 -196.252 -180.264 -162.276 -154.281 -211.239 -210.240 -201.248 -191.256 -187.259 -183.262 -159.278 -132.294 -209.241 -208.242 -200.249 -195.253 -176.267 -173.269 -170.271 -167.273 -156.280 -151.283 -146.286 -207.243 -190.257 -186.260 -179.265 -164.275 -134.293 -206.244 -205.245 -199.250 -194.254 -182.263 -161.277 -204.246 -198.251 -193.255 -189.258 -185.261 -175.268 -172.270 -169.272 -158.279 -153.282 -148.285 -143.288 -203.247 -178.266 -166.274 -212.239 -211.240 -202.248 -197.252 -192.256 -188.259 -181.264 -163.276 -155.281 -150.284 -210.241 -209.242 -201.249 -196.253 -184.262 -160.278 -145.287 -208.243 -207.244 -191.257 -177.267 -174.269 -171.271 -168.273 -206.245 -200.250 -195.254 -187.260 -180.265 -165.275 -157.280 -152.283 -147.286 -205.246 -199.251 -190.258 -183.263 -162.277 -204.247 -194.255 -186.261 -176.268 -173.270 -213.239 -212.240 -211.241 -203.248 -198.252 -179.266 -170.272 -167.274 -159.279 -154.282 -149.285 -210.242 -197.253 -193.256 -189.259 -182.264 -164.276 -144.288 -209.243 -208.244 -202.249 -185.262 -156.281 -151.284 -207.245 -201.250 -196.254 -192.257 -188.260 -181.265 -178.267 -175.269 -172.271 -161.278 -146.287 -206.246 -200.251 -184.263 -169.273 -205.247 -195.255 -191.258 -166.275 -158.280 -153.283 -213.240 -212.241 -204.248 -199.252 -187.261 -177.268 -174.270 -163.277 -148.286 -211.242 -210.243 -194.256 -190.259 -183.264 -180.266 -171.272 -155.282 -209.244 -203.249 -198.253 -186.262 -168.274 -160.279 -150.285 -208.245 -202.250 -197.254 -193.257 -165.276 -145.288 -207.246 -201.251 -189.260 -182.265 -179.267 -176.269 -173.271 -157.281 -152.284 -206.247 -196.255 -192.258 -185.263 -170.273 -162.278 -214.240 -213.241 -205.248 -200.252 -188.261 -167.275 -147.287 -212.242 -211.243 -195.256 -181.266 -178.268 -175.270 -159.280 -154.283 -210.244 -204.249 -199.253 -191.259 -184.264 -172.272 -164.277 -149.286 -209.245 -203.250 -194.257 -187.262 -169.274 -156.282 -208.246 -198.254 -190.260 -166.276 -161.279 -151.285 -215.240 -207.247 -202.251 -183.265 -180.267 -177.269 -174.271 -214.241 -213.242 -206.248 -201.252 -197.255 -193.258 -186.263 -171.273 -163.278 -158.281 -146.288 -212.243 -189.261 -168.275 -153.284 -211.244 -205.249 -200.253 -196.256 -192.259 -182.266 -179.268 -148.287 -210.245 -204.250 -185.264 -176.270 -173.272 -165.277 -160.280 -155.283 -209.246 -199.254 -195.257 -188.262 -170.274 -150.286 -216.240 -208.247 -203.251 -191.260 -162.279 -157.282 -215.241 -214.242 -207.248 -202.252 -198.255 -194.258 -187.263 -184.265 -181.267 -178.269 -175.271 -167.276 -152.285 -213.243 -190.261 -172.273 -212.244 -206.249 -201.253 -197.256 -164.278 -159.281 -147.288 -211.245 -205.250 -193.259 -186.264 -183.266 -180.268 -169.275 -154.284 -210.246 -200.254 -196.257 -189.262 -177.270 -174.272 -161.280 -149.287 -217.240 -216.241 -209.247 -204.251 -192.260 -166.277 -156.283 -215.242 -208.248 -199.255 -171.274 -214.243 -203.252 -195.258 -188.263 -185.265 -182.267 -179.269 -168.276 -163.279 -158.282 -151.286 -213.244 -207.249 -202.253 -198.256 -191.261 -176.271 -212.245 -206.250 -194.259 -173.273 -153.285 -211.246 -201.254 -187.264 -184.266 -181.268 -170.275 -165.278 -160.281 -218.240 -217.241 -210.247 -205.251 -197.257 -190.262 -178.270 -155.284 -148.288 -216.242 -209.248 -200.255 -193.260 -175.272 -167.277 -162.280 -215.243 -204.252 -196.258 -186.265 -183.267 -172.274 -157.283 -150.287 -214.244 -208.249 -192.261 -189.263 -180.269 -213.245 -203.253 -199.256 -177.271 -169.276 -164.279 -159.282 -152.286 -220.239 -219.240 -212.246 -207.250 -195.259 -174.273 -218.241 -211.247 -206.251 -202.254 -198.257 -191.262 -188.264 -185.266 -182.268 -166.278 -154.285 -217.242 -194.260 -179.270 -171.275 -161.281 -216.243 -210.248 -205.252 -201.255 -197.258 -176.272 -156.284 -149.288 -215.244 -209.249 -190.263 -187.265 -184.267 -173.274 -168.277 -163.280 -214.245 -204.253 -200.256 -193.261 -181.269 -158.283 -151.287 -221.239 -220.240 -213.246 -208.250 -196.259 -178.271 -170.276 -165.279 -219.241 -212.247 -207.251 -203.254 -199.257 -175.273 -160.282 -153.286 -218.242 -192.262 -189.264 -186.266 -183.268 -217.243 -211.248 -206.252 -202.255 -195.260 -180.270 -172.275 -167.278 -162.281 -155.285 -216.244 -210.249 -198.258 -177.272 -222.239 -215.245 -205.253 -201.256 -191.263 -188.265 -185.267 -169.277 -157.284 -221.240 -214.246 -209.250 -194.261 -182.269 -174.274 -164.280 -150.288 -220.241 -219.242 -213.247 -208.251 -204.254 -197.259 -179.271 -159.283 -218.243 -200.257 -190.264 -187.266 -176.273 -171.276 -166.279 -152.287 -217.244 -212.248 -207.252 -203.255 -196.260 -193.262 -184.268 -161.282 -154.286 -211.249 -199.258 -181.270 -173.275 -168.278 -216.245 -206.253 -178.272 -163.281 -156.285 -222.240 -221.241 -215.246 -210.250 -202.256 -195.261 -192.263 -189.265 -186.267 -220.242 -214.247 -205.254 -198.259 -183.269 -175.274 -170.277 -165.280 -158.284 -219.243 -209.251 -201.257 -180.271 -151.288 -218.244 -213.248 -194.262 -191.264 -188.266 -172.276 -160.283 -217.245 -212.249 -208.252 -204.255 -197.260 -185.268 -177.273 -167.279 -153.287 -224.239 -223.240 -200.258 -182.270 -162.282 -222.241 -216.246 -211.250 -207.253 -203.256 -193.263 -179.272 -174.275 -169.278 -155.286 -221.242 -215.247 -199.259 -196.261 -190.265 -187.267 -164.281 -220.243 -210.251 -206.254 -184.269 -176.274 -171.277 -157.285 -219.244 -214.248 -202.257 -181.271 -166.280 -159.284 -218.245 -213.249 -209.252 -205.255 -198.260 -195.262 -192.264 -189.266 -225.239 -224.240 -201.258 -186.268 -178.273 -173.276 -168.279 -161.283 -152.288 -223.241 -217.246 -212.250 -208.253 -204.256 -183.270 -222.242 -216.247 -197.261 -194.263 -191.265 -175.275 -163.282 -154.287 -221.243 -211.251 -207.254 -200.259 -188.267 -180.272 -170.278 -156.286 -220.244 -215.248 -203.257 -185.269 -165.281 -226.239 -219.245 -214.249 -210.252 -206.255 -182.271 -177.274 -172.277 -158.285 -225.240 -199.260 -196.262 -193.264 -190.266 -167.280 -160.284 -224.241 -218.246 -213.250 -209.253 -202.258 -187.268 -179.273 -174.276 -223.242 -217.247 -205.256 -184.270 -169.279 -162.283 -222.243 -212.251 -208.254 -201.259 -198.261 -195.263 -192.265 -221.244 -216.248 -204.257 -189.267 -181.272 -176.275 -171.278 -164.282 -227.239 -220.245 -215.249 -211.252 -186.269 -157.286 -226.240 -207.255 -200.260 -197.262 -194.264 -183.271 -178.274 -173.277 -166.281 -225.241 -219.246 -214.250 -210.253 -203.258 -191.266 -159.285 -224.242 -218.247 -206.256 -188.268 -180.273 -168.280 -223.243 -213.251 -209.254 -196.263 -185.270 -175.276 -161.284 -222.244 -217.248 -202.259 -199.261 -193.265 -170.279 -228.239 -221.245 -216.249 -212.252 -205.257 -190.267 -182.272 -177.275 -227.240 -226.241 -208.255 -187.269 -172.278 -225.242 -220.246 -215.250 -211.253 -204.258 -201.260 -198.262 -195.264 -179.274 -219.247 -207.256 -192.266 -184.271 -174.277 -224.243 -214.251 -189.268 -223.244 -218.248 -210.254 -203.259 -200.261 -197.263 -186.270 -181.273 -176.276 -229.239 -228.240 -222.245 -213.252 -206.257 -194.265 -227.241 -217.249 -209.255 -191.267 -183.272 -178.275 -226.242 -221.246 -216.250 -202.260 -199.262 -188.269 -173.278 -225.243 -220.247 -212.253 -205.258 -196.264 -193.266 -215.251 -208.256 -185.271 -180.274 -230.239 -224.244 -219.248 -211.254 -190.268 -175.277 -229.240 -223.245 -204.259 -201.261 -198.263 -195.265 -187.270 -182.273 -228.241 -218.249 -214.252 -210.255 -207.257 -192.267 -177.276 -227.242 -222.246 -184.272 -226.243 -221.247 -217.250 -213.253 -206.258 -203.260 -200.262 -197.264 -189.269 -179.275 -209.256 -194.266 -231.239 -225.244 -220.248 -216.251 -212.254 -186.271 -181.274 -230.240 -224.245 -205.259 -202.261 -191.268 -176.277 -229.241 -223.246 -219.249 -215.252 -208.257 -199.263 -196.265 -188.270 -183.273 -228.242 -211.255 -193.267 -178.276 -227.243 -222.247 -218.250 -214.253 -226.244 -210.256 -207.258 -204.260 -201.262 -198.264 -190.269 -185.272 -180.275 -232.239 -221.248 -217.251 -195.266 -231.240 -225.245 -213.254 -187.271 -182.274 -230.241 -224.246 -220.249 -216.252 -209.257 -206.259 -203.261 -200.263 -192.268 -229.242 -212.255 -197.265 -189.270 -177.277 -228.243 -223.247 -219.250 -215.253 -194.267 -184.273 -227.244 -208.258 -205.260 -202.262 -179.276 -233.239 -232.240 -222.248 -218.251 -211.256 -199.264 -191.269 -186.272 -231.241 -226.245 -214.254 -196.266 -181.275 -225.246 -221.249 -217.252 -207.259 -204.261 -188.271 -176.278 -230.242 -213.255 -210.257 -201.263 -193.268 -183.274 -229.243 -224.247 -220.250 -198.265 -178.277 -234.239 -228.244 -216.253 -195.267 -190.270 -185.273 -233.240 -223.248 -219.251 -212.256 -209.258 -206.260 -203.262 -180.276 -232.241 -227.245 -215.254 -200.264 -192.269 -187.272 -231.242 -226.246 -222.249 -218.252 -197.266 -182.275 -211.257 -208.259 -205.261 -194.268 -189.271 -230.243 -225.247 -221.250 -214.255 -202.263 -184.274 -235.239 -229.244 -217.253 -199.265 -234.240 -224.248 -220.251 -210.258 -207.260 -196.267 -191.270 -186.273 -179.277 -233.241 -228.245 -216.254 -213.256 -204.262 -201.264 -232.242 -227.246 -223.249 -219.252 -193.269 -188.272 -181.276 -212.257 -209.259 -198.266 -183.275 -231.243 -226.247 -222.250 -215.255 -206.261 -203.263 -195.268 -190.271 -236.239 -230.244 -218.253 -200.265 -185.274 -235.240 -225.248 -221.251 -234.241 -229.245 -214.256 -211.258 -208.260 -205.262 -197.267 -192.270 -187.273 -180.277 -233.242 -228.246 -224.249 -217.254 -202.264 -232.243 -220.252 -199.266 -194.269 -189.272 -182.276 -227.247 -223.250 -216.255 -213.257 -210.259 -207.261 -231.244 -219.253 -204.263 -196.268 -184.275 -236.240 -226.248 -222.251 -201.265 -191.271 -235.241 -230.245 -215.256 -212.258 -209.260 -186.274 -179.278 -234.242 -229.246 -225.249 -218.254 -206.262 -198.267 -193.270 -233.243 -221.252 -203.264 -188.273 -181.277 -228.247 -224.250 -214.257 -211.259 -200.266 -195.269 -183.276 -237.240 -232.244 -220.253 -217.255 -208.261 -190.272 -236.241 -231.245 -227.248 -205.263 -197.268 -185.275 -223.251 -213.258 -202.265 -192.271 -235.242 -230.246 -226.249 -219.254 -216.256 -210.260 -207.262 -187.274 -234.243 -222.252 -199.267 -194.270 -229.247 -225.250 -204.264 -189.273 -182.277 -238.240 -233.244 -218.255 -215.257 -212.259 -209.261 -201.266 -196.269 -237.241 -232.245 -228.248 -221.253 -206.263 -191.272 -184.276 -224.251 -198.268 -236.242 -231.246 -227.249 -220.254 -217.256 -214.258 -211.260 -203.265 -193.271 -186.275 -235.243 -223.252 -208.262 -188.274 -230.247 -226.250 -205.264 -200.267 -195.270 -239.240 -234.244 -219.255 -216.257 -213.259 -190.273 -238.241 -233.245 -229.248 -222.253 -210.261 -202.266 -197.269 -183.277 -237.242 -225.251 -207.263 -192.272 -185.276 -232.246 -228.249 -218.256 -215.258 -204.265 -199.268 -236.243 -224.252 -221.254 -212.260 -194.271 -187.275 -231.247 -209.262 -201.267 -240.240 -235.244 -227.250 -217.257 -206.264 -196.270 -189.274 -239.241 -234.245 -230.248 -223.253 -220.255 -214.259 -211.261 -191.273 -182.278 -238.242 -226.251 -203.266 -198.269 -184.277 -233.246 -229.249 -208.263 -193.272 -237.243 -222.254 -219.256 -216.258 -213.260 -205.265 -200.268 -186.276 -241.240 -236.244 -232.247 -225.252 -210.262 -195.271 -188.275 -228.250 -202.267 -240.241 -235.245 -231.248 -224.253 -221.255 -218.257 -215.259 -207.264 -197.270 -190.274 -239.242 -227.251 -212.261 -234.246 -230.249 -209.263 -204.266 -199.269 -192.273 -183.278 -238.243 -223.254 -220.256 -217.258 -194.272 -185.277 -242.240 -237.244 -233.247 -226.252 -214.260 -206.265 -201.268 -187.276 -229.250 -211.262 -196.271 -241.241 -236.245 -232.248 -222.255 -219.257 -208.264 -203.267 -189.275 -240.242 -228.251 -225.253 -216.259 -198.270 -191.274 -235.246 -231.249 -213.261 -239.243 -224.254 -221.256 -210.263 -205.266 -200.269 -193.273 -243.240 -238.244 -234.247 -227.252 -218.258 -215.260 -242.241 -230.250 -207.265 -202.268 -195.272 -186.277 -237.245 -233.248 -212.262 -197.271 -188.276 -241.242 -229.251 -226.253 -220.257 -217.259 -209.264 -204.267 -190.275 -240.243 -236.246 -214.261 -199.270 -232.249 -206.266 -192.274 -244.240 -239.244 -235.247 -228.252 -225.254 -222.256 -219.258 -211.263 -201.269 -194.273 -243.241 -231.250 -216.260 -185.278 -238.245 -234.248 -213.262 -208.265 -203.268 -196.272 -187.277 -242.242 -227.253 -224.255 -221.257 -198.271 -189.276 -241.243 -237.246 -230.251 -218.259 -210.264 -205.267 -233.249 -215.261 -200.270 -191.275 -245.240 -240.244 -236.247 -229.252 -226.254 -223.256 -220.258 -212.263 -207.266 -193.274 -244.241 -232.250 -217.260 -202.269 -195.273 -243.242 -239.245 -235.248 -209.265 -228.253 -225.255 -222.257 -214.262 -204.268 -197.272 -186.278 -242.243 -238.246 -231.251 -219.259 -188.277 -246.240 -234.249 -216.261 -211.264 -206.267 -199.271 -190.276 -241.244 -237.247 -230.252 -227.254 -224.256 -201.270 -192.275 -245.241 -233.250 -221.258 -213.263 -208.266 -194.274 -244.242 -240.245 -236.248 -218.260 -203.269 -229.253 -226.255 -215.262 -210.265 -196.273 -243.243 -239.246 -232.251 -223.257 -205.268 -198.272 -187.278 -247.240 -235.249 -220.259 -212.264 -189.277 -242.244 -238.247 -228.254 -217.261 -207.267 -200.271 -191.276 -246.241 -234.250 -231.252 -225.256 -222.258 -202.270 -193.275 -245.242 -241.245 -237.248 -219.260 -214.263 -209.266 -204.269 -195.274 -244.243 -240.246 -233.251 -230.253 -227.255 -224.257 -216.262 -211.265 -197.273 -248.240 -236.249 -221.259 -206.268 -199.272 -247.241 -243.244 -239.247 -218.261 -213.264 -188.278 -235.250 -232.252 -229.254 -226.256 -208.267 -201.271 -190.277 -246.242 -242.245 -238.248 -223.258 -215.263 -203.270 -192.276 -220.260 -210.266 -194.275 -245.243 -241.246 -234.251 -231.253 -228.255 -205.269 -196.274 -249.240 -237.249 -225.257 -217.262 -212.265 -198.273 -248.241 -244.244 -240.247 -222.259 -207.268 -233.252 -230.254 -227.256 -219.261 -214.264 -200.272 -189.278 -247.242 -243.245 -239.248 -236.250 -224.258 -209.267 -202.271 -191.277 -221.260 -216.263 -204.270 -193.276 -250.240 -246.243 -242.246 -235.251 -232.253 -229.255 -211.266 -195.275 -245.244 -238.249 -226.257 -218.262 -206.269 -197.274 -249.241 -241.247 -223.259 -213.265 -199.273 -234.252 -231.254 -208.268 -248.242 -244.245 -240.248 -237.250 -228.256 -220.261 -215.264 -201.272 -247.243 -225.258 -210.267 -203.271 -190.278 -251.240 -243.246 -236.251 -233.253 -222.260 -217.263 -212.266 -192.277 -246.244 -239.249 -230.255 -227.257 -205.270 -194.276 -250.241 -242.247 -224.259 -219.262 -214.265 -207.269 -196.275 -249.242 -245.245 -235.252 -232.254 -198.274 -241.248 -238.250 -229.256 -221.261 -216.264 -209.268 -200.273 -248.243 -226.258 -211.267 -202.272 -252.240 -244.246 -234.253 -218.263 -204.271 -247.244 -240.249 -237.251 -231.255 -223.260 -213.266 -193.277 -251.241 -243.247 -228.257 -206.270 -195.276 -250.242 -246.245 -225.259 -220.262 -215.265 -208.269 -197.275 -239.250 -236.252 -233.254 -230.256 -199.274 -249.243 -242.248 -227.258 -222.261 -217.264 -210.268 -201.273 -253.240 -245.246 -212.267 -203.272 -252.241 -248.244 -241.249 -238.251 -235.253 -232.255 -224.260 -219.263 -205.271 -244.247 -229.257 -214.266 -192.278 -251.242 -247.245 -226.259 -221.262 -207.270 -194.277 -240.250 -237.252 -234.254 -216.265 -209.269 -198.275 -196.276 -254.240 -250.243 -243.248 -231.256 -223.261 -200.274 -246.246 -228.258 -218.264 -211.268 -202.273 -253.241 -249.244 -242.249 -239.251 -236.253 -233.255 -213.267 -204.272 -245.247 -230.257 -225.260 -220.263 -252.242 -248.245 -215.266 -206.271 -241.250 -238.252 -235.254 -227.259 -222.262 -208.270 -195.277 -193.278 -255.240 -251.243 -244.248 -232.256 -217.265 -210.269 -197.276 -247.246 -229.258 -224.261 -219.264 -199.275 -254.241 -250.244 -243.249 -240.251 -237.253 -212.268 -201.274 -246.247 -234.255 -226.260 -221.263 -214.267 -203.273 -253.242 -249.245 -231.257 -205.272 -242.250 -239.252 -228.259 -223.262 -216.266 -207.271 -256.240 -252.243 -245.248 -236.254 -233.256 -218.265 -209.270 -248.246 -225.261 -211.269 -196.277 -194.278 -255.241 -251.244 -244.249 -241.251 -238.253 -230.258 -220.264 -200.275 -198.276 -247.247 -235.255 -213.268 -202.274 -254.242 -250.245 -232.257 -227.260 -222.263 -215.267 -204.273 -243.250 -240.252 -206.272 -257.240 -253.243 -249.246 -246.248 -237.254 -229.259 -224.262 -217.266 -208.271 -234.256 -219.265 -210.270 -256.241 -252.244 -245.249 -242.251 -231.258 -226.261 -212.269 -195.278 -255.242 -248.247 -239.253 -236.255 -221.264 -214.268 -199.276 -197.277 -251.245 -228.260 -203.274 -201.275 -254.243 -244.250 -241.252 -233.257 -223.263 -216.267 -205.273 -258.240 -250.246 -247.248 -238.254 -230.259 -218.266 -207.272 -257.241 -235.256 -225.262 -209.271 -253.244 -246.249 -243.251 -220.265 -211.270 -256.242 -249.247 -240.253 -232.258 -227.261 -213.269 -252.245 -237.255 -222.264 -215.268 -200.276 -198.277 -196.278 -259.240 -255.243 -245.250 -234.257 -229.260 -224.263 -202.275 -251.246 -248.248 -242.252 -239.254 -217.267 -206.273 -204.274 -258.241 -236.256 -231.259 -226.262 -219.266 -208.272 -254.244 -210.271 -257.242 -250.247 -247.249 -244.251 -241.253 -233.258 -228.261 -221.265 -212.270 -253.245 -238.255 -223.264 -214.269 -260.240 -256.243 -235.257 -230.260 -216.268 -197.278 -252.246 -249.248 -246.250 -243.252 -225.263 -203.275 -201.276 -199.277 -259.241 -255.244 -240.254 -232.259 -218.267 -205.274 -237.256 -227.262 -220.266 -209.272 -207.273 -258.242 -251.247 -248.249 -245.251 -242.253 -211.271 -254.245 -239.255 -234.258 -229.261 -222.265 -213.270 -261.240 -257.243 -224.264 -215.269 -253.246 -250.248 -247.250 -244.252 -236.257 -231.260 -217.268 -260.241 -256.244 -241.254 -226.263 -202.276 -200.277 -198.278 -238.256 -233.259 -219.267 -206.274 -204.275 -259.242 -252.247 -249.249 -246.251 -243.253 -228.262 -221.266 -208.273 -255.245 -235.258 -230.261 -223.265 -212.271 -210.272 -262.240 -258.243 -240.255 -214.270 -254.246 -251.248 -248.250 -245.252 -237.257 -232.260 -225.264 -216.269 -261.241 -257.244 -242.254 -227.263 -218.268 -239.256 -234.259 -220.267 -260.242 -253.247 -250.249 -247.251 -229.262 -205.275 -203.276 -201.277 -199.278 -197.279 -263.240 -256.245 -244.253 -236.258 -222.266 -209.273 -207.274 -259.243 -241.255 -231.261 -224.265 -213.271 -211.272 -262.241 -255.246 -252.248 -249.250 -246.252 -215.270 -258.244 -243.254 -238.257 -233.260 -226.264 -217.269 -261.242 -228.263 -219.268 -254.247 -251.249 -248.251 -240.256 -235.259 -221.267 -264.240 -257.245 -245.253 -230.262 -204.276 -202.277 -200.278 -198.279 -260.243 -242.255 -237.258 -223.266 -210.273 -208.274 -206.275 -196.280 -194.281 -192.282 -263.241 -256.246 -253.248 -250.250 -232.261 -225.265 -212.272 -259.244 -247.252 -239.257 -234.260 -227.264 -216.270 -214.271 -262.242 -244.254 -218.269 -255.247 -252.249 -249.251 -241.256 -236.259 -229.263 -220.268 -265.240 -258.245 -246.253 -231.262 -222.267 -261.243 -243.255 -238.258 -224.266 -264.241 -257.246 -254.248 -251.250 -233.261 -209.274 -207.275 -205.276 -203.277 -201.278 -199.279 -197.280 -260.244 -248.252 -240.257 -226.265 -213.272 -211.273 -195.281 -193.282 -263.242 -245.254 -235.260 -228.264 -217.270 -215.271 -191.283 -259.245 -256.247 -253.249 -250.251 -230.263 -219.269 -266.240 -262.243 -247.253 -242.256 -237.259 -221.268 -232.262 -223.267 -265.241 -258.246 -255.248 -252.250 -244.255 -239.258 -225.266 -261.244 -249.252 -234.261 -227.265 -208.275 -206.276 -204.277 -202.278 -264.242 -246.254 -241.257 -236.260 -214.272 -212.273 -210.274 -200.279 -198.280 -260.245 -257.247 -254.249 -229.264 -218.270 -216.271 -196.281 -194.282 -267.240 -263.243 -251.251 -243.256 -238.259 -231.263 -220.269 -192.283 -248.253 -222.268 -266.241 -259.246 -256.248 -253.250 -245.255 -240.258 -233.262 -224.267 -262.244 -250.252 -235.261 -226.266 -265.242 -247.254 -242.257 -228.265 -268.240 -261.245 -258.247 -255.249 -237.260 -230.264 -213.273 -211.274 -209.275 -207.276 -205.277 -203.278 -201.279 -264.243 -252.251 -244.256 -217.271 -215.272 -199.280 -267.241 -249.253 -239.259 -232.263 -221.269 -219.270 -197.281 -195.282 -260.246 -257.248 -254.250 -246.255 -234.262 -223.268 -193.283 -263.244 -251.252 -241.258 -225.267 -191.284 -266.242 -236.261 -227.266 -269.240 -262.245 -259.247 -256.249 -248.254 -243.257 -238.260 -229.265 -265.243 -253.251 -231.264 -214.273 -212.274 -210.275 -208.276 -206.277 -268.241 -250.253 -245.256 -240.259 -233.263 -218.271 -216.272 -204.278 -202.279 -261.246 -258.248 -255.250 -222.269 -220.270 -200.280 -198.281 -267.242 -264.244 -252.252 -247.255 -242.258 -235.262 -224.268 -196.282 -237.261 -226.267 -194.283 -263.245 -260.247 -257.249 -249.254 -244.257 -228.266 -192.284 -266.243 -254.251 -239.260 -230.265 -246.256 -232.264 -262.246 -259.248 -241.259 -234.263 -219.271 -217.272 -215.273 -213.274 -211.275 -209.276 -207.277 -205.278 -256.250 -243.258 -223.269 -221.270 -203.279 -236.262 -225.268 -201.280 -199.281 -261.247 -258.249 -245.257 -238.261 -227.267 -197.282 -240.260 -229.266 -195.283 -231.265 -193.284 -242.259 -233.264 -235.263 -220.271 -218.272 -216.273 -214.274 -212.275 -210.276 -244.258 -237.262 -224.269 -222.270 -208.277 -206.278 -226.268 -204.279 -202.280 -239.261 -230.266 -228.267 -200.281 -232.265 -198.282 -234.264 -196.283 -236.263 -219.272 -217.273 -215.274 -213.275 -238.262 -225.269 -223.270 -221.271 -211.276 -209.277 -229.267 -227.268 -207.278 -205.279 -231.266 -203.280 -233.265 -201.281 -199.282 -197.283 -218.273 -226.269 -224.270 -222.271 -220.272 -216.274 -214.275 -212.276 -230.267 -228.268 -210.277 -208.278 -232.266 -206.279 -204.280 -202.281 -200.282 -198.283 -227.269 -225.270 -223.271 -221.272 -219.273 -217.274 -215.275 -231.267 -229.268 -213.276 -211.277 -209.278 -207.279 -205.280 -203.281 -201.282 -228.269 -226.270 -224.271 -222.272 -220.273 -218.274 -199.283 -230.268 -216.275 -214.276 -212.277 -229.269 -227.270 -225.271 -223.272 -221.273 -231.268 -219.274 -217.275 -215.276 -213.277 -230.269 -228.270 -226.271 -224.272 -222.273 -220.274 -218.275 -216.276 -231.269 -229.270 -227.271 -225.272 -223.273 -221.274 -219.275 -217.276 -215.277 -232.269 -230.270 -228.271 -226.272 -224.273 -222.274 -220.275 -218.276 -216.277 -233.269 -231.270 -229.271 -227.272 -225.273 -223.274 -221.275 -217.277 -234.269 -232.270 -230.271 -228.272 -226.273 -224.274 -222.275 -220.276 -218.277 -235.269 -233.270 -231.271 -229.272 -227.273 -225.274 -223.275 -221.276 -219.277 -236.269 -234.270 -232.271 -230.272 -228.273 -226.274 -224.275 -237.269 -235.270 -233.271 -231.272 -229.273 -227.274 -225.275 -223.276 -238.269 -221.277 -236.270 -234.271 -232.272 -230.273 -228.274 -226.275 -224.276 -239.269 -222.277 -237.270 -235.271 -233.272 -231.273 -229.274 -227.275 -225.276 -240.269 -238.270 -223.277 -236.271 -234.272 -232.273 -228.275 -241.269 -226.276 -239.270 -224.277 -227.276 -000.238 -001.253 -000.253 -002.253 -002.238 -004.238 -001.238 -003.238 -003.253 -005.238 -006.238 -004.253 -006.253 -007.238 -005.253 -009.253 -008.253 -009.238 -007.253 -008.238 -010.238 -012.238 -011.238 -013.238 -012.253 -011.253 -010.253 -013.253 -014.253 -014.238 -015.238 -015.253 -016.238 -016.253 -019.253 -017.238 -017.253 -018.253 -018.238 -021.253 -020.238 -021.238 -022.238 -019.238 -024.238 -020.253 -022.253 -023.253 -023.238 -024.253 -025.238 -025.253 -026.253 -026.238 -027.238 -028.253 -028.238 -029.238 -031.253 -027.253 -032.238 -029.253 -030.238 -030.253 -031.238 -037.238 -035.238 -032.253 -033.253 -033.238 -034.238 -034.253 -035.253 -036.238 -038.239 -036.253 -037.253 -038.238 -040.238 -038.253 -039.253 -039.238 -042.239 -039.239 -040.251 -041.238 -040.239 -041.239 -039.252 -041.251 -040.252 -042.238 -040.253 -042.251 -043.239 -043.238 -045.239 -043.251 -044.238 -044.239 -047.251 -047.238 -045.251 -044.251 -046.238 -045.238 -049.251 -046.251 -050.238 -050.249 -049.238 -048.238 -049.239 -049.250 -050.250 -052.238 -050.251 -051.238 -051.250 -048.251 -053.249 -053.250 -055.250 -053.239 -054.239 -052.249 -051.249 -055.238 -052.250 -054.250 -054.238 -054.249 -053.238 -055.239 -058.239 -057.238 -056.250 -055.249 -057.239 -057.250 -056.238 -060.238 -060.248 -058.238 -056.249 -056.239 -060.250 -062.238 -062.248 -065.240 -057.249 -060.239 -062.239 -064.239 -072.318 -058.249 -075.320 -059.239 -059.250 -061.248 -058.250 -063.244 -073.321 -061.238 -067.321 -059.238 -060.249 -059.249 -061.239 -076.319 -063.245 -068.320 -068.321 -064.241 -063.246 -063.242 -062.247 -063.247 -069.320 -064.242 -071.321 -063.243 -064.238 -069.321 -070.319 -074.317 -073.320 -063.238 -065.241 -073.318 -070.320 -075.317 -074.321 -075.321 -070.321 -084.317 -072.319 -075.318 -071.320 -071.319 -087.317 -072.321 -073.319 -076.321 -074.320 -081.320 -072.320 -079.320 -083.318 -075.319 -074.318 -077.321 -110.299 -077.317 -076.317 -079.317 -086.318 -074.319 -078.317 -080.318 -084.319 -077.318 -081.318 -086.317 -076.318 -079.318 -083.320 -078.318 -080.319 -083.319 -077.319 -081.319 -111.299 -079.319 -085.318 -078.319 -080.320 -077.320 -082.318 -076.320 -078.320 -080.321 -119.298 -081.321 -112.297 -082.319 -111.298 -079.321 -078.321 -081.317 -117.299 -082.317 -082.320 -084.318 -080.317 -085.317 -088.317 -083.317 -118.298 -114.299 -112.299 -113.299 -115.295 -113.296 -115.299 -119.299 -118.293 -117.298 -118.299 -120.298 -116.298 -121.298 -115.298 -122.298 -116.299 -121.299 -124.289 -123.298 -122.291 -123.290 -120.299 -124.298 -123.299 -130.285 -122.299 -125.298 -127.298 -127.297 -126.298 -127.287 -131.297 -128.296 -129.298 -130.298 -128.297 -131.295 -132.295 -128.298 -132.285 -131.285 -131.296 -129.286 -129.296 -133.284 -133.298 -130.295 -131.298 -129.297 -132.297 -136.293 -130.296 -133.294 -132.296 -130.297 -135.283 -138.295 -133.296 -132.298 -133.297 -134.298 -134.294 -134.283 -133.295 -134.295 -134.297 -135.297 -135.293 -134.296 -136.282 -135.294 -136.298 -137.291 -625.238 -139.291 -135.295 -137.293 -136.294 -137.282 -138.294 -135.296 -137.298 -137.292 -136.295 -138.291 -138.281 -139.297 -138.297 -136.296 -139.290 -138.292 -135.298 -138.290 -136.297 -138.296 -138.293 -137.296 -140.280 -137.294 -140.290 -139.292 -137.295 -136.292 -138.298 -140.291 -139.293 -143.295 -139.281 -140.292 -139.294 -141.294 -143.294 -624.240 -137.297 -140.293 -139.295 -141.295 -141.291 -141.290 -142.293 -142.292 -139.296 -140.294 -141.296 -145.277 -144.294 -143.290 -140.295 -142.279 -144.278 -142.289 -625.240 -143.291 -141.292 -142.294 -627.238 -140.296 -142.290 -145.289 -143.292 -141.293 -626.238 -145.290 -145.292 -140.297 -627.239 -143.293 -141.289 -142.291 -140.289 -150.290 -628.238 -142.295 -144.289 -142.296 -146.291 -147.291 -144.290 -145.291 -143.278 -146.292 -151.274 -144.291 -150.291 -146.293 -143.289 -144.292 -145.293 -147.276 -148.289 -144.293 -147.292 -145.294 -149.289 -148.290 -148.291 -148.276 -146.277 -149.290 -147.289 -148.292 -154.288 -150.289 -150.275 -146.289 -147.290 -146.290 -149.291 -154.272 -152.289 -153.288 -152.290 -155.287 -151.289 -156.270 -153.289 -151.290 -157.287 -152.273 -155.271 -156.287 -161.267 -161.285 -157.270 -160.285 -162.266 -159.286 -162.267 -158.286 -160.268 -159.269 -162.284 -164.266 -163.266 -169.280 -167.263 -165.282 -163.283 -164.283 -167.264 -169.262 -166.264 -165.265 -166.265 -167.281 -168.263 -166.282 -168.281 -172.279 -175.294 -176.279 -173.259 -171.279 -174.279 -172.260 -171.261 -174.294 -173.279 -175.258 -175.278 -176.293 -179.292 -175.279 -179.256 -174.278 -176.294 -180.294 -177.257 -177.278 -178.294 -177.279 -178.279 -179.293 -177.293 -177.294 -181.254 -178.292 -182.279 -179.294 -183.253 -183.290 -178.293 -179.279 -180.255 -178.278 -181.278 -180.278 -181.279 -183.294 -180.279 -183.293 -181.292 -180.292 -181.293 -180.293 -182.292 -181.294 -183.307 -182.293 -184.278 -181.308 -183.279 -182.294 -182.253 -184.279 -184.252 -186.279 -183.292 -185.294 -183.252 -184.290 -184.292 -187.308 -184.293 -187.279 -188.250 -184.294 -185.289 -187.251 -213.238 -184.307 -185.290 -187.284 -185.308 -186.294 -184.308 -185.292 -186.306 -186.289 -187.285 -185.251 -185.293 -186.251 -212.295 -185.252 -186.308 -187.250 -186.285 -212.307 -187.306 -186.290 -187.288 -212.306 -187.289 -186.292 -186.293 -187.290 -187.292 -214.306 -187.293 -187.294 -213.306 -212.278 -214.238 -212.279 -214.239 -216.239 -213.278 -215.238 -213.279 -215.239 -214.277 -215.306 -214.278 -216.238 -214.279 -217.239 -214.294 -215.279 -215.278 -214.305 -215.305 -216.278 -217.279 -217.278 -216.279 -216.304 -310.292 -217.238 -217.304 -218.238 -218.278 -218.239 -218.279 -218.292 -218.304 -219.238 -219.239 -219.276 -219.304 -219.278 -219.279 -220.277 -220.278 -221.291 -220.238 -220.279 -220.303 -222.238 -221.238 -222.278 -222.276 -221.278 -221.303 -221.279 -222.279 -223.238 -223.255 -223.239 -223.278 -224.278 -223.290 -224.290 -223.302 -224.238 -224.302 -225.238 -225.290 -225.291 -225.301 -226.238 -226.277 -226.290 -226.289 -226.291 -225.277 -226.301 -227.238 -227.277 -227.289 -227.290 -228.291 -228.238 -227.291 -229.238 -228.276 -228.288 -228.289 -228.300 -229.288 -228.290 -229.289 -229.300 -229.290 -231.274 -230.238 -230.287 -229.291 -231.275 -230.289 -231.238 -229.275 -230.299 -229.276 -231.287 -230.290 -230.291 -231.290 -231.289 -230.274 -232.238 -230.275 -231.291 -231.299 -232.267 -232.289 -232.268 -233.238 -232.290 -232.299 -232.291 -233.273 -233.286 -233.266 -233.299 -233.268 -232.274 -234.238 -232.286 -233.290 -233.291 -236.238 -234.265 -235.299 -234.266 -234.273 -234.268 -235.272 -235.285 -234.299 -235.264 -235.238 -235.265 -234.289 -235.290 -235.268 -234.290 -236.285 -236.264 -234.291 -237.238 -240.239 -236.299 -238.284 -236.290 -236.268 -237.239 -237.271 -237.284 -238.238 -237.299 -236.272 -238.239 -237.263 -237.268 -238.263 -238.271 -238.289 -238.268 -241.263 -239.268 -238.299 -239.238 -239.239 -241.268 -240.268 -240.261 -241.270 -239.299 -240.263 -240.270 -240.238 -240.283 -239.262 -242.238 -242.269 -241.260 -242.239 -240.299 -241.238 -241.239 -241.261 -392.255 -242.260 -242.308 -242.262 -242.263 -243.238 -241.299 -242.268 -243.239 -241.308 -242.299 -340.279 -279.300 -300.238 -300.239 -342.243 -185.279 -279.299 -400.241 -392.256 -400.240 -400.246 -400.242 -400.243 -400.245 -400.244 -400.247 -400.248 -400.250 -400.249 -400.262 -400.251 -400.252 -400.253 -400.255 -400.254 -188.284 -400.256 -300.260 -300.278 -400.258 -400.260 -400.257 -400.263 -400.261 -400.259 -400.265 -401.246 -300.286 -401.239 -400.266 -300.295 -188.279 -401.245 -401.242 -401.243 -188.285 -401.244 -300.288 -188.288 -300.287 -300.294 -301.238 -300.289 -300.293 -401.241 -401.240 -188.308 -301.239 -401.253 -401.252 -401.251 -188.289 -188.292 -401.250 -188.293 -188.290 -401.247 -401.249 -401.248 -188.310 -401.254 -401.255 -310.285 -401.256 -401.257 -189.284 -189.285 -189.288 -189.305 -189.308 -189.289 -189.293 -189.310 -189.279 -190.249 -189.283 -189.292 -190.310 -190.305 -190.285 -190.290 -190.279 -190.288 -190.292 -190.283 -191.248 -190.289 -190.293 -190.308 -190.284 -191.278 -191.285 -191.288 -191.305 -191.279 -191.289 -191.308 -191.282 -191.310 -191.290 -192.288 -192.248 -191.292 -192.279 -192.285 -192.309 -192.292 -192.310 -192.289 -192.305 -193.247 -192.308 -192.290 -193.248 -193.288 -193.309 -193.289 -193.308 -193.281 -193.279 -193.285 -193.310 -193.290 -194.246 -193.305 -194.279 -194.280 -195.290 -195.289 -195.280 -195.285 -195.310 -195.302 -195.288 -195.305 -196.244 -195.308 -195.279 -195.309 -195.284 -196.290 -196.309 -196.289 -196.305 -194.305 -196.284 -196.310 -196.308 -196.279 -197.243 -196.285 -196.288 -351.276 -197.310 -197.305 -197.288 -197.308 -197.289 -197.290 -197.309 -197.301 -272.270 -198.242 -331.284 -198.243 -198.289 -198.308 -198.284 -198.310 -199.242 -198.305 -198.288 -198.309 -411.261 -199.288 -310.286 -199.289 -411.251 -199.305 -199.300 -199.309 -412.246 -200.300 -199.308 -199.310 -200.302 -200.241 -200.310 -200.283 -200.308 -200.309 -200.288 -200.305 -201.240 -202.282 -201.288 -201.309 -201.308 -202.309 -201.310 -202.239 -202.302 -202.299 -202.308 -202.310 -422.246 -203.304 -203.308 -203.309 -204.238 -266.267 -351.277 -411.252 -272.287 -411.262 -310.287 -412.247 -422.247 -582.252 -253.279 -332.282 -263.266 -301.280 -301.286 -301.259 -301.287 -301.278 -301.288 -301.289 -301.293 -301.294 -303.238 -302.238 -302.239 -302.287 -303.239 -302.280 -302.278 -302.293 -302.285 -302.288 -302.294 -302.286 -302.289 -303.258 -303.293 -303.285 -303.286 -303.294 -303.278 -303.288 -303.287 -303.289 -303.279 -304.238 -303.292 -304.279 -304.286 -304.285 -304.294 -304.239 -304.288 -304.293 -305.238 -304.292 -304.278 -304.287 -305.257 -305.239 -305.287 -305.293 -306.238 -305.278 -305.286 -305.288 -306.278 -305.284 -306.292 -305.292 -306.283 -305.285 -306.284 -306.287 -307.285 -307.293 -306.288 -306.293 -306.285 -307.286 -308.238 -307.238 -306.286 -307.288 -307.256 -307.287 -308.286 -307.283 -308.285 -307.291 -247.269 -307.284 -308.282 -308.293 -307.292 -309.238 -308.255 -308.287 -309.288 -308.283 -309.283 -310.239 -308.288 -272.295 -308.284 -308.291 -309.291 -309.282 -309.284 -309.255 -308.292 -309.287 -309.292 -194.308 -309.285 -309.293 -309.286 -280.264 -310.238 -312.238 -263.299 -449.240 -311.287 -411.253 -412.238 -353.239 -311.281 -335.283 -311.253 -280.266 -412.239 -311.282 -414.246 -311.290 -311.283 -310.288 -422.250 -336.278 -310.291 -412.248 -311.284 -311.285 -312.282 -353.240 -311.286 -312.239 -311.292 -311.288 -312.288 -312.283 -312.253 -312.284 -313.285 -313.239 -313.281 -313.280 -312.290 -312.291 -312.285 -313.286 -314.239 -313.282 -312.281 -312.292 -312.286 -312.287 -313.283 -313.287 -313.252 -313.238 -314.289 -314.288 -314.280 -320.279 -313.288 -314.285 -315.238 -313.284 -314.283 -314.291 -313.291 -314.282 -315.239 -314.284 -314.281 -314.286 -315.281 -315.251 -194.309 -316.287 -314.287 -316.288 -316.285 -315.290 -315.286 -315.284 -315.291 -315.282 -316.280 -314.290 -315.285 -315.280 -315.288 -315.283 -315.289 -316.281 -316.238 -316.286 -317.286 -316.290 -316.239 -317.284 -316.282 -316.291 -316.283 -317.238 -317.279 -316.251 -317.250 -317.290 -317.285 -317.239 -316.279 -316.284 -316.289 -317.280 -318.238 -317.289 -318.290 -318.239 -318.279 -317.281 -318.284 -318.250 -317.287 -318.283 -318.286 -319.238 -318.280 -319.290 -317.288 -317.283 -319.282 -319.285 -318.281 -318.287 -318.282 -319.279 -319.249 -320.280 -319.286 -318.288 -319.288 -319.280 -319.284 -318.289 -320.281 -273.302 -320.248 -319.281 -411.254 -320.284 -320.285 -321.278 -320.286 -320.290 -320.289 -319.289 -320.282 -321.282 -320.287 -321.279 -320.249 -321.248 -412.240 -321.283 -321.238 -320.283 -320.278 -320.288 -321.288 -422.251 -322.279 -322.287 -321.280 -321.289 -322.283 -321.287 -322.289 -322.280 -323.284 -322.284 -321.284 -322.238 -323.248 -321.281 -322.248 -323.238 -322.282 -321.285 -322.281 -322.278 -323.278 -322.285 -321.286 -323.288 -323.247 -323.279 -323.285 -323.289 -324.280 -324.238 -323.283 -322.286 -323.280 -324.285 -324.239 -323.286 -322.288 -323.281 -323.287 -324.286 -323.282 -324.278 -325.283 -324.282 -324.279 -324.287 -324.247 -325.280 -325.282 -325.278 -325.285 -325.239 -326.248 -324.283 -311.239 -324.288 -418.255 -325.279 -324.248 -325.281 -325.248 -326.247 -324.284 -325.247 -325.238 -324.289 -325.284 -327.238 -325.286 -328.279 -326.285 -326.282 -327.239 -326.280 -326.238 -326.239 -325.287 -327.284 -326.286 -326.283 -326.278 -326.281 -326.288 -327.278 -325.288 -327.279 -326.287 -326.284 -326.279 -329.238 -327.282 -328.283 -329.239 -327.285 -328.248 -327.247 -328.278 -327.280 -327.288 -328.281 -328.238 -327.286 -327.283 -327.281 -317.282 -328.247 -328.284 -328.282 -328.280 -327.287 -328.285 -329.285 -330.282 -328.286 -329.248 -329.286 -330.238 -330.248 -329.278 -330.283 -329.283 -330.239 -329.247 -329.284 -329.279 -330.278 -330.247 -330.281 -329.280 -329.282 -329.287 -330.284 -330.279 -359.278 -331.279 -331.285 -330.287 -330.285 -330.280 -280.267 -331.280 -331.248 -331.238 -330.286 -331.286 -331.283 -331.239 -331.278 -331.281 -331.247 -336.280 -194.310 -324.281 -197.284 -194.284 -401.260 -401.261 -402.253 -402.240 -401.262 -402.241 -402.246 -401.263 -402.242 -402.251 -401.264 -402.247 -402.243 -402.252 -402.239 -402.248 -402.244 -402.249 -402.245 -402.254 -402.257 -403.248 -402.250 -402.262 -402.255 -402.258 -402.263 -402.265 -402.256 -402.260 -402.264 -403.264 -403.241 -402.259 -403.246 -403.242 -403.247 -403.245 -403.238 -402.261 -403.243 -403.250 -403.239 -403.258 -403.244 -403.253 -401.258 -403.263 -403.251 -403.249 -403.240 -403.257 -403.252 -404.241 -404.249 -403.259 -401.259 -403.254 -404.263 -404.258 -404.253 -404.242 -403.260 -403.265 -403.255 -404.247 -404.250 -401.265 -404.243 -404.264 -404.246 -403.261 -404.238 -404.240 -403.256 -401.266 -404.251 -404.259 -404.248 -404.239 -404.244 -404.245 -404.254 -403.262 -404.265 -404.252 -405.242 -407.259 -405.247 -405.241 -404.260 -404.255 -405.251 -405.264 -405.238 -405.243 -405.248 -405.252 -404.261 -405.255 -405.239 -405.259 -406.244 -404.256 -405.244 -405.249 -405.253 -406.261 -404.262 -406.238 -405.240 -404.257 -406.254 -405.258 -405.245 -406.243 -405.246 -405.250 -405.256 -405.254 -406.239 -405.260 -406.249 -406.257 -406.245 -406.253 -405.257 -406.263 -406.262 -406.240 -406.250 -405.261 -407.240 -406.255 -406.258 -407.245 -407.250 -406.246 -406.251 -407.239 -406.241 -405.262 -406.260 -406.256 -407.242 -406.259 -407.241 -406.247 -407.261 -405.263 -406.252 -406.242 -406.248 -407.244 -408.243 -407.246 -408.242 -407.251 -406.264 -407.256 -407.254 -407.255 -407.260 -408.238 -407.247 -407.252 -407.264 -407.238 -407.257 -407.262 -408.251 -408.246 -408.239 -408.257 -408.240 -407.248 -407.253 -407.243 -407.258 -407.263 -408.252 -408.247 -408.244 -408.241 -407.249 -408.260 -409.249 -408.250 -408.256 -409.245 -408.263 -408.253 -408.261 -409.242 -409.253 -408.248 -408.258 -408.245 -408.264 -410.248 -410.253 -409.246 -409.250 -408.262 -409.241 -409.243 -408.254 -409.240 -408.249 -409.238 -408.259 -409.259 -409.254 -409.251 -409.248 -409.239 -408.255 -409.244 -409.263 -410.242 -409.247 -410.239 -410.254 -410.238 -409.260 -409.255 -409.252 -410.245 -410.250 -410.257 -410.240 -410.243 -410.261 -409.261 -410.252 -409.256 -410.258 -410.246 -410.251 -411.243 -409.262 -410.241 -410.262 -410.249 -410.256 -409.258 -411.238 -410.244 -409.257 -411.241 -410.247 -411.240 -319.283 -410.259 -411.250 -270.266 -410.255 -411.242 -410.263 -370.274 -410.260 -411.246 -411.247 -411.245 -411.249 -412.241 -411.255 -434.241 -248.308 -194.285 -411.248 -411.239 -411.244 -310.254 -413.243 -412.257 -412.254 -412.252 -412.253 -413.244 -412.256 -413.248 -412.261 -412.262 -195.245 -249.239 -413.238 -412.249 -412.259 -412.250 -337.238 -412.258 -260.273 -418.256 -413.240 -413.242 -412.251 -413.239 -413.245 -264.275 -412.255 -413.249 -413.247 -414.249 -414.247 -412.260 -413.253 -414.242 -413.246 -413.258 -413.250 -413.261 -413.257 -413.241 -413.262 -414.257 -414.243 -413.254 -414.240 -413.256 -413.259 -413.251 -414.253 -414.248 -414.238 -414.239 -414.244 -414.258 -413.255 -414.241 -414.245 -415.249 -413.260 -414.251 -414.252 -413.252 -415.238 -414.254 -414.256 -415.239 -415.242 -414.259 -414.255 -415.252 -414.250 -415.256 -416.242 -415.248 -415.244 -415.240 -416.238 -415.247 -414.260 -415.261 -416.243 -415.250 -415.257 -415.245 -415.260 -415.243 -415.255 -415.241 -414.261 -416.239 -415.253 -415.251 -416.240 -415.246 -416.244 -415.258 -416.248 -416.251 -415.254 -416.261 -416.256 -417.248 -416.245 -415.259 -416.252 -416.253 -417.242 -416.258 -416.249 -416.241 -417.259 -417.243 -417.238 -417.252 -416.246 -416.254 -416.259 -416.257 -416.250 -417.251 -417.241 -417.249 -417.244 -417.250 -417.253 -417.240 -416.247 -417.239 -417.247 -416.260 -416.255 -419.241 -421.244 -417.257 -417.260 -418.251 -417.245 -417.254 -418.239 -418.248 -418.243 -417.258 -418.240 -270.273 -418.245 -417.246 -418.252 -417.255 -418.242 -419.242 -211.279 -418.241 -418.246 -418.249 -419.243 -417.256 -418.259 -418.244 -418.247 -418.253 -418.238 -419.254 -420.242 -419.246 -419.255 -420.238 -419.259 -420.243 -420.240 -419.238 -418.254 -419.247 -419.250 -418.250 -419.244 -420.253 -420.244 -420.248 -420.247 -419.239 -419.252 -419.248 -419.251 -419.245 -420.239 -419.256 -419.258 -419.240 -420.254 -419.253 -420.249 -419.249 -310.282 -420.255 -420.245 -419.257 -421.255 -421.250 -420.258 -420.241 -420.250 -422.238 -420.246 -420.259 -411.256 -421.241 -420.256 -421.243 -420.251 -421.238 -421.240 -421.248 -422.239 -421.246 -418.257 -421.251 -421.256 -421.239 -421.258 -420.252 -420.257 -421.249 -422.240 -421.254 -421.245 -421.242 -421.252 -421.257 -421.247 -412.242 -423.247 -422.254 -424.241 -421.253 -423.243 -423.238 -422.256 -423.248 -423.241 -423.244 -422.252 -424.238 -435.251 -423.249 -422.257 -424.244 -423.252 -423.239 -422.255 -422.253 -423.242 -424.245 -422.258 -426.238 -424.246 -425.247 -424.247 -424.257 -424.239 -423.245 -423.253 -424.252 -423.240 -425.248 -426.240 -424.240 -423.254 -424.243 -423.250 -425.243 -424.256 -424.242 -423.246 -424.248 -423.255 -425.238 -423.257 -424.251 -425.249 -424.250 -423.251 -423.256 -424.253 -425.239 -425.242 -425.244 -426.250 -426.255 -424.249 -425.253 -426.245 -424.254 -425.245 -425.256 -425.240 -425.250 -426.241 -426.251 -426.256 -425.254 -424.255 -425.257 -426.246 -425.246 -427.241 -425.241 -425.251 -426.239 -425.252 -425.255 -426.244 -427.242 -426.252 -426.242 -426.247 -426.257 -426.243 -428.248 -428.249 -427.243 -427.247 -427.253 -428.250 -427.238 -426.253 -426.248 -428.244 -428.240 -428.245 -427.244 -427.246 -428.255 -427.239 -427.251 -427.248 -427.255 -426.254 -426.249 -427.252 -427.250 -427.245 -428.239 -427.240 -428.246 -428.241 -427.249 -428.256 -428.251 -428.238 -427.254 -431.239 -427.256 -429.242 -429.245 -428.247 -429.238 -428.242 -428.252 -429.246 -427.257 -429.249 -429.239 -429.243 -429.255 -428.243 -428.253 -430.241 -429.247 -430.251 -429.240 -429.244 -430.246 -428.254 -429.250 -429.253 -429.254 -429.248 -430.245 -429.241 -430.240 -430.242 -430.252 -429.256 -430.256 -432.247 -430.247 -429.251 -422.249 -430.243 -431.241 -430.253 -431.238 -431.254 -430.238 -431.250 -430.248 -429.252 -431.255 -430.239 -430.244 -431.244 -431.246 -431.242 -430.254 -430.249 -431.243 -432.248 -432.238 -431.253 -431.240 -431.251 -430.255 -430.250 -432.249 -431.249 -432.241 -431.245 -433.247 -433.242 -432.253 -432.252 -433.239 -432.239 -433.253 -431.252 -432.242 -431.247 -433.248 -432.254 -432.243 -433.254 -433.240 -432.240 -432.250 -431.248 -434.246 -432.244 -432.246 -432.255 -433.243 -433.249 -434.238 -433.241 -433.244 -432.251 -433.252 -432.245 -433.238 -435.241 -436.245 -434.254 -434.247 -433.255 -434.242 -437.239 -433.250 -434.252 -434.251 -434.245 -435.242 -433.245 -434.244 -434.240 -435.247 -435.252 -435.239 -434.248 -434.250 -434.243 -435.253 -433.251 -434.253 -435.238 -434.239 -433.246 -435.243 -436.242 -436.238 -435.240 -434.249 -435.244 -373.256 -436.246 -436.251 -435.248 -436.248 -436.243 -436.247 -436.249 -436.239 -435.249 -436.253 -435.245 -436.244 -435.250 -437.238 -437.240 -436.240 -436.250 -435.246 -436.252 -436.241 -255.305 -280.265 -189.290 -260.238 -593.249 -255.299 -347.274 -347.276 -255.306 -290.238 -392.257 -286.239 -392.258 -270.238 -392.259 -260.239 -280.238 -270.239 -350.240 -290.239 -270.240 -320.238 -270.244 -270.241 -243.261 -243.268 -243.263 -243.282 -243.269 -260.248 -260.249 -244.238 -204.281 -204.298 -204.302 -347.278 -204.304 -280.262 -270.264 -270.263 -204.308 -290.262 -194.288 -205.238 -204.309 -270.267 -243.308 -260.268 -260.267 -280.276 -290.283 -260.274 -280.269 -260.278 -244.239 -260.276 -310.283 -270.265 -260.275 -260.279 -280.263 -280.270 -270.272 -260.277 -270.270 -280.268 -290.288 -270.274 -290.282 -270.268 -290.265 -270.271 -280.291 -280.278 -270.297 -270.275 -290.287 -280.290 -290.289 -290.290 -290.297 -290.291 -280.289 -373.266 -290.292 -280.293 -280.292 -290.296 -280.299 -291.238 -260.303 -412.243 -291.239 -260.299 -439.247 -280.300 -260.304 -270.288 -261.238 -244.259 -244.263 -244.260 -260.292 -281.238 -260.298 -244.269 -260.305 -244.282 -271.238 -270.293 -270.295 -261.239 -270.296 -271.239 -270.301 -270.302 -271.240 -261.248 -261.250 -205.281 -281.262 -291.265 -291.278 -411.257 -205.308 -418.258 -281.269 -205.303 -245.238 -291.288 -205.304 -291.282 -244.308 -291.287 -291.283 -245.239 -205.309 -291.291 -271.264 -291.296 -206.238 -281.277 -206.239 -271.266 -291.290 -291.292 -281.268 -261.275 -261.273 -261.267 -261.268 -281.267 -281.278 -281.265 -271.265 -261.274 -271.272 -265.273 -281.266 -291.289 -271.263 -261.278 -261.276 -261.272 -245.258 -291.297 -271.271 -261.279 -292.238 -271.274 -328.287 -281.289 -281.283 -245.282 -261.277 -281.294 -282.238 -281.290 -245.269 -281.291 -281.292 -281.293 -282.239 -281.298 -245.262 -245.263 -245.267 -271.297 -271.296 -272.238 -292.261 -271.302 -261.304 -271.301 -261.299 -262.239 -271.293 -261.303 -261.292 -261.298 -271.295 -261.297 -292.290 -292.282 -272.243 -261.305 -272.239 -262.238 -292.264 -292.278 -245.308 -245.298 -292.288 -245.307 -292.283 -292.287 -246.239 -282.261 -292.295 -206.280 -262.247 -282.264 -292.291 -292.297 -292.292 -293.238 -292.289 -292.296 -282.262 -272.264 -282.266 -272.262 -282.267 -282.268 -194.289 -282.265 -282.269 -272.265 -206.308 -282.276 -206.309 -262.272 -272.263 -272.268 -246.259 -348.239 -207.238 -262.267 -272.271 -246.257 -272.266 -207.239 -272.272 -272.267 -262.268 -282.278 -272.274 -246.258 -282.288 -246.262 -282.293 -272.273 -282.294 -262.273 -282.283 -246.263 -271.267 -262.274 -262.277 -262.275 -282.289 -282.290 -282.291 -310.284 -282.299 -282.292 -246.282 -246.269 -282.298 -262.276 -293.264 -256.260 -283.238 -272.296 -262.299 -283.289 -283.239 -293.283 -293.282 -262.297 -293.288 -293.278 -262.291 -272.293 -272.297 -272.300 -246.308 -293.290 -262.304 -263.238 -412.244 -293.295 -262.298 -247.239 -262.303 -246.307 -272.301 -272.302 -294.238 -443.243 -293.289 -293.291 -263.239 -293.296 -263.246 -263.249 -283.268 -283.265 -283.269 -283.267 -283.266 -247.262 -247.257 -207.280 -283.264 -247.256 -386.271 -207.308 -247.261 -277.276 -294.261 -284.239 -290.278 -273.264 -247.282 -283.278 -273.266 -283.276 -247.266 -208.238 -273.265 -247.263 -247.280 -283.299 -283.292 -263.275 -273.274 -273.268 -273.270 -263.273 -263.274 -283.290 -263.267 -208.239 -283.283 -273.271 -263.276 -283.294 -283.288 -273.272 -294.278 -263.268 -283.293 -273.273 -263.277 -411.258 -263.272 -283.291 -294.288 -294.282 -283.298 -284.238 -294.296 -294.289 -294.290 -294.287 -294.291 -295.238 -294.295 -263.291 -422.241 -263.303 -273.301 -247.307 -248.239 -273.300 -247.308 -273.295 -274.241 -273.287 -263.298 -273.293 -273.296 -273.292 -263.297 -243.259 -264.239 -281.299 -264.238 -263.304 -248.255 -284.265 -295.263 -248.256 -284.267 -311.291 -284.264 -295.278 -284.268 -264.245 -248.263 -295.282 -248.258 -284.266 -248.261 -295.288 -248.262 -284.278 -295.287 -329.281 -274.266 -296.238 -295.296 -208.279 -194.290 -274.267 -248.282 -284.289 -274.265 -295.289 -295.295 -295.290 -248.280 -284.290 -274.271 -274.264 -284.288 -264.273 -296.239 -284.283 -274.268 -295.291 -264.272 -262.266 -285.238 -264.267 -274.273 -264.265 -264.274 -264.266 -284.298 -284.293 -284.291 -349.276 -285.239 -274.276 -284.292 -274.270 -264.268 -284.297 -248.307 -264.271 -209.238 -274.272 -208.308 -209.239 -284.299 -264.277 -448.240 -412.245 -248.306 -264.276 -274.286 -249.238 -274.293 -264.298 -296.262 -389.260 -274.291 -296.261 -296.282 -296.278 -274.296 -274.292 -274.295 -296.287 -296.288 -264.297 -274.300 -274.301 -296.289 -264.296 -249.255 -249.262 -265.239 -297.239 -297.238 -249.260 -264.303 -264.299 -296.294 -285.265 -285.264 -265.238 -249.257 -249.263 -285.266 -296.290 -296.291 -264.304 -249.261 -296.296 -296.295 -249.268 -265.244 -285.267 -285.268 -249.269 -249.279 -265.248 -285.278 -209.279 -249.280 -285.290 -297.261 -285.282 -285.297 -285.288 -275.267 -285.289 -285.293 -285.283 -209.296 -285.292 -275.264 -275.266 -265.268 -275.265 -285.291 -370.271 -275.268 -439.245 -265.267 -347.282 -275.270 -271.270 -253.280 -253.269 -275.271 -277.267 -285.298 -277.268 -265.274 -265.266 -253.277 -253.282 -275.272 -347.277 -277.266 -347.279 -286.238 -370.267 -265.271 -370.273 -370.270 -265.275 -209.308 -386.260 -277.270 -386.270 -337.246 -210.238 -386.264 -386.261 -265.276 -376.267 -439.249 -439.243 -370.272 -386.268 -439.242 -347.280 -348.240 -439.244 -348.243 -253.278 -371.253 -277.271 -387.247 -265.272 -386.269 -370.275 -347.281 -348.241 -411.259 -440.239 -371.250 -439.248 -387.248 -439.246 -348.242 -348.277 -371.251 -439.250 -387.249 -210.239 -371.257 -371.256 -387.254 -371.252 -439.251 -387.255 -348.278 -387.250 -387.256 -440.241 -348.276 -371.258 -439.252 -348.244 -440.240 -277.292 -440.242 -387.257 -371.259 -387.251 -583.252 -277.285 -387.252 -440.243 -253.305 -348.245 -348.279 -440.238 -253.306 -277.290 -254.239 -348.275 -348.274 -371.254 -387.259 -277.291 -387.253 -371.255 -277.293 -277.295 -371.265 -299.260 -299.261 -277.299 -277.300 -387.258 -348.280 -254.238 -299.278 -440.244 -371.266 -265.290 -349.239 -348.282 -348.281 -266.238 -278.239 -371.271 -371.269 -371.267 -440.245 -299.281 -371.270 -387.264 -387.260 -349.240 -387.261 -440.248 -371.275 -440.246 -265.296 -371.274 -388.248 -440.247 -371.272 -440.249 -372.249 -265.297 -387.271 -387.268 -299.293 -349.244 -387.270 -266.239 -299.290 -387.269 -388.247 -441.239 -440.252 -349.274 -440.250 -265.298 -349.245 -299.286 -441.238 -441.240 -584.252 -299.287 -372.251 -349.241 -388.249 -265.302 -372.250 -299.294 -349.242 -371.273 -265.303 -388.255 -299.289 -349.243 -440.251 -372.253 -265.304 -388.250 -299.288 -441.248 -441.241 -299.295 -441.242 -349.275 -372.252 -388.258 -293.287 -388.251 -441.243 -254.259 -311.238 -349.277 -349.280 -350.239 -441.249 -254.254 -254.260 -349.278 -388.252 -349.281 -350.242 -349.279 -266.244 -327.248 -372.254 -441.244 -372.255 -372.256 -328.239 -441.250 -388.253 -372.267 -388.254 -266.247 -313.290 -372.265 -441.245 -350.241 -441.247 -388.259 -441.246 -372.257 -350.243 -314.238 -372.266 -372.258 -254.261 -388.261 -332.238 -349.282 -331.287 -388.256 -388.260 -441.251 -442.239 -388.263 -388.257 -372.259 -442.241 -350.244 -422.243 -350.274 -372.269 -442.238 -372.270 -210.279 -372.271 -350.280 -442.240 -388.268 -332.239 -254.269 -278.267 -350.275 -373.250 -210.278 -351.239 -372.272 -442.248 -389.250 -278.269 -389.249 -278.268 -388.269 -350.276 -278.263 -254.277 -442.242 -442.247 -372.273 -373.252 -373.251 -388.270 -254.276 -350.277 -254.279 -350.281 -442.245 -389.251 -278.265 -372.274 -278.271 -442.243 -442.249 -372.275 -278.270 -332.247 -278.266 -254.278 -389.246 -332.277 -442.244 -389.248 -442.251 -254.268 -332.248 -373.257 -389.247 -266.275 -350.279 -443.240 -586.251 -373.258 -442.246 -351.240 -373.249 -254.280 -266.264 -351.242 -266.272 -373.253 -351.241 -278.276 -373.255 -389.252 -373.254 -332.279 -331.282 -389.254 -389.263 -442.250 -389.253 -351.244 -332.278 -443.238 -254.282 -351.280 -351.274 -351.243 -443.239 -266.265 -389.261 -211.238 -278.278 -373.272 -443.247 -332.283 -332.284 -373.270 -332.280 -389.256 -389.255 -351.281 -266.273 -389.259 -351.275 -351.278 -587.251 -266.266 -332.286 -373.259 -373.271 -443.241 -443.245 -443.244 -389.257 -352.240 -266.270 -389.268 -332.281 -390.250 -333.238 -443.246 -443.242 -352.276 -350.278 -389.269 -262.278 -351.279 -352.241 -266.271 -373.265 -352.277 -266.268 -266.274 -373.269 -389.258 -332.285 -210.307 -278.295 -373.273 -278.290 -389.270 -333.239 -352.279 -266.276 -278.292 -443.248 -352.242 -278.291 -278.293 -373.274 -352.274 -390.246 -352.243 -374.250 -254.295 -443.249 -333.247 -374.249 -278.300 -352.275 -390.248 -278.299 -390.247 -374.256 -443.251 -374.251 -352.280 -374.255 -443.250 -444.238 -374.252 -352.281 -390.249 -374.257 -445.245 -352.278 -333.278 -444.239 -374.253 -374.258 -444.242 -374.254 -390.253 -255.239 -254.306 -353.241 -254.305 -390.255 -255.238 -333.279 -390.251 -444.240 -390.254 -390.257 -390.256 -390.252 -333.283 -444.243 -411.260 -444.241 -444.244 -353.242 -444.245 -374.259 -333.280 -374.264 -353.243 -266.298 -444.246 -374.265 -390.258 -445.241 -444.247 -333.281 -266.302 -333.282 -333.285 -266.303 -353.274 -353.273 -353.276 -333.284 -266.304 -266.290 -374.267 -374.266 -374.270 -354.239 -353.275 -390.259 -390.260 -390.268 -353.280 -374.269 -266.296 -390.261 -444.248 -445.238 -444.249 -353.279 -390.263 -445.239 -333.286 -353.281 -334.238 -444.250 -353.277 -375.249 -353.278 -267.238 -391.245 -374.271 -374.272 -374.274 -445.240 -390.269 -374.273 -391.249 -255.251 -354.273 -266.297 -354.240 -375.248 -391.248 -267.239 -391.246 -375.250 -445.244 -391.247 -354.241 -445.242 -445.243 -267.247 -375.251 -590.250 -391.250 -354.242 -255.259 -446.238 -391.251 -334.279 -375.252 -446.239 -255.260 -375.259 -445.246 -375.253 -375.258 -391.257 -391.252 -255.261 -267.243 -445.247 -334.247 -354.278 -446.240 -354.259 -255.269 -375.264 -279.265 -267.246 -354.274 -375.254 -334.277 -334.276 -391.258 -279.263 -375.255 -391.253 -334.278 -354.275 -446.246 -354.276 -279.266 -279.269 -391.254 -445.248 -279.267 -375.256 -334.280 -354.277 -446.241 -375.257 -334.283 -279.276 -445.249 -391.255 -211.278 -391.256 -255.276 -354.279 -591.250 -334.281 -279.268 -375.265 -392.244 -354.280 -355.240 -334.282 -279.270 -391.259 -375.266 -375.268 -334.284 -355.239 -391.260 -255.277 -391.261 -375.269 -375.267 -355.241 -446.242 -376.248 -446.243 -391.263 -391.262 -375.270 -391.269 -355.274 -446.245 -446.244 -391.267 -446.249 -334.285 -447.238 -211.295 -355.276 -267.274 -255.278 -355.242 -375.272 -446.247 -255.279 -375.274 -355.259 -392.247 -392.246 -255.280 -447.240 -375.271 -376.249 -392.245 -279.278 -255.282 -447.239 -391.268 -376.250 -335.238 -334.286 -392.248 -446.248 -355.273 -355.272 -447.241 -279.293 -375.273 -278.264 -355.275 -256.239 -355.277 -279.289 -279.284 -376.251 -336.238 -279.290 -392.249 -356.277 -279.291 -267.264 -355.278 -447.242 -267.265 -376.252 -355.279 -279.292 -335.286 -355.280 -392.250 -335.247 -376.253 -356.276 -335.276 -356.239 -447.243 -376.254 -392.251 -448.244 -356.240 -376.270 -376.255 -392.252 -447.244 -356.278 -356.241 -376.271 -392.253 -447.245 -376.269 -376.256 -377.248 -447.246 -356.279 -392.254 -392.263 -448.245 -335.285 -392.262 -447.247 -392.267 -392.265 -335.284 -448.247 -448.246 -376.272 -267.276 -267.275 -376.273 -356.275 -356.280 -357.239 -377.252 -376.268 -392.268 -392.269 -448.248 -376.274 -357.273 -357.275 -449.238 -357.274 -357.240 -449.246 -594.249 -393.250 -357.276 -377.253 -393.244 -357.258 -449.247 -449.239 -357.241 -357.277 -377.249 -357.259 -393.251 -393.245 -377.254 -256.251 -393.247 -377.250 -336.279 -336.246 -393.246 -377.255 -449.242 -267.296 -449.241 -357.272 -336.281 -377.251 -377.256 -393.252 -267.297 -449.243 -393.254 -393.248 -256.259 -268.239 -336.277 -393.249 -393.253 -449.244 -267.303 -336.276 -358.241 -449.245 -267.298 -449.248 -336.282 -357.278 -450.238 -271.275 -357.279 -377.257 -268.242 -377.258 -393.255 -267.302 -358.272 -336.283 -393.256 -450.239 -286.278 -358.239 -596.238 -358.240 -450.240 -450.246 -377.259 -393.262 -268.243 -377.261 -268.238 -393.257 -256.276 -286.264 -377.264 -450.241 -393.263 -358.258 -256.277 -393.258 -336.284 -377.269 -377.266 -450.247 -393.259 -336.285 -358.271 -393.265 -286.265 -393.260 -450.242 -377.270 -286.266 -451.238 -337.239 -393.261 -358.273 -450.244 -358.257 -256.278 -358.259 -233.289 -286.267 -450.245 -358.274 -377.271 -377.265 -248.269 -377.267 -256.279 -393.267 -256.268 -286.287 -450.243 -337.277 -359.239 -377.268 -378.253 -451.239 -358.276 -358.275 -394.249 -286.282 -377.272 -378.252 -286.283 -337.275 -394.243 -393.268 -249.306 -337.276 -286.293 -358.277 -451.240 -394.244 -337.282 -358.278 -452.238 -377.273 -451.241 -394.250 -378.248 -451.247 -394.245 -597.238 -337.283 -286.297 -286.288 -359.258 -394.246 -359.257 -451.242 -358.279 -249.307 -249.282 -286.289 -451.243 -378.255 -378.249 -451.244 -337.278 -286.298 -359.259 -394.251 -394.247 -250.238 -378.254 -452.239 -250.239 -451.245 -337.284 -378.250 -394.252 -249.297 -286.291 -286.290 -378.251 -452.240 -337.280 -337.279 -256.305 -286.292 -452.245 -394.248 -378.256 -359.256 -359.240 -394.253 -337.281 -451.246 -359.271 -287.238 -597.248 -394.260 -287.239 -337.285 -359.272 -394.254 -338.239 -338.238 -256.294 -378.257 -452.241 -359.274 -359.273 -256.299 -598.238 -394.255 -378.259 -378.258 -338.245 -338.275 -452.242 -394.257 -394.256 -268.267 -246.280 -378.267 -452.244 -394.261 -452.243 -453.238 -359.275 -378.269 -360.257 -394.262 -378.261 -256.304 -453.239 -378.268 -338.276 -359.276 -378.266 -394.267 -394.258 -268.264 -268.268 -256.306 -453.240 -378.264 -360.258 -452.246 -453.241 -257.238 -394.263 -394.259 -257.239 -378.270 -268.265 -452.247 -360.259 -268.266 -338.277 -359.279 -359.277 -379.251 -394.265 -360.239 -268.270 -395.243 -378.265 -394.268 -250.260 -454.243 -360.240 -453.242 -378.271 -268.271 -453.243 -394.266 -338.278 -268.272 -598.248 -360.271 -268.273 -339.239 -338.279 -268.274 -453.244 -378.272 -250.254 -360.272 -599.238 -338.280 -378.273 -338.281 -453.245 -268.275 -379.254 -250.257 -379.253 -360.273 -360.274 -395.242 -360.279 -361.239 -379.248 -379.249 -453.246 -338.283 -395.244 -360.275 -454.238 -361.258 -454.239 -360.276 -395.247 -379.255 -361.255 -454.240 -379.250 -454.244 -257.250 -395.248 -250.261 -454.242 -338.284 -395.249 -257.259 -395.245 -257.252 -379.252 -250.262 -395.250 -379.257 -395.246 -361.256 -360.278 -360.277 -338.285 -379.256 -454.241 -250.269 -379.258 -250.263 -339.238 -395.257 -395.251 -600.238 -250.268 -361.274 -361.257 -454.245 -268.289 -395.252 -379.259 -339.277 -454.246 -395.253 -395.258 -268.295 -455.238 -250.278 -287.278 -600.247 -395.259 -395.260 -257.260 -455.239 -379.268 -250.279 -287.264 -455.244 -268.296 -339.245 -379.260 -361.275 -339.275 -257.268 -361.259 -601.238 -455.245 -250.280 -361.270 -395.254 -339.278 -361.271 -268.297 -379.261 -287.282 -287.265 -257.274 -379.264 -379.269 -455.240 -361.272 -361.276 -395.255 -339.279 -339.280 -339.276 -268.298 -395.256 -395.261 -379.265 -257.275 -455.241 -380.249 -379.267 -455.243 -361.273 -395.266 -455.242 -456.240 -379.266 -456.241 -287.266 -339.282 -339.281 -361.277 -379.270 -456.238 -287.283 -268.301 -361.278 -379.271 -395.262 -268.302 -379.272 -456.239 -395.263 -362.254 -287.287 -395.264 -380.253 -362.255 -457.238 -339.283 -257.276 -396.247 -379.273 -396.245 -362.256 -268.303 -269.245 -257.277 -380.252 -380.248 -287.288 -380.259 -257.278 -456.242 -269.238 -250.306 -395.267 -339.284 -396.246 -287.293 -601.247 -269.239 -362.257 -456.243 -250.307 -257.279 -287.290 -362.272 -287.289 -251.238 -456.244 -457.241 -269.241 -602.238 -340.239 -457.240 -340.238 -287.292 -362.271 -396.242 -257.280 -287.291 -287.298 -362.258 -287.297 -396.243 -380.254 -257.281 -362.259 -288.238 -380.250 -396.248 -456.245 -269.242 -380.251 -396.250 -362.270 -251.239 -396.244 -457.239 -457.242 -288.239 -362.273 -340.245 -340.274 -380.255 -362.274 -380.256 -396.249 -362.275 -340.282 -380.257 -340.275 -457.243 -380.258 -340.276 -362.276 -396.252 -362.278 -396.251 -362.277 -458.243 -458.238 -380.260 -457.244 -340.277 -458.239 -396.257 -396.254 -396.253 -340.278 -341.238 -363.257 -458.241 -458.244 -458.240 -363.254 -380.269 -380.268 -340.283 -363.270 -363.259 -380.261 -396.258 -459.238 -257.299 -396.255 -396.259 -396.260 -340.280 -380.266 -340.281 -340.284 -363.255 -341.239 -458.242 -396.261 -363.256 -257.304 -363.258 -459.239 -380.264 -459.240 -603.238 -257.293 -380.265 -269.263 -381.249 -396.256 -257.294 -459.241 -380.270 -257.305 -269.268 -396.262 -460.243 -257.306 -396.263 -251.253 -397.244 -258.238 -341.276 -363.271 -363.272 -459.242 -251.256 -380.271 -380.272 -258.239 -396.264 -380.273 -364.253 -459.243 -396.266 -341.244 -269.264 -269.270 -363.273 -460.238 -363.274 -381.253 -460.242 -341.277 -381.248 -363.275 -397.245 -341.274 -381.254 -396.267 -604.238 -251.262 -381.255 -363.277 -341.245 -397.246 -364.254 -460.239 -269.265 -397.241 -341.278 -381.251 -363.276 -251.263 -341.279 -251.264 -460.240 -381.257 -381.252 -381.250 -269.267 -364.255 -341.275 -461.238 -397.243 -397.242 -251.259 -363.278 -461.239 -341.282 -269.266 -364.257 -381.256 -460.241 -288.263 -251.260 -342.238 -251.261 -341.281 -397.247 -364.256 -397.248 -269.271 -381.258 -269.272 -461.241 -461.240 -397.249 -288.264 -364.273 -461.242 -341.280 -463.238 -604.246 -397.256 -269.273 -364.258 -258.250 -462.242 -464.240 -381.259 -269.274 -251.279 -381.260 -269.275 -381.269 -251.268 -397.250 -288.265 -251.280 -288.266 -364.274 -397.251 -397.257 -462.238 -258.259 -341.283 -251.282 -462.239 -288.278 -288.282 -463.240 -364.270 -364.275 -251.269 -463.239 -364.259 -251.283 -341.284 -288.283 -381.264 -381.270 -606.238 -381.261 -342.239 -397.254 -381.265 -397.252 -382.248 -364.271 -364.277 -364.272 -342.277 -251.278 -288.287 -397.258 -397.253 -462.240 -381.268 -342.244 -381.266 -462.241 -397.255 -463.241 -364.276 -288.289 -288.288 -258.260 -381.271 -342.274 -382.253 -342.245 -381.272 -397.259 -365.253 -258.268 -288.290 -365.252 -463.242 -397.260 -382.249 -288.291 -397.261 -365.258 -382.255 -397.263 -397.262 -342.275 -269.297 -365.254 -288.292 -465.240 -365.270 -464.238 -464.239 -465.239 -382.250 -398.241 -342.276 -269.301 -288.293 -342.281 -289.238 -397.264 -365.259 -365.255 -398.243 -607.238 -464.241 -382.251 -398.242 -382.254 -342.278 -466.238 -342.282 -397.265 -342.283 -269.288 -289.239 -258.274 -365.256 -397.266 -465.241 -365.271 -269.293 -365.272 -269.295 -465.238 -398.244 -365.257 -269.296 -382.256 -288.296 -382.257 -288.297 -258.275 -288.298 -269.302 -382.252 -398.246 -342.279 -272.292 -382.265 -342.280 -343.277 -397.267 -269.303 -466.239 -398.245 -251.306 -251.296 -342.284 -258.279 -466.240 -258.277 -365.273 -251.307 -273.267 -343.238 -382.258 -382.269 -258.280 -382.268 -365.274 -382.259 -252.238 -343.274 -275.276 -382.270 -382.260 -343.239 -365.276 -398.247 -343.245 -365.275 -398.248 -382.264 -467.238 -398.253 -382.261 -467.239 -398.250 -607.245 -343.275 -398.249 -365.277 -398.254 -608.238 -468.238 -571.250 -366.252 -366.256 -467.240 -252.239 -468.239 -366.253 -382.272 -382.266 -366.257 -398.255 -398.251 -382.271 -398.252 -570.251 -568.253 -398.257 -383.254 -398.256 -343.276 -343.243 -343.244 -608.245 -366.254 -366.255 -275.292 -258.304 -366.258 -571.251 -609.238 -366.276 -275.296 -383.248 -252.253 -366.259 -258.299 -398.258 -610.238 -398.266 -383.249 -275.286 -383.256 -571.252 -398.259 -275.300 -275.291 -275.301 -343.278 -258.305 -571.253 -366.270 -259.239 -343.279 -343.280 -398.267 -366.271 -366.272 -573.248 -259.238 -258.293 -366.273 -344.239 -383.250 -573.251 -383.251 -344.238 -275.293 -276.240 -383.252 -367.252 -398.260 -343.281 -366.277 -398.261 -383.253 -258.298 -252.259 -367.254 -572.250 -366.274 -398.262 -275.295 -383.257 -367.253 -343.282 -572.251 -573.250 -366.275 -344.242 -367.257 -572.253 -344.243 -398.263 -399.243 -383.255 -343.283 -367.270 -574.249 -398.265 -383.258 -399.240 -367.255 -383.259 -399.241 -289.265 -383.260 -399.242 -573.253 -574.248 -383.272 -289.278 -367.256 -344.244 -252.260 -575.248 -252.261 -344.277 -383.261 -611.238 -574.253 -344.278 -399.244 -252.262 -383.264 -575.249 -252.263 -252.269 -367.272 -344.279 -383.265 -344.245 -399.251 -289.287 -399.245 -611.244 -367.258 -252.268 -344.275 -367.273 -574.251 -344.274 -252.277 -384.249 -367.259 -259.249 -252.278 -384.248 -367.267 -383.268 -259.251 -289.282 -289.288 -383.270 -612.238 -383.269 -399.252 -399.246 -289.289 -344.276 -383.271 -289.290 -399.248 -399.247 -399.258 -367.271 -576.247 -252.282 -399.249 -384.254 -289.283 -289.291 -399.250 -344.280 -344.281 -252.279 -289.292 -367.274 -344.282 -367.275 -289.296 -252.280 -399.259 -384.250 -368.251 -367.276 -344.283 -399.261 -399.253 -384.252 -345.238 -368.252 -384.251 -575.253 -399.255 -399.254 -384.253 -368.253 -384.258 -368.259 -576.246 -289.297 -384.257 -399.256 -384.259 -399.257 -345.239 -345.244 -576.248 -252.283 -297.287 -368.254 -399.260 -399.262 -384.255 -399.263 -577.246 -576.253 -613.238 -345.245 -297.262 -297.278 -577.247 -345.274 -384.260 -368.256 -276.264 -368.267 -345.243 -614.238 -384.261 -368.255 -368.270 -345.242 -368.257 -384.271 -368.271 -384.256 -368.275 -368.258 -437.246 -368.272 -399.265 -297.288 -384.264 -276.265 -577.248 -345.275 -276.266 -399.266 -297.289 -297.290 -345.276 -252.307 -384.265 -345.277 -276.267 -437.243 -422.242 -368.273 -297.294 -384.268 -346.238 -297.295 -422.244 -368.274 -276.268 -385.249 -345.278 -422.245 -384.269 -298.238 -259.268 -437.244 -422.248 -345.279 -614.243 -384.270 -276.270 -345.283 -368.276 -385.250 -259.274 -577.253 -298.239 -346.239 -615.238 -259.280 -253.238 -259.275 -615.243 -345.280 -369.254 -252.296 -369.253 -276.271 -437.241 -437.245 -252.305 -385.251 -345.281 -259.276 -252.306 -616.238 -437.242 -369.255 -259.277 -385.259 -369.251 -385.252 -276.272 -345.282 -259.278 -578.246 -346.281 -276.276 -385.248 -346.240 -369.252 -259.279 -346.244 -578.253 -437.247 -369.256 -253.239 -346.241 -385.253 -276.292 -369.257 -437.248 -385.254 -385.255 -385.261 -438.239 -437.249 -346.243 -346.242 -369.259 -385.260 -369.258 -617.238 -276.293 -369.266 -438.240 -385.256 -346.245 -346.277 -437.251 -346.274 -259.293 -437.250 -385.257 -437.252 -369.273 -369.267 -276.295 -259.298 -579.244 -385.258 -276.296 -346.278 -579.245 -346.279 -437.253 -346.280 -346.275 -438.238 -385.265 -579.246 -369.272 -618.238 -438.241 -369.270 -385.264 -253.252 -347.240 -369.271 -580.245 -346.276 -253.255 -617.242 -385.269 -369.275 -276.291 -369.274 -276.300 -259.299 -370.251 -438.242 -370.250 -276.301 -385.268 -438.243 -618.242 -298.281 -370.252 -438.244 -619.238 -620.238 -385.270 -346.282 -579.253 -259.304 -386.252 -259.305 -298.287 -438.245 -370.253 -347.242 -253.263 -438.246 -370.254 -347.243 -582.243 -298.260 -438.251 -298.261 -347.244 -580.244 -385.271 -370.259 -347.239 -346.283 -386.253 -298.278 -370.256 -211.306 -386.254 -347.238 -386.249 -438.252 -253.259 -298.288 -370.255 -370.257 -438.248 -347.245 -386.248 -620.241 -253.261 -438.253 -386.250 -298.294 -438.249 -298.289 -621.238 -438.247 -299.238 -298.295 -347.241 -386.251 -267.267 -386.255 -370.258 -438.250 -347.275 -386.256 -370.266 -386.258 -439.238 -256.238 -335.281 -373.267 -439.240 -439.239 -299.239 -581.244 -580.253 -621.241 -277.263 -335.279 -622.238 -376.259 -447.248 -277.264 -622.241 -250.282 -333.277 -376.257 -212.238 -623.238 -211.307 -376.264 -624.238 -356.259 -279.295 -265.265 -376.258 -448.243 -356.272 -376.265 -267.270 -338.282 -267.268 -629.238 -253.260 -360.256 -267.266 -448.238 -267.271 -448.242 -335.278 -335.280 -630.238 -392.261 -448.241 -267.273 -335.277 -267.272 -448.239 -339.285 -256.280 -277.265 -439.241 -356.242 -356.273 -258.276 -298.290 -356.274 -386.259 -335.282 -258.278 -392.260 -000.254 -376.266 -318.285 -000.255 -386.257 -001.254 -356.258 -001.255 -002.254 -002.255 -003.254 -003.255 -004.254 -004.255 -005.254 -005.255 -006.254 -006.255 -007.254 -007.255 -008.254 -008.255 -009.254 -009.255 -010.254 -010.255 -011.254 -011.255 -012.254 -012.255 -013.254 -013.255 -014.254 -014.255 -015.254 -015.255 -016.254 -016.255 -017.254 -017.255 -018.254 -018.255 -019.254 -019.255 -020.254 -020.255 -021.254 -021.255 -022.254 -022.255 -023.254 -023.255 -024.254 -024.255 -025.254 -025.255 -026.254 -026.255 -027.254 -027.255 -028.254 -028.255 -029.254 -029.255 -030.254 -030.255 -031.254 -031.255 -032.254 -090.302 -091.301 -091.302 -092.301 -092.302 -093.300 -093.301 -094.300 -094.301 -095.300 -124.299 -125.299 -126.299 -127.299 -129.299 -130.299 -131.299 -132.299 -133.299 -134.299 -135.299 -136.299 -137.299 -139.298 -141.297 -180.291 -181.291 -182.291 -183.291 -237.265 -238.264 -238.265 -239.264 -239.265 -240.264 -241.264 -249.265 -281.270 -282.270 -283.270 -284.269 -284.270 -285.269 -285.270 -286.268 -286.269 -286.270 -287.267 -287.268 -287.269 -287.270 -288.267 -288.268 -288.269 -288.270 -289.266 -289.267 -289.268 -289.269 -289.270 -290.266 -290.267 -290.268 -290.269 -290.270 -291.266 -291.267 -291.268 -291.269 -291.270 -292.266 -292.267 -292.268 -292.269 -292.270 -293.266 -293.267 -293.268 -293.269 -293.270 -294.266 -294.267 -294.268 -294.269 -294.270 -295.266 -295.267 -295.268 -295.269 -296.266 -296.267 -296.268 -296.269 -297.266 -297.267 -297.268 -298.266 -298.267 -298.268 -299.266 -299.267 -299.268 -300.266 -300.267 -301.266 -302.266 -308.269 -309.269 -310.255 -310.268 -310.269 -311.254 -311.255 -311.268 -311.269 -312.254 -312.255 -312.267 -312.268 -312.269 -313.253 -313.254 -313.255 -313.267 -313.268 -313.269 -314.252 -314.253 -314.254 -314.255 -314.266 -314.267 -314.268 -314.269 -315.252 -315.253 -315.254 -315.255 -315.266 -315.267 -315.268 -315.269 -316.252 -316.253 -316.254 -316.255 -316.266 -316.267 -316.268 -316.269 -317.251 -317.252 -317.253 -317.254 -317.255 -317.265 -317.266 -317.267 -317.268 -317.269 -318.251 -318.252 -318.253 -318.254 -318.255 -318.265 -318.266 -318.267 -318.268 -318.269 -318.271 -319.250 -319.251 -319.252 -319.253 -319.254 -319.255 -319.264 -319.265 -319.266 -319.267 -319.268 -319.269 -319.271 -320.250 -320.251 -320.252 -320.253 -320.254 -320.255 -320.264 -320.265 -320.266 -320.267 -320.268 -320.269 -320.270 -320.271 -321.249 -321.250 -321.251 -321.252 -321.253 -321.254 -321.255 -321.263 -321.264 -321.265 -321.266 -321.267 -321.268 -321.269 -321.270 -321.271 -322.249 -322.250 -322.251 -322.252 -322.253 -322.254 -322.263 -322.264 -322.265 -322.266 -322.267 -322.268 -322.269 -322.270 -322.271 -323.249 -323.250 -323.251 -323.252 -323.253 -323.254 -323.261 -323.262 -323.263 -323.264 -323.265 -323.266 -323.267 -323.268 -323.269 -323.270 -323.271 -324.249 -324.250 -324.251 -324.252 -324.253 -324.261 -324.262 -324.263 -324.264 -324.265 -324.266 -324.267 -324.268 -324.269 -324.270 -324.271 -325.249 -325.250 -325.251 -325.252 -325.253 -325.260 -325.261 -325.262 -325.263 -325.264 -325.265 -325.266 -325.267 -325.268 -325.269 -325.270 -325.271 -326.249 -326.250 -326.251 -326.252 -326.260 -326.261 -326.262 -326.263 -326.264 -326.265 -326.266 -326.267 -326.268 -326.269 -326.270 -326.271 -327.249 -327.250 -327.251 -327.252 -327.259 -327.260 -327.261 -327.262 -327.263 -327.264 -327.265 -327.266 -327.267 -327.268 -327.269 -327.270 -327.271 -328.249 -328.250 -328.251 -328.259 -328.260 -328.261 -328.262 -328.263 -328.264 -328.265 -328.266 -328.267 -328.268 -328.269 -328.270 -328.271 -329.249 -329.250 -329.251 -329.258 -329.259 -329.260 -329.261 -329.262 -329.263 -329.264 -329.265 -329.266 -329.267 -329.268 -329.269 -329.270 -329.271 -330.249 -330.250 -330.258 -330.259 -330.260 -330.261 -330.262 -330.263 -330.264 -330.265 -330.266 -330.267 -330.268 -330.269 -330.270 -330.271 -331.249 -331.250 -331.258 -331.259 -331.260 -331.261 -331.262 -331.263 -331.264 -331.265 -331.266 -331.267 -331.268 -331.269 -331.270 -332.249 -332.258 -332.259 -332.260 -332.261 -332.262 -332.263 -332.264 -332.265 -332.266 -332.267 -332.268 -332.269 -332.270 -333.248 -333.249 -333.258 -333.259 -333.260 -333.261 -333.262 -333.263 -333.264 -333.265 -333.266 -333.267 -333.268 -333.269 -333.270 -334.248 -334.258 -334.259 -334.260 -334.261 -334.262 -334.263 -334.264 -334.265 -334.266 -334.267 -334.268 -334.269 -334.270 -335.258 -335.259 -335.260 -335.261 -335.262 -335.263 -335.264 -335.265 -335.266 -335.267 -335.268 -335.269 -336.247 -336.258 -336.259 -336.260 -336.261 -336.262 -336.263 -336.264 -336.265 -336.266 -336.267 -336.268 -336.269 -336.275 -337.258 -337.259 -337.260 -337.261 -337.262 -337.263 -337.264 -337.265 -337.266 -337.267 -337.268 -337.269 -338.258 -338.259 -338.260 -338.261 -338.262 -338.263 -338.264 -338.265 -338.266 -338.267 -338.268 -338.274 -339.258 -339.259 -339.260 -339.261 -339.262 -339.263 -339.264 -339.265 -339.266 -339.267 -339.268 -339.274 -340.258 -340.259 -340.260 -340.261 -340.262 -340.263 -340.264 -340.265 -340.266 -340.267 -340.268 -340.273 -341.258 -341.259 -341.260 -341.261 -341.262 -341.263 -341.264 -341.265 -341.266 -341.267 -341.268 -341.273 -342.258 -342.259 -342.260 -342.261 -342.262 -342.263 -342.264 -342.265 -342.266 -342.267 -342.268 -342.272 -342.273 -343.258 -343.259 -343.260 -343.261 -343.262 -343.263 -343.264 -343.265 -343.266 -343.267 -343.268 -343.272 -343.273 -344.258 -344.259 -344.260 -344.261 -344.262 -344.263 -344.264 -344.265 -344.266 -344.267 -344.268 -344.271 -344.272 -344.273 -345.258 -345.259 -345.260 -345.261 -345.262 -345.263 -345.264 -345.265 -345.266 -345.267 -345.268 -345.271 -345.272 -345.273 -346.258 -346.259 -346.260 -346.261 -346.262 -346.263 -346.264 -346.265 -346.266 -346.267 -346.268 -346.271 -346.272 -346.273 -347.258 -347.259 -347.260 -347.261 -347.262 -347.263 -347.264 -347.265 -347.266 -347.267 -347.268 -347.270 -347.271 -347.272 -347.273 -348.258 -348.259 -348.260 -348.261 -348.262 -348.263 -348.264 -348.265 -348.266 -348.267 -348.268 -348.270 -348.271 -348.272 -348.273 -349.258 -349.259 -349.260 -349.261 -349.262 -349.263 -349.264 -349.265 -349.266 -349.267 -349.268 -349.269 -349.270 -349.271 -349.272 -349.273 -350.258 -350.259 -350.260 -350.261 -350.262 -350.263 -350.264 -350.265 -350.266 -350.267 -350.268 -350.269 -350.270 -350.271 -350.272 -350.273 -351.258 -351.259 -351.260 -351.261 -351.262 -351.263 -351.264 -351.265 -351.266 -351.267 -351.268 -351.269 -351.270 -351.271 -351.272 -351.273 -352.239 -352.258 -352.259 -352.260 -352.261 -352.262 -352.263 -352.264 -352.265 -352.266 -352.267 -352.268 -352.269 -352.270 -352.271 -352.272 -352.273 -353.258 -353.259 -353.260 -353.261 -353.262 -353.263 -353.264 -353.265 -353.266 -353.267 -353.268 -353.269 -353.270 -353.271 -353.272 -354.258 -354.260 -354.261 -354.262 -354.263 -354.264 -354.265 -354.266 -354.267 -354.268 -354.269 -354.270 -354.271 -354.272 -355.258 -355.260 -355.261 -355.262 -355.263 -355.264 -355.265 -355.266 -355.267 -355.268 -355.269 -355.270 -355.271 -356.260 -356.261 -356.262 -356.263 -356.264 -356.265 -356.266 -356.267 -356.268 -356.269 -356.270 -356.271 -357.260 -357.261 -357.262 -357.263 -357.264 -357.265 -357.266 -357.267 -357.268 -357.269 -357.270 -357.271 -358.260 -358.261 -358.262 -358.263 -358.264 -358.265 -358.266 -358.267 -358.268 -358.269 -358.270 -359.260 -359.261 -359.262 -359.263 -359.264 -359.265 -359.266 -359.267 -359.268 -359.269 -359.270 -360.260 -360.261 -360.262 -360.263 -360.264 -360.265 -360.266 -360.267 -360.268 -360.269 -360.270 -361.260 -361.261 -361.262 -361.263 -361.264 -361.265 -361.266 -361.267 -361.268 -361.269 -362.260 -362.261 -362.262 -362.263 -362.264 -362.265 -362.266 -362.267 -362.268 -362.269 -363.260 -363.261 -363.262 -363.263 -363.264 -363.265 -363.266 -363.267 -363.268 -363.269 -364.260 -364.261 -364.262 -364.263 -364.264 -364.265 -364.266 -364.267 -364.268 -364.269 -365.260 -365.261 -365.262 -365.263 -365.264 -365.265 -365.266 -365.267 -365.268 -365.269 -366.260 -366.261 -366.262 -366.263 -366.264 -366.265 -366.266 -366.267 -366.268 -366.269 -367.260 -367.261 -367.262 -367.263 -367.264 -367.265 -367.266 -367.268 -367.269 -368.260 -368.261 -368.262 -368.263 -368.264 -368.265 -368.266 -368.268 -368.269 -369.260 -369.261 -369.262 -369.263 -369.264 -369.265 -369.268 -369.269 -370.260 -370.261 -370.262 -370.263 -370.264 -370.265 -370.268 -370.269 -371.260 -371.261 -371.262 -371.263 -371.264 -371.268 -372.260 -372.261 -372.262 -372.263 -372.264 -372.268 -373.260 -373.261 -373.262 -373.263 -373.264 -373.268 -374.260 -374.261 -374.262 -374.263 -374.268 -375.260 -375.261 -375.262 -375.263 -376.260 -376.261 -376.262 -376.263 -377.260 -377.262 -377.263 -378.260 -378.262 -378.263 -379.262 -379.263 -380.262 -380.263 -381.262 -381.263 -382.262 -382.263 -383.262 -383.263 -384.262 -384.263 -385.262 -385.263 -386.262 -386.263 -387.262 -387.263 -388.262 -388.264 -389.262 -390.262 -567.255 -568.255 -569.255 -570.254 -570.255 -571.254 -571.255 -572.254 -572.255 -573.254 -574.254 -575.254 -576.254 -584.242 -605.238 diff --git a/scripts/python/cfis_field_select.py b/scripts/python/cfis_field_select.py index 71733cab0..efe961ca7 100755 --- a/scripts/python/cfis_field_select.py +++ b/scripts/python/cfis_field_select.py @@ -26,7 +26,6 @@ from optparse import OptionParser, IndentedHelpFormatter, OptionGroup from astropy.io import fits -from astropy.table import Table, Column from astropy import units from astropy.coordinates import Angle, SkyCoord diff --git a/scripts/python/merge_final_cat.py b/scripts/python/merge_final_cat.py index 7f62ae250..1b274deb0 100755 --- a/scripts/python/merge_final_cat.py +++ b/scripts/python/merge_final_cat.py @@ -28,8 +28,8 @@ class param: """General class to store (default) variables - """ + """ def __init__(self, **kwds): self.__dict__.update(kwds) @@ -49,10 +49,10 @@ def params_default(): Returns ------- - p_def: class param + class param parameter values - """ + """ p_def = param( input_path = '.', input_name_base = 'final_cat', @@ -72,12 +72,11 @@ def parse_options(p_def): Returns ------- - options: tuple - Command line options - args: str - Command line str - """ + list + command line options + command line str + """ usage = "%prog [OPTIONS]" parser = OptionParser(usage=usage) @@ -90,7 +89,6 @@ def parse_options(p_def): default=p_def.input_path, help=f'input path, default=\'{p_def.input_path}\'' ) - parser.add_option( '-n', '--input_name_base', @@ -99,6 +97,14 @@ def parse_options(p_def): default=p_def.input_name_base, help=f'input name base, default=\'{p_def.input_name_base}\'' ) + parser.add_option( + '-l', + '--list_tile_ID_path', + dest='tile_ID_list_path', + type='string', + default=None, + help=f'tile ID list, default: Use all data in input files' + ) # Control parser.add_option( @@ -142,10 +148,10 @@ def check_options(options): Returns ------- - erg: bool + bool Result of option check. False if invalid option value. - """ + """ return True @@ -161,10 +167,10 @@ def update_param(p_def, options): Returns ------- - param: class param + class param updated paramter values - """ + """ param = copy.copy(p_def) # Update keys in param according to options values @@ -194,10 +200,10 @@ def read_param_file(path, verbose=False): Returns ------- - param_list: list of str + list of str parameter names - """ + """ param_list = [] if path: @@ -250,10 +256,10 @@ def get_data(path, hdu_num, param_list): Returns ------- - data: numpy array + numpy array data columns - """ + """ hdu_list = fits.open(path) hdu = hdu_list[hdu_num] @@ -290,21 +296,42 @@ def main(argv=None): param.param_list = read_param_file(param.param_path, verbose=param.verbose) + # read (optional) input tile ID file + if param.tile_ID_list_path: + tile_ID_list = cfis.read_list(param.tile_ID_list_path) + + # find input catalogue FITS files l = os.listdir(path=path) ext = 'fits' lpath = [] for this_l in l: - if this_l.endswith(ext): - lpath.append(os.path.join(path, this_l)) + + add_this_l = False + + # mark to add if correct extension, matches input pattern, not `.npy` file + if ( + this_l.endswith(ext) + and (f'{param.input_name_base}' in this_l) + and ('.npy' not in this_l) + ): + add_this_l = True + + # unmark to add if no in (optional) input tile ID file + if param.tile_ID_list_path: + nix, niy = cfis.get_tile_number(this_l) + tile_ID = f'{nix}.{niy}' + if tile_ID not in tile_ID_list: + add_this_l = False + if add_this_l: + lpath.append(os.path.join(path, this_l)) if param.verbose: - print(f'{len(lpath)} files files found in input path') + print(f'{len(lpath)} files files to merge found') count = 0 - # Determine number of columns and keys + # Determine number of columns and keys from first catalogue file d_tmp = get_data(lpath[0], param.hdu_num, param.param_list) - d = np.zeros(d_tmp.shape, dtype=d_tmp.dtype) for key in d_tmp.dtype.names: d[key] = d_tmp[key] @@ -312,12 +339,11 @@ def main(argv=None): if param.verbose: print(f'File \'{lpath[0]}\' copied ({count}/{len(lpath)})') - for idx in lpath[1:]: - if (f'{param.input_name_base}' not in idx) | ('.npy' in idx): - continue + # merge remaining catalogue files + for fname in lpath[1:]: try: - d_tmp = get_data(idx, param.hdu_num, param.param_list) + d_tmp = get_data(fname, param.hdu_num, param.param_list) dd = np.zeros(d_tmp.shape, dtype=d.dtype) for key in d_tmp.dtype.names: @@ -325,11 +351,11 @@ def main(argv=None): count = count + 1 if param.verbose: - print(f'File \'{idx}\' copied ({count}/{len(lpath)})') + print(f'File \'{fname}\' copied ({count}/{len(lpath)})') d = np.concatenate((d, dd)) except: - print(f'Error while adding file \'{idx}\', {len(dd)} objects not in final cat') + print(f'Error while adding file \'{fname}\', {len(dd)} objects not in final cat') # Save merged catalogue as numpy binary file if param.verbose: diff --git a/shapepipe/info.py b/shapepipe/info.py index 9be0577d6..d230bcd7f 100644 --- a/shapepipe/info.py +++ b/shapepipe/info.py @@ -15,7 +15,7 @@ # Package Info -version_info = (1, 0, 0) +version_info = (1, 0, 1) __version__ = '.'.join(str(c) for c in version_info) __name__ = 'shapepipe' __author__ = 'Samuel Farrens' diff --git a/shapepipe/modules/get_images_package/__init__.py b/shapepipe/modules/get_images_package/__init__.py index 8544168ab..2c0b6b69c 100644 --- a/shapepipe/modules/get_images_package/__init__.py +++ b/shapepipe/modules/get_images_package/__init__.py @@ -44,8 +44,8 @@ INPUT_NUMBERING : str Input numbering scheme, python regexp CHECK_EXISTING_DIR : str, optional - If given, check this directory for existing images, which will then not be - downloaded + If given, search this directory (recursively) for existing images, which + will then not be downloaded N_EXPECTED : int, optional If ``CHECK_EXISTING_DIR`` is given, this option specifies the number of expected images; the default value is ``1`` diff --git a/shapepipe/modules/get_images_package/get_images.py b/shapepipe/modules/get_images_package/get_images.py index 52eae63b0..f0a4220c6 100644 --- a/shapepipe/modules/get_images_package/get_images.py +++ b/shapepipe/modules/get_images_package/get_images.py @@ -281,9 +281,25 @@ def retrieve(self, all_inputs, all_outputs): f'{self._check_existing_dir}/**/{out_base}', recursive=True, ) - if path and len(path) == self._n_expected: - self._w_log.info(f'{path[0]} found, skipping') - continue + if path: + if len(path) == self._n_expected: + self._w_log.info( + f'{path[0]} found, skipping download' + ) + continue + else: + self._w_log.info( + f'{len(path)} instead of {self._n_expected} ' + + 'existing files found at' + + f' {self._check_existing_dir}' + + ', downloading images' + ) + else: + self._w_log.info( + 'No existing images found at' + + f' {self._check_existing_dir},' + + ' downloading images' + ) self.retrieve_one(in_per_type[idx], out_per_type[idx]) def retrieve_one(self, in_path, out_path): diff --git a/shapepipe/modules/make_cat_runner.py b/shapepipe/modules/make_cat_runner.py index 4a993239f..8b6351e2e 100644 --- a/shapepipe/modules/make_cat_runner.py +++ b/shapepipe/modules/make_cat_runner.py @@ -8,7 +8,6 @@ from shapepipe.modules.make_cat_package import make_cat from shapepipe.modules.module_decorator import module_runner -from shapepipe.utilities.cfis import remove_common_elements @module_runner( @@ -76,12 +75,6 @@ def make_cat_runner( else: save_psf = False - # Fetch path to tiles - if config.has_option(module_config_sec, 'TILE_LIST'): - tile_list_path = config.getexpanded(module_config_sec, 'TILE_LIST') - else: - tile_list_path = None - # Set final output file final_cat_file = make_cat.prepare_final_cat_file( run_dirs['output'], @@ -102,11 +95,6 @@ def make_cat_runner( gal_thresh, ) - # Flag overlapping objects - if tile_list_path: - w_log.info('Flag overlapping objects') - remove_common_elements(final_cat_file, tile_list_path) - # Save shape data sc_inst = make_cat.SaveCatalogue(final_cat_file) w_log.info('Save shape measurement data') diff --git a/shapepipe/modules/mask_package/__init__.py b/shapepipe/modules/mask_package/__init__.py index 88bcfd50a..af2dc5c5c 100644 --- a/shapepipe/modules/mask_package/__init__.py +++ b/shapepipe/modules/mask_package/__init__.py @@ -14,13 +14,17 @@ Description =========== -This module creates masks for bright stars, diffraction spikes, Messier -objects, borders, and other artifacts. If a flag file is given as input, -for example from pre-processing, the mask that is created by this module -is joined with the mask from this external flag file. In this case -the config flag ``USE_EXT_FLAG`` needs to be set to ``True``. To distinguish -the newly created output flag file from the input ones, a prefix can added as -specificed by the config entry ``PREFIX``. +This module creates masks for bright stars, diffraction spikes, deep sky +objects (from the Messier and NGC catalogues), borders, and other artifacts. If +a flag file is given as input, for example from pre-processing, the mask that +is created by this module is joined with the mask from this external flag file. +In this case the config flag ``USE_EXT_FLAG`` needs to be set to ``True``. To +distinguish the newly created output flag file from the input ones, a prefix +can added as specificed by the config entry ``PREFIX``. + +An NGC catalogue with positions, sizes, and types is provided with +``shapepipe``, +`source `_. Masked pixels of different mask types are indicated by integers, which conveniently are powers of two such that they can be combined bit-wise. @@ -137,6 +141,18 @@ MESSIER_FLAG_VALUE : int Messier mask pixel value, power of 2 +[NGC_PARAMETERS] +-------------------- + +NGC_MAKE : bool + Create mask around NGC objects if ``True`` +NGC_CAT_PATH : str + Path to NGC catalogue +NGC_SIZE_PLUS : float + Fraction to increase NGC mask +NGC_FLAG_VALUE : int + NGC mask pixel value, power of 2 + [MD_PARAMETERS] --------------- diff --git a/shapepipe/modules/mask_package/mask.py b/shapepipe/modules/mask_package/mask.py index 5c5aaa528..572f91bad 100644 --- a/shapepipe/modules/mask_package/mask.py +++ b/shapepipe/modules/mask_package/mask.py @@ -12,6 +12,7 @@ import numpy as np from astropy import units, wcs from astropy.coordinates import SkyCoord +from astropy.io import fits from shapepipe.pipeline import file_io from shapepipe.pipeline.config import CustomParser @@ -30,10 +31,23 @@ class Mask(object): Path to image (FITS format) weight_path : str Path to the weight image (FITS format) + image_prefix : str + Prefix to input image name, specify as ``'none'`` for no prefix + image_num : str + File number identified config_filepath : str Path to the ``.mask`` config file output_dir : str Path to the output directory + w_log : logging.Logger + Log file + path_external_flag : str, optional + Path to external flag file, default is ``None`` (not used) + outname_base : str, optional + Output file name base, default is ``flag`` + star_cat_path : str, optional + Path to external star catalogue, default is ``None`` (not used; + instead the star catalogue is produced on the fly at run time) hdu : int, optional HDU number, default is ``0`` @@ -47,6 +61,7 @@ def __init__( image_num, config_filepath, output_dir, + w_log, path_external_flag=None, outname_base='flag', star_cat_path=None, @@ -55,33 +70,51 @@ def __init__( # Path to the image to mask self._image_fullpath = image_path + # Path to the weight associated to the image self._weight_fullpath = weight_path + + # Input image prefix + if (image_prefix.lower() != 'none') and (image_prefix != ''): + self._img_prefix = f'{image_prefix}_' + else: + self._img_prefix = '' + + # File number identified + self._img_number = image_num + + # Path to mask config file self._config_filepath = config_filepath + # Path to the output directory self._output_dir = output_dir + + # Log file + self._w_log = w_log + # Path to an external flag file self._path_external_flag = path_external_flag + # Output file base name self._outname_base = outname_base - self._img_number = image_num - if (image_prefix.lower() != 'none') and (image_prefix != ''): - self._img_prefix = f'{image_prefix}_' - else: - self._img_prefix = '' - + # Set external star catalogue path if given if star_cat_path is not None: self._star_cat_path = star_cat_path self._hdu = hdu + + # Read mask config file self._get_config() - # Set parameters needed for the stars detection - self._set_parameters() + + # Set parameters needed for the star detection + self._set_image_coordinates() + + # Set error flag self._err = False def _get_config(self): - """Get Config Values. + """Get Config. Read the config file and set parameters. @@ -110,6 +143,7 @@ def _get_config(self): 'HALO': {}, 'SPIKE': {}, 'MESSIER': {}, + 'NGC': {}, 'MD': {}, } @@ -159,6 +193,7 @@ def _get_config(self): ) if self._config[mask_shape]['make']: + self._config[mask_shape]['maskmodel_path'] = conf.getexpanded( f'{mask_shape}_PARAMETERS', f'{mask_shape}_MASKMODEL_PATH', @@ -193,21 +228,27 @@ def _get_config(self): else: self._config[mask_shape]['reg_file'] = None - self._config['MESSIER']['make'] = ( - conf.getboolean('MESSIER_PARAMETERS', 'MESSIER_MAKE') - ) + for mask_type in ['MESSIER', 'NGC']: - if self._config['MESSIER']['make']: - self._config['MESSIER']['cat_path'] = ( - conf.getexpanded('MESSIER_PARAMETERS', 'MESSIER_CAT_PATH') - ) - self._config['MESSIER']['size_plus'] = ( - conf.getfloat('MESSIER_PARAMETERS', 'MESSIER_SIZE_PLUS') - ) - self._config['MESSIER']['flag'] = ( - conf.getint('MESSIER_PARAMETERS', 'MESSIER_FLAG_VALUE') + self._config[mask_type]['make'] = conf.getboolean( + f'{mask_type}_PARAMETERS', + f'{mask_type}_MAKE' ) + if self._config[mask_type]['make']: + self._config[mask_type]['cat_path'] = conf.getexpanded( + f'{mask_type}_PARAMETERS', + f'{mask_type}_CAT_PATH', + ) + self._config[mask_type]['size_plus'] = conf.getfloat( + f'{mask_type}_PARAMETERS', + f'{mask_type}_SIZE_PLUS', + ) + self._config[mask_type]['flag'] = conf.getint( + f'{mask_type}_PARAMETERS', + f'{mask_type}_FLAG_VALUE', + ) + self._config['MD']['make'] = ( conf.getboolean('MD_PARAMETERS', 'MD_MAKE') ) @@ -223,10 +264,11 @@ def _get_config(self): conf.getboolean('MD_PARAMETERS', 'MD_REMOVE') ) - def _set_parameters(self): - """Set Parameters. + def _set_image_coordinates(self): + """Set Image Coordinates. - Set the parameters for the stars detection. + Compute the image coordinates for matching with the star catalogue + and star mask. """ img = file_io.FITSCatalogue(self._image_fullpath, hdu_no=0) @@ -234,20 +276,29 @@ def _set_parameters(self): self._header = img.get_header() img_shape = img.get_data().shape img.close() - del(img) + del img self._wcs = wcs.WCS(self._header) + # Compute field center + # Note: get_data().shape corresponds to (n_y, n_x) pix_center = [img_shape[1] / 2.0, img_shape[0] / 2.0] wcs_center = self._wcs.all_pix2world([pix_center], 1)[0] - self._fieldcenter = {} self._fieldcenter['pix'] = np.array(pix_center) self._fieldcenter['wcs'] = ( SkyCoord(ra=wcs_center[0], dec=wcs_center[1], unit='deg') ) + # Get the four corners of the image + corners = self._wcs.calc_footprint() + self._corners_sc = SkyCoord( + ra=corners[:, 0] * units.degree, + dec=corners[:, 1] * units.degree, + ) + + # Compute image radius = image diagonal self._img_radius = self._get_image_radius() def make_mask(self): @@ -279,14 +330,6 @@ def make_mask(self): mag_pivot=self._config[_type]['mag_pivot'], ) - if not self._err: - if self._config['BORDER']['make']: - border_mask = self.mask_border( - width=self._config['BORDER']['width'] - ) - else: - border_mask = None - if not self._err: mask_name = [] if self._config['HALO']['make'] and self._config['SPIKE']['make']: @@ -307,15 +350,22 @@ def make_mask(self): else: mask_name.append(None) + masks_internal = {} if not self._err: - if self._config['MESSIER']['make']: - messier_mask = self.mask_messier( - self._config['MESSIER']['cat_path'], - size_plus=self._config['MESSIER']['size_plus'], - flag_value=self._config['MESSIER']['flag'], + if self._config['BORDER']['make']: + masks_internal['BORDER'] = self.mask_border( + width=self._config['BORDER']['width'] ) - else: - messier_mask = None + + if not self._err: + for _type in ('MESSIER', 'NGC'): + if self._config[_type]['make']: + masks_internal[_type] = self.mask_dso( + self._config[_type]['cat_path'], + size_plus=self._config[_type]['size_plus'], + flag_value=self._config[_type]['flag'], + typ=_type, + ) if not self._err: try: @@ -331,8 +381,7 @@ def make_mask(self): final_mask = self._build_final_mask( path_mask1=mask_name[0], path_mask2=mask_name[1], - border=border_mask, - messier=messier_mask, + masks_internal=masks_internal, path_external_flag=path_external_flag, ) @@ -486,25 +535,28 @@ def mask_border(self, width=100, flag_value=4): return flag - def mask_messier(self, cat_path, size_plus=0.1, flag_value=8): - """Mask Messier. + def mask_dso(self, cat_path, size_plus=0.1, flag_value=8, typ='Messier'): + """Mask DSO. - Create a circular patch for Messier objects. + Create a circular patch for deep-sky objects (DSOs), e.g. + Messier or NGC objects. Parameters ---------- cat_path : str - Path to the Messier catalogue + Path to the deep-sky catalogue size_plus : float Increase the size of the mask by this factor (e.g. ``0.1`` means 10%) flag_value : int Value of the flag, some power of 2 + obj_type : {'Messier', 'NGO'}, optional + Object type Returns ------- numpy.ndarray or ``None`` - If no Messier objects are found in the field return ``None`` and + If no deep-sky objects are found in the field return ``None`` and the flag map Raises @@ -517,41 +569,66 @@ def mask_messier(self, cat_path, size_plus=0.1, flag_value=8): """ if size_plus < 0: raise ValueError( - 'Messier mask size increase variable cannot be negative' + 'deep-sky mask size increase variable cannot be negative' ) if cat_path is None: - raise ValueError('Path to Messier object catalogue not provided') + raise ValueError('Path to deep-sky object catalogue not provided') - m_cat = np.load(cat_path, allow_pickle=True) + m_cat, header = fits.getdata(cat_path, header=True) + + unit_ra = file_io.get_unit_from_fits_header(header, 'ra') + unit_dec = file_io.get_unit_from_fits_header(header, 'dec') m_sc = SkyCoord( - ra=m_cat['ra'] * units.degree, - dec=m_cat['dec'] * units.degree, + ra=m_cat['ra'] * unit_ra, + dec=m_cat['dec'] * unit_dec, ) - nx = self._fieldcenter['pix'][0] * 2 - ny = self._fieldcenter['pix'][1] * 2 - - # Get the four corners of the image - corners = self._wcs.calc_footprint() - corners_sc = SkyCoord( - ra=corners[:, 0] * units.degree, - dec=corners[:, 1] * units.degree, - ) + unit_size_X = file_io.get_unit_from_fits_header(header, 'size_X') + unit_size_Y = file_io.get_unit_from_fits_header(header, 'size_Y') - # Loop through all Messier objects and check whether any corner is + # Loop through all deep-sky objects and check whether any corner is # closer than the object's radius indices = [] + size_max_deg = [] for idx, m_obj in enumerate(m_cat): - r = max(m_obj['size']) * units.arcmin + + # DSO size + # r = max(m_obj['size']) * units.arcmin + r = max( + m_obj['size_X'] * unit_size_X, + m_obj['size_Y'] * unit_size_Y, + ) r_deg = r.to(units.degree) - if np.any(corners_sc.separation(m_sc[idx]) < r_deg): + size_max_deg.append(r_deg) + + # Add index to list if distance between DSO and any image corner + # is closer than DSO size + if np.any(self._corners_sc.separation(m_sc[idx]) < r_deg): indices.append(idx) + self._w_log.info( + f'Found {len(indices)} {obj_type} objects overlapping with' + ' image' + ) + if len(indices) == 0: - # No closeby Messier object found + # No closeby deep-sky object found return None + # Compute number of DSO center coordinates in footprint, for logging + # purpose only + n_dso_center_in_footprint = 0 + for idx in indices: + in_img = self._wcs.footprint_contains(m_sc[idx]) + self._w_log.info( + '(obj_type, ra, dec, in_img) = ' + + f'({obj_type}, ' + + f'{m_cat["ra"][idx]}, ' + + f'{m_cat["dec"][idx]}, ' + + f'{in_img})' + ) + # Note: python image array is [y, x] flag = np.zeros( ( @@ -561,6 +638,8 @@ def mask_messier(self, cat_path, size_plus=0.1, flag_value=8): dtype='uint16', ) + nx = self._fieldcenter['pix'][0] * 2 + ny = self._fieldcenter['pix'][1] * 2 for idx in indices: m_center = np.hstack(self._wcs.all_world2pix( m_cat['ra'][idx], @@ -568,11 +647,11 @@ def mask_messier(self, cat_path, size_plus=0.1, flag_value=8): 0, )) r_pix = ( - max(m_cat['size'][idx]) / 60.0 * (1 + size_plus) + size_max_deg[idx].to(units.deg).value * (1 + size_plus) / np.abs(self._wcs.pixel_scale_matrix[0][0]) ) - # The following accounts for Messier centers outside of image, + # The following accounts for deep-sky centers outside of image, # without creating masks for coordinates out of range y_c, x_c = np.ogrid[0:ny, 0:nx] mask_tmp = ( @@ -1016,8 +1095,7 @@ def _build_final_mask( self, path_mask1, path_mask2=None, - border=None, - messier=None, + masks_internal=None, path_external_flag=None, ): """Create Final Mask. @@ -1030,10 +1108,8 @@ def _build_final_mask( Path to a mask (FITS format) path_mask2 : str, optional Path to a mask (FITS format) - border : numpy.ndarray, optional - Array containing the border mask - messier : numpy.ndarray, optional - Array containing the messier mask + masks_internal : dict, optional + Internally created masks path_external_flag : str, optional Path to an external flag file @@ -1045,8 +1121,7 @@ def _build_final_mask( Raises ------ ValueError - If ``path_mask1``, ``path_mask2``, border and messier are of type - ``None`` + If all masks are of type ``None`` TypeError If border is not a Numpy array TypeError @@ -1056,12 +1131,12 @@ def _build_final_mask( final_mask = None if ( - path_mask1 is None and path_mask2 is None and border is None - and messier is None + path_mask1 is None and path_mask2 is None + and not masks_internal ): raise ValueError( 'No paths to mask files containing halos and/or spikes,' - + ' borders, or Messier objects provided' + + ' borders, or deep-sky objects provided' ) if path_mask1 is not None: @@ -1078,23 +1153,18 @@ def _build_final_mask( else: final_mask = mask2.get_data()[:, :] - if border is not None: - if type(border) is np.ndarray: - if final_mask is not None: - final_mask += border - else: - final_mask = border - else: - raise TypeError('border mask has to be a numpy.ndarray') - - if messier is not None: - if type(messier) is np.ndarray: - if final_mask is not None: - final_mask += messier + for typ in masks_internal: + if masks_internal[typ] is not None: + if type(masks_internal[typ]) is np.ndarray: + if final_mask is not None: + final_mask += masks_internal[typ] + else: + final_mask = masks_internal[typ] else: - final_mask = messier - else: - raise TypeError('Messier mask has to be a numpy.ndarray') + raise TypeError( + f'internally created mask of type {typ} ' + + 'has to be numpy.ndarray' + ) if path_external_flag is not None: external_flag = file_io.FITSCatalogue( diff --git a/shapepipe/modules/mask_runner.py b/shapepipe/modules/mask_runner.py index ce8c53dbd..3683076e4 100644 --- a/shapepipe/modules/mask_runner.py +++ b/shapepipe/modules/mask_runner.py @@ -102,6 +102,7 @@ def mask_runner( outname_base=outname_base, star_cat_path=ext_star_cat, hdu=hdu, + w_log=w_log, ) # Process module diff --git a/shapepipe/modules/random_cat_package/random_cat.py b/shapepipe/modules/random_cat_package/random_cat.py index f2c0277c9..2f24a3970 100644 --- a/shapepipe/modules/random_cat_package/random_cat.py +++ b/shapepipe/modules/random_cat_package/random_cat.py @@ -10,9 +10,13 @@ import os import re -import astropy.io.fits as fits import numpy as np + +import astropy.io.fits as fits from astropy import wcs +from astropy.table import Table + +from reproject import reproject_to_healpix from shapepipe.pipeline import file_io from shapepipe.utilities import cfis @@ -29,38 +33,79 @@ class RandomCat(): Path to input image file input_mask_path : str Path to input mask file - output_path : str - Output file path for random catalogue + output_dir : str + Output directory + file_number_pattern : str + ShapePipe image ID string + output_file_pattern : str + Output file pattern (base name) for random catalogue n_rand : float Number of random objects on output density : bool ``n_rand`` is interpreted per square degrees if ``True`` w_log : logging.Logger Logging instance - tile_list_path : str, optional - List to all tile IDs, to remove objects in - overlapping tile areas - + healpix_options : dict + Parameters for HEALPix output mask file """ def __init__( self, input_image_path, input_mask_path, - output_path, + output_dir, + file_number_string, + output_file_pattern, n_rand, density, w_log, - tile_list_path=None, + healpix_options, ): self._input_image_path = input_image_path self._input_mask_path = input_mask_path - self._output_path = output_path + self._output_dir = output_dir + self._file_number_string = file_number_string + self._output_file_pattern = output_file_pattern self._n_rand = n_rand self._density = density self._w_log = w_log - self._tile_list_path = tile_list_path + self._healpix_options = healpix_options + + def save_as_healpix(self, hdu_mask, header): + """Save As Healpix. + + Save mask as healpix FITS file. + + Parameters + ---------- + hdu_mask : class HDUList + HDU with 2D pixel mask image + header : class Header + Image header with WCS information + + """ + if not self._healpix_options: + return + + mask_1d, footprint = reproject_to_healpix( + (hdu_mask, header), + 'galactic', + nside=self._healpix_options['OUT_NSIDE'] + ) + + t = Table() + t['flux'] = mask_1d + t.meta['ORDERING'] = 'RING' + t.meta['COORDSYS'] = 'G' + t.meta['NSIDE'] = self._healpix_options['OUT_NSIDE'] + t.meta['INDXSCHM'] = 'IMPLICIT' + + output_path = ( + f'{output_dir}/{self._healpix_options["FILE_BASE"]}-' + + f'{file_number_string}.fits' + ) + t.write(output_path) def process(self): """Process. @@ -89,6 +134,9 @@ def process(self): hdu_mask = fits.open(self._input_mask_path) mask = hdu_mask[0].data + # Save mask in healpix format (if option is set) + self._save_as_healpix(hdu_mask, header) + # Number of pixels n_pix_x = mask.data.shape[0] n_pix_y = mask.data.shape[1] @@ -160,6 +208,10 @@ def process(self): y_rand = [] # Tile ID + output_path = ( + f'{output_dir}/{output_file_pattern}-' + + f'{file_number_string}.fits' + ) file_name = os.path.split(self._output_path)[1] file_base = os.path.splitext(file_name)[0] tile_ID_str = re.split('-', file_base)[1:] @@ -183,35 +235,9 @@ def process(self): ) output.save_as_fits(cat_out, names=column_names) - # Remove overlapping regions - if n_unmasked > 0 and self._tile_list_path: - self._w_log.info('Flag overlapping objects') - ratio_non_overl_tot = cfis.remove_common_elements( - output, - self._tile_list_path, - pos_param=['RA', 'DEC'] - ) - else: - ratio_non_overl_tot = 1 - - # Compute area without overlapping regions (approximation) - area_deg2_non_overl = area_deg2 * ratio_non_overl_tot - area_deg2_eff_non_overl = area_deg2_eff * ratio_non_overl_tot - # Write area information to log file self._w_log.info(f'Total area = {area_deg2:.4f} deg^2') self._w_log.info(f'Unmasked area = {area_deg2_eff:.4f} deg^2') self._w_log.info( f'Ratio masked to total pixels = {n_unmasked / n_pix:.3f}' ) - - self._w_log.info( - f'Total area without overlap = {area_deg2_non_overl:.4f} deg^2' - ) - self._w_log.info( - 'Unmaskewd area without overlap = ' - + f'{area_deg2_eff_non_overl:.4f} deg^2' - ) - self._w_log.info( - f'Ratio of non-overlap to total area = {ratio_non_overl_tot:.3f}' - ) diff --git a/shapepipe/modules/random_cat_runner.py b/shapepipe/modules/random_cat_runner.py index 8e5f52563..7aad692a6 100644 --- a/shapepipe/modules/random_cat_runner.py +++ b/shapepipe/modules/random_cat_runner.py @@ -31,7 +31,13 @@ def random_cat_runner( input_mask_name = input_file_list[1] # Set output file name - output_path = f'{run_dirs["output"]}/random_cat-{file_number_string}.fits' + if config.has_option(module_config_sec, 'OUTPUT_FILE_PATTERN'): + output_file_pattern = config.get( + module_config_sec, + 'OUTPUT_FILE_PATTERN' + ) + else: + output_file_pattern = 'random_cat' # Get number of random objects requested on output n_rand = config.getfloat(module_config_sec, 'N_RANDOM') @@ -43,21 +49,30 @@ def random_cat_runner( else: density = False - # Path to all tile ID, for overlap flagging - if config.has_option(module_config_sec, 'TILE_LIST'): - tile_list_path = config.getexpanded(module_config_sec, 'TILE_LIST') - else: - tile_list_path = None - + # Get healpix output options + save_mask_as_healpix = config.getboolean( + module_config_sec, + 'SAVE_MASK_AS_HEALPIX' + ) + if save_mask_as_healpix: + healpix_options = {} + for option_trunc in ['FILE_BASE', 'OUT_NSIDE']: + option = f'HEALPIX_OUT_{option_trunc}' + healpix_options[option_trunc] = config.get( + module_config_sec, + option + ) # Create rand cat class instance rand_cat_inst = RandomCat( input_image_name, input_mask_name, - output_path, + run_dirs['output'], + file_number_string, + output_file_pattern, n_rand, density, w_log, - tile_list_path=tile_list_path + healpix_options, ) # Run processing diff --git a/shapepipe/modules/setools_package/setools.py b/shapepipe/modules/setools_package/setools.py index c6dc47286..78feae3d1 100644 --- a/shapepipe/modules/setools_package/setools.py +++ b/shapepipe/modules/setools_package/setools.py @@ -653,7 +653,7 @@ def _make_rand_split(self): n_keep = int(np.ceil(cat_size * ratio)) mask_ratio = [] mask_left = list(range(0, cat_size)) - while(len(mask_ratio) != n_keep): + while len(mask_ratio) != n_keep: idx = np.random.randint(0, len(mask_left)) mask_ratio.append(mask_left.pop(idx)) mask_ratio = np.array(mask_ratio) diff --git a/shapepipe/pipeline/file_io.py b/shapepipe/pipeline/file_io.py index ea0ad33b4..a768f0c06 100644 --- a/shapepipe/pipeline/file_io.py +++ b/shapepipe/pipeline/file_io.py @@ -10,6 +10,7 @@ import numpy as np from astropy.io import fits +from astropy import units from astropy.table import Table @@ -551,7 +552,7 @@ def create(self, ext_name=None, s_hdu=True, sex_cat_path=None): self._cat_data = fits.HDUList([primary_hdu, secondary_hdu]) self._cat_data.writeto(self.fullpath, overwrite=True) sex_cat.close() - del(sex_cat) + del sex_cat else: raise BaseCatalogue.catalogueFileNotFound(sex_cat_path) else: @@ -1841,3 +1842,59 @@ def comment(self, comment): @data.setter def data(self, data): self._data = data + + +def get_unit_from_fits_header(header, key): + """Get Unit From FITS Header. + + Return coordinate unit corresponding to column with name ``key``. + + Parameters + ---------- + header : FITS header + Header information + key : str + Column name + + Raises + ------ + IndexError + If key not in header + + Returns + ------- + astropy.units.Unit + Unit object + + """ + # Loop over column names to find key + idx = 1 + idx_found = -1 + while True: + ttype_idx = f'TTYPE{idx}' + if ttype_idx not in header: + # Reached beyond last column + break + else: + if header[ttype_idx] == key: + # Found correct column + idx_found = idx + break + idx += 1 + + if idx_found == -1: + raise IndexError(f'Column \'{key}\' not found in FITS header') + + # Extract coordinate unit string from header + tcunit_idx = f'TCUNI{idx}' + if tcunit_idx not in header: + raise IndexError( + f'No coordinate unit found for column \'{key}\'' + ' in FITS header' + ) + unit_str = header[tcunit_idx] + + # Transform to Unit object + u = units.Unit(unit_str) + + return u diff --git a/shapepipe/utilities/cfis.py b/shapepipe/utilities/cfis.py index ec55cae74..8e763872a 100644 --- a/shapepipe/utilities/cfis.py +++ b/shapepipe/utilities/cfis.py @@ -1456,141 +1456,3 @@ def square_from_corners(ang0, ang1): cyd = [getattr(y, unitdef) for y in cy] return cxd, cyd - - -def remove_common_elements( - final_cat_file, - tiles_id_file, - pos_param=['XWIN_WORLD', 'YWIN_WORLD'] -): - """Remove Common Elements. - - Create a mask for objects in the overlapping regions between - neigbouring stacked images. The object furthest from its stack - center is flagged. - - Parameters - ---------- - final_cat_file : io.FITSCatalog - Final catalog. - tile_id_file : str - Path to the file containing all the tile IDs. - pos_param : list - List with the column name for ra and dec positions. - - Returns - ------- - float - ratio of masked to total objects - - """ - key_id = 'TILE_ID' - - def get_tile_wcs(xxx, yyy): - """Get tile WCS. - - Create an astropy.wcs.WCS object from the name of the tile. - - Parameters - ---------- - xxx : int - First 3 numbers in the tile name. - yyy : int - Last 3 numbers in the tile name. - - Returns - ------- - astropy.wcs.WCS - WCS for the tile. - - """ - ra, dec = get_tile_coord_from_nixy(xxx, yyy) - - w = WCS(naxis=2) - w.wcs.crval = np.array([ra.deg, dec.deg]) - w.wcs.crpix = np.array([5000, 5000]) - w.wcs.cd = np.array( - [[0.187 / 3600, 0], [0, 0.187 / 3600]] - ) - w.wcs.ctype = ['RA---TAN', 'DEC--TAN'] - w.wcs.cunit = ['deg', 'deg'] - w._naxis = [10000, 10000] - - return w - - final_cat_file.open() - - # Get object coordinates - ra_tile = final_cat_file.get_data()[pos_param[0]] - dec_tile = final_cat_file.get_data()[pos_param[1]] - catalog_coord = coords.SkyCoord( - ra=ra_tile * units.deg, - dec=dec_tile * units.deg, - ) - - # Get tile ID from FITS header - - # Format string to make sure trailing zeros are not cut - tile_id_format = f'{final_cat_file.get_data()[key_id][0]:07.3f}' - - # Transform to strings (nix, niy) - tile_id_str = str(tile_id_format) - tile_id = get_tile_number(tile_id_str) - - # Get tile ID for entire survey from ascii file - all_id_float = np.loadtxt(tiles_id_file, unpack=True) - all_id_format = [f'{id:07.3f}' for id in all_id_float] - all_id_str = [str(id_f) for id_f in all_id_format] - all_id2 = get_tile_number_list(all_id_str) - - all_tile_ra, all_tile_dec = get_tile_coord_from_nixy( - all_id2[0], - all_id2[1], - ) - all_tile_coord = coords.SkyCoord(ra=all_tile_ra, dec=all_tile_dec) - - ra_m_tile, dec_m_tile = get_tile_coord_from_nixy( - tile_id[0], - tile_id[1] - ) - tile_main_coord = coords.SkyCoord(ra=ra_m_tile, dec=dec_m_tile) - - mask_tile = np.ones_like(ra_tile, dtype=bool) - - # Compute separation between objects and tile center - sep_ref = tile_main_coord.separation(catalog_coord) - - # Find close tiles = nearest 9 neighbours - close_tiles = np.argsort(tile_main_coord.separation(all_tile_coord))[1:9] - - # Loop over neighbours - for close in close_tiles: - - ra_m_check, dec_m_check = get_tile_coord_from_nixy( - all_id2[0][close], - all_id2[1][close] - ) - tile_check_coord = coords.SkyCoord(ra=ra_m_check, dec=dec_m_check) - - sep_check = tile_check_coord.separation(catalog_coord) - - w_tile_check = get_tile_wcs(all_id2[0][close], all_id2[1][close]) - - # Mask objects who are closer to neighbour than tile center - mask_tile &= ( - np.less(sep_ref, sep_check) - | np.invert(w_tile_check.footprint_contains(catalog_coord)) - ) - - # Add mask as column to FITS catalogue - final_cat_file.add_col('FLAG_TILING', mask_tile) - - final_cat_file.close() - - # Compute ratio of masked to total object - n_masked = np.sum(mask_tile) - n_tot = len(mask_tile) - - ratio_mask_tot = n_masked / n_tot - - return ratio_mask_tot