From d3ab67e60426831fc31cc1319c49256bfad777a8 Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Mon, 2 Jun 2014 17:18:51 +0200 Subject: [PATCH] Initialized site documentation. --- aster/src/main/assembly/binary-assembly.xml | 20 - aster/src/main/assembly/building-files.xml | 14 - aster/src/main/assembly/jar-files.xml | 11 - aster/src/main/assembly/misc-files.xml | 13 - aster/src/main/assembly/source-assembly.xml | 10 - pom.xml | 3 + src/main/assembly/binary-assembly.xml | 12 +- src/main/assembly/building-files.xml | 1 - src/main/assembly/misc-files.xml | 1 - src/main/assembly/source-assembly.xml | 12 +- src/site/fml/faq.fml | 129 +++++ src/site/markdown/building.md | 97 ++++ src/site/markdown/contact.md | 61 +++ src/site/markdown/contributing.md | 26 + src/site/markdown/design.md | 20 - src/site/markdown/design/overview.md | 23 + src/site/markdown/downloads.md | 44 ++ src/site/markdown/guidelines.md | 168 ++++++ src/site/markdown/index.md | 63 +++ src/site/markdown/sources.md | 41 ++ .../resources/images/rugged-architecture.png | Bin 0 -> 32563 bytes src/site/resources/images/rugged-logo.png | Bin 0 -> 32649 bytes src/site/site.xml | 28 +- src/site/xdoc/changes.xml | 488 ++++++++++++++++++ 24 files changed, 1170 insertions(+), 115 deletions(-) delete mode 100644 aster/src/main/assembly/binary-assembly.xml delete mode 100644 aster/src/main/assembly/building-files.xml delete mode 100644 aster/src/main/assembly/jar-files.xml delete mode 100644 aster/src/main/assembly/misc-files.xml delete mode 100644 aster/src/main/assembly/source-assembly.xml create mode 100644 src/site/fml/faq.fml create mode 100644 src/site/markdown/building.md create mode 100644 src/site/markdown/contact.md create mode 100644 src/site/markdown/contributing.md delete mode 100644 src/site/markdown/design.md create mode 100644 src/site/markdown/design/overview.md create mode 100644 src/site/markdown/downloads.md create mode 100644 src/site/markdown/guidelines.md create mode 100644 src/site/markdown/index.md create mode 100644 src/site/markdown/sources.md create mode 100644 src/site/resources/images/rugged-architecture.png create mode 100644 src/site/resources/images/rugged-logo.png create mode 100644 src/site/xdoc/changes.xml diff --git a/aster/src/main/assembly/binary-assembly.xml b/aster/src/main/assembly/binary-assembly.xml deleted file mode 100644 index f4f0121b..00000000 --- a/aster/src/main/assembly/binary-assembly.xml +++ /dev/null @@ -1,20 +0,0 @@ -<assembly> - <id>bin</id> - <formats> - <format>zip</format> - </formats> - <dependencySets> - <dependencySet> - <outputDirectory>/lib</outputDirectory> - <excludes> - <exclude>org.orekit:rugged</exclude> - </excludes> - <unpack>false</unpack> - </dependencySet> - </dependencySets> - <componentDescriptors> - <componentDescriptor>src/main/assembly/misc-files.xml</componentDescriptor> - <componentDescriptor>src/main/assembly/jar-files.xml</componentDescriptor> - </componentDescriptors> -</assembly> - diff --git a/aster/src/main/assembly/building-files.xml b/aster/src/main/assembly/building-files.xml deleted file mode 100644 index c4472402..00000000 --- a/aster/src/main/assembly/building-files.xml +++ /dev/null @@ -1,14 +0,0 @@ -<component> - <fileSets> - <fileSet> - <includes> - <include>pom.xml</include> - </includes> - <useDefaultExcludes>true</useDefaultExcludes> - </fileSet> - <fileSet> - <directory>src</directory> - <useDefaultExcludes>true</useDefaultExcludes> - </fileSet> - </fileSets> -</component> \ No newline at end of file diff --git a/aster/src/main/assembly/jar-files.xml b/aster/src/main/assembly/jar-files.xml deleted file mode 100644 index e89c65b0..00000000 --- a/aster/src/main/assembly/jar-files.xml +++ /dev/null @@ -1,11 +0,0 @@ -<component> - <fileSets> - <fileSet> - <directory>target</directory> - <outputDirectory></outputDirectory> - <includes> - <include>*.jar</include> - </includes> - </fileSet> - </fileSets> -</component> \ No newline at end of file diff --git a/aster/src/main/assembly/misc-files.xml b/aster/src/main/assembly/misc-files.xml deleted file mode 100644 index f1bf4a5f..00000000 --- a/aster/src/main/assembly/misc-files.xml +++ /dev/null @@ -1,13 +0,0 @@ -<component> - <fileSets> - <fileSet> - <outputDirectory>/licenses</outputDirectory> - <includes> - <include>LICENSE.txt</include> - <include>NOTICE.txt</include> - <include>Apache-Commons-Math-LICENSE.txt</include> - <include>Orekit-LICENSE.txt</include> - </includes> - </fileSet> - </fileSets> -</component> diff --git a/aster/src/main/assembly/source-assembly.xml b/aster/src/main/assembly/source-assembly.xml deleted file mode 100644 index d68ffcb2..00000000 --- a/aster/src/main/assembly/source-assembly.xml +++ /dev/null @@ -1,10 +0,0 @@ -<assembly> - <id>sources</id> - <formats> - <format>zip</format> - </formats> - <componentDescriptors> - <componentDescriptor>src/main/assembly/misc-files.xml</componentDescriptor> - <componentDescriptor>src/main/assembly/building-files.xml</componentDescriptor> - </componentDescriptors> -</assembly> \ No newline at end of file diff --git a/pom.xml b/pom.xml index ab3fa52f..f5148eeb 100644 --- a/pom.xml +++ b/pom.xml @@ -297,6 +297,9 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> <version>${rugged.maven-surefire-report-plugin.version}</version> + <configuration> + <aggregate>true</aggregate> + </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> diff --git a/src/main/assembly/binary-assembly.xml b/src/main/assembly/binary-assembly.xml index a18df15b..64f01be1 100644 --- a/src/main/assembly/binary-assembly.xml +++ b/src/main/assembly/binary-assembly.xml @@ -1,4 +1,6 @@ -<assembly> +<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>bin</id> <formats> <format>zip</format> @@ -7,4 +9,12 @@ <componentDescriptor>src/main/assembly/misc-files.xml</componentDescriptor> <componentDescriptor>src/main/assembly/jar-files.xml</componentDescriptor> </componentDescriptors> + <moduleSets> + <moduleSet> + <includes> + <include>org.orekit:rugged-aster</include> + <include>org.orekit:rugged-core</include> + </includes> + </moduleSet> + </moduleSets> </assembly> \ No newline at end of file diff --git a/src/main/assembly/building-files.xml b/src/main/assembly/building-files.xml index 9c3f9cbf..9eb2f438 100644 --- a/src/main/assembly/building-files.xml +++ b/src/main/assembly/building-files.xml @@ -4,7 +4,6 @@ <includes> <include>BUILDING.txt</include> <include>pom.xml</include> - <include>build.xml</include> <include>checkstyle.xml</include> <include>findbugs-exclude-filter.xml</include> <include>license-header.txt</include> diff --git a/src/main/assembly/misc-files.xml b/src/main/assembly/misc-files.xml index 8e565755..b6666a6c 100644 --- a/src/main/assembly/misc-files.xml +++ b/src/main/assembly/misc-files.xml @@ -2,7 +2,6 @@ <fileSets> <fileSet> <includes> - <include>README.txt</include> <include>LICENSE.txt</include> <include>NOTICE.txt</include> </includes> diff --git a/src/main/assembly/source-assembly.xml b/src/main/assembly/source-assembly.xml index d68ffcb2..bb6574c4 100644 --- a/src/main/assembly/source-assembly.xml +++ b/src/main/assembly/source-assembly.xml @@ -1,4 +1,6 @@ -<assembly> +<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>sources</id> <formats> <format>zip</format> @@ -7,4 +9,12 @@ <componentDescriptor>src/main/assembly/misc-files.xml</componentDescriptor> <componentDescriptor>src/main/assembly/building-files.xml</componentDescriptor> </componentDescriptors> + <moduleSets> + <moduleSet> + <includes> + <include>org.orekit:rugged-aster</include> + <include>org.orekit:rugged-core</include> + </includes> + </moduleSet> + </moduleSets> </assembly> \ No newline at end of file diff --git a/src/site/fml/faq.fml b/src/site/fml/faq.fml new file mode 100644 index 00000000..28a2154d --- /dev/null +++ b/src/site/fml/faq.fml @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<faqs title="Frequently Asked Questions" toplink="false"> + + <part id="references"> + <title>References</title> + <faq id="projects"> + <question> + Has Rugged already been used? + </question> + <answer> + <p> + Yes, it is used in successful operational missions. + </p> + <p>The first operational use of Rugged was Sentinel 2 ESA mission. + Rugged is used in the Image Processing Facility. + </p> + </answer> + </faq> + <faq id="validation"> + <question> + Is Rugged validated? + </question> + <answer> + <p> + Yes, rugged has been validated, by comparison with other image + processing systems. + </p> + <p> + Note that as Rugged takes into account some effects that may not be considered + by other systems, validation implies careful configuration and analysis of + discrepancies. Some differences come from missing correction in other systems, + like the Δδψ and Δδε precession/nutation correction parameters, or the light time + correction, or the aberration of light correction, or the non-straight line nature + of line-of-sight in geodetic space ...). These differences are mostly dealt with + by disabling Rugged correction to match the other systems (only for test purposes, + of course, the corrections should be enabled for operational use!). Some differences + come from different models like precession and nutation compliant to latest IERS + conventions, or different Earth frames. These differences are mostly dealt with by + configuring Rugged to use the same legacy models (these legacy models like for example + TOD and MOD frames are available for consistency with existing systems). + </p> + </answer> + </faq> + </part> + + <part id="installation"> + <title>Installation</title> + <faq id="dependencies"> + <question> + What are the dependencies for Rugged? + </question> + <answer> + <p> + Rugged core relies on the Orekit space flight dynamics library and on + Apache Commons Math mathematical libraries. Both libraries are free + software libraries distributed under the terms of the Apache Software + License version 2.0. + </p> + <p> + Rugged aster relies on Rugged core and on Apache Commons imaging libraries. + Both libraries are free software libraries distributed under the terms of + the Apache Software License version 2.0. + </p> + </answer> + </faq> + </part> + + <part id="runtime"> + <title>Runtime errors</title> + <faq id="orekit-data-zip-not-up-to-date"> + <question> + I get an error "no IERS UTC-TAI history data loaded" (or something similar in another language). What does it mean? + </question> + <answer> + <p> + This error is probably the most frequent one, or at least it's the first one new users encounter. + </p> + <p> + Rugged relies on the Orekit library to perform all space flight related comupation (typically + frames transforms). This library in turn needs some external data to be loaded in order to run. + This includes UTC-TAI history for leap seconds handling, Earth Orientation Parameters for + transforms to and from Earth fixed frames, or planetar ephemerides for Sun direction, for example. + </p> + <p> + The error message "no IERS UTC-TAI history data loaded" means the UTC-TAI history file which is used for leap + seconds management was not found. As leap seconds are used each time a UTC date is used, this message is + often seen very early and is the first one unsuspecting users experience. It often means the user forgot + to configure Orekit to load data. + </p> + <p> + Configuring data loading is explained in the configuration page For a start, the simplest configuration + is to download the orekit-data.zip file from the download page and to either set the "orekit.data.path" Java + property to this file or to manually configure the DataProvidersManager to use it. This example archive file + contains the required UTC-TAI history file among others. Configuring Orekit to use this archive file can be done + by keeping the file as a zip archive and pointing to this archive, or by unzipping it and pointing to the unzipped folder. + </p> + <p> + Here is an example using the file in zip format: + </p> + <p> + DataProvidersManager.addProvider(new ZipJarCrawler(new File("/path/to/the/zip/file/orekit-data.zip"))); + </p> + <p> + Here is an example using the folder resulting from expanding the archive: + </p> + <p> + DataProvidersManager.addProvider(new DirectoryCrawler(new File("/path/to/the/folder/orekit-data"))); + </p> + <p> + Using a folder allows one to change the data in it, e.g., adding new EOP files as they are published by IERS. + </p> + </answer> + </faq> + </part> +</faqs> diff --git a/src/site/markdown/building.md b/src/site/markdown/building.md new file mode 100644 index 00000000..b75c3bf0 --- /dev/null +++ b/src/site/markdown/building.md @@ -0,0 +1,97 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Building Rugged +=============== + +Rugged can be built from source using several different tools. + +All these tools are Java based and can run on many different operating +systems, including Unix, GNU/Linux, Windows and Mac OS X. Some GNU/Linux +distributions provide these tools in their packages repositories. + +Building with Maven 3 +--------------------- + +[Maven](http://maven.apache.org/) is a build tool that goes far beyond +simply compiling and packaging a product. It is also able to resolve +dependencies (including downloading the appropriate versions from the public +repositories), to run automated tests, to launch various checking tools and +to create a web site for a project. It runs on any platform supporting Java. + +For systems not providing maven as a package, maven can be +[downloaded](http://maven.apache.org/download.cgi) from its site at the +Apache Software Foundation. This site also explains the +installation procedure. + +As with all maven enabled projects, building Rugged is straightforward, simply +run: + + mvn assembly:single + +The preceding command will perform all dependencies retrieval, compilation, +tests and packaging for you. At the end, it will create several files named +{module}/target/rugged-{module}-x.y.jar where {module} is the module name (aster, +core, ...) and x.y is the version number. + +If you need to configure a proxy server for dependencies retrieval, see +the [Guide to using proxies](http://maven.apache.org/guides/mini/guide-proxies.html) +page at the maven site. + +If you already use maven for your own projects (or simply eclipse, see +below), you may want to install rugged in your local repository. This is done +with the following command: + + mvn install + +For other commands like generating the site, or generating the +[checkstyle](http://checkstyle.sourceforge.net/), +[findbugs](http://findbugs.sourceforge.net/) or +[jacoco](http://www.eclemma.org/jacoco/) reports, see the maven +plugins documentation at [maven site](http://maven.apache.org/plugins/index.html). + +Building with Eclipse +--------------------- + +[Eclipse](http://www.eclipse.org/) is a very rich Integrated Development +Environment (IDE). It is a huge product and not a simple build tool. + +For systems not providing eclipse as a package, it can be downloaded from its +site at the [Eclipse Foundation](http://www.eclipse.org/downloads/). + +The simplest way to use Rugged with Eclipse is to follow these steps: + + * unpack the distribution inside your Eclipse workspace + + * create a new java project from existing sources and direct Eclipse to the + directory where you unpacked Rugged + + * set the source folders to + * core/src/main/java + * aster/src/main/java + * core/src/test/java + * aster/src/test/java + * core/src/main/resources + * aster/src/main/resources + * core/src/test/resources + * aster/src/test/resources + in the source tab of the Configure Build Path dialog + + * set the external libraries to JRE system library (provided by Eclipse), + Junit 4.x (provided by Eclipse), Apache Commons Math (available at + Apache Software Foundation Commons Math + [downloads page](http://commons.apache.org/proper/commons-math/download_math.cgi)), + and Orekit (available at Orekit + [downloads page](https://www.orekit.org/forge/projects/orekit/files)) + in the libraries tab of the Configure Build Path dialog diff --git a/src/site/markdown/contact.md b/src/site/markdown/contact.md new file mode 100644 index 00000000..93545a6a --- /dev/null +++ b/src/site/markdown/contact.md @@ -0,0 +1,61 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Contacts +======== + +Mailing lists +------------- + +Most discussions should occur on the public mailing lists. + +|---------------|------------------------------|------------------------------------------------------------|-------------------------------------------------------| +| topic | post address | subscribe URL | archive URL | +|---------------|------------------------------|------------------------------------------------------------|-------------------------------------------------------| +| announces | orekit-announces@orekit.org | {{https://www.orekit.org/wws/subscribe/orekit-announces}} | {{https://www.orekit.org/wws/arc/orekit-announces}} | +|---------------|------------------------------|------------------------------------------------------------|-------------------------------------------------------| +| users | orekit-users@orekit.org | {{https://www.orekit.org/wws/subscribe/orekit-users}} | {{https://www.orekit.org/wws/arc/orekit-users}} | +|---------------|------------------------------|------------------------------------------------------------|-------------------------------------------------------| +| developers | orekit-developers@orekit.org | {{https://www.orekit.org/wws/subscribe/orekit-developers}} | {{https://www.orekit.org/wws/arc/orekit-developers}} | +|---------------|------------------------------|------------------------------------------------------------|-------------------------------------------------------| + +Please register to these mailing lists before attempting to post! + +We're preventing unregistered members from posting in order to prevent spam. Thank you. + +Technical contact +----------------- + +If for some reason you cannot use the public lists, you can reach the CS +Systèmes d'Information Rugged team for any question (either technically +oriented or administrative) at the following email address: +[orekit@c-s.fr](mailto:orekit@c-s.fr) + +Administrative contact +---------------------- + +If you want to discuss with the space division staff at CS Systèmes d'Information, +please use the following address: + +|:---------------------------------------------------------------------| +| CS Systèmes d'Information | +| Business Unit Espace et Renseignement | +| parc de la plaine - 5 rue Brindejonc des Moulinais | +| BP 15872 | +| 31506 Toulouse CEDEX 5 | +| FRANCE | +|:---------------------------------------------------------------------| +| phone: +33 5-61-17-66-66 (ask for Luc Maisonobe or Aude Espesset) | +| fax: +33 5-61-34-84-15 | +|:---------------------------------------------------------------------| diff --git a/src/site/markdown/contributing.md b/src/site/markdown/contributing.md new file mode 100644 index 00000000..7e3caea8 --- /dev/null +++ b/src/site/markdown/contributing.md @@ -0,0 +1,26 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Contributing to Ruggged +======================= + +Rugged is free software, which means you can use the source code as you wish, +without charges, in your applications, and that you can improve it and have +your improvements included in the next mainstream release. + +If you are interested in participating in the development effort, +subscribe to the mailing lists and step up to discuss it. The +larger the community is, the better Rugged will be. The main +rule is that everything intended to be included in Rugged core must +be distributed under the Apache License Version 2.0. diff --git a/src/site/markdown/design.md b/src/site/markdown/design.md deleted file mode 100644 index 2e897d8e..00000000 --- a/src/site/markdown/design.md +++ /dev/null @@ -1,20 +0,0 @@ -A First Level Header -==================== - -A Second Level Header ---------------------- - -Now is the time for all good men to come to -the aid of their country. This is just a -regular paragraph. - -The quick brown fox jumped over the lazy -dog's back. - -### Header 3 - -> This is a blockquote. -> -> This is the second paragraph in the blockquote. -> -> ## This is an H2 in a blockquote diff --git a/src/site/markdown/design/overview.md b/src/site/markdown/design/overview.md new file mode 100644 index 00000000..8011c568 --- /dev/null +++ b/src/site/markdown/design/overview.md @@ -0,0 +1,23 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Global architecture +=================== + +Rugged is an intermediate level mission-independent library. It relies on +the Orekit library and on the Apache Commons Math library. It is itself +intended to be used from a mission-specific interface by one or more +image processing applications. + + diff --git a/src/site/markdown/downloads.md b/src/site/markdown/downloads.md new file mode 100644 index 00000000..c3fecbf6 --- /dev/null +++ b/src/site/markdown/downloads.md @@ -0,0 +1,44 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Downloads +========= + +Development Library version +--------------------------- + +The development version of the Rugged library is always available to +download from our version control system. We use [ Git](http://git-scm.com/) +as our SCM. The anonymous read access to our Git repository allows users who +need the latest features and the latest bug fixes to get them even before an +official release. + +The Git repository can be cloned using the following command, which can +be easily adapted if you are using one of the numerous Git graphical +user interface available or if Git is supported by you integrated +development environment: + + git clone http://www.orekit.org/git/rugged + +Released Library versions +------------------------- + +Rugged is provided both in several packaging systems. You can pick up +the one that better suits your needs. Source packages are the most complete +ones since the other packages (binary jars, javadoc jars and even the bulk +of this site) are created from these sources. + +Rugged is also available in maven central repository, +with groupID org.orekit and artifactId orekit, so maven internal mechanism +will download automatically all artifacts and dependencies as required. diff --git a/src/site/markdown/guidelines.md b/src/site/markdown/guidelines.md new file mode 100644 index 00000000..b1c879c3 --- /dev/null +++ b/src/site/markdown/guidelines.md @@ -0,0 +1,168 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Development Guidelines +====================== + +The following guidelines are used for Rugged development. + +Development +----------- + +Rugged is an intermediate level library. It may be used in very different +contexts which cannot be foreseen, from quick studies up to critical +operations. The main driving goals are the following ones: + + * validation + + * robustness + + * maintainability + + * efficiency + +The first goal, validation, implies tests must be as extensive as possible. +They should include realistic operational cases but also contingency cases. +The [jacoco](http://www.eclemma.org/jacoco/) tool must be used to +monitor test coverage. A very high level of coverage is desired. We do not +set up mandatory objective figures, but only guidelines here. However,a 60% +line coverage would clearly not be acceptable at all and 80% would be considered +deceptive. + +The second goal, robustness, has some specific implications for a low level +component like Rugged. In some sense, it can be considered an extension of the +previous goal as it can also be improved by testing. It can also be improved +by automatic checking tools that analyze either source code or binary code. The +[findbugs](http://findbugs.sourceforge.net/) tool is already configured for +automatic checks of the library using a maven plugin. + +This is however not sufficient. A library is intended to be used by applications +unknown to the library development team. The library development should be as +flexible as possible to be merged into an environment with specific constraints. +For example, perhaps an application should run 24/7 during months or years, so +caching all results to improve efficiency may prove disastrous in such a use case, +or it should be embedded in a server application, so printing to standard output +should never be done. Experience has shown that developing libraries is more +difficult than developing high level applications where most of the constraints +are known beforehand. + +The third goal, maintainability, implies code must be readable, clear and +well documented. Part of this goal is enforced by the stylistic rules explained +in the next section, but this is only for the _automatic_ and simple checks. It +is important to keep a clean and extensible design. Achieving simplicity is +really hard, so this goal should not be taken too lightly. Good designs are a +matter of balance between two few objects that do too many things internally +an ignore each other and too many objects that do nothing alone and always need +a bunch of other objects to work. Always think in terms of balance, and check +what happens if you remove something from the design. Quite often, removing something +improves the design and should be done. + +The fourth goal, efficiency, should be handled with care to not conflict with the +second and third goals (robustness and maintainability). Efficiency is necessary but +trying too much too achieve it can lead to overly complex unmaintainable code, to too +specific fragile code, and unfortunately too often without any gain after all because +of premature optimization and unfounded second-guess. + +One surprising trick, that at first sight might seem strange and inappropriate has +been used in many part for Rugged and should be considered a core guideline. It +is the use of _immutable_ objects. This trick improves efficiency because many costly +copying operation are avoided, even unneeded one added for defensive programming. It +improves maintainability because both the classes themselves and the classes that use +them are much simpler. It also improves robustness because many (really many ...) +difficult to catch bugs are caused by mutable objects that are changed in some deeply +buried code and have an impact on user code that forgot to perform a defensive copy. +Orbits, dates, vectors, and rotations are all immutable objects. + +Style +----- + +For reading ease and consistency, the existing code style should be +preserved for all new developments. The rules are common ones, inherited +mainly from the Sun [Code Conventions for the Java +Programming Language](http://java.sun.com/docs/codeconv/) guide style and +from the default [checkstyle](http://checkstyle.sourceforge.net/) tool +configuration. A few of these rules are displayed below. The complete +definition is given by the checkstyle configuration file in the project +root directory. + +*header rule* +: all source files start with the Apache license header, + +*indentation rules* +: no tabs, 4 spaces indentation, no indentation for case statements, + +*operators wrapping rules* +: lines are wrapped after operators (unlike Sun), + +*whitespace rules* +: operators are surrounded by spaces, method parameters open parenthesis + is not preceded by space, lines do not end with white space, + +*curly brace rules* +: open curly brace are at end of line, with the matching closing curly brace + aligned with the start of the corresponding keyword (_if_, _for_, + _while_, _case_ or _do_), + +*encoding rules* +: characters encoding is _UTF8_, the git property _core.autocrlf_ should be + set to _input_ on Linux development machines and to _true_ on Windows + development machines (to ensure proper conversion on all operating systems), + +*naming rules* +: classes names begin with upper case, instance methods and fields + names begin with lower case, class fields are all upper case with + words separated by underscores, + +*ordering rules* +: class variables come first, followed by instance variables, followed + by constructors, and followed by methods, public modifiers come first, + followed by protected modifiers followed by private modifiers, + +*javadoc rules* +: all elements have complete javadoc, even private fields and methods + (there are some rare exceptions, in case of code translated from + the fortran language and models with huge parameters sets), + +*robustness rules* +: switch/case construct have a default argument, even when all possible + cases are already handled, as many classes as possible are immutable, + +*miscellaneous rules* +: _star_ imports are forbidden, parameters and local variables are final + wherever possible. + +Rules summary +------------- + +|---|-----------------|----------------------------------------------------------------------------------| +| 1 | validation | seek for a line test coverage of at least 80% (more is better) | +|---|-----------------|----------------------------------------------------------------------------------| +| 2 | robustness | fix _all_ errors and warnings found by findbugs | +|---|-----------------|----------------------------------------------------------------------------------| +| 3 | robustness | do not make assumptions on the runtime environment of applications using Rugged | +| | | (they may be embedded with no console, no possible user interaction, no network, | +| | | no writable file system, no stoppable main program, have memory constraints, | +| | | time constraints, be run in different linguistic contexts ...) | +|---|-----------------|----------------------------------------------------------------------------------| +| 4 | maintainability | follow Occam's razor principle | +| | | or its declination in computer science: KISS (Keep It Simple, Stupid) | +|---|-----------------|----------------------------------------------------------------------------------| +| 5 | efficiency | seek efficiency, but do not overstep robustness and maintainability | +|---|-----------------|----------------------------------------------------------------------------------| +| 6 | robustness | use immutable objects as much as possible | +| | maintainability | | +| | efficiency | | +|---|-----------------|----------------------------------------------------------------------------------| +| 7 | style | fix _all_ errors and warnings found by checkstyle | +|---|-----------------|----------------------------------------------------------------------------------| diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md new file mode 100644 index 00000000..45133c77 --- /dev/null +++ b/src/site/markdown/index.md @@ -0,0 +1,63 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Overview +======== + + Rugged is an add-on for Orekit handling Digital Elevation Models + contribution to line of sight computation. It is a free software + low-level library written in Java. + + It mainly provides direct and inverse localization, i.e. it allows + to compute accurately which ground point is looked at from a specific + pixel in a spacecraft instrument, and conversely which pixel will + see a specified ground point. + +Features +-------- + + * Direct localization + + * Inverse localization + + * Localized in several languages + + * English + + * French + + * Galician + +Free software +------------- + +Rugged is freely available both in source and binary formats, with all related +documentation and tests. + +It is distributed under the [Apache License Version 2.0](./license.html). This +is a well known business-friendly license. This means anybody can use it to build +any application, free or not. There are no strings attached to your own code. + +Everybody is encouraged to use Orekit as a common low level layer to improve +interoperability in space systems. + +Maintained library +------------------ + +Rugged has been in development since 2013 inside [CS Systèmes +d'Information](http://www.c-s.fr/) and is still used and maintained by its dual teams +of space dynamics and image processing experts. + +Rugged is used for image processing of the Sentinel 2 missiong at European Space +Agency (ESA). diff --git a/src/site/markdown/sources.md b/src/site/markdown/sources.md new file mode 100644 index 00000000..9191a4cf --- /dev/null +++ b/src/site/markdown/sources.md @@ -0,0 +1,41 @@ +<!--- Copyright 2013-2014 CS Systèmes d'Information + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +Getting the sources +=================== + +Released versions +----------------- + +In order to get the source for officially released versions, go to the +[Files](https://www.orekit.org/forge/projects/rugged/files) tab in Rugged +forge and select one of the rugged-{module}-x.y-src.zip files. The module +part is the module (you need at least the core module, but other modules +may be interesting for you too). The x.y part in the name specifies the version. + +Development version +------------------- + +The development of the Rugged project is done using the [Git](http://git-scm.com/) +source code control system. Rugged Git master repository is available online. + + * you can browse it using the [Repository](https://www.orekit.org/forge/projects/rugged/repository) + tab in Rugged forge + * you can clone it anonymously with the command: + + git clone http://www.orekit.org/git/rugged + + ** if you are a committer, you can clone it using your ssh credentials with the command: + + git clone ssh://git@www.orekit.org/rugged.git diff --git a/src/site/resources/images/rugged-architecture.png b/src/site/resources/images/rugged-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..0edec0097fdac59551fde9731f48623a034eedac GIT binary patch literal 32563 zcmbSzbyQSc*gYmH0!j)9h|=913ep|YAvx0BDJ6|`gVIQMgMf5N_s|_f4>|nKyzf_Q zee3tnw_L1QmpPn!?}_Kx&))kOtRN?j{*3S$3JMCkq{K%h6qI`~@FVr)G58I;`qX#u z@z_9G{3FU8^52i<ycqDCr#2EA_9!SAe~>@-;^;7lz%Nl9BxOZWp^xulViGf&FWjM^ zyg`xt_(8>Gc5lJa1ACM7_mO;b!+W$xQnt>{)CUJ8L{>y)Kj#kb5s9FReCzm&%hZ|U zLW4uf_-Iz?i*(e7n0Z(vBKc*slvL>1^+w#Hbu+)~K~%pdEPeAJ^FEIM3*je6GiCSH zTlDLz{<#R2hQ&i`z0R)E%}k$>`M+2>dE2J-gv|f@5(D!4r%>Vlx{x@;LtZ?z2F-;3 zy&!i%LtgmSf~I8uUSKr^ATR#u<i)=i|Fe_-=<$Dc@*h3^&rU#(K_k_UYHp4@6zF6F zquUM+mJ4ychLqBVe~y|jRc0lxq>)b$B!7b<>|0glAIJXn1<jg-PVq*{&&8$GJ`KWE zwl7rMOvvZ>DwUI|GNUy5B14i-();OCD2@8mq)vfm7Of>;ZKruNK142Ud8QJQEtwK% z#!)!(!}I}(fXAO>(f)eJTRgcTIhDhr_n|cmWfh!I{t}($t|11#dfWZSOnOa!c;eVJ zDvfhKj6KGo*8WXh%qi8MTb;t~wnbgK*p%y1u;Q={4X}3e@)OI_U;Y(9Y255}#;e6? zxx7)G^2Je;)wuWL{#A8>N{*86?o6&S(PXLS@C+N|5<b!DVs!pPu7j7-^-nfzv=Yrc zzIb_h*^u3GA@(YKmuU1gTwsU<Ch!o7{xL^2ib4y|Y@$%~QffW?SP3V<Q}B8kR+;gA z>4mno4z)_v3x?U6H`UTR@L!On+xJcu(6(@ME|;q{8dX9%R+B!7PFmaoomNiTxV}sW z9W7@H@3xz;*Ic9747?r_U(pM>mYhc;)tL06Sd_(*tF6R>M=50b;t~;_YQnX7f6gt1 z$GU3-n&;%=&#NiU9@M#A(#CYlaBdUXuS;yzBqg@sVl{PAz2)amEq~X2ywgc{j62YM zvN>GuwoSXMR=PRjC;l)M{mrKx6&wb|SbN0gbh$AqAssryTs8ZeEz8o|F-lpH(y7(0 zEr~7}g5W2iOE>i=+E40!J7=|INgTZmJUuZP?tuA|a@KHWOJ_tVcgr2E9bqfw$aRKp zGRgG0>|D?w5|2<rGMD0q(5uA;_lasXF0O@1P=#_ec1?~ZPbLc0WG-y)f57zXSxUc0 zM@M%s-+*mS;?|tL=zX1L4;j*jK)(6;`7Jkxds`aKEzY4J+coPBpA}BkgBitqKsuUf zi6$~TA+1)~?T$$p{@5AQIXzHteF^HP-C~n;q}*+2ZJm+t_V@yod3Q=<%YpaxYvP`* zs3>o}+y4EO+Ir6u&YzJY+kdM?e8)OP3&&U;+f{r?9x2v+(QohQKn_)<S6XKf%ex*u z>Q+TJ>1()7yp??Xd2!A*HtkPOOUYX>GhG|#DYnv^fe^=Gm;TSa|2_7<g?wJu+cCS1 zeo0Ns+8lPWT<p~Azgy{Pdl$>7myGbc&QdMpIdD(CtlU_29v!B3aW94omrg0S+Ing_ zTZD^ceNe=4vYP3=n%L!Ox+~L%I4sXUx{<qxf(i%-fsb*<0@sTrvKX)Ak48r1H8nL| zsQCKJH#{(Tc0zPd)UzCi`q4n*rJ{n$=>}6eTz<OmWQKv<yRKJ%Of4)dUJ06TKSIN2 zf7lQ1U+LOmA{EadIccGRzAaC}7wnhyKtv4Vr+TkJ;5t|7f>Gm?)876*0lxwB<+Ba8 zar5)>8H<IgIIJA$@9)$wkQ)^2i@Lf7X0v%}R-=L6t#^q2c~g5H?*o3pInU=`+eh6> zw5l=E<ix?I{xaV563mtlU+qDeLz@!GBf$!49c?)hK1t2mDw!mnPUh~N=82SQx+%N0 zrI%U6O*yyb5fpRE23M1#r%&}I^|X{)H!PEhe4W?L;#TSXDCSHIu2ek)*UV0EGNmIK z1An6{)L(h?1*`6B{!|sWenufBikT(gc|7hSqFC4)#fLhm$;I{%HBL%&A<*%j%lTds zSuyN`9tt6cwb3i7)1I{t3u2Cg@s_ZX=9}vsJ+sL|(<fh00zz?fKg2u+%P4}F2hW-q zSM;Y<RzqMK$NQOQ#s!*{v>}-`UtnZer`FJ>pQ~!b;rF?I3ubsyhX~(No}u%J`@HQ8 zRj9O*#SvWwD-`ARJofD!dI|^oLmfUoK266jqUWhI!5(-?TW*h0A7v>OgxzO-4}L`e z@8@p0UgirO?R4EB&dG62*$~4Q|5U7j>+`q!r<f_jzFs9C30h6wpHt+zY>#fKsq%Vi z{ND@lW7f!b0f<wUaYRJKhzOIaYMpx>QT*J@oG9$(G(_==l=9~Hbgv;gtlQ<{aQO}% zZ=FW0-TL%>Iab$)a-*4OlYVE!o+}D}VKN4RYLWJc&1B4r^a+`he5EX@B3B$5)jxX# zlXJVAwDNIV##|)}C`(t>yCaTthT63jJQXYl3APRgP@a)9nG7<4kj%10h)_u8AI(kw z+)(*tgMe^^lZ^xO_S~P-Ql5AV`QUvm>9Owa=oUGdTP(NpjK7v_ES_|Nq^uU{SiCcR zeKsbRjAh;01308<a^1*C;J(QSLdcUQ{4di{tqk<^&#N^p?e57ZSD6lM5ZzEuGdDSJ zj1y$RPu&Di$lAz`;^lLcmg9#8+3V`_A{nQ~m{*<3Yucf0P>ah?w7918GW|p`-XC2) zI?PgynCgtxb!iDo@6J>iD{l;^5C6(3M8-+vN_f9~ABRzMI^PmInQ_SS&urfpBTB~j zbJ(?&eDF4S2daE1-f4BtnY0Z7{WK@`SS`q}7wz*+UNIoNEtHK_mY0*6pBFj6=F$S} z!%FGB;6)3}1K9odKB}nTpv*PbbT=SC_^0r4*}mHifBHS}0e&^*h-+u+^3Iu?3hk#N zNB0c3csRX0VJ-XKY)vTIJ$!Dvr6=MTuRr7{DHa*AG@R`OniEbv%nP-5=<=;8tMXoS zc9)V_r2KT{j9G>?J0<z46+Xkc2;svAsRG|%rrp?I06j}-LW<oA`U-^74ub1OzIU4{ zL;l|auwRmV4J{1Szid3&vd)Wq68RYsaydOSL(vcxlKJ9_JNEej!9e;^LtPy?HL04K z8p${Q4bv^<QDX_nDRlLFH%egTkV=8_%X9XD>=MaO!%deb(OllTRf?Kc+Kp{-(rSkS zYyI_Xo9Z{+27w6f@k|HFwo!!V;yw+FXNt;P`yBnYx%6&=LcB%FN<XDN^z8={L6;!S z;*DLXUJS^P9TC(fkc*l`Ivv9e7sFHm&q)ht{qdTxA`WAE<CkOTdT0Uxo5yqLTobm+ zP}aAIWO}|TrmK}~{>u|`?$7s4n4&{_g`CspQPu|1uzwr9;@>lUWf&N_3^#41YDgEl zJGDP$@G8~SH?|Z-2w$2)b9sbhZ=U)z)*fiaG8U-Mw!#_(C~B-@476NQC_K{=uPDxH zXaG24Yp6L${xOx%J~4p{QrB4CU7C)lzj)b~gSRM|Rf>V@Ecinfi%n@kL0gx#;+Ul6 z=GTmsu4<(^#6F*-)d+MfP7d2d;s><a)3ls>lIS45ecP1_-wG2-2oZvgdpO_DiG_2N z2qv*Jk{!)6l?o1_JA*<AcP#Wm-sk++9_Iw>xc2wPCuOzJ`AjTh;~fhpZ8s;0v+Bj9 zcMHaL>pWLEy-RP2(&XTJ-%mp^q6yfHtEhF9%Ku#|7K@afHHVziSG+7|(me_-6mz*3 z6}@Gb?k-0wVyQ4bUN0W;-{}(qN1B_R{-l%&`4VL5Lf%6lZ1<$o@iCS#&bQd6h}z?i z<cQ<<#WIORt%%my9NZVV#_VKhCIXu_U$OSFyVC(nL)z0!Yx{yvrFibn`^N2<*fzF~ zZ9~wACGobA+8g#Fa|bOMkg+U!;@=U)bjwkSbUpu)RmK0*^ZrMnC#wr|2Zk|p){KOl z<~>fO`!a-Vy@zkY67_p?i<6_@IiJozj+8nJmNdSuwsaHlxR4)^9QX^NZ+3>_XUnA} zgFFHzcu<qW@M>*)4_Z&ODAIxir9F_SkN)DH!F(5D6w^y3sL<~(!WYu9#%d+28JY$` zkj?f2DR+8y)((s)r}gyf%?C#GGn@ert@Q(AVho$wcz&wcdSeiBSwHuI-P5~~yFwzl zSqC$bv)Kud&zW~sOWrNXpfp(Vs?^Xv_7eJjRyb)t59ijG@5l$ZaBz+jGCU-pKBu0t zwpi~DvD+Bx1=(c2)j1=dOL46)CUo}9T)9N4{$ZSAj?&Qr=3=?&KBe4ip0@r3rrvZm zcVE)r%bH1I%@`hOlXDl?GNSo9Um=Q0kHm~CU$#D^YkiyN2bD%8Wc@Ef<RR*#)s-FL zURDazk)hM5r1<g5FTt75Nd;1gwVZ5ryBJ6WTt0%3nh%B%3@hPKK8Sh+`6}^n*fogR z+jH6TcvxdocoV~TgzT2TBN+JVykTC^R$#N{+>c!+ikFrSGQtO80(RvoKDnon#Ox>> zy|DnQ4GT+4>{A)bBiFOi98bDA-;3xRXK9#LtDC1h&xuzgv6OJn*AZ{4#U}Lk@fI4{ zEZN=xFJK>h;qDTW_R#q0CR?_<ma7CxhU8c2YuRJl(~ag#pRfFB$!_UDId%Jin~yIi zpT}Cd$?J>|Rt!z$cZ+WCd}e59*fG(s_OuCK;-IPCc#{#dc9Cb@WQb19q<%eZkFx03 z@=)N}%GvHzwq#6Tw6WA^ldOHrrU2Tu9@)qCKLf7PhjQ7e8Vjqk_EgNTnsw7}nEYS7 zHTA1~o<gOxZuj*1QiO*YOZZ9DIJrwJYW-)~CuD!R-$aVz{#VKNf3Dv=$Z6kuozq6G z&1`_q1RvA+#3aZ`Nvr2;|FnB5MP*3`9;D#m1?t~IdnN)-d}JH^^z`(WH}=S~@()D( z-<t2=TCulRD*265Yk0;$pkvBlOP*4}%B{!Fc!5E4+5V=fkaD3egQ*dyHnEywl&X0- zcpTd?g@mkMzusd&+;n_HQ1)9bdImvqDA(w|%M+?UA^VuwQ|9_wDuGFQWJNTQ-&HPp zoyVnzTeI3)6ghieL76IXD2H*|dKZsN$7y%8G65elABz{zZng_A5onO=0Oj!ar8I5r zvAR+CoS?_a{+ClX&&-ox4@7iS2NmmS_s{9+S&9E>mP*KJ9j2OBX4E_Tag)WW-QpP@ zjYNIOdiIBZ?_)(97osnO4r%vKdiW?n{pPZA^G<(1S@t<0uLPkovaE(-Qn;7AW;b65 zd-;x1<CF)4=%qHpEod#D)%HR**+1PNzBin1brp==+ncfHZp+Z9a(FkKE;?FaDQ)`x zpP><A*W%M^xzm5;_c(lcy<hDp7xO8);i&(1*ekaC)ndt-|J*4u)1tEihfy_=MtP$v z#pzFvUcPD}Awb}<f!JVT+O7?E?iRS{^;*)U6A-~1gNTm2nO67<&zAjn=#<EMAKo2L zX-RnHG4}2218-J$7(9hbvxSs3{_7&<pP3mALYaSVBmW@_PxkN5DZNg^&{}f=8-g5^ zc;lApYJ^h%ejgx}v(iZVjm7Hbxv;P>dcXBNh7mNi^ZB)DB75{d>_bMfwyWJpk+E_h zM%ojf%-?VkDrBKmVKPjM9vjw&ODkS4yq>R@<CPj&JYiNnPOau=7tp6z?7-1s2LL|! za%-;Gx+4BWq<B*rTdnaj<2+9`i&KSKsjZAS>=pZ4(es&~p5MMGRNwQv#)uCW^Q|rW zIHjv+JImzL>>gQWdqPs8-5^z)zL2di_&rZP-ER9PM}1Lf*Et@4SWiO4^8;mM+CVcO zJYOXTYsTK>ZVi()=H$)iE+)1om}q(Lf8MXq&t^V$hr)U%hvH#k=sC`?<*n0aLUK2X zUM_1Q#I9!JKYm9&5T{mZ3YuYWLG>)JsiCB$?YpQn<7gd1;Nq(#tTC*jY7XO1)!J6g z-8RB|)tE_J2XE1RPBw>D*Vba+Uej;szW|e$J>{cYF#>22JW?GsTJebadIg+-<G4O) zKaczeR76^KoBe~!558@4)#(+rH3BdVBGBlUdccmD4gTuY?ZT{1XOh+4&!v8bfq@a& z8j8o1Y;Y~3h-0yDVeA*R#DHbK;hQx2g!IGuPTZwo7b*V}kN3F)Nny}N`(2E$@CT+- zIcbuIfm>vQAV{%V&+un~a&6IQJ%g?uq*{P?)ipGt7{obuxJu-ABZ?IZC-8E@Ed@{n z`8?EH-2^~shh#FStVuw{DGOK;*}mCqW9-1NSMBoz_B>^qC`{?CZ?uLiPPgX#`X=b8 z@|&?Vp_B|M%%6KuHe@n7z$m(09#inxt^d%;a~ii+TC{*}4ySJpyL#Il-G~Bw2lAF= zN`&P=t{P5&tT|WtQE51M2_G$9uD*CC>C&&w61(x7lL#6$>MOO&8~JM@1QGLG%To>U zBGk3=qPb{6m&PK`#xo8YJ>gk8le7*m!ma^5la=PdlmpMkv2v|$mlMoG%+JU-c0s(2 z8h&dlyD9~u`u2P?TTWlRTWL*2cBv?9xSS+*(6C0_&L<S^ro~g&69ANhF%BnaskmDW zzeSGJ8$+6ET>;Gf0Me7K<Z3&>q=|yYyp?%?i_)~;7)<Wo($A`YWfN7kJ-PyN<?k63 zuN#Co9-`$hd9!Mv@#o>M06wH(8A~aYNqi{LZRq>^Rpdx$KO@`G{pjYA0Pp$d-P~es zUY?bem3BZ`5b)X2hu*1MM8iQ=KRp;t!4{WaTHEsn1H-7-^xFJtJ0_3KaYf}|p<aB0 zJ}DSL?vt*;)4gf7A#)tJ)7^VMjo<hLuFjZmEaeQQUgAq%E$vruT1+yJ?B`5v6R>=F zNOU(Fl&SVy`JwH)_wlskmBVgFl%M!tvudOMsPO!J>WFKSyt}DeKtb@2SQ?w^p#jb? zu_uZSHL22s^WjeICCM>`GjtwQi(rfv^KK*L^0MH+p%<^u^sA@Lnmn4+TfBHK(bhMI ziur=2u1iAi;cK*f;fauo7|;{UkcFlk9v>Ni<vTq)Q(@GG1@^STX;L%P{V66IWTD1U zCY3izC?3(qwdn1aNo@h2P0x0mYjqcj^dn_+?$zdWwKmvoDV9kVd<wWBL@JzW>aN~O zf`|~S?@tD0=E#>sR{LjK=N9^7C9(s$>_ni3jvvr#2b(o~=*d*6ZX_7UNlUG6JuQSm z_g7-TC;s;Pje1kPQmVfDx6)f4g`d?G`Ps1ubIWl2)A`Rr3s2^da&X_DsYXI<*4xPK z*W8{y0Pu7r3H{Ej5B<A)>aaH%r6cZCZgN7{gy}x!E#ZwLst?F1tO?clcpVT3-m1nG ze%hE%vi~R;%1-Z&cNB(<85)CQnN9a$k1|yYw`VKq2*bO|_`QGL(Cf9%e{uU0T?L!1 zb9xt&`FFceE|yxSy{yR>@<_AVJOB&~v}|UJ4M{0L?$YaWZ8_-8M}Iv<`4H(FU1bIS zqQ%@@DuK>YT@^43$yFA<x}{vSbAhd#hsT}L$h-^C<{i;-v3f*=p5w>7vE}B$xw3h4 zKYSFO24^zq8hVszzUeV%1-)bZKKbdfGB}hn+MF0RhZ<~JI(64#($hnx@=KFuna`;@ z**5@fG)oV&sHo_9|E#kW=6e@)m(1C|(F)|s`SVLEoEFKAkO-QoJMA5^obon{ifo{e zBnkZ8JsS~;4T&}~9ZVy*KW=Gsh122|zDqDPwD_sSfG4Zfkfb%``<a#|G*Ff(8N44W zuR@xTJG5-?B5I3l`mrogVs`0bU5n%u8iWZYQ5z?|^u1twsov0E(r+zr&ZyK~mkdD( z8TTYDhzDMYcF(Azv@PHiG`%*@iDN1>M^%Gq8YM{V+LAB!aOpIjgNpVwkBz@uc;<r) z7?~cx8cJnB#;seE&DPFhm_&o8y<-~nMilFG@p*v4jxAQ7Tx%zm9&MpxC&#JQlzj|; zP6;y}h<)ip^;149er|fYX=-0OK31(*H6_ieCzXN?B~pZhD8BP~%)vr+g2*)n0oafZ zBamD81N457a}^3yvirX?&eR02X?9<qe=wNs@9KI?1?jgA7~6IL(9LGQkK+JZ-#@s^ zH7JPP7F|<OwTHxu<)dHNRf@D<f)eFRwWbO!ZntNoa<i&q7F`E+rko$Ik<IY$<aKlI zWp`go-MQ(FYIMMG<@}0!#p33#PX&>joz7RG9lOfU`c}2*X*WM7vJf1FvmS0boJh>^ zdv~hzo_fm{*P;yf>rAR<xk#yERxNmTwDzvcB64skOwtmD^b9V3Ec0VT2=-J|S5jCb znr@hvQM<xlCv5%aGur;rZe|79<xprnvP-Jtq-PUv*tyk{QV%c^nb426WJ~wGsBWk0 z9jQRxO?tucbp{PWMY}&YKiYW2d`JeCwTzXmJD@e+H$h;%8eGk~@_#$tutEkcPA`AE zf2B0GmtF0P`AhYh+Y!Yb_1dL>DS0xkyDid{@Cv8))T*~az$3_!yukvmM$JHmfGYre zW%{@3o{qZ{g?UX;;Db_Uzgh~*GqOHLEU^thd;Bz54*@yS_TsmG#A|Nf@bK`?6MvLu zUieC3jo#79C0dbX5sgMJdGq5_gQJ}-t<Q-18~M!9WVB2aKy1oD=jx5Akj$XmC}%}g z6U(~GT)eDSX1`u$qQ1t@%m9D}KwMAEhVyNUPjTvKG+Uf`Z-?UCUs`JM6Eh_RWVm@s ziR5wWF=lzh$ArQ5bEz=EivF0)C*W|xnXxzGdT3>@=BqWTN}7pW0umoyr@cl#jyML% zGLlH9)uL5|JmyV{=*MTOv>6hv(k#|@9Vq@XV`n6-GV5GzHuWq{suR#w+`G<`Wj7a5 zs}|agFTt`n;T(*q3a4j)>Cqur8=PGM)oC$P_Xv<@Dm96B>71^F_(M9(&)x_{B9cHX zR4P04o+4ql8hPbojFv#)D><G*jm-Zbk;SZ)XOkKb$5&m?(OZ`Ov5|%a>gG{#b5ED; zNp4|xMG|6u)Z@rVthst&jQ{jq$Hq#iV!fMju59w-_t%X3*m2^KEdsAbt)G~yl^Az# z5NA8f%e$y^%L`|GHZ&Az{cwvFcdmmZ+yJpluUC~SsB`_D$J_+ad6*Bfz6~_Ox6{}7 zK1lbOn?t0b_g%N=ikUPjjLCLnW0zI)0Yr#tRqzs-eU^^<WugTaq(q6x2my%%LE>|a z^M_EhkEK&%CDMFZbIbgNZc4TKIv!3Je`{>DD%N|t0Br?gIJxXBdpWexG8oK|e_3tq z=FWN{J;Jbj`6q2WSYzyFlR*LYc%xY&n0>0$(jQ$O-b375V~SloRERsu>S8<1`-xXQ z@r}CiJDYV>`yYNwbcs_B=YT%k#FNd}eQLB|o2?w|H-a3Ayt^u*IeH~0go?J9=l1cL z;XKnSQb_tq_S0YBY1WscOqm<Yx6O|!Z!u-nm2|761_vIonJ(rC0Fbt{J(jmdml#<d z)17?#GVG@ihVj4}3l6Pj5MVNpyq>~{uuLNF*AE?!ld?(KT%SJ(eEvo`UIvW8pWc~Z zu|dLekB(#Vl-;`*yFv1KrF=hyJAqyWEo`QrsD`Myp>G8=`w5_)lPrNry~5lco~N+i z9w|jVKR<sh;4#j8-%wJE!g)rtJs)L#EhlCa6u)n-TxXGApYl<Mll`IUnrWM<{T$(& zZnuGyIXz7N)h;uVFrC{pJt8qw2oU0+M0r8V=Tdm87|Re{h8ARm&<To^Zt(+EBd6WQ zK*_ZHz$Zefgdzrkx5zG@wP`78t?uo~6eyjo2#Tonmeqp_=BPK-6(&%wris*4FSLDY zrAl)wqWo{aHx1N21vkj}ljM9Fw*kt1WFM5E4^tZ_r)VCe#=26;bD~-><8F{qRfFuR z{-JeTW|qZr$Wtl0e+%e5n~mbFdr2oqT{ha6e@+|R<o_$&{z29M1Oi{GG7r_Rl!LWy zXNp)>uwaD5K?U+nt=-R#aW#w2Po6=+qQMzZV%AVw+1B8MvQL%hK9D&7rxEOGKApwj z(Tfs)(1os;|LStIz!3YRP@EN!SW(c6OG;?pdL>=ufGbiK{=X{0EB*R$u}Ph0K|FC% zxSNp0Cb!_qO64L~ZL|iltLNJ}-C(Fd<=!{&82viFe{+b%^|<GwCt|5BoU;GsehJHJ ztq>sXqM%^f$s|_vPhPHy+3j}`dw9xINP20Cc3!ZwGJ8TD0Ew4f3%Ux*#(+9GISuHZ z^0gwaP?_{v++a5d?S`*A)rHFCQli^5;9cJG_;S6EBm8t&q#JN~qSm4&2=_~`a9vgH zy5rS#lLYTBF|>rv?7D&D1QQ%s@1MdxbB)vNxL{F6N+zS(vhSM7!M(_x59MMw(XqW! zeh&)`i{*`J+*}ejdfM99W$Pq3(bO1ft1#B(YxnHBt&Ra(!M|RBbo^#rQu79Yk}I-@ zd_(&lVNzjs*cGdWhV}&nP7qR>^9YT*2?p4CJUhEln1gOA41=)!s)cGpciVDInOD!$ zivTX2c`lNX1$jAa^Qn>b$2CffpllC<EXQIMt7-LbiM0DDWZ-u)hi<&32h$?+Zf(6x z2A2SIu3yO)NXURL?7TvhcXS7N;L&JRNZ6vHA@XkT0R{9chz~@~AvjFJW(ni-bxwZ0 zhE!~ZePK8w@sQi0OzLM8{jss=yJ(QO)TCj}Q$CJ9l{}NdJ{K3GAg*SqVw0``QICa9 z^W%--lodYltdSqo&!Ae(G+IB4X4o5R_S?I<0=cZAi5^Y><BvAv$ey!$1)X^?uD>AV zRJaEO>S(LxhNPxa>St)1^hOt49Wzx<*o$|ExA=>cEU4^9kE}0SdXk(|?biC*d|;26 zjr-;w<_I|-JqF;xq$i(jl+C9&jUlH$uFJj9xyTfVq5%*N`LPFNaUp?&gi6p#kBays zKpfc9e7kVC9|sEMF|{<5Ctf(I1{hz!@}XAG{^6kqShWo6K+pcMvL_xM7@bLS-$KfT zWc6oB$I2=zuRo)|z#}BwY?_%Xjr{2qbEVzv5eKFxu?apL=UoRx-!sA~w(FVcz;~tE zO~SCDW}2wRhXi}9-+OtmC;C+&h@wl%lijD1L{nv(fgD8nIzKr{<VcL<;*#9b&!(%K zVrD8Z_E^3HGJ@G+2@nly-5tGtW;unOu7_A^p4c&Ynbh=JbzxGSw98g7xt6fYS3F<H zOIPa7j{b~bR~1b~7cpw|ZY4$$8k?6{t@Bo%xdT_g1NZ0T@`3zD4m}dpqZ2Ztn#s-v zJIUH-RaNvXi-kb4&}4Tgnc97Ni1~YHDB^wq+Mi^`EyWi;`s7R|={JpDi%HoFtIeqR zacI}hFfLcvT6v6v1vHAE;CN|y?ZY+Y{!@%+xuD!TvN>kHgsLZd-5uPrmyV^rHnm4K zD7-4JvpbS1I@7E*Bd(?!r;M?uw96YF{6k6w))ZKKG}=WrzUiSar{L$v4B$Btsl9DS zP%{P)K=<qvs85!!5sNVtj(8g~DJP4ZtM0z%va>OKo>rqX+3&n_Z>oMRhP*?KAm=WH zrn#?X+OdRHH8C9OzG0-r-*KIkwr!iEtylYOX*rlmVQ;#aO^iz$`}PwpRpqv7(X0&c zSQMxh&Z1hPhz29DiZwZ?CfSD=8QCqzx3eC>Y~OX4+xN>|p&vjzCYvqQ9Fn`v2smxj zeUImw?YW4Po!%EtM9)%i)Ss+xxUSg`U8SuTEovMrG<Roj$I#1}4*~Up*>aQ}1#lI? za(Sy@mQuOhe7za(I`WUQ!bZhKMMs+C?157C0aR099J}B@n23`dKhGg7O~hZV7@DTP zLk%}V>|LT54W{E(YYsMPoYdLw2hQAZSx*m4?YD@PPQ?Jb2&kM6h4$rPjLr3czUk<G z&XpbRfhU<3;s{zl=CR-W(={0goDWH|=BCj2Ne-S}Q%Mc6FoL#NTjic;1~lSEM;V(| z-MdZR;ddFzxgG>X#l?oQwJrw+C~l`PeTN#|OoyjqQLSv7DAc;Y>PC)%w9jVNLk+-E zKnPwtST_Pt_pRxocbdiVZ#zSNs1{<Ud96fZU+!-%methcf^z2}6w?S`LFD^;Qo*A@ zp_S!Vg3yCQ1}iwG=jN2FJ}M%OI@UsWfttmXVE)bsoAurx84mPc>`PZdQ@t@vm@g+^ zrt;ZGfIr*Jpu0<)Zz&wx-U4M}V-2i*q&Er(fdm*5np|JP<?=c@Cj#a#?Xa<M+Mzn` zGn<u>=zLrXg}TKqCuZ}REW4`3h5!^&-q!5HEK%64$M{9lJ?WN7m-HfA^ynBg$JK^X zXN-?$Tg=m<89jN|-44$%mEvpf0>lDn3zYJde7N;!<97Vw(G-C7Bi4pOyEln1Zv|B2 z<gx&R#rldqOV0M@i<J6AN5DX*kneM!I;$&ENjM7-qnKC3Dj^B9CF8%;`d6wpCM!2D zNJMj#Xod<><I=u45yo4eLi53p(9y<8@z`AXC~8<*TE+qDl!i;#>Q%gaBJYQLvFAE- zRQZEY#&0>UR&%Yg_izABVZ1+C9k{+*Q>qNa5830^tEFEnYkS$#)6>*+T*d74cXON8 zozOPj@`?(jA#FZG>QJd1CFJ85U)K<hGHSKT0KQUn+^l-VeTYlZRZDYftq5W;yD)!_ zz1aGQ4v*Sr)cvz{<)Z1`E~2ltqvaE5%4#t1q{IC|D``H8m?iN^sp5&4)J9QKc)aCI zqo`tmid4<(nXsCvebgE{vue$IvAPf3D0pxCWa)6<11+iXC%Q<Ma9kGyA)U`?ov2~f zaacM#Xa$H)x+&ihnq{dvtXxcGpg5cK+(qVi|EU)WE?h7?cLq$7s+=~jzPccwCPlMG zsC_D~r>(M10W1u07jrgVICm6tjVo4Ay%&3L5nX|#)wRf<Zn;l+LD_gOw*1)-z|0RA zEo>Y=b0f&+=H{h-^bD7|K+SddI7G8pwM4M)3VJ;U<PR^r(*9Z|(tEL(=Y<A_-UP!( z*pMT5>t}we(h+9;8was)QqhLfZNZzresQ?)cG$}j|L)6YW8XZhvI+qaVcQOWxU9c? zhYlA)UmY)39=FzB%xtn+s0+|6MiL<E8n;}BN=+)Z7+1tbS@5opIi6D)-Z#OS)X#6c zevDurBW+-CuLVV%fc4OLBF_z=8-=~%yI<>I6=<yE=5TKbv2Y!1#wUHO-SC+PrMY$6 zk{wqO!2On;+c-&R=mz5o2uolGe^|u}NAEWuFZhQP1Ek{Zud^<QtlzbAju>u7g-LPB z2v7n~-I^8M)st%}9AyvODAn|mQ((G>*Y{(#8Mw^3q&8@J<HNNMXZJgU%HM@;`0wxS zA>B(eY%u5H1}X$MDE>Md_IJaEuJ{XGm8wlXp@hWI$8Vh~cgcRp8Ywf{$Ff`RHJ+vl zC*<m5-n%)+`91zr+1Ad<Aa07b1Cygbh1ToplBz?Ysb2Asv}`&{(#@kg^DMB=#{d(B z63?J*5_^ucb|rBHG@$RcR9dSkSI9_$Ag2F{7|_qB#N+r#-wNd}M?ykcGja9K#7bWd z-F$;>e;GeFbt3SQDV8Yl%nQsL5AoG=^Y9(b%`aZKj#@yQf?4U|Go;P7$&H$)B0<kF z@3J?W?h&$^`hbCg4=spwEb^u?PF@~N8x1EBH|ttIDUk%FBj89L{LM8aih<8MnW6nI zSj`>&U8<NDII>uvqeOIH&wzq`7>LUE|ALW?;Wu#7h7CpCuYws|>88k8K0o<$w2ocb zQaeUT3G<&k6B%c#zdGK3^IV}$T|Z{-4=58&5-~k(?!Jz+Df@UMi2zRCSC5b`zpwE7 z;lA+Y+iyIcE9~gWoXpRRSb+8L;rkIRQS3OcjA22>v{s}MQI@fxKZz<&-%6+}+1T9W zYzH^3Wyi=t;o<j51_rC`c^eytH`ZU_jmlKj(q@F5Y-wnbJY{_L$1+Wx=w-V-jOQ7% zkujA=D%-#fvpSD403`pvb%rMx9Toe!b0fQFG)_J9J0c}T`juiunibI$(vzck@(|tT zNfygK3r^U~&B(!aM2Opo<gn|5SU7!TXdxN^gy?O5A&r>Zqj^~%Dd4ShfI1d%&oRr3 z7?6!pwgSbx$De+w{nXqy1EkaUtt!|vw^#m}#hiO((0C4aRbUVm2GrQ>Eahb}UHsZ5 z_XUet^=#RRcS^l6&?g@LHg8TCk$aR$>U+=TdSm}CB6h;8!l>UMT0TOX2gT)dNip-J zCcC6pXLxO=zjn$M7~cT#!L#Q*{RP3@)eyJ4wUEPw?VT*~&59TWnL7dRFFRDSm=5#0 zE}Ay?JY}Qhb=d!0^BRchW!2RjshwKMUVwfdxqW$@_*LL>vZY$&z@32l`tS4yDD0LK z;}!@|gJc7{+ZXm^xY=T&`5R~)oAc>CQHio`IHyVaoVH%tp+H-JJ$@Zx*bxx)7MvH| z32Mz^XJzH(`oJ9r1pL3ui^ZyihL)I5p^_F?O-U-Wno(|NzmBH5bR4!OzY2?@c~(6J zv)Mi~6D*hZ_)pS-p&)ZtUtb6i@+*PwBQrA-P=kAbGX#M)<u<xA=hL;S(NJ^}&)8<! zFoYD)FeYcC6M)0p;VkM8yJYK0q{-?uWiYKxOzUq{n>Q<BmxMaSuMwzeCC`zyAmEOt zoC2<Hd++$3y7<V+K&^!y(X+TxRh5utruU8{upl*xLbcL-^&EpDN7K=Yr_GJ0oDGQ# z8x{-mWp-dSfA%P!1tkbdzCyk4j3Xc>6@J*<>)@rAC1oS`0;Z~=R94cz$7}tDDzNE3 z@3Z4ix-BkAMVOG_8BQp1bx?8Xt=tt-Sn2ps(A+E_8iKzJ?`$2*GbasgDFs;+AUZ-| z_@E%?erRrP?tyuwR4&!&B2P~4LKPL3#L8;0XQNrOCkcdOZb#Q4aZ40FRMZ0@w3{`) zUjWows8`+tGCkn#j_6mCI!_j?GkO!?^uvJ1<ng>=2lCExDXurtPXqP14Q%y9$f?ZM z*1Ol)!_Rd95g(0o#K8}sEog_mp4%YYAQ73f^&(R7FzLVH1hE^KBCs#$Ux-ryiD_#0 zY`)cf(dIGsI};Mv{&^WYOuit!m!X8N3;nDPTPG3_OftT;^=#I_WdK~n%nb({Ko(Kg z(ppXKnjpX3#?Aw7gD>oV%uTO;Uw;Kp{qmTX`~&JT$UC5sA;j8^&T`<>lqAcdCu~Rn zgm}p$1F_Eo;kij{b;F;L_KQZw{a37ZPwG!LIM)cY4kM&NvX}w*7Hn346od;Wa;M4c zFMRBw*1IFE_-85O5M(*zTy~d_ehBMNm~Zl+8JfCH;SzEapD58I0z=+Z>$ciFNTj8u z^=qoc%2x1<b}CD3h7gcme<mmKhRxEE<=#TK6H(e%_2hFM7QR6cVp5vmQz5M=)H*Gv zRA<K2YUQteX0A1+==BUMid5>As6*O;o<#{GhI%K0l89j8<XM?hr)EqQ9bRdWu6K?d zEDoNhGQ5U^?Z3*~KVQk_mfm90oP6hbaH;`pt4MdLlsizX<cNig*^Mwp@U=xnMUTi& zgGcN{6%#L3KmK+}To^s&EygHT?FUZdu+dhx%MjoWXLI<ikhKn6M;}E+31my(pBC$& znJ@*_%3{&J<@Zg~a!RJxWA%QD68B40N<na{L|Y_lgxP$V9u&gnPv%)r@5P$|o|rH^ zkT}J;%yCQ=JdCU+XB6;|sQpqsnTl`CANw&RZtau6l&<_sA%|N})GpyFAHS&cInk$I znonVtP^1eFsgdr`OXN)~d(UP_W>LMw#Wi-=xc8mPI~||~H6%zVP`N?O!2*{*2DMyl z4+|ka<|rjKS6mwI0A1*XXGX~|25A;6Q(Egdxu?wKH*dcAt(8XalADg-BoBC;H&T0t z91g<jFGx-~ZuYC8p}3)H0LF*UzGHFqmO86)X{=iMCW3YR<Zq%|r}i?s&2~G518>^M zRyzn?7Yz$jCc{03#~Ek4^jUThgsdSzok)6UC_R=?pzzqoG$xmT5$Z;AnMy+JUIqX+ z<ybI_yzI5{4O1XZ-eH+dL-n@U)~W*Vx66n*VwsPBSJZBF8$5*X<P>UDTA*`sasp~$ z_hIBA(1A!E3$oLrftpjVc5Cxflk06)CTotPv^222^HjlJpu$PAfz^<79V16R0Qdey z6_a|XVymQQpf~m{bC@&fbhJW;7-p7bR?R>PM<hr8)Kb)pU*1o7Wc4*U8P5{aMNYfl z2yA5?OE3MB1YLR2e{nMNXH%GT^X%p6XUs=ZsT3(i2`--MgR-p3ay-6hrV@yT$m+it z_1vTlh88wD^-C=@{not#nDKU0iu{0{DkmogkO&$O9Tq=$hFisiy5@^z?S%KlQQ?>B zwSsczG<NWCq$AuH;CbY5#{!@9J;?nF<9Q}ZOn28Q5Pa%AmRU<owbAjflI#x#c)&7> zh`1wO+UQL{y&FS})9Qs1I-0$BjWf`jMTMT_4SNh*&iXc1<iutopEh{(uDchQ-0~ta zgn?<7Mw(JsL>O6kXO2atvBp3CM96%SkOUOLBoH5gD}o|jlt0UT@qp5K={ccb5SYwz zi)Gex7*sx&KIzFJ<{Llv$DrnnHtOLwak&D>HkL^x9at~1Nbsy&lor;KV$f@=I`c$o zF=R;Cl6Y}<6^d0k(gj`nY!_E?m_EIRhaFr1^M-Y8i%be1I;!}$hY1WD+ZHsgJvUit zuAzTS|7L$(ZpFUF$w8(tV;G*<WN|PsWp)X1l~vYeIewdb&Ex!M%YaCFG?@+f9`H&u zCARHyTu%>Q0*Oo+Xn*lVItIrM)$*O-S(2)4@IaCvBd7LHVA4Ha$cH7ecihCR<qjqF z-K?L`=#;R(Tz=^<h=DY=)9Y4FuWj4YR)+wgd5f!#6d-`7=udM%3a3{u_la5+Yf*z{ zC<!o}?f<p@fa_`UIs@p_!66~6eAbrZleD-%Goj?TBT`MP^&p8WR6}C+i@n1SL^<mT zGp&dFW!ADoA@_cb=eGl}Os!h+3NW;Q=#B*n<%;KY%HQt_Qn57pr_>OzcWAXj(!Mz> zH9I*9`-*UHI!AasIxhdben0n?WiVTA!dwk<5M2*IY1)r(AN(H%AXR5D5<#kkvK34F z=_6^)RGCaco<Q?@`SN9KsY-ga*3_u^`_hM-Y({G@#3G20Zu~g}RLn+!*)T867^vdU zN!ebbilaKgrY+fj;aeX9!)}~Z+{(9sdnzA=^cgxie~)#OtpP&u0|ZJ_pZ4e4R<V9* zY3p~#CT0$cpgqv%zRcw_ta=j<bBVM{9-qE-0;egIsLjcKP5cU+vMMFN^-6DYIIjHi z0D=lx^yPWx)|Uj%8>xTpZK42m>fZ*DT_Z^*gUxCvny8}E&3B$2B=eqlVY(&%d`BQ? zs#K4NK@ZeA;6_`sm4zd081%AC^zf@Qb5(lXuf@g1BZh9uwEy_xp!(+K{V+6d2;ie) z8Py1hh=>>;YA=mmN`tH9a^<cTH8=evT8hFKSUAFev)%wD!uVX*4Jgh*<Wy7A9=cwM zhYx@Y2r@D+8aOv(w>da?q1QcT{+=lYHAg*JS6!@d0*in^5}7`Q9Glpm03BGn3^=N2 zQvdl74l<(p->0vb%Lq9wm^njeJ2`zE@9&Vryrrm(c|jAbn)4&U<VA+vA>wR`;O1&K z3}+7I^0@Qv`>ixS<AbFiatvBwFKGPdb>0eYFQNaK5X+r@>~h2HA4af>u_PMu@s3?j z%8H6iX*^;CoR|9GF={mQzfOKJORx-cMw(+t=Y(9-9z%xT+Bi4_aYUwYF-0+Gsm>(- zOT|lNiJ^CPL%94<;Z+xv;MB|`G%pSf5`s&n7^>m7ma|nA6hQ2__^dQgb{Q!Y@rIt> zS2=HpQqqesoP!O*_<6Eu(Z<d$mI2A5KZIqQ083;v#fe7qm9=h*#~JkU@=}M~8p_XZ zHUGZm?LW#wOlTg2f{;DG`|3<<k&d)kckp=KJW;?s+2R9W{Q+vLC1A_7L)_q&=(Wb> z51X?S#xrPjm+6c2L{n7$XB#g3gz<qymbe`0sh<-&^oX0=>qyt*HJU|_G5H#jf9@j` zTVtseMI}#CW4&lNvRPDQk;r3Da<VZ9u(H&Dw#f#^jLIRy`o6xxST_Wu86Dt3eJYHl z`{Un%@$rR!i>Ht_5ep~m8qL{Nz@dPi-XRJhQ{X(u%?bC6**`;wP=Ab0=p$y>8TF28 zRR&^d*|9ehn#k*j#mIPE`Qx8g@@5BsAV(U%!t0hZT_E&!Q*bz=Rjk3ms>*yyv*y*m zk6UBV88Vt9jjCFT;EPAG9`t=Aoy6yyYr*hu7qq~X+rQ9=$?c5@=}o%)^-1^n>*)l5 zH>E_t1Obz3fsKvL=QdxSBK7jGfO>xw|1D6=ZnaCc<<9H-e_8Sx9L<#rlpb+f&OY@C z4`)!$Lky96542BCsuFHtFK=$j!=MkS6@G9J4Q<=n_DcK|rno$xgVj6k%2kxO|NZe( zU4zH|XeGyG439>M5Hs>m_+*pUZSws`A*<`v9KE~W$wWAdic(iSa^&{Ye>8b`Mk;2B zdCt$X#!!Z%I_`3|O~Df-8x9t(SwH{&JmV4|Ax!&z#Oz%Tg->^+2#rcUxk%vY#&QQ0 zzx#QraX+4y(^=4NZU5pq&)N0KCethC&&-9Yw~u@Z3(=C;AaA+3{l9}V0l++6;j|xO zbX}e(6=!C%+)mNnP6Cp&fh>HbQ(9YxO({=~0W1O|^%jS1DYx^z?!Gwh(H74Xbs-`B zb|X$}XhcRv>2mGH-HkoZ{%m#E$jEZ@jzXTCVSC3r1JA|9J9>>uljX_ce%p;o&ql6d zO-CdXEa1*rrOEL1E9T!X?0{BCzdGA}H41HVO?fLSWxv)#A{9q_IpguIJ?@ZvP`Pj- zbHZ#@CTrviAV}lWj!-u;?UsSSnIWo?Mx5%2wn4o`({@elji^sW+@db8L?@%+-$*13 z?N>gBzUz(%V;clSyim&0?OLz$&baBv_rD+U3(&FJuDqiC^y~8ziz(pN+xi=2v3L+3 z6N8<=biKM9#nS8CR8m5M!=xMgPW-$p>AW*EA(h)UdLW4{hDnd4<M`f#$86pR14cbT zX=qdZpcf|?Q0@9><p!MwnpI!S)YEyZ`M}CJ-MhrSy@r$7Z^%eOhx!vrbKT*B7V~w1 zCWD0C8m-_jun4dG!E}ulD7&L<4C@W}-19p+?CA+7!Y?l`XYtr5EOoQLJ}1T?Ih8DL zyY`1Y-T73K@S{qy+3INhk+o~rCSMDp0Zms|%XH$`C4`_Z%lWh*iQma?UWD-u(<6ho zSXFu~xA-YIHaMl{tdF=^R4fdKxF4_eb}o9C=IA!(?k#$MueaZ%y6kXZ)N5%6<tVid zFM>^6TpZPGvdF4pei%kypq%$sK3&_EgrAptdMsbjGi$w2jmdapfJY{cH-><1<L|Fe z_FyZ2|8Y$IXDm<uIVs}7U<y|-o6Q4@`7O~eTiBX47A8;TQ9Q3sKhM>qU0m$xgO4hU znSn#y&7pnJKMOvSZl=w$FpV22_S9F$wzrSA=PN4rf<&8)hUR1x=2|?l7aAO|EOrmq zB;ROS8l{%z=R-0?b-ZpJA5+PtW@=P+(W^6eliLt+8dWDRcYH%xTCE%|^XQ8;1sf0h z)rF7ksu!hr#C;q()yYFdy1;e5S}D!;7=*&n%o${wwjAk%!N<BjN;y)m7)XV@uvArt z*iA>1!DHS3TQD{SIypI9eun}AT6kO>o0k_PD99zS+L6}nY{$9+1K5_qhA|z<EEv(C zd!HqCHq+>g3K=HJQ_edFD?I#oy-=yzjJT<(CUa_cu`sPWBCRJBpXqYHw)ZG^p^~b> zbFRkH_*i$KqS+lz#89eQ{EUFD0W7f<oJMOJofh^2olMLkLw853nafI^GCZs%QLIpy zZ+7BT9^=~;0_8lp?%v*DjY_Xj=R7>N3^y25po7)>t}<J4RjSsiIgwfanZEw=c!4sS z&q!9ca;p~`1~IQN;^tB!g%e#+(EaeVs5g%8t_izo_*JopBF<w>lCF!RnC+1)B3)f` z^pg?r!aa#23(O9BRbO5<IBY+8Kk+M$K){V$r!kr2b-JKupga6Pxl}hzeOEnOLLZL_ z;Wt-X%4{_sIp5%zGFi+Q&7{X-GK}c3LD3JUQ!A<X+?Mg2a6H3erlKoFaAPUgsCUKW z>c_?1m^KSf-7lR+O7FX7ibvi|#dSnZ2{sh`L%<9w<7Ds_u`ijt)F1mD9I{-PttJWz z^N=gm)r+Bt5pUWC^uJ7engG#num<^E4t*H3IRBREpQdIdOsP`JCQA*a@=TX^gz~%E z{hTl}U2LHP`v$xNKM`jUC+`W6!{6$)@Po<;1iIl6+(H7rb5ySzTYoYg7ng@1FK`y2 z{?KWh{P>aIurp-hbmy#khE3JS4>dATpplD8hnLIiLZ7=M5M6)bSM_s3_E<8Jz!-oR zk~uAn6#4EhR=HEt(k>1f{THwZUR|L4-fMEtl}QR4eT90C1u{=E7!{=-?-4lgG=5;T z-ZB0~MO_R$1>oei!Y`GAmLMK$YuHw33be(Bj<MEy@zNV57~>So>U@jmH+EC)nO1Ln z0ycy*+PMGIn2|5+MH-a@%&3;e#+}pULQCt_aarP#M58UPCxKw$DYkfM0Jdvu`iQQ^ z8g6p5;z~J2hd@9SaXO6{uLcObv)G*NBVO}_q-beY81<(9xDs^3`I9LstzKvIlu5Vg zhfy!qT7SY+g^%6&Ypog!$XX8!`(_@oIjr{?@EYe3+qBfz_rNiwfSDz9o2~EGA<v<u zcb>$suhsv)()3s!W=oLU!-v`^ncvc|SH=sre(qyYgb>}w{{7>_gYf%SFJH<1rxyTz zu;9+)jd+VrG|Bd~qTXH{^|*HPJCk-@PYRbcwZa=x;JY+gY<UpNsMELS_%csE1#=WK zl-kir;g~AF(`dgLp~z!sf4pYub>~Tv!f6RC2qPehfr#}!jy4^y_Gr9-4JbOf-gkme z5n-9s<+|=KMDoUx=<S_{5AWQdvQdlu;GEjh-rh~8whS$~ODMV1=7GS0P!OLFWH>&K zK8e+H^y~=+Mq6JWZJXLHDZk4rpAg*syE}Sr6z1kKS`#P-`C55zfT3pb!5svaBy;~5 zL<C#s;rAn%0Y@i%9o6PsGFF#Yu;<sUKVjZ?w+SFuDAe2Kxa<<m#Z80C*W~s}b|9(J zhYfOL>)?<L87{rpNI?X9Iao{d7$OkvXw~LZ><=gX0iq-a0l}>qN*>hearq1d1oD{S z`i2I=$rLP5{rBHO;KryF!1;4xw<$GU%$;%N2{o%u20jbGQp}KPu8ssU*I3L10w13K z5FDJi$d=ED(5|<8l@m^YCFFVaJWoD@C1r6A4(Wbqgc%vOx6tU9#^;Fy7+?XLwEMHb z9>OY(dZUw0x5o(L(}cXEK;Kdc5$=rFmnZl@u1oPOeg73}zR@`Yq*E5tQ5U!Kn`dfj z34rwlI0qzq)47@)(Tx7sUcbY`C%%3nGGfn21fH>0O*9%XZiR-)Bn`*aIj-VSoRIHL z3IZPxR+Dl*)3R@Mkp`Rn{w(^<?XY5v#WwdC#w+H;o}SIq{kbul+yj_*d^CmZgN@s3 z%(9A#mGyqABaFMQhif1xmV38y0aTRfxQq9kgg@+4;UufoJg@?g2w|*)rAG;u%;3Sc zPtlm?v*N0)`uH)?`%2?{Zzhr3_Ia^ZtwaTtO|fn>1`rm(R<{`0e1=QglOwHGXS19s zc^Kj9VDVG<k*py8%a@++2D4SBN^8!n<kaL)Snhyp=);V83G5*GPXm5(UYEw2soThe zwmW70RyuwlkZl<}{(PNnXf#D=5`k@ym(2RfW*7daW{=Bg5K@l^xfTiHo88Vrz-m#- zl`-v@m@pm7{i)kLJKsv$^Yy_unW4Y3n~hn1we=5zYjfl?(hqG;Allb(_pzTMbL43A zU}JR;!=6w4`qVZv)0;UwS)zmOQ>^8j*i>t&b!z<pjLq2ImV|@ASZ@~t_#Z2datOK0 zNI{?kVLMGOt!3k2;qG8j6(;~JOVfphcUfZLT^;Y<2@1|VSCh%$!}rOgHhExjc|3w? zn#5`hj%UB}_1qj<I69t{ih3J>ZaSRC7pYpvL2!KV_b0;(0ZfF|cQ3B}BsK){&;*D1 zhRe_wG#i-i=ceISxo0f3IdM#Sl+Y?<zB-x_F<P@n0mB&#LR37Xj%gkBi_E-tlO+r9 zb7e?OtkoLb;Z{YEb>#o%v4R%GWo-ps?gKbkrQYcDpxzGmt@&gVz;_YP2`Uszv_FB& ztW;t2^nCw>v%!U)@_RhBzT1X?>#++^h%Z5<xz?{1W;U?{psOI*9da3h0$VdDbRwEU zLMM>1a3ZcZpJ*Wf4tG^TM(pcYPBvk=&E7)1Z@A3Hqh~7bf~s3S6{;fck`Qs2FPgHL z4(QYv5lahY`e;b#0oIVuR{iefi8mE3ZAf37`Pi>ds9-6{7Hgv4Q?L3`GNZQ=T7Ot- zHqlpMi*}R_DprqCLXKaN8H+4l*Org3;iPMAe&YTC0WmCDe2%-5xw0wo>=x?7Mh91W zGbp3EvWDlu`o?{+D@z|py{=68yCXB!MzY?7;4#RwdNprNmoM-^1~*7U%^(o*P`p9) z8Vd>{&Kp_yfew%T20f3R5tS_Alrsh%<>8q8D!0cp*O2=p0E*8(E*_sB?Ar?6vPS?E z{bx@1!Q)dh^GW)nTt0`bC*bTCtFaW-FTG?A^MQkfxkT<G{PTT26lBZ|BffqB{3UGH zNdUSi|9CGLT4I4OoJiG5drm<T<*DCF8y~GwphQGPMdfsG%Bl(QbmI(aM$_)r$n8_! z6vSU}&h@DEe2BNG02a9l3%~au`{7eG+?V%0d}x!y(JFs{*4X$GO+lrs#V6?N!q;ho zTHiNhw69(X;l5DZo<6^Rz?DW+)+QlTy1DFn3bhxaI+$_IxJb4CS*nNMAJ2f7`auus zEkbejiAD1DWY1ia!_U%?mk<A6XKxi(Rog|6Zo0d>LmH)1T184yN<yT&ySqWUL%O>g z0g)1rl<w}1^YDKEb8*hOJMV@3_U7Gdv7VT7%rVA%wh{|S*bte4_wU}l!?ioOJ6)Fz z994h&mXePY{bv-J6nhHgS4g=ljwHW97sP$4NQvy}>7H4&1DNp#24j1f4vd|U{QA-; zLp+oe6}z@ZNUCht@ng#^@BsZ)xelV^>*t>WVlgf_uu4`t|5_19$z)c${eu&zMWZQ1 zeH*X8nV6eT4AUVJiJ33KDxrhJaf-QIKesqQwJZ8%$MT9{!v6Q+m!E5L;2%ub(Er}V zq+NP>@&9_WXI$hM`NP^w<@ih~^A)*&H{*pXPZ}D&Ecf#L#RRq=B_g)9_)ima(;U+` z%qrytf!{`cJeRGf_uES{`=^uU_E1lB4aOiRQ-=L1j#3DS%~a~RM%mYpk&*Tv`6l6? zLv{6(biuC2TwR=vgnb-_?BCth(JnZVD<w#nMkt{wS3k?6iaUqsP3+t5{!rwDl*^c5 zMrO&?V1_E}DXj5X3vVc>Daz5!O@KN}I?e_M+GL~^+R(xxz;u#<X6KV)wWVoMaqpNj zL4(z$Pfg8hJT@`hYUM-cE{yBrMVVg;b1cHD(<Nartr&ociwA$^X$1?5v#wuR#K*P> zug_)h3~X22W#wtPTD*cxDt?Ueh4X!cIL03($NSfuOYm^<Y<3sv0D(v5h_?S}6`OV` z0S^3kFjosRQ>iVX_DwC;!o<{MZDR=H;!^el8q7+S$u0F)Bcs*+T7v$X-c7sH+eu?^ zfehpX%ry$_^DW=uO_dVTdNb2V-S*b?zn5B7`&9o1KZlO|45eXMIcOtnX_;TKv)@%0 zdpM6E;l;K~&uzr{U}rbm>`VfGK^`V>xrb|7t|=iwrUjx#2Tg1Dx7SeeyA4{}^e{s3 zk;lK7Q6X*KrdpWM1A%RAZa;pf<>peu3!+Mo%yZLueFOB~&CL_dBQ|0#tm3Cneo7KF z7Y7T<dsx?M(dC2h#uz6ryth4{8J6PVC19d6g-b9^RaMp6%{6E0Mnv~5GgEGV{Mp>S zIfeZGQbn4_5aFAiuAQ@5&ovdB5F0uWUD@5!6QQZ;7sL7LRWZjK^H8AWb!S)j_Kleq zmx?P(z*sK}1qMmaq4LaH2)p@i5~ku5OQI5g#duR2<l=IypQFFIv0?K(DjY$|pB#`z z`N8aaz9!s4gX`L_K<2@b1dI12AMlJ0{&_+G$ItX;mHu5@=%;VN%lH9s!K({1)^I_} zYB4f9@iu(?BZcBLA=vrG3WBq<8mmX;t=NGIH#bNCBK39odKR4^Vjp`45_4ayZg3GK zv1`M-to0VD7W@4ZyfT<9;8s-15&j3O^vB}*U&u~~amX|F7d<{pIY-i2Z`?HA$x#fy zzWXf0pAn%&xn&VRlc~NIZSzDyK~Z)%UP?g@r~Ke+HeFZkbZDn7;!Pw}aid$Gn+rXf z)$DV7UfA1}jgLnxw)R*_#lV2z?ajW}?22GoY$|?T$2Dbpuw&}t(xfPcCHZP?XU8X% z`{MLw)v)@y`Sa&@AMS#P-q3&2$D&<&X4={+AQU!Ztk7wuZ~CdG(zUx@2%ZIFx^!Qe z3VgUnk7K2C0i_#*eBHg~1fNCDk^AQMu6My5MuX*U1H^$xh4r<yfQ@`>7qWX|NK8g% zR9P9z$8^3_<Y3BQKA@!4J8Ii)vRnOiES)?gsd0jHalDK&lKS}*)ywS#K76n^I9c!m za=3WP$WQss_LH-D$_a8CKgth5aOZ^*QA3hnU1%Y1<x(OS8jtihfAy>Iflw41Ty7~? zXFY>F8m_LlGyY`qr!O5jkn$HMet2NJyNAvFoh1j<!BRB_32%#-9DLR#-BXU6q?F?A z>D3ZMSeT4YkUhJHGQ`g3#}9teAPm2SU-ckLlH6S#iUo>;sM(`ZUJ@#o_E%91Q<A@D z#FFUKr%xs=>6EARh<-(kjLgjXpixc*Q!+N2+ZseSzyE##eu9V$UVv!#|MSiJ<+YXW zb-milu5bI@6SkUx@6H#S<-u!Ayvw$aYZz#eT?ccrdioRanwpo{<(450maV-rGZflv zNldD*P9Iz&vX8EI-?WXN^ae*01avwdD>awKfBrmYGF5~J4Lv&CR_66^6AJv*UB60% zOVr9y953fzc38801|~(8BDE9!$K=42H@k)mv`YcMhkpI~`77bb@43_Uyh1!*kapwM z_k;vJgFo3S>vFQP1GCj{##<cKZ|?5a!A|1fD1zfji(FaZ_?_7f>v<0_3vUvWda*-p z58SiY^OHmlS;b`Gxn%6nSNvP|Gxuw9__XriJQ;<dHhDLf2LvFmb{q3QK4MU_vbN7| zeoudZv0S+70t_`4&N*?t+4Ngr7Cn7>lmVoVUwu96+S=0a;%FS5eU<STm5?j8d_qEB zS`3|th~VjJ@AG(rr7Watp>gv|o4vg~7SSy#K7J%61B1HRX+eH|&u9e&;4RR#7Ot8c z_en)O-F(N#wQg=siTwQJC1eVT{rs%-o}cnmnm_n5C}cuIG+6MLI-fQ4X2IAY?uA#| zdV*SnfOAxcs;0(_Wl|s|CME=pq`}~HjbD$05CV2+hQ5gj5(5Ll!?AZ(_{6K(u;gTQ zU@+-P<JCvR=nO9^x(EIsBmw6mpMU^K&?_#z<+L|l>M!PhP;Ik{Tv7%mpzNLelkeqz zW3GJ0{A^9X&bUv0q4D>92N{`8Noi?%0PM6&PNPV8VH7e044)o$`J9gsQ+ciF9Xc%+ z5>HNSpdh6Dc415!#Uaj3*$0!8Z%!`F<7RC@$v-e%$_tmF!dyz<Pk1OA2#UJBnM#I9 zfoAt>F|fRIK)~y+_q_L*XtJeoadYdPoh1enCH8Jmx!5vG*qsPcrQd6|v!jBeJu^KG z@I=rTql;|Gg9t)S#OotrmRdSCzrNN#)n1SIv<%(@Eso3+*}ha7Wo-&2;b|gT?QX&# zaxXTYLlDqOC6d@4vkQ$;<wgW{{`{aI7eU2$rRU~G)72FObLc!(GL4uD{JB<3#DGV= zb;1NQll`R=tLXD2>im3=$z%ZuGz|OGw96LvtXvw;PcU2)<qL0jb_m73bW%x2rbbvV z$4MRNw!7g7yQ7O;?xE%UP{jb%=RmD7J1tu&4g)k6p$pdGLSs<revL=3<L)0QH8p%i zMMcbJ=erA6huuFIEiGt@^=3K_`#hLbRQlAb;Hs!RS{T*Um4K$zOirl}NY%8Qs<aN& zX}v;Ong~FuRcvkGFHtRx?(if#0cb2`K8EKXsKwyGf=^DKv9Ui70K|V?-Cm9~8V*R% z!0h>qiA(|h4jA|dKVM%s6;<<`Z*p%O_NEBHK1m$3_UT=vq^3r`yK^&HYTK<83e6I5 zcG87mWtH=F;Whs&x!2NSk-`i{H6TE!A7H$k{QT&l_-*`V`6r~L;r<GpdwuI=6lCNx zzkOl%`PH+{ctrG$sMTJCwcjZyFM}xHxEJo@bB=wlZepq`Rr^gY;2X*f<Ev^Yh@IVU z?CQx5PxGDK-JUUPcJ3Bh(EN9Mvg!?LCnT_gb`}~D!2U3sE`fUcFy#ss2?rr+Q>!)L z{ob73+6#S@BN10p!g4+m^2zuI2?&%z?(u$14M=1?<nZozV_>+PE#`m6@%pu-#esQK zi<=%e<AK_i<#P>jyE}%2;<(&YsWC*Nw*?W&HLTm8tlAl5_&P|}<-YTH=kvR&xv;8w z%jk;>2U0<NAJ_Brz=I0y-6-AmptY;Rdk!8epAuDW+s$8&4m;y0?7DsUnrhl?1f^=_ zF#g>>X=(Pp`rO>yHqTFZ>B9Gd?Ly=jKv@Gq*E%LPHarfFp-O2%WE$^ruD!8)K(Gwb z9N=o<U0q!-_PB9_(KBB1M?}Ql>iU2}GLIz`kJW|PWC7X9niT4Mqct2qKfiW|huk3N zJA9seIcE(GSX^A(@%H<-57$`~dw;oo$}QbN8=oKG{q(#2HX&yZEJ5gG!QdIOa2;@3 zTBgTK5=JU(+ymanZ|NOrGlUxJfda^HzTO<#XSVp<ew%H5A`kO-mMBbhwKXg?v!xC< zFK=%MmOm5(C@4KOM(3PnQ!&)j?<bbk2}L|^C|aBjX|Fn(n_oRV@T^alDuSqkX}#2^ zzcX&j!EFh}UP%^M5x(4n71HX=E~cxiyK~oQJ*3g*!VSrGKDG)>bX7XwNcre+v`7x9 zo4lZ;zBEQQK-It`4f_`smab_2Yk|KFb2c&Ia}gr%>CLmbI?$Jt`ZsX7Z+voQ#3A5d z;(u^pQKr@S8FOi92oG$Zi9!YEHZQUu^BL%qn^W#|fdt;YR*-9AJSnntX6uF!@bSNe zgtbI3G_tQu<dymr^C>7;=a|YuTy8jEb8;FnF>Nq|F^>CuVZ5jtV4z2P|9QRv1N&BE zmUR(4#`YLR_fiJ~NZx_zmuKsH(^?^so{<$gf}s(!v_LobH`{&>(QLHxO-{yKY;(mQ z%M$GY!xx*90;jHyAvO!-%D$f+V)F9nfTs>ADnj71>B5Mn_#(0XGZF$RRckgJBc}lB zAJ+Y~wanWtC`i}(K+fx0D$ADJwTz4mG<$pHHV>kRJQ?TpSx)bR<xVn)&EdQy#HVy0 z9u_uTCYoFalZ3<%Al{b^84}SJ+|||VmlD-eSm|9U{EUB$K}}YP$NV?f&C&B?%4>9m zOd+`Ne!oB|n&SPv7^+8DnupVM8U4AMTa)RM<|)Tdq>Wbpo~Mf$o4icT&GmQxG>1f@ zbzdE(#U$V0oo@@S&(~{V&kRIFeALi#7H@Y;EK=&lm5I*mN#^WbJ?i*W;>H@80ZM*K z&Qs=0(de9?FEh*(8#}@0aRXZ*PZk`67707EKV3?r)&?RLqlT=IhYJH38^)%>ii)6m z^Ye7jQQ&qqfFTIu<dm^;*e*86S>$>D7XlEdIbx(odd9!5Z_H~KyD&w{g$*l9Rr)Yc zkkHUCP>{Jf{*W*?D6qA_FzLi>wY}Pp>MXe8f}2@f6aol0`0>6G<uBuB7X0)K0*H^~ zLf~k6GXz2?G^@K;BQGl(96k(RRHD{hZP=<*p4y<tRpYR$9cvdJ<%NVE3`0V~Z1Hao zT}mqOi*l?TIBRfgi-oI&lgH|$)Iw|McTnA~Jjk?7P1hV;W#QmX5;{6^HqoM~Wx6^9 zkSgnCB@oaK<~QMVbjWhfYHIgG@R;$DmK4NJW?BIW{IVmVAWQ8y_{Shgf}>CgZ0u6Q z)6+@8;t47)=A5<Yr=Ff(wtXURmepeDx4k}+c!{wisnaMU*GcTB8jV&ciR@p(>*^c; zTh%o?`)*BOXw?Q_KGG}^Px$BonCJnC1STdww@=tk0A52NAe3gqH(~eWQZtezvN`%T zG~lPFZz1Vy^9p!Zx}KA;2)4@marcU@qKK=h6|Bs6cy<`9ci2!NLi9{cPi1EF-U0Mh zq$Ht~7u2EXVq`=IHX*%+On5|uw38DLfWc6*va97H;O_VleLiiM=YxYL7dsPDU;BO& z*uDRY>hFIpo%f)W$OWWK_@SX?PSZG=y1EkNfA`9`Ue0Bi0C<p*b$vy?HvZD-g#xZ0 zK}6G*bqknkziS$1l0OCayOW5Jt~%58oDxl`{PU!1-P8x{R*MrCAyQFtpK3!g*baP; zM3xj9rMWYiR*=_&YHDf*>s-NBRI6Ni$p(bNZiGk6-l*i!46j=f3MzsErQU*iHYmt3 zP@p&N@6ba?xI2QU=RfFPA+HD6r6obzy(xYhKGKT=)8Ldh455#5_>y2u2M2E=rlz<S zTdxr(3)y{=X3z-<r+OlYaAf<UGBYbEvp}_>1Z%a}<e!}l4jd*UJ8i%0lv#R^K0Aib z!g$t$XJuvWu3uc#4hRaOdHtIB`F`1$mX2<Hb68`s{a!Jjv(@eLn=j3RC|pJ-cacKY z5nNOs1o7&Ep56<O5C1WxLx_sWBOiz0n*1ZZa&FZvQWvNzC6DOnHb=hg?5W{kL)%7r zIys?J)8y$}S_U$ysstPfdk|7zM6g)AOS9_e^l$f!hL*yI{EVguMI(9Y{hbmH)P*1? za9pP0K!eHLANWX;v``1WzS#KqBmx+JO}|m8db4?Pnq%N&SUX&Bo^2c>V8NHIVtZ_q zY07uxe)9%pVuF35KrXy<FJr^;wJ0`rN6+uFoWV;F4qxW`1z>Ny=TlMn&S|xX2n--f zMKDUZB`Qi{GZh(CM&W{Y*A$^NGV&kjmj296j4Kjs#Dn@MKVV?JduRx5Z_li%+LXyo zl!gYz`B(&3@a!80;m%@nyGH9n@%GQi5y%FaLA61kV24L2L5OvpbO8|SVPhJft_!P9 z8e>9a<4p{cXA~POOj)IA0}8p0m%T5{H%Nm(*-?E(%*DaNH45SzNK>&`xlJ|z=Sj%R zvq8gPh{?&}VPTD(k+}v2ZAGe$jEn^IrS%(h_w{KoTBuCf1G*&~4-^4y(*I_gI(~z} zJt|b7$u2Am-<!TXM;mM01a<D#NLu&uGv&*20O)ZQ)M9=uHI@s~vvZCtRb_d(x(~mG zk1vP_rzAiAHix`*bA$g|HW%_Ul0<(zyF)x9M6@yVy|OwDO%{k~GLjEJisNr%Q&ZvT z=;&hiBZ=$#f-#;YB8l&89Cd<h*QLdkm30aZ#Y@$AAU<HI5|hcE>?F<1h`IYfZBX|D zcgDvN%XHguQ3%4^+@Bv(pvlN+K!rdlA|h5rK9t3zqO6Q(e!Vdyw4IwNe7JJ#jj3Gl z`{f3+Km>QYJ_;&P^{%`IQVAw9GBO7*FP`>2Fg^f~a#sKBY*<uWOjTELV@$)u&d!dR z@IoB+8?0`RU1LXXo#knATYB7G5OH!=qTsqKC;<B591_nUh<t`kkp%(tRyBg(Nk+|+ zwtG}WL=Y&Kat_6NdT0d9A^?Dr9scRpEA~}iV%`DxV?sU>J<r`Le=_Kux^OnmRj;hr znJ#4p``z~WiAKBAi=<FKqZfc@PR~2&zP<q5PZ*McO-_fYFL-ccgJQPXo?>ksr^@r5 zzWb$C3y=^KgNh_hf%r^0UOF@6zmMJj>ILHM3o4eXm?>5!VPli!)O$;Tg<);Fvp7ed zl9B>yz_vlE*AJf=-+R$W)t{dmBSR1q*p*x<gX^(r1qBh9)ye`33g8Pq5;5~cq^6d1 zRR@XQd7aavgWw0}?Tv$t4Ybh8T(xpyLXK>9FzGku^Ot<m(d6_OhL2!OGlg7{0Xrow z&uV5?GB`Sl&-deW)rQZ;Aw3ETMw$xTfru!@<w;1|1nq3>b0AoGffn0aThzR~>iLaX znVG&h5(D~I2Xxp8WXrZg!{#y_`W4#EP|nvQ<CBy9zY@ZqneHuUX=#yl?w6lM)~AZ! zs#I1)>$abvZ{9rIqQu2@AURq{7Jdl~<Q2H1d;O*scE;#s_zUy%!O3`y2Fobk>^#pK z)ql%db8Xjo{O-fTkO7;|s;!-FbH4Q%67w$q#`ShG$@jPp9}6omlB9hC7&RRBzo9@t zjT!|iO2FBvj2Fi?RGi7odTcX4S%h<e*x}$<8hYT5;FFy_Nhsj(wmN_W^7_piEbKFt zs{AvChfS#WQI4!7WKSZ_WMr0R5%1fOOlLd(QP|oZgV~0~3eFY1b#I-`GR7Xu*be~l zr~4Twm}u_zSbDEhPR<ul;ow{!z`Cc8N8;vQ<ufqQHSF@4c=!H29?|WoaJr6;aQFHt zY$T|0!fkI(kO1i|CMHI{x*9t;GJ@Bt!_0Gq=JoUut7b$L%JT7!6}lA=j)ZT%F#)P1 z9FNZycv7y^$*;RcMsQM6KKr>34T)A+{liBk<UnRgB#k1Sd!?}q12H#e_EkKYJULxw z09rjUU|YccWim+y+x$6|i5pLF{iHE(Dr>UFLo603Rg+}o<ZvKsU6q|Av45drWz`wy z42kjz1up;!+!tR3lcoQ+tWAClpd;E;UwsZj@!X+hHXcwb#l?5_PCFKlBi<Y<)z&$3 zb8%_!2nDpY$*MD)_fAa_Qiyo4RKGbzK>w{Jkj!bA6Z7RQ2yHByb=VLNyA8}(^xXtz z-k7*JO%}nfV;x9A0a`I9{V6@|CeU$goR?v_xmCe4cXU;GoNjq%2P{`D%yRVuE7%K_ zp{3=XoZ9d<n%qA&F3#^?Yx{V$p%%n-!LLc1EtPv879kjkklXCFW_^u+y`xM~>9!ml zz=(*2@{b}_z%G;$law@Yb@=pBXn;#il`jysIvoZF1`;j)Q%7{9?W^n!6QF5sX7vXg zr;tz^tkeEXqqyFR6d)7f0p9*z^Z+_!VadnY*hm!ff{@C}1-pNj(V0zgbcf-Y=ag!p zC9!3^4ae`<&jg2N!UC9FSt&})Z5D`5=GHq^2PZB;!{Pl@;2eDifsm)ad`Ex-Duu{9 z%*4*o2j@b+W5((H&}Kd4n`11-FW>(QP3QX|O%vP4+{;1>k9U{wkc&e>QXZa$oh47q zmz#HWL4&{~@%+?YWwTlay)2`q27HC?Pym~VYyG)dBO@Y;wEAZe=!6iG<`~mZ0f;xG z=H}*|g&8pp6dKEn-_amPQ_;}ifNU$9j|NUyWU;U)!z3kz$BEzK;AxQV4dSV4I0^uf zUk_vt8yiB}i;r0%z2k*r9Br;R>MVk;ZyXc?1@<I2{r<MeB7ztUfQR8~PfDOb>qGm@ z{ZM>c{4_K)dROndD5(fIV52){d}89~&O|R52nRx<M_q)a7DuwF>1o@eMI+#!@QIS= zb~u>D7j%9?uskdQ4?50%e7Fp4U}_q5z8!5aU2=(tf+F+j5ARgDxeowQ`lIQ^eue}n zXN!1^<a1>ybfC2I$75bRJ<;a?={vZ&nW*5SE$#tD60Y$!oCzq&fCJFKs>(*ln;gc` zQMJx`nfU5T7*wf>Vgk?kj{94{SjnhXW+S7a!50@FKLJRG->KY48G_E3$Rv1pkFqXu zk`>|h-=TfLMO2D&sWrlr{@YUc_(*^X$-ye#DH37VrJ%qdB$*iiUeMFMX%bL^p?G=< zU+mA|&`6^WT?bT)4vpDHurHy)!<4GAzTzO0DlWCM8m{uV)da;H1(<A>Phfh`$>txh zn>jQz9&{<bR2!6!Tc~?|OykkDxINde#k1Z0^B!2zBI6lgPOlDIzq}#X0^Z)Po6|f= z0mqs;98%ISP%TMbUE(Cbz(aJctbU2c>yt;LxVk!i{pR(maCcoyy%7q~7FbxeNoI^< z-zmuiufzZ%6_?pJGo6m#iO+7d&Pp<Al>Qu(ni`~8|GUazR|q)M^4`739v(0H%AW84 zM_)mUY#Sze;BF-sZc)_7ltg;tdPev{Fo7Zqj$xjTuD$r=78$h-f*y<_Gq8FQ$NZ{p zOJ{VYaxPSBm=;mI0gMs}ApiBpGJ6x4z6d&#`}p@#zKDgg75U?Xt?5cJZ_vdsYotIJ z1>Cy+pZvMx*G6T7uUznA&1bAufxD5<Yq4|jN96EoE>mfVq(1ZBcTf8_L(vXwqbkCo z&ioR}$}nJru{}b=C`00YfNcMQ<X>1nThy`;5JmL&|6WpWuO}h!Y0Ky2_J23*X~}U6 z^g@UWso|nlSkr-8@fHRj{bM+ix|u-F9!@aE)@T}UxRrsat}6H(6-Y~d128)fDV08O zY$hwtC<ez`b!RD;4?<UzlrT*cwKTcXzVP^zAK=)M!i$`h0>d;Dpyl&fj<r2q5~N@B zP03B)-qq|xH`dUexL)G_T?~Ci0WY`{eT)}1ekj0I=Nvgh!A^q)T!sma1s`RPc+bRQ zR)adWGGsjUznky6oY$}591!aHyi&Iv!^rzjD9HT;P`JMt@-!{7tohQWcAIzp55M6} zd_rl}&u}dK&B&L~wRUzfu?fn0gi@~f-*NGF2;?yPMB&K(d_wx$RzGz~hpax);c-R7 zN>+avL5HlR+i4>W^w{qTzxwN3zd~gOL-edPPDgLI#&9LukcW9Ar16YG;WA%jiC>W} z<|ai1Orv-c=T#+UcqS%Ay}2DmKZZ%bV4X&XUl)#9cf(Y6ah$Q-BCA)CvJo7M3Ndql z=Y^Gx>iG2m+(w1tR81}JV3-%razt>~7#S$kV7L;L+kAV3&%^c;)OF7beiVe=)qgC; z#|FQ_lWpVXnnJ<b4r^l5meWB4;6LHDHTXrJDBBV!4a>g64eN1WQcy^6M}R-E$YX89 zp!frB1$Bk%%s6KpBg_A8fcK%z_gC}Q$gQIp>HprT3A%cP^)gdZq^|be>k0bAv}dz% zI>fH7wuw!7gc4_z8+Fo{n_-RCYkG=}=*JZ7@X}WDR#7Zyc6R)zxIF9krBg;^&QycU zwF#NSgNg5RVyiXYL+Zk?3v>N?2z*_btEPUnyA29NT1frFmOI`#%|k(3Z}e0s&JP63 zmPAA4TOD4Vk(+p8W`}N$zSq;uXKGu5pyr&w_on^zlg>$MoNHXG>hijp^QEs#Ntu`~ z=`_#ThPm(q`zVNtl>fDLwW+Ea^%gm;BPa3tQHJEk#197sx%opcNb%FdjC{0UvS?)t zEl^cf7jI9+m-<B$Kh#m0uTqQlzsHw^^Z%dJ^sWu*MQUPvub~19h9iLGHZwJl6kUBo zAW5qUMpX3OS~O~`d&vi6J?6m#*C#$w@{S+h@NaJ~%CxIpzj8oWx#>cM=m6{jS4lCL zDHa78?A4X7{<8hbsf(hjs#M0_mcg;8CowEdUW-v`=fwrrRPj>&yIUBay5H&0=gFzW zT1904>0ROlAXKBLHQpI+=jg=5$9v^_T&}9dntxgD?7pe4%`PwhymedpNeYftlSfKx zA&QXCLNV6jAwvc(k+h-7+Q+Z0O_B_vdH%9BzlQlsc<=0*t&T5Aysj=R>+0*dWnMix zf|Zktd_6`1nA_uq`q|A|lrJK~TMM|h?0L4_J3MNYx|B*T*w(p<Dk^&tG6T8d1;QLB z$nY4M0YF3&lgOhgQGFw`{xgG9zXw{#gHSVPNvzSTci3?e%n!<Ad;|F-k+T(>%v#+$ zoQAr=U%#Zm|7*MTdlS3*`PLqq{-cHuJlgzQ<w;mIHJ#P{R*JSx^uly5Q><@ex=L%e zmsfVZRL}k{6xSUZPRSqPqYi{a05hbw(v`Wn<w;C5-CH)dUhS3OUTs<ZxvR&O8F)56 z6qS?!z44iipTC)q(*QmQEiLSPyAq&67{Fv?|M(FK(*N3c&SX_R87f1e<K_oOW`U3N zIEjgoXOHH8`pW(|TG94TP7;82ik-;;bO_MGIP-rP4fb8NI#Wzk=!lXEI1mGJ4Ty80 zv$KuKyw-SX<@1cVP7}GNv#r;J02aw|bpk!xCw}r{na(QxAK#duseD)<SqG1#sVB5L z3%LJv$$xn8MKK;Fm<u9}_w^Kf(AU@Z%M`Yx^NRZ07W!eRK+cQL^Nu<q5)CLmuK_=- zX2UKl41<84-UASAwd*;$hDNg9V2p^0$?Lc8LnB+AVLtRVq?6*vL|OPJCKi0`O@v26 z`m(y)OxEh;iv0Ht0h>erpC3nrf=-N}<a!a<!z{e_rheR9ydt-<3g@uj;sX^vAmsCm z$COSk7Nc?`?sN5f?;t>NHZxr5(gmb7T7@>hcJ6H^-vku!NcR`#F>vbbyxo<_KeJ1& zHNgYql5Z;a<*<&YarH*kKW8$xOY%s3OU>L8HPvEEkNXF#`z!K+JelqMeMV(_2^DE{ zQa&UIpWBrByC$f&pFbnvFbH%Fo1;PWwnrsY^zb0?{=Q4?t=X!j-(I6>5d*s;>W2>> z0NA>UHcy+#4}HaBdFEeiioho@+8xh;^=Tn0#3c$S3&2Y&4;pWvlYh5;YqvF2X3^$@ z0|JHd7(9~j`pP)Q^%30mJ{H?>3gMS8&IcEBuYh0+(^Y>?&^0vD-xrF$*`TYbk=!+5 zizqbX@@|=5pR?Lwm8ndVn*s<3z}WC-_3054)FoK(@I2$=CLv%abT4_aSS@=o;sPGS zRZ*!pI-Y?&WOl`_8IZF4b#=c_&W*#S8qU|(2gblY_V*PV@#qD#8H((%v|jC;pE(ng zYhFBn2H_ujKg84HCES5Vn^&KdCpoQ`m<Wj*{Gy`Z=Ig2lZqH}>3W5jL^{<a;fM`Vk zuB=$8E6bw26LxVCVUX~gwL3IA+MUkNoCA&#&}uwlvRkZ?Ol|6yi{8E-Jxlu_>coOc zCWsyYu6J=koM*pH#pm^q{&6XX50o6>oG@tj`wB(Ho5%7<a$$kho<JCviyhJ+v|1Ux z6+F<?L!r}x+Mn_!se99ouEzVxBXj0#wpv2!Xe6B<-PE+QO0OF?XCDY9KAD;5P6v#) zQRe>emmG#IG=D2~8K&)<iC$@}HxMl?nZuIBo&AdIpTxSpW3|$4e<fv%%jbN?1qd(> zv+ozRz|bQZ3kV6e7DxN8K$Mx-v|-;^CE>5e+mwtuJZ=|+q1o9BepOdj{~!<owh$hd z>!UzQPEI79Rwo}oC4iC6lh4px0c?QnT*QIJ=@<MBh0{#oRv8=1-9IUiv%mY&5rm5Q z4`)L|Lt<GXdA0|$pX)5m{R`wqu<-E%sU+yvuPi4p2wn!3=uILO(;gfsyTv}IpjjUa z+t?)QmYr?)uG(;T+;H98l0lM&@xC|K*$$_!{mfVv!~uOcnSh1}2Nj^WLM1U^ao4*2 z89))tqpi(Da8DLSLrV({>Po*19rx;M5^gg@unyZiToFb`YfraE+(8kAwzbu8a<!zq z({clZFsQdBpW#74uC>5}h}fjUbl9KHk8?`HPn0zJ0Y9sa6z8aP#_-{0m4lO$>H3f= ztvtk1#Jp<AljhSCVF0e=*4S5zi^ZVlC;NC4bB&Y`XEk($Vj_NnXIiPnTB5mTqr09a zZQYLBU!$wIcS6sw)V5>iE}QqtJyup)UEnFr|MK<q3ya&Fz=0or;lt2?Q$AR5*2ZkG z-)>M;Qu?_$+}O2>m?W#Gm$`ko(%l~ZRZtY4H5DE*+hi*UOq9XJ%1P9eD{<pHx}@^* zuHt%nlq|4P?<awp8vFfwL{$~@Y_0JdHeI0*ZgYJ9fpw&U%iG0{M@--)?FQP$jjgDp z%(A4)6k57aGfbnEFr(V-b4q4a730h6(^D)kv^KG8iF7p~f}PIv@*6@z9ytYSa7pYG z(vp4LLhep5P*ANo`F%fI9G9r&wg0sBJ~Y`gC~TCM{YF78EZ4ycCr}s&Cupp;T+pPY zr`KN<R|h0nW7js2xKYs1906@-u-vgu$YnxpVToV}ws?~h>$5TVcx-ZV00H}lr+uBX zGZu?$#{qA0t=I?F=J6AKj3dBU&j3rlSs>APo!K<1=bb}0FmnYaA%r6lY;z}bn+u_$ zp@rdoDGq6TKB5_)=E1sWcpojHs;YWWJD-Zi`E_vPwfkqlrQL3o`ijMipC`s;W>_zk zsBr#r?$aO#fka}m0AHi#EB(giXTPO~I@2hK4<K`pB5e*2=4tqE1<8dFA7$Gr-^!IE zw>a)=&@S9^etkzlD!hkcZ;#VAz+iB^WC)gXlxBU|#E)UcvM<N}*T>K5)VFvJnzc2+ zwS+T2-<hFt<9EC2Z?o9yw8@Vym-3oe*v$c3`}l7;4WMD^<1fB`{c6w)Z=6%Z_F)k& zHa0et$MWF(v9^{(%>V$ntYs*$UI36Gx185Nsc_!?gAU@n51_7>pG{(y^}PV8PpGMx zip{U>c^l_*x$jwJw<(?f<45nG8Z40iP&~E(Q(5#$iik#LwD0>XS<ngR2%tt7c$p3C z?jSEk&Tg}?k{~&<eMqI3`weIrh=un4XPdY3Jn0#KyM~9+0QH7vCjH0gQanHexqBTU z8U^+G<R=<%YKMT{Bm(}5Pp3S`77N6x^<35WRiYQ>?~XYckLt)=;R*cRFz{MOl{H^1 z9EOEFCST`ZX?{kr#6@<V|NP2fGv$q;+v&z!C!)55h%7*T<@Ul-W2W!}0iRhut0M%3 zpaO|_bbS1s$HNT~sFfjU<r-fXZYN6BjW715i7Ivb0YjCBh};4)IK?{1E5IBMO^`GK zs3sO|9RmE80<|fwxp`#4;o{QLP_(gSdl9#~9aA}U^vBipT6Ox}-Noie6A5agMYu6( zTM)bwjy>`4HnGE7Imm@v&Poku)HjyKbFOA<j0k{FpZQGicQn91;tC3d<Hg6o3<Q+J z@D-b;oryf00tJfj21`ri`mDr6-z-t(Q{cu2{czZx_w#_`g96=F0}r>Qr_0{0`i6#~ zPmirA!i9xN+mv_&*VR+=kw(Mcy5|cRtiE(cI%Uj<M$xCBx>%oxk7Z^IN7m+W0d4`+ z+M4%cS_dkEJViiUT%5@=Ei+lEnnhPAj+b6_n3udeaMe8CIdTAaRHk(pHL}o%yFeZv z+sHop>lZ1A?TnL2n}?fWJeK!4?Uo2ruZvVI+?R1g^rN4#fNEN?s6Mr*jefL@Atouw z1w0Vc0s`>e-3t9dhhVAV;++$J2jK<AXQe8PO2Um`xPkVv((92ExC~GMduy})Qy2s_ zXkTCTDx+cfsj}keVr7|Ou1-jHQ4!^-+K+&MO2Cj7Da+KMPZujIf7`va&uHbdC7>Ne zLW*<$IQ;sk=jMU`MRPhpobAenhXBo>dhnP-bZxyeS1AwP!1$Ydrcg8(aw;w^Z18;w z|3NW1`|oB<3H@;}!M(nP+sHXaFbKg<fX(i{*p;8HUiS%cF*hrLfnejre<&Z(tHrDS zH$z4vJsR+%o=!zIaNlq-d>bsDKn4Z2oZLUn_F8qOmT1eY9m%yWQSY|DP6n|OzRq{f z8D<RJ(=#<P`CE4SPWCqRynpuhD8ueK0;zxt^8O4v^ErW$o+3^-fn4u=f_YfGJS+Qv z&-vQ4jZ-F?r)P$pj+noHufD+_^na~_dK1*Vq(Uypr057DBIf-;>Z+<@h4Pk|IOp(S zF+)K{GtvAithfOWRin}H!&0cl`8c3A*c0~Bcr4TK^_aD89+T^GQ+8};Q*Dk>3c2Ze zBApRdW78%Jy|O%qz2cN}^79~{oQVt!#nXH5)6-BJ+s{79$$}u0{FpM&22?-rf>kvh zv)M&=;+{U-GIPEOcCDo>E;ju!@AML7+ua<4k_Nncjspj}{{)tLWxQ5{!z03oHfpln z1ZHLAd&M?X@33HuOue}p{{H8~?`q#}(&pNQ+fP_`wPFt$2RW-OCd|sT`7s0p<~P@* z<T8b@QOOCQ2Ev{B`loBRyY)D}cKl^{wf2`*`O_yj;h&-@{Psj5o?!zgtB;uYPH;#_ zSWRA!d_fq;NtK=ePC?GvM!&SV1OhS|FzMvfkq$~0&vHp@5)&Pdkd3XaW4^)V%-EQd zdPVn|cgkWr`};n_o78Ma{)57{GhhEVLO+NaJ380^L<5!+T00;!wl(GdGiOH9)Ku*k z`0%$_8K>3Ry06xlm(%%(7LX7GuHRmD$|HI2$^nZ@RzZoX>~on7?~D|p7h%LoaJQei z%+-NRp7c+k3W1}bQd5afE*yS>sgLQs)>+%=at%dk0AF>8hxa3lX6fzHw<}IVc!HxU zMMx4fG;l#_<a^rE1p+bNqp`dn-CC5kj{$c`THXzrr|jA<NqwRLZO|_yWZUIr1qnz_ za5JEJn7t@MTzD|)KVvOBJ1>`sqQW@eiOlrc&fFwEAbSYdv?Tz<gmkTR=Q5<>^<ORL z7Zgy@(vpgaHJ+j2kUwb`oiZbS&M&4+<!yw994xc%b$gtw>|)DB1Kbt&C!*D8xB%jl zCo>kZDCoe*&PGBao3gDWBZC46b6m?|HnN@=Do<GSV5wt=1(17If8kBEcwO$1L3~nD zst4PxL4z8kM0JwsvO!u^74F&6vAad}XmD`w?b@@5-t&?nu>MIK<$UQpGBL40d_H{A zgUs$XqOfXm;qh~oh==e(SabwntPQ@bUtKPI5=~1uBg-Tgky;{9k4sJ_1e{*%iOoOC z$FcxYoPDoD(+vuJ4g9IfF9@J4S!g^a&^|vqBjCdHjy3?z3QyPI>m=y=L3aL=ALx3# z7mePP)jrW+nYP~TulQ1XUhYkU=2pXM8d_7!XOJl*AQ0sOmhNVIb*Y9TVK>~MSIYQM z5PCUmN1hFvrq>F}VtfKy{JM8H2cVIb7Zy0=o9V7#`92rO%r_Z@vaCPdXFQJdh0=8C zalC}S#dZ=F+@!4K?k}~v60+HrCO#MxB6xf#Dx{>OcmDkb`b%x9P0q*89Y_CAe)_>x zKzxvJBr!@|pGC%$MyBe-QtEhhS{p#GirUG-Ubw1!g+{f3RZf&AUL<RpI@L;_>0*-y z5d)|nTO8$I*Xr!8jV%8@T5W(T?kxC9hu2hJ`d5E%YQpG=>gqv*!}~RMhlkjBKV@+y ziuVO3&_<=?#h5ICY77ej$cOc#oM2a17d$YI1(lS9=`C|*VbR>dKm;6#VPythlmRS& zr1h#dfa>hepg_%OyCxnBLw|7C3Uolw#cj=LqG(;c%UE(Kn!=&aCmlr^($`0eO7xoO z?k>?}zK$f7_c(CAzI>v1lCsV9oID&~t~Xn(Js?w6Nl98m0~g4WOp{!ALT)ubr;77l zun!areb-bS%<mCFuv%>W%HP+p<>mg=!3?y-yLUI0R<jLvH}*C(oP<5!lIt1ED&CoQ zBxGT+(Es)q>+vp90(ejXat<nxGkU&k1BxsSP&3A|2EGp-{~au1OJvLNy}6N`okR1F zRWj!?8Haar>Wu*ybSPd1StRHTXtk2af7I11F0`X0?xR*f^U<f7`Y@l44&d?7^^vkq z0(P$Ak7M)3kd+@l+L<mtj-)q}z89UW{<?`B+9T>|gQ3N9x3<*&X44Ht)y9So9xXG# zzYs%ACyu*p(c<Em6Y=ROZM>!4F{SYN&kvH5lM^Wi2Nu3`?K(3fH1(N4>Pag=yPTZN z2Eic6uMQ`{5(17UnbV)s>%r#WpF8SsV!3}?n-DckB~rs*i0l4vP*8c-rX3cs+vfxF zzq#}H1BVOIz#U`@V2~fkxS)atYOL7#RwBUoRUx&c5YRb`m&SAG18OHyp&iwHu1!y9 z<+knmun(Ru6`X8RfJ`E=9J*hT`UB+I*VpC?oVcJd9MO1tPEq*{zMFL7ZY<By1Ds0D z=e*8ID!Ikmgp4NV#4odXGBBV3&=qpWhk^HpvOf<3G<@CQHhuURdOy%35V*{yuyl2; zY#d0bn>y@%Fx1qdWKn_6IWFMR)HP`WrG3wWJ4SAvArMG`w-z&=AsV-p3l8Fspa44e zZ4uGhwF@lKJN;jUJFc7|Mi2D99B$Ac)cv*QnCaEDh4QzxjJP;>=F$p{tp-v#%T)aI z+w_lM$O-SSpM&vP%YHo$YgUb;*;1@k8(4NP|2E<vJXxrNOJCG>ac%ac4EgmQ&?ecr zxe=h>4{iobOH5*-?oKVQRk}~498O9B12;FB<KC>^P#lpT5pS+R7s2uCds@JjAvZj2 z`|;bWt*-1!C_b#mM0LVhEqtQ@`1FT3A}^#&o0DLqtaZKnAA-qTfl<e*NMA=^;JG>$ zsfVu_t(b}dy}UzL01^tQg=h(V-`7&;{!JHlha*LoIauYBgu^<miD+|gj54t@3?*Cg zx(y0-PiZvuzTCUTD^OHb`M$D#7=*^Q9~(QSp0YtG#K&&y+uEue+ZY1m22POaqxPm9 ztF4zq?P4?kwMOgRoOp>3bO3_jQ?>27owkrW7JFtpCYj?opN(!CF**4#^J2kc6q#0@ zVX)fC+#1c*(~y6#K0r61{ViMb9cBV45V&1jSO&I61c3^qTVUGk^~eS~)&i$X3C6>z zPT2%NF=FHV1-Wt4YH$Sa>BH=)XRsbPTKlhZ4K>iJu@{kBd_xL*CJjZgJG#c4DR``P zrMP1#pRnAn>iUb6{7-h2Oi~J7YJ9DRvc%%;H%fQkQ+nr@FX}16@8}C`(!XD;=3Ad; zaoC;k3Axzd18qoc78)I~33hukbJp2FbOUdLYT&EhQGN>Opa_@THhob90`&SGhxH>r z>tb&lZU*HcL{T1Dl5QlUmO0t=))>_?)!D%Kw0rU<Cr=H4FHC@f@UrWO1G5ah9I;q^ z%nP55U3L~11L(PGi#dxjooaju_-o*UW37GDVKnlWwN!7ijX<-Z=I33#78c>omo*9x z@F7Yj_RVkeq=O5;tqdoDs>+Fo)QpIOllMV++#OJPb;YtA)=L}6oBRqdf(ga1hnU2N zn=?8nQSX9WF@Lv&k}g*va&d9$@uFDH@84%tU;rr|@{8tw4R5$COCOn#U%2)nJ!*NW zx8M^0cQ4#ammN@0{!dTb|7no>f4+%Fh7TDWHU|!&m%lUQ49%a40wEhsLPCP(_Wt^q lScUfG3QAb8>D~9D4CGRs);9T2;Op%n@1^7=E5!Bu{x2IIT*m+a literal 0 HcmV?d00001 diff --git a/src/site/resources/images/rugged-logo.png b/src/site/resources/images/rugged-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..55e0717ed58d522ffe9b76d6e038968dc8fa50ce GIT binary patch literal 32649 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 IM6N<$f+ozY(*OVf literal 0 HcmV?d00001 diff --git a/src/site/site.xml b/src/site/site.xml index 718a808f..86417730 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -16,12 +16,12 @@ <project name="Rugged"> <bannerLeft> <name>CS Systèmes d'Information</name> - <src>/images/logo_cs_2008_ang.jpg</src> - <href>http://uk.c-s.fr/</href> + <src>/images/cs_logiciel_dev_32pixelsgri.png</src> + <href>http://www.c-s.fr/</href> </bannerLeft> <bannerRight> <name>Rugged</name> - <src>/images/orekit-logo.png</src> + <src>/images/rugged-logo.png</src> <href>/index.html</href> </bannerRight> <body> @@ -29,33 +29,15 @@ <item name="Overview" href="/index.html" /> <item name="Getting the sources" href="/sources.html" /> <item name="Building" href="/building.html" /> - <item name="Configuration" href="/configuration.html" /> <item name="FAQ" href="/faq.html" /> <item name="License" href="/license.html" /> <item name="Downloads" href="/downloads.html" /> <item name="Changes" href="/changes-report.html" /> - <item name="Training" href="/training.html" /> <item name="Contact" href="/contact.html" /> </menu> - <menu name="Architecture"> - <item name="Attitudes" href="/architecture/attitudes.html" /> - <item name="Bodies" href="/architecture/bodies.html" /> - <item name="Errors" href="/architecture/errors.html" /> - <item name="Forces" href="/architecture/forces.html" /> - <item name="Frames" href="/architecture/frames.html" /> - <item name="Orbits" href="/architecture/orbits.html" /> - <item name="Propagation" href="/architecture/propagation.html" /> - <item name="Time" href="/architecture/time.html" /> - <item name="Tle" href="/architecture/tle.html" /> - <item name="Utils" href="/architecture/utils.html" /> + <menu name="Design"> + <item name="Overview" href="/design/overview.html" /> </menu> - <menu name="Tutorial"> - <item name="Attitude" href="/tutorial/attitude.html" /> - <item name="Frames" href="/tutorial/frames.html" /> - <item name="Propagation" href="/tutorial/propagation.html" /> - <item name="Time" href="/tutorial/time.html" /> - <item name="Geomagnetic field" href="/tutorial/geomagnetic-field.html" /> - </menu> <menu name="Development"> <item name="Contributing" href="/contributing.html" /> <item name="Guidelines" href="/guidelines.html" /> diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml new file mode 100644 index 00000000..f4616564 --- /dev/null +++ b/src/site/xdoc/changes.xml @@ -0,0 +1,488 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- Copyright 2002-2014 CS Systèmes d'Information + Licensed to CS Systèmes d'Information (CS) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + CS licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<document> + <properties> + <title>Rugged Changes</title> + </properties> + <body> + <release version="1.0" date="TBD" + description="TBD"> + <action dev="luc" type="update"> + Swtiched maven configuration to multi-modules. + </action> + <action dev="luc" type="update"> + Updated UML diagrams. + </action> + <action dev="luc" type="update"> + Moved TileUpdate to raster package. + </action> + <action dev="luc" type="update"> + Finalized direct localization diagrams. + </action> + <action dev="luc" type="update"> + renamed core package into intersection. + </action> + <action dev="luc" type="update"> + Created a utils package. + </action> + <action dev="luc" type="update"> + Moved raster package one level up. + </action> + <action dev="luc" type="fix"> + Fixed top package name. + </action> + <action dev="luc" type="update"> + Updated maven plugins versions. + </action> + <action dev="luc" type="update"> + Updated Apache Commons Version as 3.3 has now been released. + </action> + <action dev="luc" type="update"> + Updated Orekit version. + </action> + <action dev="luc" type="update"> + Improved performance. + </action> + <action dev="luc" type="update"> + Disabled timing test for inverse localization. + </action> + <action dev="luc" type="update"> + Improved inverse localization speed again! + </action> + <action dev="luc" type="update"> + Added inverse localization from latitude and longitude only. + When only latitude and longitude are specified, the elevation is + automatically computed from the Digital Elevation Model. + </action> + <action dev="luc" type="update"> + Simplified direct localization. + </action> + <action dev="luc" type="update"> + Improved inverse localization performances. + </action> + <action dev="luc" type="update"> + Added rate to the LineDatation interface. + </action> + <action dev="luc" type="update"> + Disable timing test by default. + </action> + <action dev="luc" type="update"> + Renamed setLineSensor into addLineSensor. + The new name explains more clearly that several sensors can be set up at + once. + </action> + <action dev="luc" type="fix"> + First working version of inverse localization. + </action> + <action dev="luc" type="update"> + Streamlined line sensor model. + We now use a single position for all pixels (but of course still + different line-of-sight vectors), as it doesn't really make sense to + consider different positions as pixels are only a few microns away from + each other. + </action> + <action dev="luc" type="update"> + Ensure sensor mean plane normal has a deterministic orientation. + </action> + <action dev="luc" type="update"> + Slightly changed the intersection refinement in flat-body. + </action> + <action dev="luc" type="update"> + Added a flat-body implementation of refineIntersection. + The former implementation ignored the flat-body flag and in fact + corrected the flat-body ... + </action> + <action dev="luc" type="fix"> + Fixed mean reference point position. + </action> + <action dev="luc" type="update"> + Improved light time correction. + The current altitude must be considered when computing light time + correction. Previous computation was slightly wrong as it only computed + light time from the ellipsoid. This induced problems when computing + inverse correction. + </action> + <action dev="luc" type="fix"> + Fixed computation of latitude crossings for line of sight. + In some cases, the line of sight has two intersections with a given + iso-latitude cone, and the selecting the closes one to spacecraft was + not always the appropriate choice. An hint from the caller was needed, + as a point close to the desired intersection. + </action> + <action dev="luc" type="fix"> + Fixed non-bracketing error near start of sensor line. + </action> + <action dev="luc" type="update"> + Moved reference date from Rugged top class to LineDatation model. + </action> + <action dev="luc" type="update"> + Remove check for context, which is ensured since construction. + </action> + <action dev="luc" type="update"> + Improved speed of inverse localization test. + </action> + <action dev="luc" type="fix"> + First working version of inverse localization. + It works in simple cases (no light time correction and no aberration of + light correction), and is still really slow. + </action> + <action dev="luc" type="add"> + Started implementation of inverse localization (not working yet). + </action> + <action dev="luc" type="update"> + Removed a check that is not needed anymore. + The indices are now checked at caller level. + </action> + <action dev="luc" type="update"> + Added an option to use Duvenhage algorithm with flat-Earth hypothesis. + This option is mainly intended for comparison with existing systems. It + should not be used for operational systems and the full Duvenhage + algorithm with line-of-sight bending in geodetic coordinates should be + used instead. + </action> + <action dev="luc" type="fix"> + Avoid array bounds error when interpolating exactly at tile edges. + </action> + <action dev="luc" type="update"> + Added automatic mean plane computation for line sensors. + This will allow implementing inverse localization. + </action> + <action dev="luc" type="update"> + Allow direct use of Orekit inertial frames and ellipsoids. + </action> + <action dev="luc" type="update"> + Added optional aberration of light correction. + </action> + <action dev="luc" type="update"> + Renamed ligth travel time compensation into light time correction. + This better matches physics naming conventions. + </action> + <action dev="luc" type="update"> + Moved light travel compensation setting out of construction. + This setting is not intended to be used often (in fact it should be used + only for validation against other systems), so forcing user to set it in + all cases was a bad idea. Now the default configuration is to compensate + and if user does not want to compensate, he can inhibate it by calling a + separate method after construction. + </action> + <action dev="luc" type="update"> + Fixing light travel time or not is now a user setting. + </action> + <action dev="luc" type="update"> + Configure tiles updater at construction time. + </action> + <action dev="luc" type="update"> + Replaced setGeneralContext with constructors. + </action> + <action dev="luc" type="update"> + Replaced Rugged interface with a class. + </action> + <action dev="luc" type="update"> + Moved enumerates out of Rugged top level interface. + </action> + <action dev="luc" type="update"> + Removed SatellitePV and SatelliteQ classes. + We now use directly Orekit PVCoordinates and Apache Commons Math + Rotation classes. + </action> + <action dev="luc" type="update"> + Remove GroundPoint class. + We use directly the Orekit GeodeticPoint now. + </action> + <action dev="luc" type="add"> + Added ITRF equinox, for applications that rely on it... + </action> + <action dev="luc" type="fix"> + Fixed virtual "wall" appearing at tiles boundaries. + </action> + <action dev="luc" type="fix"> + Avoid an infinite loop near tiles boundaries. + </action> + <action dev="luc" type="fix"> + Fixed error loading elevation from Aster files. + </action> + <action dev="luc" type="update"> + Improved accuracy by taking speed of light into account in transforms. + </action> + <action dev="luc" type="update"> + Slight speed-up with a dedicated pointOnGround method. + </action> + <action dev="luc" type="update"> + Added writing of grid file to full test. + </action> + <action dev="luc" type="update"> + Don't use a numerical propagator within direct localization. + As the time between each line is really small (milliseconds), it is + better to propagate first and use an ephemeris later. + </action> + <action dev="luc" type="add"> + New global test (temporary, much too computing intensive). + </action> + <action dev="luc" type="add"> + Added a default linear model for line datation. + </action> + <action dev="luc" type="update"> + Avoid line-of-sight splitting before its start. + </action> + <action dev="luc" type="fix"> + Fixed a numerical issue at tile exit. + The low point at tile minimum elevation was computed with a tiny + positive error, meaning the point really was above min elevation (at + micrometer level). The line segment between entry and exit stopped just + before traversing the Digital Elevation Model, and an error was + triggered. + The solution was to take some margin when computing the segment + endpoints at entry and exit: we now start above max elevation and end + below min elevation so the intersection should be really on the line. + </action> + <action dev="luc" type="update"> + Greatly improved accuracy of direct localization. + There were some small errors (at centimeter level) as result points may + be slightly out of line of sight. These errors seemed to be due to the + final linear line-of-sight model that is used at pixel level. + An iterative correction step is performed to ensure the point is really + on the line-of-sight. + The residual error is now at nanometer level. + </action> + <action dev="luc" type="add"> + Allow tolerance for intersections close to pixel edges. + </action> + <action dev="luc" type="update"> + Use the four corners of each pixel to initialize min/max kd-tree. + </action> + <action dev="luc" type="update"> + Use point and direction rather than two points for pixel intersection. + </action> + <action dev="luc" type="update"> + Added a los conversion between Cartesian and geodetic coordinates. + The conversion is of course accurate only in the neighborhood of the + reference point, as a straight line in Cartesian is not a straight line + in geodetic coordinates. What is converted is the initial direction so + the two curves are tangent at the reference point. + Near Earth surface, the two curves remain within one millimeter of each + other after about 100 m travel. + </action> + <action dev="luc" type="fix"> + First working version of Duvenhage algorithm! + </action> + <action dev="luc" type="fix"> + Handle degenerate intersection cases. + The cases handled include linear cases (when Digital Elevation Model has + zero curvature) and constant cases (no curvature and line-of-sight + parallel to tile, both in or out-of-tile). + </action> + <action dev="luc" type="fix"> + First working version of BasicScanAlgorithm. + The case where the line-of-sight enters the Digital Elevation Model in + one tile on top and exit it in another tile on bottom is not tested yet. + </action> + <action dev="luc" type="add"> + Added tests for BasicScanAlgorithm. + </action> + <action dev="luc" type="update"> + Don't exclude endpoints when un-merging tiles. + </action> + <action dev="luc" type="update"> + Changed private method arguments order for easier understanding. + </action> + <action dev="luc" type="fix"> + Fixed computation of sub-tiles crossings. + </action> + <action dev="luc" type="update"> + Added library setup test, with and without Orekit. + </action> + <action dev="luc" type="add"> + Prepared framework for more complete flight dynamics tests. + </action> + <action dev="luc" type="update"> + Implemented intersection at pixel level. + </action> + <action dev="luc" type="update"> + Delegate final pixel intersection to Tile. + </action> + <action dev="luc" type="fix"> + Added a basic scan algorithm, for testing and validation purposes. + </action> + <action dev="luc" type="update"> + Added line-of-sight splitting at sub-tiles boundaries. + </action> + <action dev="luc" type="update"> + Added test for level 0 merging row and tall tile. + </action> + <action dev="luc" type="update"> + Added methods getLatitudeAtIndex and getLongitudeAtIndex in Tile. + </action> + <action dev="luc" type="update"> + Changed semantics of merge methods so they refer to current level. + </action> + <action dev="luc" type="update"> + Renamed package dem into raster. + </action> + <action dev="luc" type="update"> + Work In Progress on duvenhage algorithm. + </action> + <action dev="luc" type="update"> + Added getMergingRow and getMergingColumn methods. + These methods are essential to identify where to split the line-of-sight + in the Duvenhage algorithm, when going from one level in the min/max + kd-tree to the next level. + </action> + <action dev="luc" type="update"> + Added isColumnMerging predicate. + </action> + <action dev="luc" type="update"> + Added a tolerance around tile for elevation interpolation. + Elevation is going to be interpolated at tiles entry and exit points, + which are computed from geodetic conversions. The result points may be + very slightly out of tiles, at numerical accuracy level. These points + should nevertheless be allowed to be interpolated using the closest + pixel data, so a tolerance was needed. + The SimpleTile class uses a fixed tolerance, arbitrarily set to 1/8 + pixel. + </action> + <action dev="luc" type="fix"> + Fixed interpolation error. + </action> + <action dev="luc" type="add"> + started implementation of the Duvenhage algorithm. + </action> + <action dev="luc" type="update"> + Added getLatitudeIndex and getLongitudeIndex in Tile. + </action> + <action dev="luc" type="fix"> + Handle properly tiles boundaries. + Tiles are expected to have no inter-tile gap, i.e. the boundary row/columns are repeated in neighboring tiles. + </action> + <action dev="luc" type="update"> + Improved identification of point location with respect to tile. + </action> + <action dev="luc" type="update"> + Sensor directly uses points and vectors, and no more Line. + </action> + <action dev="luc" type="update"> + Intersection algorithms can use the new ExtendedEllipsoid. + This allows them to chop off line-of-sight at DEM cells boundaries. + </action> + <action dev="luc" type="fix"> + Fixed wrong package in tests. + </action> + <action dev="luc" type="add"> + Added ExtendedEllipsoid to chop off line-of-sight according to DEM. + </action> + <action dev="luc" type="update"> + Split top level class from DEM intersection algorithm. + </action> + <action dev="luc" type="update"> + Line numbers are double. + </action> + <action dev="luc" type="add"> + Started implementation of direct localization ... + </action> + <action dev="luc" type="update"> + Added a protection against unknown sensors. + </action> + <action dev="luc" type="add"> + Added configuration for sensor lines of sight. + </action> + <action dev="luc" type="update"> + Use an offset from a reference date for all computation. + </action> + <action dev="luc" type="update"> + Added a getMergeLevel method to identify when pixels share min/max. + This is a first step towards duvenhage's algorithm. + </action> + <action dev="luc" type="fix"> + Working version of min/max kd-tree tile. + </action> + <action dev="luc" type="add"> + Started implementation of min/max KD-tree tile. + This is work in progress, the min/max computation seems wrong for now. + </action> + <action dev="luc" type="update"> + pixels are double. + </action> + <action dev="luc" type="update"> + Added protection against empty tiles. + </action> + <action dev="luc" type="update"> + Removed AbastractTile. + Specialized tiles should directly extend SimpleTile. + </action> + <action dev="luc" type="add"> + Added global min/max handling for any tile. + </action> + <action dev="luc" type="add"> + Prepared first implementation for Duvenhage algorithm. + For now, only the (incomplete) API and classes hierarchy has been set + up. The tile is still a simple tile and does not yet creates the min/max + kd-tree. The algorithm doesn't do anything. + </action> + <action dev="luc" type="update"> + Boilerplate part for Rugged interface implementation. + </action> + <action dev="luc" type="update"> + Added API for global context initialization. + </action> + <action dev="luc" type="update"> + Added containers for parsed position/velocity and attitude. + </action> + <action dev="luc" type="update"> + Added a hook called after tile update completion. + </action> + <action dev="luc" type="update"> + Force use of factory to create simple tiles. + </action> + <action dev="luc" type="update"> + Extract an AbstractTile from SimpleTile + </action> + <action dev="luc" type="update"> + Added a simple container for inverse localization result. + </action> + <action dev="luc" type="update"> + Expanded API. + </action> + <action dev="luc" type="update"> + Use new specialized exceptions. + </action> + <action dev="luc" type="update"> + Added error messages handling, with translation. + </action> + <action dev="luc" type="update"> + Added design document and diagrams. + </action> + <action dev="luc" type="update"> + Implemented TilesCache. + </action> + <action dev="luc" type="update"> + Added factory for tiles. + The factory is to be implemented by the DEM intersection algorithm, at + very low level (typically tiles based on min/max kd-tree for Duvenhage + algorithm). + The tile updater on the other hand is the responsibility of the mission + specific interface. + </action> + <action dev="luc" type="update"> + Added method to check ground point coverage. + </action> + <action dev="luc" type="update"> + Reference latitude/longitude must be the minimum. + This ensures simple search for tiles given a ground point. + </action> + </release> + </body> +</document> -- GitLab