[mapproxy] 19/28: Imported Upstream version 1.9.0

Bas Couwenberg sebastic at debian.org
Wed Jul 27 00:32:58 UTC 2016


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository mapproxy.

commit 12ab634194c86f46d32f6c44b34337865b4d1284
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Tue Jul 26 18:53:51 2016 +0200

    Imported Upstream version 1.9.0
---
 .gitignore                                         |   17 +
 .travis.yml                                        |   43 +
 AUTHORS.txt                                        |   32 +
 CHANGES.txt                                        |   31 +
 Makefile                                           |   40 +
 MapProxy.egg-info/PKG-INFO                         |  227 -
 MapProxy.egg-info/SOURCES.txt                      |  484 ---
 MapProxy.egg-info/dependency_links.txt             |    1 -
 MapProxy.egg-info/entry_points.txt                 |   14 -
 MapProxy.egg-info/namespace_packages.txt           |    1 -
 MapProxy.egg-info/not-zip-safe                     |    1 -
 MapProxy.egg-info/pbr.json                         |    1 -
 MapProxy.egg-info/requires.txt                     |    2 -
 MapProxy.egg-info/top_level.txt                    |    1 -
 PKG-INFO                                           |  227 -
 debian/changelog                                   |   23 +
 debian/compat                                      |    1 +
 debian/control                                     |   18 +
 debian/copyright                                   |   54 +
 debian/patches/font_dir.patch                      |  133 +
 debian/patches/package_data.patch                  |   12 +
 debian/patches/series                              |    2 +
 debian/pyversions                                  |    1 +
 debian/rules                                       |   14 +
 debian/watch                                       |    3 +
 doc/Makefile                                       |    6 +
 doc/_static/mapproxy.css                           |    6 -
 doc/_templates/layout.html                         |   22 +
 doc/_templates/navbar.html                         |   20 +-
 doc/caches.rst                                     |    4 +-
 doc/conf.py                                        |    2 +-
 doc/configuration.rst                              |   49 +-
 doc/configuration_examples.rst                     |   86 +-
 doc/deployment.rst                                 |    2 +-
 doc/epydoc.ini                                     |   17 +
 doc/imgs/labeling.graffle                          | 4373 ++++++++++++++++++++
 doc/make.bat                                       |  113 +
 doc/mapproxy_util.rst                              |    3 +
 doc/seed.rst                                       |   12 +-
 doc/services.rst                                   |    1 +
 doc/sources.rst                                    |   49 +-
 doc/test.html                                      |   43 +
 doc/tutorial.rst                                   |  174 +-
 mapproxy/cache/file.py                             |   72 +-
 mapproxy/cache/mbtiles.py                          |   45 +-
 mapproxy/cache/tile.py                             |   16 +-
 mapproxy/client/arcgis.py                          |   35 +
 mapproxy/compat/image.py                           |    8 +-
 mapproxy/config/loader.py                          |  245 +-
 mapproxy/config/spec.py                            |   28 +-
 mapproxy/config/validator.py                       |   93 +-
 mapproxy/config_template/paster/tmp/.empty         |    0
 mapproxy/config_template/paster/var/.empty         |    0
 mapproxy/grid.py                                   |    4 +-
 mapproxy/image/__init__.py                         |   15 +-
 mapproxy/image/merge.py                            |  101 +-
 mapproxy/image/opts.py                             |   15 +
 mapproxy/image/transform.py                        |   15 +-
 mapproxy/request/arcgis.py                         |  125 +
 mapproxy/script/export.py                          |    6 +
 mapproxy/script/grids.py                           |   73 +-
 mapproxy/script/util.py                            |   19 +-
 mapproxy/seed/script.py                            |    2 +-
 mapproxy/seed/util.py                              |    9 +-
 mapproxy/service/templates/demo/wmts_demo.html     |    3 +-
 mapproxy/service/wms.py                            |    6 +-
 mapproxy/service/wmts.py                           |    7 +-
 mapproxy/source/arcgis.py                          |   26 +
 mapproxy/test/http.py                              |    2 +-
 .../1.0/examples/inspireresourcemddataset.xml      |  128 -
 .../1.0/examples/inspireresourcemdseries.xml       |  114 -
 .../1.0/examples/inspireresourcemdservice.xml      |   91 -
 .../WMS_Image2000GetCapabilities_InspireSchema.xml |  271 --
 .../inspire/inspire_vs/1.0/examples/wms_at.xml     |  358 --
 .../inspire_vs/1.0/examples/wms_geoimage.xml       |  346 --
 mapproxy/test/system/fixture/arcgis.yaml           |   39 +
 mapproxy/test/system/fixture/cache_band_merge.yaml |   73 +
 .../00/000/000/000/000/000/000.png                 |  Bin 0 -> 760 bytes
 .../test/system/fixture/multi_cache_layers.yaml    |  100 +
 mapproxy/test/system/test_arcgis.py                |   71 +
 mapproxy/test/system/test_cache_band_merge.py      |   96 +
 mapproxy/test/system/test_multi_cache_layers.py    |  151 +
 mapproxy/test/system/test_wmts.py                  |    4 +-
 mapproxy/test/unit/test_cache_tile.py              |   14 +-
 mapproxy/test/unit/test_client.py                  |   15 +-
 mapproxy/test/unit/test_conf_loader.py             |   40 +-
 mapproxy/test/unit/test_conf_validator.py          |   46 +
 mapproxy/test/unit/test_geom.py                    |   19 +
 mapproxy/test/unit/test_image.py                   |  200 +-
 mapproxy/test/unit/test_request.py                 |   19 +
 mapproxy/test/unit/test_utils.py                   |   16 +-
 mapproxy/util/ext/dictspec/validator.py            |    2 +-
 mapproxy/util/ext/odict.py                         |    2 +-
 mapproxy/util/ext/wmsparse/parse.py                |    4 +-
 mapproxy/util/geom.py                              |    6 +-
 mapproxy/util/ogr.py                               |    3 +
 pylint.ini                                         |  237 ++
 release.py                                         |  121 +
 requirements-travis.txt                            |    9 +
 setup.cfg                                          |    8 +-
 setup.py                                           |    2 +-
 tox.ini                                            |   35 +
 102 files changed, 7356 insertions(+), 2619 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6d74fb2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+*.egg-info
+*.pyc
+*.patch
+build/
+dist/
+doc/_build
+examples
+.ropeproject/
+*.sublime-project
+*.sublime-workspace
+nosetests*.xml
+.DS_Store
+.coverage
+.project
+.settings
+.pydevproject
+.tox/
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..f062e66
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,43 @@
+language: python
+
+python:
+  - "2.6"
+  - "2.7"
+  - "3.3"
+  - "3.4"
+  - "3.5"
+
+services:
+  - couchdb
+  - riak
+
+addons:
+  apt:
+    packages:
+      - libproj0
+      - libgeos-dev
+      - libgdal-dev
+      - libgdal1h
+      - libxslt1-dev
+      - libxml2-dev
+      - build-essential
+      - python-dev
+      - libjpeg-dev
+      - zlib1g-dev
+      - libfreetype6-dev
+      - protobuf-compiler
+      - libprotoc-dev
+
+env:
+  - MAPPROXY_TEST_COUCHDB=http://127.0.0.1:5984
+
+cache:
+  directories:
+    - $HOME/.cache/pip
+
+install:
+    # riak packages are not compatible with Python 3
+    - "if [[ $TRAVIS_PYTHON_VERSION = '2.7' ]]; then pip install --use-mirrors protobuf>=2.4.1 riak==2.2 riak_pb>=2.0; export MAPPROXY_TEST_COUCHDB=http://127.0.0.1:5984; export MAPPROXY_TEST_RIAK_PBC=pbc://localhost:8087; fi"
+    - "pip install -r requirements-tests.txt"
+
+script: nosetests mapproxy
diff --git a/AUTHORS.txt b/AUTHORS.txt
new file mode 100644
index 0000000..0ba4e31
--- /dev/null
+++ b/AUTHORS.txt
@@ -0,0 +1,32 @@
+MapProxy is written and maintained by Omniscale and
+various contributors:
+
+Development Lead
+----------------
+
+- Oliver Tonnhofer <olt at omniscale.de>
+
+Contributors
+------------
+
+- Dominik Helle <helle at omniscale.de>
+- Marcel Radischat <radischat at omniscale.de>
+
+Patches and Suggestions
+-----------------------
+
+- Bruno Binet
+- Denis Rykov
+- Frederic Junod
+- Iván Sánchez Ortega
+- Josh Doe
+- Kai Culemann
+- Keith Moss
+- Matt Walker
+- Miloslav Kmeť
+- Paul Norman
+- Ramūnas
+- Richard Duivenvoorde
+- Stephan Holl
+- Steven D. Lander
+- Tom Payne
\ No newline at end of file
diff --git a/CHANGES.txt b/CHANGES.txt
index e59cac0..f25e254 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,34 @@
+1.9.0 2016-07-22
+~~~~~~~~~~~~~~~~
+
+Improvements:
+
+- New band merge feature. Allows to create false-color or grayscale
+  images on the fly.
+- Support for ArcGIS REST sources.
+- Support multiple tilesets for each WMTS layer with the new
+  tile_sources option.
+- Allow to build WMS images from SQLite cache with more then 330 tiles.
+- New `arcgis` cache layout. Compatible to ArcGIS exploded caches.
+- New `mp` cache layout. Reduces number of nested directories.
+- Prevent unneeded quantizing/re-encoding of images.
+- Demo client: Support custom tile_size.
+
+Fixes:
+
+- Fix quantization error for some image modes
+  (e.g. grayscale image with transparency)
+- Support custom Proj4/EPSG files in mapproxy-util grid.
+- Convert paletted images to RGB(A) to avoid NEAREST resampling.
+- Fix quantizing with FASTOCTREE for paletted images with alpha channel.
+- Keep configured layer order in WMTS capabilities.
+- Fix coverage loading with Python 3.
+
+Other:
+
+- Make the output of various utils more clear.
+- wms.md.title is no longer required, default to "MapProxy WMS".
+
 1.8.2 2016-01-22
 ~~~~~~~~~~~~~~~~
 
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..8b8af62
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,40 @@
+# Makefile for building MapProxy-Debian-packages
+#
+# (c) 2011 Stephan Holl, <stephan.holl at intevation.de>
+#
+
+PYTHON=`which python`
+DESTDIR=/
+BUILDIR=$(CURDIR)/debian/mapproxy
+PROJECT=MapProxy
+VERSION=1.1.0
+
+all:
+	@echo "make source - Create source package"
+	@echo "make install - Install on local system"
+	@echo "make buildrpm - Generate a rpm package"
+	@echo "make builddeb - Generate a deb package"
+	@echo "make clean - Get rid of scratch and byte files"
+
+source:
+	$(PYTHON) setup.py sdist $(COMPILE)
+
+install:
+	$(PYTHON) setup.py install --root $(DESTDIR) $(COMPILE)
+
+buildrpm:
+	$(PYTHON) setup.py bdist_rpm
+
+builddeb:
+	# build the source package in the parent directory
+	# then rename it to project_version.orig.tar.gz
+	$(PYTHON) setup.py sdist $(COMPILE) --dist-dir=../
+	rename -f 's/$(PROJECT)-(.*)\.tar\.gz/$(PROJECT)_$$1\.orig\.tar\.gz/' ../*
+	# build the package
+	dpkg-buildpackage -i -I -rfakeroot
+
+clean:
+	$(PYTHON) setup.py clean
+	fakeroot $(MAKE) -f $(CURDIR)/debian/rules clean
+	rm -rf build/ MANIFEST
+	find . -name '*.pyc' -delete
diff --git a/MapProxy.egg-info/PKG-INFO b/MapProxy.egg-info/PKG-INFO
deleted file mode 100644
index a32f6c4..0000000
--- a/MapProxy.egg-info/PKG-INFO
+++ /dev/null
@@ -1,227 +0,0 @@
-Metadata-Version: 1.1
-Name: MapProxy
-Version: 1.8.2
-Summary: An accelerating proxy for web map services
-Home-page: http://mapproxy.org
-Author: Oliver Tonnhofer
-Author-email: olt at omniscale.de
-License: Apache Software License 2.0
-Description: MapProxy is an open source proxy for geospatial data. It caches, accelerates and transforms data from existing map services and serves any desktop or web GIS client.
-        
-        .. image:: http://mapproxy.org/mapproxy.png
-        
-        MapProxy is a tile cache, but also offers many new and innovative features like full support for WMS clients.
-        
-        MapProxy is actively developed and supported by `Omniscale <http://omniscale.com>`_, it is released under the Apache Software License 2.0, runs on Unix/Linux and Windows and is easy to install and to configure.
-        
-        Go to http://mapproxy.org/ for more information.
-        
-        The documentation is available at: http://mapproxy.org/docs/latest/
-        
-        Changes
-        -------
-        1.8.2 2016-01-22
-        ~~~~~~~~~~~~~~~~
-        
-        Fixes:
-        
-        - serve-develop: fixed reloader for Windows installations made
-          with recent pip version
-        
-        1.8.1 2015-09-22
-        ~~~~~~~~~~~~~~~~
-        
-        Improvements:
-        
-        - WMS 1.3.0: support for metadata required by INSPIRE View Services
-        - WMS: OnlineResource defaults to service URL
-        
-        Fixes:
-        
-        - mapproxy-seed: fix race-condition which prevented termination at the
-          end of the seeding process
-        - autoconfig: parse capabilities without ContactInformation
-        - SQLite cache: close files after seeding
-        - sqlite/mbtiles: fix tile lock location
-        - WMS 1.0.0: fix image format for source requests
-        - WMS: allow floats for X/Y in GetFeatureInfo requests
-        - CouchDB: fix for Python 3
-        
-        Other:
-        
-        - mapproxy-seed: seeding a cache with disable_storage: true returns
-          an error
-        - all changes are now tested against Python 2.7, 3.3, 3.4 and 3.5
-        
-        1.8.0 2015-05-18
-        ~~~~~~~~~~~~~~~~
-        
-        Features:
-        
-        - Support for Python 3.3 or newer
-        
-        Improvements:
-        
-        - WMS is now available at /service, /ows and /wms
-        - WMTS KVP is now available at /service and /ows, RESTful service at /wmts
-        - allow tiled access to layers with multiple map:false sources
-        - add Access-control-allow-origin header to HTTP responses
-        - list KVP and RESTful capabilities on demo page
-        - disable verbose seed output if stdout is not a tty
-        - add globals.cache.link_single_color_images option
-        - support scale_factor for Mapnik sources
-        
-        Fixes:
-        
-        - handle EPSG axis order in WMTS capabilities
-        - pass through legends/featureinfo for recursive caches
-        - accept PNG/JPEG style image_format for WMS 1.0.0
-        - fix TMS capabilities in demo for TMS with use_grid_names
-        - fix ctrl+c behaviour in mapproxy-seed
-        - fix BBOX parsing in autoconf for WMS 1.3.0 services
-        
-        Other:
-        
-        - 1.8.0 is expected to work with Python 2.6, but it is no longer officially supported
-        - MapProxy will now issue warnings about configurations that will change with 2.0.
-          doc/mapproxy_2.rst lists some of the planed incompatible changes
-        
-        1.7.1 2014-07-08
-        ~~~~~~~~~~~~~~~~
-        
-        Fixes:
-        
-        - fix startup of mapproxy-util when libgdal/geos is missing
-        
-        
-        1.7.0 2014-07-07
-        ~~~~~~~~~~~~~~~~
-        
-        Features:
-        
-        - new `mapproxy-util autoconf` tool
-        - new versions option to limit supported WMS versions
-        - set different max extents for each SRS with bbox_srs
-        
-        Improvements:
-        
-        - display list of MultiMapProxy projects sorted by name
-        - check included files (base) for changes in reloader and serve-develop
-        - improve combining of multiple cascaded sources
-        - respect order of --seed/--cleanup tasks
-        - catch and log sqlite3.OperationalError when storing tiles
-        - do not open cascaded responses when image format matches
-        - mapproxy-seed: retry longer if source fails (100 instead of 10)
-        - mapproxy-seed: give more details if source request fails
-        - mapproxy-seed: do not hang nor print traceback if seed ends
-          after permanent source errors
-        - mapproxy-seed: skip seeds/cleanups with empty coverages
-        - keep order of image_formats in WMS capabilities
-        
-        
-        Fixes:
-        
-        - handle errors when loading to many tiles from mbtile/sqlite in
-          one batch
-        - reduce memory when handling large images
-        - allow remove_all for mbtiles cleanups
-        - use extent from layer metadata in WMTS capabilities
-        - handle threshold_res higher than first resolution
-        - fix exception handling in Mapnik source
-        - only init libproj when requested
-        
-        Other:
-        
-        - 1.7.x is the last release with support for Python 2.5
-        - depend on Pillow if PIL is not installed
-        
-        1.6.0 2013-09-12
-        ~~~~~~~~~~~~~~~~
-        
-        Improvements:
-        
-        - Riak cache supports multiple nodes
-        
-        Fixes:
-        
-        - handle SSL verification when using HTTP proxy
-        - ignore errors during single color symlinking
-        
-        Other:
-        
-        - --debug option for serve-multiapp-develop
-        - Riak cache requires Riak-Client >=2.0
-        
-        1.6.0rc1 2013-08-15
-        ~~~~~~~~~~~~~~~~~~~
-        
-        Features:
-        
-        - new `sqlite` cache with timestamps and one DB for each zoom level
-        - new `riak` cache
-        - first dimension support for WMTS (cascaded only)
-        - support HTTP Digest Authentication for source requests
-        - remove_all option for seed cleanups
-        - use real alpha composite for merging layers with transparent
-          backgrounds
-        - new tile_lock_dir option to write tile locks outside of the cache dir
-        - new decorate image API
-        - new GLOBAL_WEBMERCATOR grid with origin:nw and EPSG:3857
-        
-        Improvements:
-        
-        - speed up configuration loading with tagged sources
-        - speed up seeding with sparse coverages and limited levels
-          (e.g. only level 17-20)
-        - add required params to WMS URL in mapproxy-util wms-capabilities
-        - support for `@` and `:` in HTTP username and password
-        - try to load pyproj before using libproj.dll on Windows
-        - support for GDAL python module (osgeo.ogr) besides using gdal.so/dll
-          directly
-        - files are now written atomical to support concurrent access
-          to the same tile cache from different servers (e.g. via NFS)
-        - support for WMS 1.3.0 in mapproxy-util wms-capabilities
-        - support layer merge for 8bit PNGs
-        - support for OGR/GDAL 1.10
-        - show TMS root resource at /tms
-        
-        Fixes:
-        
-        - support requests>=1.0 for CouchDB cache
-        - HTTP_X_FORWARDED_HOST can be a list of hosts
-        - fixed KML for caches with origin: nw
-        - fixed 'I/O operation on closed file' errors
-        - fixed memory leak when reloading large configurations
-        - improve handling of mixed grids/formats when using caches as
-          cache sources
-        - threading related crashes in coverage handling
-        - close OGR sources
-        - catch IOErrors when PIL/Pillow can't identify image file
-        
-        Other:
-        
-        - update example configuration (base-config)
-        - update deployment documentation
-        - update OpenLayers version in demo service
-        - use restful_template URL in WMTS demo
-        - update MANIFEST.in to prevent unnecessary warnings during installation
-        - accept Pillow as depencendy instead of PIL when already installed
-        - deprecate use_mapnik2 option
-        
-        
-        Older changes
-        -------------
-        See https://raw.github.com/mapproxy/mapproxy/master/CHANGES.txt
-        
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: Apache Software License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.6
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Topic :: Internet :: Proxy Servers
-Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
-Classifier: Topic :: Scientific/Engineering :: GIS
diff --git a/MapProxy.egg-info/SOURCES.txt b/MapProxy.egg-info/SOURCES.txt
deleted file mode 100644
index 46e2031..0000000
--- a/MapProxy.egg-info/SOURCES.txt
+++ /dev/null
@@ -1,484 +0,0 @@
-CHANGES.txt
-COPYING.txt
-LICENSE.txt
-MANIFEST.in
-README.rst
-requirements-tests.txt
-setup.cfg
-setup.py
-MapProxy.egg-info/PKG-INFO
-MapProxy.egg-info/SOURCES.txt
-MapProxy.egg-info/dependency_links.txt
-MapProxy.egg-info/entry_points.txt
-MapProxy.egg-info/namespace_packages.txt
-MapProxy.egg-info/not-zip-safe
-MapProxy.egg-info/pbr.json
-MapProxy.egg-info/requires.txt
-MapProxy.egg-info/top_level.txt
-doc/GM.txt
-doc/Makefile
-doc/auth.rst
-doc/caches.rst
-doc/conf.py
-doc/configuration.rst
-doc/configuration_examples.rst
-doc/coverages.rst
-doc/decorate_img.rst
-doc/deployment.rst
-doc/development.rst
-doc/index.rst
-doc/inspire.rst
-doc/install.rst
-doc/install_osgeo4w.rst
-doc/install_windows.rst
-doc/labeling.rst
-doc/mapproxy_2.rst
-doc/mapproxy_util.rst
-doc/mapproxy_util_autoconfig.rst
-doc/seed.rst
-doc/services.rst
-doc/sources.rst
-doc/tutorial.rst
-doc/tutorial.yaml
-doc/_static/logo.png
-doc/_static/mapproxy.css
-doc/_templates/layout.html
-doc/_templates/navbar.html
-doc/_templates/toctree.html
-doc/imgs/bicubic.png
-doc/imgs/bilinear.png
-doc/imgs/labeling-dynamic.png
-doc/imgs/labeling-meta-buffer.png
-doc/imgs/labeling-metatiling-buffer.png
-doc/imgs/labeling-metatiling.png
-doc/imgs/labeling-no-clip.png
-doc/imgs/labeling-no-placement.png
-doc/imgs/labeling-partial-false.png
-doc/imgs/labeling-repeated.png
-doc/imgs/mapnik-webmerc-hq.png
-doc/imgs/mapnik-webmerc.png
-doc/imgs/mapproxy-demo.png
-doc/imgs/nearest.png
-doc/yaml/cache_conf.yaml
-doc/yaml/grid_conf.yaml
-doc/yaml/merged_conf.yaml
-doc/yaml/meta_conf.yaml
-doc/yaml/seed.yaml
-doc/yaml/simple_conf.yaml
-mapproxy/__init__.py
-mapproxy/exception.py
-mapproxy/featureinfo.py
-mapproxy/grid.py
-mapproxy/layer.py
-mapproxy/multiapp.py
-mapproxy/proj.py
-mapproxy/response.py
-mapproxy/srs.py
-mapproxy/template.py
-mapproxy/tilefilter.py
-mapproxy/version.py
-mapproxy/wsgiapp.py
-mapproxy/cache/__init__.py
-mapproxy/cache/base.py
-mapproxy/cache/couchdb.py
-mapproxy/cache/dummy.py
-mapproxy/cache/file.py
-mapproxy/cache/legend.py
-mapproxy/cache/mbtiles.py
-mapproxy/cache/meta.py
-mapproxy/cache/renderd.py
-mapproxy/cache/riak.py
-mapproxy/cache/sqlite.py
-mapproxy/cache/tile.py
-mapproxy/client/__init__.py
-mapproxy/client/cgi.py
-mapproxy/client/http.py
-mapproxy/client/log.py
-mapproxy/client/tile.py
-mapproxy/client/wms.py
-mapproxy/compat/__init__.py
-mapproxy/compat/image.py
-mapproxy/compat/itertools.py
-mapproxy/compat/modules.py
-mapproxy/config/__init__.py
-mapproxy/config/config.py
-mapproxy/config/coverage.py
-mapproxy/config/defaults.py
-mapproxy/config/loader.py
-mapproxy/config/spec.py
-mapproxy/config/validator.py
-mapproxy/config_template/__init__.py
-mapproxy/config_template/base_config/config.wsgi
-mapproxy/config_template/base_config/full_example.yaml
-mapproxy/config_template/base_config/full_seed_example.yaml
-mapproxy/config_template/base_config/log.ini
-mapproxy/config_template/base_config/mapproxy.yaml
-mapproxy/config_template/base_config/seed.yaml
-mapproxy/config_template/paster/etc/config.ini
-mapproxy/config_template/paster/etc/config.wsgi
-mapproxy/config_template/paster/etc/develop.ini
-mapproxy/config_template/paster/etc/log_deploy.ini
-mapproxy/config_template/paster/etc/mapproxy.yaml
-mapproxy/config_template/paster/etc/seed.yaml
-mapproxy/image/__init__.py
-mapproxy/image/mask.py
-mapproxy/image/merge.py
-mapproxy/image/message.py
-mapproxy/image/opts.py
-mapproxy/image/tile.py
-mapproxy/image/transform.py
-mapproxy/image/fonts/DejaVuSans.ttf
-mapproxy/image/fonts/DejaVuSansMono.ttf
-mapproxy/image/fonts/LICENSE
-mapproxy/image/fonts/__init__.py
-mapproxy/request/__init__.py
-mapproxy/request/base.py
-mapproxy/request/tile.py
-mapproxy/request/wmts.py
-mapproxy/request/wms/__init__.py
-mapproxy/request/wms/exception.py
-mapproxy/script/__init__.py
-mapproxy/script/export.py
-mapproxy/script/grids.py
-mapproxy/script/scales.py
-mapproxy/script/util.py
-mapproxy/script/wms_capabilities.py
-mapproxy/script/conf/__init__.py
-mapproxy/script/conf/app.py
-mapproxy/script/conf/caches.py
-mapproxy/script/conf/layers.py
-mapproxy/script/conf/seeds.py
-mapproxy/script/conf/sources.py
-mapproxy/script/conf/utils.py
-mapproxy/seed/__init__.py
-mapproxy/seed/cachelock.py
-mapproxy/seed/cleanup.py
-mapproxy/seed/config.py
-mapproxy/seed/script.py
-mapproxy/seed/seeder.py
-mapproxy/seed/spec.py
-mapproxy/seed/util.py
-mapproxy/service/__init__.py
-mapproxy/service/base.py
-mapproxy/service/demo.py
-mapproxy/service/kml.py
-mapproxy/service/ows.py
-mapproxy/service/template_helper.py
-mapproxy/service/tile.py
-mapproxy/service/wms.py
-mapproxy/service/wmts.py
-mapproxy/service/templates/tms_capabilities.xml
-mapproxy/service/templates/tms_exception.xml
-mapproxy/service/templates/tms_root_resource.xml
-mapproxy/service/templates/tms_tilemap_capabilities.xml
-mapproxy/service/templates/wms100capabilities.xml
-mapproxy/service/templates/wms100exception.xml
-mapproxy/service/templates/wms110capabilities.xml
-mapproxy/service/templates/wms110exception.xml
-mapproxy/service/templates/wms111capabilities.xml
-mapproxy/service/templates/wms111exception.xml
-mapproxy/service/templates/wms130capabilities.xml
-mapproxy/service/templates/wms130exception.xml
-mapproxy/service/templates/wmts100capabilities.xml
-mapproxy/service/templates/wmts100exception.xml
-mapproxy/service/templates/demo/capabilities_demo.html
-mapproxy/service/templates/demo/demo.html
-mapproxy/service/templates/demo/openlayers-demo.cfg
-mapproxy/service/templates/demo/static.html
-mapproxy/service/templates/demo/tms_demo.html
-mapproxy/service/templates/demo/wms_demo.html
-mapproxy/service/templates/demo/wmts_demo.html
-mapproxy/service/templates/demo/static/OpenLayers.js
-mapproxy/service/templates/demo/static/logo.png
-mapproxy/service/templates/demo/static/site.css
-mapproxy/service/templates/demo/static/img/blank.gif
-mapproxy/service/templates/demo/static/img/east-mini.png
-mapproxy/service/templates/demo/static/img/north-mini.png
-mapproxy/service/templates/demo/static/img/south-mini.png
-mapproxy/service/templates/demo/static/img/west-mini.png
-mapproxy/service/templates/demo/static/img/zoom-minus-mini.png
-mapproxy/service/templates/demo/static/img/zoom-plus-mini.png
-mapproxy/service/templates/demo/static/img/zoom-world-mini.png
-mapproxy/service/templates/demo/static/theme/default/framedCloud.css
-mapproxy/service/templates/demo/static/theme/default/google.css
-mapproxy/service/templates/demo/static/theme/default/ie6-style.css
-mapproxy/service/templates/demo/static/theme/default/style.css
-mapproxy/source/__init__.py
-mapproxy/source/error.py
-mapproxy/source/mapnik.py
-mapproxy/source/tile.py
-mapproxy/source/wms.py
-mapproxy/test/__init__.py
-mapproxy/test/helper.py
-mapproxy/test/http.py
-mapproxy/test/image.py
-mapproxy/test/mocker.py
-mapproxy/test/test_http_helper.py
-mapproxy/test/schemas/xml.xsd
-mapproxy/test/schemas/inspire/common/1.0/common.xsd
-mapproxy/test/schemas/inspire/common/1.0/network.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_bul.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_cze.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_dan.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_dut.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_eng.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_est.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_fin.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_fre.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_ger.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_gle.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_gre.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_hun.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_ita.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_lav.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_lit.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_mlt.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_pol.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_por.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_rum.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_slo.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_slv.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_spa.xsd
-mapproxy/test/schemas/inspire/common/1.0/enums/enum_swe.xsd
-mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemddataset.xml
-mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdseries.xml
-mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdservice.xml
-mapproxy/test/schemas/inspire/inspire_vs/1.0/inspire_vs.xsd
-mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/WMS_Image2000GetCapabilities_InspireSchema.xml
-mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_at.xml
-mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_geoimage.xml
-mapproxy/test/schemas/kml/2.2.0/ReadMe.txt
-mapproxy/test/schemas/kml/2.2.0/atom-author-link.xsd
-mapproxy/test/schemas/kml/2.2.0/ogckml22.xsd
-mapproxy/test/schemas/kml/2.2.0/xAL.xsd
-mapproxy/test/schemas/ows/1.1.0/ReadMe.txt
-mapproxy/test/schemas/ows/1.1.0/ows19115subset.xsd
-mapproxy/test/schemas/ows/1.1.0/owsAll.xsd
-mapproxy/test/schemas/ows/1.1.0/owsCommon.xsd
-mapproxy/test/schemas/ows/1.1.0/owsContents.xsd
-mapproxy/test/schemas/ows/1.1.0/owsDataIdentification.xsd
-mapproxy/test/schemas/ows/1.1.0/owsDomainType.xsd
-mapproxy/test/schemas/ows/1.1.0/owsExceptionReport.xsd
-mapproxy/test/schemas/ows/1.1.0/owsGetCapabilities.xsd
-mapproxy/test/schemas/ows/1.1.0/owsGetResourceByID.xsd
-mapproxy/test/schemas/ows/1.1.0/owsInputOutputData.xsd
-mapproxy/test/schemas/ows/1.1.0/owsManifest.xsd
-mapproxy/test/schemas/ows/1.1.0/owsOperationsMetadata.xsd
-mapproxy/test/schemas/ows/1.1.0/owsServiceIdentification.xsd
-mapproxy/test/schemas/ows/1.1.0/owsServiceProvider.xsd
-mapproxy/test/schemas/sld/1.1.0/sld_capabilities.xsd
-mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.dtd
-mapproxy/test/schemas/wms/1.0.0/capabilities_1_0_0.xml
-mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.dtd
-mapproxy/test/schemas/wms/1.0.7/capabilities_1_0_7.xml
-mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.dtd
-mapproxy/test/schemas/wms/1.1.0/capabilities_1_1_0.xml
-mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.dtd
-mapproxy/test/schemas/wms/1.1.0/exception_1_1_0.xml
-mapproxy/test/schemas/wms/1.1.1/OGC-exception.xsd
-mapproxy/test/schemas/wms/1.1.1/WMS_DescribeLayerResponse.dtd
-mapproxy/test/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd
-mapproxy/test/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd
-mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.dtd
-mapproxy/test/schemas/wms/1.1.1/capabilities_1_1_1.xml
-mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.dtd
-mapproxy/test/schemas/wms/1.1.1/exception_1_1_1.xml
-mapproxy/test/schemas/wms/1.3.0/ReadMe.txt
-mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xml
-mapproxy/test/schemas/wms/1.3.0/capabilities_1_3_0.xsd
-mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xml
-mapproxy/test/schemas/wms/1.3.0/exceptions_1_3_0.xsd
-mapproxy/test/schemas/wmsc/1.1.1/OGC-exception.xsd
-mapproxy/test/schemas/wmsc/1.1.1/WMS_DescribeLayerResponse.dtd
-mapproxy/test/schemas/wmsc/1.1.1/WMS_MS_Capabilities.dtd
-mapproxy/test/schemas/wmsc/1.1.1/WMS_exception_1_1_1.dtd
-mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.dtd
-mapproxy/test/schemas/wmsc/1.1.1/capabilities_1_1_1.xml
-mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.dtd
-mapproxy/test/schemas/wmsc/1.1.1/exception_1_1_1.xml
-mapproxy/test/schemas/wmts/1.0/ReadMe.txt
-mapproxy/test/schemas/wmts/1.0/wmts.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsAbstract.wsdl
-mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_request.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsGetCapabilities_response.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_request.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsGetFeatureInfo_response.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsGetTile_request.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsKVP.xsd
-mapproxy/test/schemas/wmts/1.0/wmtsPayload_response.xsd
-mapproxy/test/schemas/xlink/1.0.0/ReadMe.txt
-mapproxy/test/schemas/xlink/1.0.0/xlinks.xsd
-mapproxy/test/system/__init__.py
-mapproxy/test/system/test_auth.py
-mapproxy/test/system/test_behind_proxy.py
-mapproxy/test/system/test_cache_grid_names.py
-mapproxy/test/system/test_cache_mbtiles.py
-mapproxy/test/system/test_cache_source.py
-mapproxy/test/system/test_combined_sources.py
-mapproxy/test/system/test_coverage.py
-mapproxy/test/system/test_decorate_img.py
-mapproxy/test/system/test_disable_storage.py
-mapproxy/test/system/test_formats.py
-mapproxy/test/system/test_inspire_vs.py
-mapproxy/test/system/test_kml.py
-mapproxy/test/system/test_layergroups.py
-mapproxy/test/system/test_legendgraphic.py
-mapproxy/test/system/test_mapnik.py
-mapproxy/test/system/test_mapserver.py
-mapproxy/test/system/test_mixed_mode_format.py
-mapproxy/test/system/test_multiapp.py
-mapproxy/test/system/test_renderd_client.py
-mapproxy/test/system/test_scalehints.py
-mapproxy/test/system/test_seed.py
-mapproxy/test/system/test_seed_only.py
-mapproxy/test/system/test_sld.py
-mapproxy/test/system/test_source_errors.py
-mapproxy/test/system/test_tilesource_minmax_res.py
-mapproxy/test/system/test_tms.py
-mapproxy/test/system/test_tms_origin.py
-mapproxy/test/system/test_util_conf.py
-mapproxy/test/system/test_util_export.py
-mapproxy/test/system/test_util_grids.py
-mapproxy/test/system/test_util_wms_capabilities.py
-mapproxy/test/system/test_watermark.py
-mapproxy/test/system/test_wms.py
-mapproxy/test/system/test_wms_srs_extent.py
-mapproxy/test/system/test_wms_version.py
-mapproxy/test/system/test_wmsc.py
-mapproxy/test/system/test_wmts.py
-mapproxy/test/system/test_wmts_dimensions.py
-mapproxy/test/system/test_wmts_restful.py
-mapproxy/test/system/test_xslt_featureinfo.py
-mapproxy/test/system/fixture/auth.yaml
-mapproxy/test/system/fixture/cache.mbtiles
-mapproxy/test/system/fixture/cache_grid_names.yaml
-mapproxy/test/system/fixture/cache_mbtiles.yaml
-mapproxy/test/system/fixture/cache_source.yaml
-mapproxy/test/system/fixture/cgi.py
-mapproxy/test/system/fixture/combined_sources.yaml
-mapproxy/test/system/fixture/coverage.yaml
-mapproxy/test/system/fixture/disable_storage.yaml
-mapproxy/test/system/fixture/empty_ogrdata.geojson
-mapproxy/test/system/fixture/formats.yaml
-mapproxy/test/system/fixture/inspire.yaml
-mapproxy/test/system/fixture/inspire_full.yaml
-mapproxy/test/system/fixture/kml_layer.yaml
-mapproxy/test/system/fixture/layer.yaml
-mapproxy/test/system/fixture/layergroups.yaml
-mapproxy/test/system/fixture/layergroups_root.yaml
-mapproxy/test/system/fixture/legendgraphic.yaml
-mapproxy/test/system/fixture/mapnik_source.yaml
-mapproxy/test/system/fixture/mapproxy_export.yaml
-mapproxy/test/system/fixture/mapserver.yaml
-mapproxy/test/system/fixture/mixed_mode.yaml
-mapproxy/test/system/fixture/multiapp1.yaml
-mapproxy/test/system/fixture/multiapp2.yaml
-mapproxy/test/system/fixture/renderd_client.yaml
-mapproxy/test/system/fixture/scalehints.yaml
-mapproxy/test/system/fixture/seed.yaml
-mapproxy/test/system/fixture/seed_mapproxy.yaml
-mapproxy/test/system/fixture/seed_old.yaml
-mapproxy/test/system/fixture/seed_timeouts.yaml
-mapproxy/test/system/fixture/seed_timeouts_mapproxy.yaml
-mapproxy/test/system/fixture/seedonly.yaml
-mapproxy/test/system/fixture/sld.yaml
-mapproxy/test/system/fixture/source_errors.yaml
-mapproxy/test/system/fixture/source_errors_raise.yaml
-mapproxy/test/system/fixture/tileservice_origin.yaml
-mapproxy/test/system/fixture/tilesource_minmax_res.yaml
-mapproxy/test/system/fixture/util-conf-base-grids.yaml
-mapproxy/test/system/fixture/util-conf-overwrite.yaml
-mapproxy/test/system/fixture/util-conf-wms-111-cap.xml
-mapproxy/test/system/fixture/util_grids.yaml
-mapproxy/test/system/fixture/util_wms_capabilities111.xml
-mapproxy/test/system/fixture/util_wms_capabilities130.xml
-mapproxy/test/system/fixture/util_wms_capabilities_service_exception.xml
-mapproxy/test/system/fixture/watermark.yaml
-mapproxy/test/system/fixture/wms_srs_extent.yaml
-mapproxy/test/system/fixture/wms_versions.yaml
-mapproxy/test/system/fixture/wmts.yaml
-mapproxy/test/system/fixture/wmts_dimensions.yaml
-mapproxy/test/system/fixture/xslt_featureinfo.yaml
-mapproxy/test/system/fixture/cache_data/wms_cache_EPSG900913/01/000/000/000/000/000/001.jpeg
-mapproxy/test/system/fixture/cache_data/wms_cache_transparent_EPSG900913/01/000/000/000/000/000/001.png
-mapproxy/test/unit/__init__.py
-mapproxy/test/unit/epsg
-mapproxy/test/unit/test_async.py
-mapproxy/test/unit/test_auth.py
-mapproxy/test/unit/test_cache.py
-mapproxy/test/unit/test_cache_couchdb.py
-mapproxy/test/unit/test_cache_riak.py
-mapproxy/test/unit/test_cache_tile.py
-mapproxy/test/unit/test_client.py
-mapproxy/test/unit/test_client_cgi.py
-mapproxy/test/unit/test_collections.py
-mapproxy/test/unit/test_concat_legends.py
-mapproxy/test/unit/test_conf_loader.py
-mapproxy/test/unit/test_conf_validator.py
-mapproxy/test/unit/test_config.py
-mapproxy/test/unit/test_decorate_img.py
-mapproxy/test/unit/test_exceptions.py
-mapproxy/test/unit/test_featureinfo.py
-mapproxy/test/unit/test_file_lock_load.py
-mapproxy/test/unit/test_geom.py
-mapproxy/test/unit/test_grid.py
-mapproxy/test/unit/test_image.py
-mapproxy/test/unit/test_image_mask.py
-mapproxy/test/unit/test_image_messages.py
-mapproxy/test/unit/test_image_options.py
-mapproxy/test/unit/test_multiapp.py
-mapproxy/test/unit/test_ogr_reader.py
-mapproxy/test/unit/test_request.py
-mapproxy/test/unit/test_request_wmts.py
-mapproxy/test/unit/test_response.py
-mapproxy/test/unit/test_seed.py
-mapproxy/test/unit/test_seed_cachelock.py
-mapproxy/test/unit/test_srs.py
-mapproxy/test/unit/test_tiled_source.py
-mapproxy/test/unit/test_tilefilter.py
-mapproxy/test/unit/test_times.py
-mapproxy/test/unit/test_timeutils.py
-mapproxy/test/unit/test_util_conf_utils.py
-mapproxy/test/unit/test_utils.py
-mapproxy/test/unit/test_wms_capabilities.py
-mapproxy/test/unit/test_wms_layer.py
-mapproxy/test/unit/test_yaml.py
-mapproxy/test/unit/polygons/polygons.dbf
-mapproxy/test/unit/polygons/polygons.shp
-mapproxy/test/unit/polygons/polygons.shx
-mapproxy/util/__init__.py
-mapproxy/util/async.py
-mapproxy/util/collections.py
-mapproxy/util/coverage.py
-mapproxy/util/fs.py
-mapproxy/util/geom.py
-mapproxy/util/lib.py
-mapproxy/util/lock.py
-mapproxy/util/ogr.py
-mapproxy/util/py.py
-mapproxy/util/times.py
-mapproxy/util/wsgi.py
-mapproxy/util/yaml.py
-mapproxy/util/ext/__init__.py
-mapproxy/util/ext/local.py
-mapproxy/util/ext/lockfile.py
-mapproxy/util/ext/odict.py
-mapproxy/util/ext/serving.py
-mapproxy/util/ext/dictspec/__init__.py
-mapproxy/util/ext/dictspec/spec.py
-mapproxy/util/ext/dictspec/validator.py
-mapproxy/util/ext/dictspec/test/__init__.py
-mapproxy/util/ext/dictspec/test/test_validator.py
-mapproxy/util/ext/tempita/__init__.py
-mapproxy/util/ext/tempita/_looper.py
-mapproxy/util/ext/tempita/compat3.py
-mapproxy/util/ext/wmsparse/__init__.py
-mapproxy/util/ext/wmsparse/parse.py
-mapproxy/util/ext/wmsparse/util.py
-mapproxy/util/ext/wmsparse/test/__init__.py
-mapproxy/util/ext/wmsparse/test/test_parse.py
-mapproxy/util/ext/wmsparse/test/test_util.py
-mapproxy/util/ext/wmsparse/test/wms-large-111.xml
-mapproxy/util/ext/wmsparse/test/wms-omniscale-111.xml
-mapproxy/util/ext/wmsparse/test/wms-omniscale-130.xml
-mapproxy/util/ext/wmsparse/test/wms_nasa_cap.xml
\ No newline at end of file
diff --git a/MapProxy.egg-info/dependency_links.txt b/MapProxy.egg-info/dependency_links.txt
deleted file mode 100644
index 8b13789..0000000
--- a/MapProxy.egg-info/dependency_links.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/MapProxy.egg-info/entry_points.txt b/MapProxy.egg-info/entry_points.txt
deleted file mode 100644
index a5ae7b6..0000000
--- a/MapProxy.egg-info/entry_points.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-[console_scripts]
-mapproxy-seed = mapproxy.seed.script:main
-mapproxy-util = mapproxy.script.util:main
-
-[paste.app_factory]
-app = mapproxy.wsgiapp:app_factory
-multiapp = mapproxy.multiapp:app_factory
-
-[paste.filter_factory]
-lighttpd_root_fix = mapproxy.util.wsgi:lighttpd_root_fix_filter_factory
-
-[paste.paster_create_template]
-mapproxy_conf = mapproxy.config_template:PasterConfigurationTemplate
-
diff --git a/MapProxy.egg-info/namespace_packages.txt b/MapProxy.egg-info/namespace_packages.txt
deleted file mode 100644
index 3fb1968..0000000
--- a/MapProxy.egg-info/namespace_packages.txt
+++ /dev/null
@@ -1 +0,0 @@
-mapproxy
diff --git a/MapProxy.egg-info/not-zip-safe b/MapProxy.egg-info/not-zip-safe
deleted file mode 100644
index 8b13789..0000000
--- a/MapProxy.egg-info/not-zip-safe
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/MapProxy.egg-info/pbr.json b/MapProxy.egg-info/pbr.json
deleted file mode 100644
index 6759183..0000000
--- a/MapProxy.egg-info/pbr.json
+++ /dev/null
@@ -1 +0,0 @@
-{"is_release": false, "git_version": "26a945b"}
\ No newline at end of file
diff --git a/MapProxy.egg-info/requires.txt b/MapProxy.egg-info/requires.txt
deleted file mode 100644
index d85ba0e..0000000
--- a/MapProxy.egg-info/requires.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-PyYAML>=3.0,<3.99
-Pillow !=2.4.0
diff --git a/MapProxy.egg-info/top_level.txt b/MapProxy.egg-info/top_level.txt
deleted file mode 100644
index 3fb1968..0000000
--- a/MapProxy.egg-info/top_level.txt
+++ /dev/null
@@ -1 +0,0 @@
-mapproxy
diff --git a/PKG-INFO b/PKG-INFO
deleted file mode 100644
index a32f6c4..0000000
--- a/PKG-INFO
+++ /dev/null
@@ -1,227 +0,0 @@
-Metadata-Version: 1.1
-Name: MapProxy
-Version: 1.8.2
-Summary: An accelerating proxy for web map services
-Home-page: http://mapproxy.org
-Author: Oliver Tonnhofer
-Author-email: olt at omniscale.de
-License: Apache Software License 2.0
-Description: MapProxy is an open source proxy for geospatial data. It caches, accelerates and transforms data from existing map services and serves any desktop or web GIS client.
-        
-        .. image:: http://mapproxy.org/mapproxy.png
-        
-        MapProxy is a tile cache, but also offers many new and innovative features like full support for WMS clients.
-        
-        MapProxy is actively developed and supported by `Omniscale <http://omniscale.com>`_, it is released under the Apache Software License 2.0, runs on Unix/Linux and Windows and is easy to install and to configure.
-        
-        Go to http://mapproxy.org/ for more information.
-        
-        The documentation is available at: http://mapproxy.org/docs/latest/
-        
-        Changes
-        -------
-        1.8.2 2016-01-22
-        ~~~~~~~~~~~~~~~~
-        
-        Fixes:
-        
-        - serve-develop: fixed reloader for Windows installations made
-          with recent pip version
-        
-        1.8.1 2015-09-22
-        ~~~~~~~~~~~~~~~~
-        
-        Improvements:
-        
-        - WMS 1.3.0: support for metadata required by INSPIRE View Services
-        - WMS: OnlineResource defaults to service URL
-        
-        Fixes:
-        
-        - mapproxy-seed: fix race-condition which prevented termination at the
-          end of the seeding process
-        - autoconfig: parse capabilities without ContactInformation
-        - SQLite cache: close files after seeding
-        - sqlite/mbtiles: fix tile lock location
-        - WMS 1.0.0: fix image format for source requests
-        - WMS: allow floats for X/Y in GetFeatureInfo requests
-        - CouchDB: fix for Python 3
-        
-        Other:
-        
-        - mapproxy-seed: seeding a cache with disable_storage: true returns
-          an error
-        - all changes are now tested against Python 2.7, 3.3, 3.4 and 3.5
-        
-        1.8.0 2015-05-18
-        ~~~~~~~~~~~~~~~~
-        
-        Features:
-        
-        - Support for Python 3.3 or newer
-        
-        Improvements:
-        
-        - WMS is now available at /service, /ows and /wms
-        - WMTS KVP is now available at /service and /ows, RESTful service at /wmts
-        - allow tiled access to layers with multiple map:false sources
-        - add Access-control-allow-origin header to HTTP responses
-        - list KVP and RESTful capabilities on demo page
-        - disable verbose seed output if stdout is not a tty
-        - add globals.cache.link_single_color_images option
-        - support scale_factor for Mapnik sources
-        
-        Fixes:
-        
-        - handle EPSG axis order in WMTS capabilities
-        - pass through legends/featureinfo for recursive caches
-        - accept PNG/JPEG style image_format for WMS 1.0.0
-        - fix TMS capabilities in demo for TMS with use_grid_names
-        - fix ctrl+c behaviour in mapproxy-seed
-        - fix BBOX parsing in autoconf for WMS 1.3.0 services
-        
-        Other:
-        
-        - 1.8.0 is expected to work with Python 2.6, but it is no longer officially supported
-        - MapProxy will now issue warnings about configurations that will change with 2.0.
-          doc/mapproxy_2.rst lists some of the planed incompatible changes
-        
-        1.7.1 2014-07-08
-        ~~~~~~~~~~~~~~~~
-        
-        Fixes:
-        
-        - fix startup of mapproxy-util when libgdal/geos is missing
-        
-        
-        1.7.0 2014-07-07
-        ~~~~~~~~~~~~~~~~
-        
-        Features:
-        
-        - new `mapproxy-util autoconf` tool
-        - new versions option to limit supported WMS versions
-        - set different max extents for each SRS with bbox_srs
-        
-        Improvements:
-        
-        - display list of MultiMapProxy projects sorted by name
-        - check included files (base) for changes in reloader and serve-develop
-        - improve combining of multiple cascaded sources
-        - respect order of --seed/--cleanup tasks
-        - catch and log sqlite3.OperationalError when storing tiles
-        - do not open cascaded responses when image format matches
-        - mapproxy-seed: retry longer if source fails (100 instead of 10)
-        - mapproxy-seed: give more details if source request fails
-        - mapproxy-seed: do not hang nor print traceback if seed ends
-          after permanent source errors
-        - mapproxy-seed: skip seeds/cleanups with empty coverages
-        - keep order of image_formats in WMS capabilities
-        
-        
-        Fixes:
-        
-        - handle errors when loading to many tiles from mbtile/sqlite in
-          one batch
-        - reduce memory when handling large images
-        - allow remove_all for mbtiles cleanups
-        - use extent from layer metadata in WMTS capabilities
-        - handle threshold_res higher than first resolution
-        - fix exception handling in Mapnik source
-        - only init libproj when requested
-        
-        Other:
-        
-        - 1.7.x is the last release with support for Python 2.5
-        - depend on Pillow if PIL is not installed
-        
-        1.6.0 2013-09-12
-        ~~~~~~~~~~~~~~~~
-        
-        Improvements:
-        
-        - Riak cache supports multiple nodes
-        
-        Fixes:
-        
-        - handle SSL verification when using HTTP proxy
-        - ignore errors during single color symlinking
-        
-        Other:
-        
-        - --debug option for serve-multiapp-develop
-        - Riak cache requires Riak-Client >=2.0
-        
-        1.6.0rc1 2013-08-15
-        ~~~~~~~~~~~~~~~~~~~
-        
-        Features:
-        
-        - new `sqlite` cache with timestamps and one DB for each zoom level
-        - new `riak` cache
-        - first dimension support for WMTS (cascaded only)
-        - support HTTP Digest Authentication for source requests
-        - remove_all option for seed cleanups
-        - use real alpha composite for merging layers with transparent
-          backgrounds
-        - new tile_lock_dir option to write tile locks outside of the cache dir
-        - new decorate image API
-        - new GLOBAL_WEBMERCATOR grid with origin:nw and EPSG:3857
-        
-        Improvements:
-        
-        - speed up configuration loading with tagged sources
-        - speed up seeding with sparse coverages and limited levels
-          (e.g. only level 17-20)
-        - add required params to WMS URL in mapproxy-util wms-capabilities
-        - support for `@` and `:` in HTTP username and password
-        - try to load pyproj before using libproj.dll on Windows
-        - support for GDAL python module (osgeo.ogr) besides using gdal.so/dll
-          directly
-        - files are now written atomical to support concurrent access
-          to the same tile cache from different servers (e.g. via NFS)
-        - support for WMS 1.3.0 in mapproxy-util wms-capabilities
-        - support layer merge for 8bit PNGs
-        - support for OGR/GDAL 1.10
-        - show TMS root resource at /tms
-        
-        Fixes:
-        
-        - support requests>=1.0 for CouchDB cache
-        - HTTP_X_FORWARDED_HOST can be a list of hosts
-        - fixed KML for caches with origin: nw
-        - fixed 'I/O operation on closed file' errors
-        - fixed memory leak when reloading large configurations
-        - improve handling of mixed grids/formats when using caches as
-          cache sources
-        - threading related crashes in coverage handling
-        - close OGR sources
-        - catch IOErrors when PIL/Pillow can't identify image file
-        
-        Other:
-        
-        - update example configuration (base-config)
-        - update deployment documentation
-        - update OpenLayers version in demo service
-        - use restful_template URL in WMTS demo
-        - update MANIFEST.in to prevent unnecessary warnings during installation
-        - accept Pillow as depencendy instead of PIL when already installed
-        - deprecate use_mapnik2 option
-        
-        
-        Older changes
-        -------------
-        See https://raw.github.com/mapproxy/mapproxy/master/CHANGES.txt
-        
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: Apache Software License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.6
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Topic :: Internet :: Proxy Servers
-Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
-Classifier: Topic :: Scientific/Engineering :: GIS
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..a59dd45
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,23 @@
+mapproxy (1.8.0) unstable; urgency=low
+
+  * New upstream, release.
+
+ -- Oliver Tonnhofer <olt at bogosoft.com>  Fri, 17 Jul 2015 09:38:03 +0000
+
+mapproxy (1.5.0) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Oliver Tonnhofer <olt at bogosoft.com>  Wed, 05 Dec 2012 10:15:19 +0100
+
+mapproxy (1.1.2) unstable; urgency=low
+
+  * First debian release.
+
+ -- Bjoern Schilberg <bjoern.schilberg at intevation.de>  Fri, 24 Jun 2011 09:49:44 +0200
+
+mapproxy (1.1.0) unstable; urgency=low
+
+  * Initial release of the debian-files
+
+ -- Stephan Holl <stephan.holl at intevation.de>  Mon, 23 May 2011 09:50:26 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..f52c461
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,18 @@
+Source: mapproxy
+Section: python
+Priority: optional
+Maintainer: Stephan Holl <stephan.holl at intevation.de>
+Build-Depends: debhelper (>=7.0.50~), python-support (>= 0.6), cdbs (>= 0.4.49), python-setuptools, quilt
+Standards-Version: 3.8.4
+
+Package: mapproxy
+Architecture: all
+Homepage: http://www.mapproxy.org
+Depends: ${misc:Depends}, ${python:Depends}, python-pkg-resources, python-setuptools, python-imaging, python-yaml, libproj0, ttf-dejavu, ttf-dejavu-extra
+Suggests: python-lxml, python-shapely, python-pastedeploy, libgdal1
+Description: This programm MapProxy is an open source proxy for geospatial data. It caches,
+ accelerates and transforms data from existing map services and serves any
+ desktop or web GIS client. 
+ MapProxy is a tile cache solution, but also offers many new and innovative
+ features like full support for WMS clients. It is released under the Apache
+ Software License 2.0, runs on Unix/Linux and Windows.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..2a01f5c
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,54 @@
+Copyright (C) 2010, 2011 Omniscale <http://omniscale.de>
+
+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.
+
+
+For the following parts the copyright is held by third parties and the license terms
+differ.
+
+mapproxy/image/fonts/*.ttf
+--------------------------
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+
+See mapproxy/image/fonts/LICENSE
+
+mapproxy/util/ext/odict.py
+--------------------------
+(c) 2008 by Armin Ronacher and PEP 273 authors.
+Modified "3-clause" BSD license.
+
+mapproxy/util/ext/tempita/*.py
+------------------------------
+(c) 2009 by Ian Bicking.
+MIT license.
+
+mapproxy/util/ext/lockfile.py
+-----------------------------
+Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+Zope Public License (ZPL) Version 2.1
+See file header.
+
+mapproxy/util/ext/(local|serving).py
+-----------------------------
+Copyright (c) 2010 by the Werkzeug Team
+Modified "3-clause" BSD license.
+
+mapproxy/util/ext/dictspec/*.py
+------------------------------
+(c) 2011 by Oliver Tonnhofer, Omniscale.
+MIT license.
+
+mapproxy/test/schemas/*
+-----------------------
+Copyright (c) 1994 - 2010 Open Geospatial Consortium, Inc
diff --git a/debian/patches/font_dir.patch b/debian/patches/font_dir.patch
new file mode 100644
index 0000000..2695dbe
--- /dev/null
+++ b/debian/patches/font_dir.patch
@@ -0,0 +1,133 @@
+Index: mapproxy/MANIFEST.in
+===================================================================
+--- mapproxy.orig/MANIFEST.in	2015-07-17 09:16:34.000000000 +0000
++++ mapproxy/MANIFEST.in	2015-07-17 09:17:08.000000000 +0000
+@@ -18,9 +18,8 @@
+ include doc/_templates/*.html
+ 
+ recursive-include mapproxy/config_template *.ini *.wsgi *.yaml
+-recursive-include mapproxy/image/fonts *.ttf LICENSE
+ recursive-include mapproxy/service/templates *.css *.cfg *.gif *.png *.xml *.html *.js
+ recursive-include mapproxy/test/schemas *.xml *.xsd *.dtd *.wsdl *.txt
+ recursive-include mapproxy/test/system/fixture *.yaml *.mbtiles *.geojson *.xml *.jpeg *.png *.py
+ recursive-include mapproxy/test/unit epsg *.dbf *.shp *.shx
+-recursive-include mapproxy/util/ext/wmsparse/test *.xml
+\ No newline at end of file
++recursive-include mapproxy/util/ext/wmsparse/test *.xml
+Index: mapproxy/mapproxy/config/defaults.py
+===================================================================
+--- mapproxy.orig/mapproxy/config/defaults.py	2015-07-17 09:16:34.000000000 +0000
++++ mapproxy/mapproxy/config/defaults.py	2015-07-17 09:16:42.000000000 +0000
+@@ -43,7 +43,7 @@
+     max_shrink_factor = 4.0,
+     paletted = True,
+     transparent_color_tolerance = 5,
+-    font_dir = None,
++    font_dir = '/usr/share/fonts/truetype/ttf-dejavu',
+ )
+ # number of concurrent requests to a tile source
+ 
+Index: mapproxy/mapproxy/image/fonts/LICENSE
+===================================================================
+--- mapproxy.orig/mapproxy/image/fonts/LICENSE	2015-07-17 09:16:34.000000000 +0000
++++ /dev/null	1970-01-01 00:00:00.000000000 +0000
+@@ -1,99 +0,0 @@
+-Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+-Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+-
+-Bitstream Vera Fonts Copyright
+-------------------------------
+-
+-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+-a trademark of Bitstream, Inc.
+-
+-Permission is hereby granted, free of charge, to any person obtaining a copy
+-of the fonts accompanying this license ("Fonts") and associated
+-documentation files (the "Font Software"), to reproduce and distribute the
+-Font Software, including without limitation the rights to use, copy, merge,
+-publish, distribute, and/or sell copies of the Font Software, and to permit
+-persons to whom the Font Software is furnished to do so, subject to the
+-following conditions:
+-
+-The above copyright and trademark notices and this permission notice shall
+-be included in all copies of one or more of the Font Software typefaces.
+-
+-The Font Software may be modified, altered, or added to, and in particular
+-the designs of glyphs or characters in the Fonts may be modified and
+-additional glyphs or characters may be added to the Fonts, only if the fonts
+-are renamed to names not containing either the words "Bitstream" or the word
+-"Vera".
+-
+-This License becomes null and void to the extent applicable to Fonts or Font
+-Software that has been modified and is distributed under the "Bitstream
+-Vera" names.
+-
+-The Font Software may be sold as part of a larger software package but no
+-copy of one or more of the Font Software typefaces may be sold by itself.
+-
+-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+-OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+-TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+-FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+-ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+-THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+-FONT SOFTWARE.
+-
+-Except as contained in this notice, the names of Gnome, the Gnome
+-Foundation, and Bitstream Inc., shall not be used in advertising or
+-otherwise to promote the sale, use or other dealings in this Font Software
+-without prior written authorization from the Gnome Foundation or Bitstream
+-Inc., respectively. For further information, contact: fonts at gnome dot
+-org. 
+-
+-Arev Fonts Copyright
+-------------------------------
+-
+-Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+-
+-Permission is hereby granted, free of charge, to any person obtaining
+-a copy of the fonts accompanying this license ("Fonts") and
+-associated documentation files (the "Font Software"), to reproduce
+-and distribute the modifications to the Bitstream Vera Font Software,
+-including without limitation the rights to use, copy, merge, publish,
+-distribute, and/or sell copies of the Font Software, and to permit
+-persons to whom the Font Software is furnished to do so, subject to
+-the following conditions:
+-
+-The above copyright and trademark notices and this permission notice
+-shall be included in all copies of one or more of the Font Software
+-typefaces.
+-
+-The Font Software may be modified, altered, or added to, and in
+-particular the designs of glyphs or characters in the Fonts may be
+-modified and additional glyphs or characters may be added to the
+-Fonts, only if the fonts are renamed to names not containing either
+-the words "Tavmjong Bah" or the word "Arev".
+-
+-This License becomes null and void to the extent applicable to Fonts
+-or Font Software that has been modified and is distributed under the 
+-"Tavmjong Bah Arev" names.
+-
+-The Font Software may be sold as part of a larger software package but
+-no copy of one or more of the Font Software typefaces may be sold by
+-itself.
+-
+-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+-TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+-OTHER DEALINGS IN THE FONT SOFTWARE.
+-
+-Except as contained in this notice, the name of Tavmjong Bah shall not
+-be used in advertising or otherwise to promote the sale, use or other
+-dealings in this Font Software without prior written authorization
+-from Tavmjong Bah. For further information, contact: tavmjong @ free
+-. fr.
+-
+-$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
diff --git a/debian/patches/package_data.patch b/debian/patches/package_data.patch
new file mode 100644
index 0000000..5593200
--- /dev/null
+++ b/debian/patches/package_data.patch
@@ -0,0 +1,12 @@
+diff -r ca4999c5c60e setup.py
+--- a/setup.py	Tue May 24 13:00:18 2011 +0200
++++ b/setup.py	Wed May 25 11:42:31 2011 +0200
+@@ -38,7 +38,7 @@
+             'lighttpd_root_fix = mapproxy.util.wsgi:lighttpd_root_fix_filter_factory',
+         ],
+     },
+-    package_data = {'': ['*.xml', '*.yaml', '*.ttf', '*.wsgi', '*.ini']},
++    package_data = {'': ['*.xml', '*.yaml', '*.wsgi', '*.ini']},
+     install_requires=install_requires,
+     classifiers=[
+         "Development Status :: 5 - Production/Stable",
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..bc2b913
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,2 @@
+font_dir.patch
+package_data.patch
diff --git a/debian/pyversions b/debian/pyversions
new file mode 100644
index 0000000..865377f
--- /dev/null
+++ b/debian/pyversions
@@ -0,0 +1 @@
+2.5-2.7
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..61228a6
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,14 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+DEB_PYTHON_SYSTEM := pysupport
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/rules/patchsys-quilt.mk
+include /usr/share/cdbs/1/class/python-distutils.mk
+
+DEB_COMPRESS_EXCLUDE := .py
+
+clean::
+	rm -rf build build-stamp configure-stamp build/ MANIFEST
+	dh_clean
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..650662f
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,3 @@
+version=3
+
+http://mapproxy.org/static/rel/MapProxy-([0-9]\.[0-9].+)\.tar\.gz
diff --git a/doc/Makefile b/doc/Makefile
index 93afe21..c7a8507 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -23,6 +23,7 @@ help:
 	@echo "  htmlhelp  to make HTML files and a HTML help project"
 	@echo "  qthelp    to make HTML files and a qthelp project"
 	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf  to make LaTeX files and run them through pdflatex"
 	@echo "  changes   to make an overview of all changed/added/deprecated items"
 	@echo "  linkcheck to check all external links for integrity"
 	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
@@ -71,6 +72,11 @@ latex:
 	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
 	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
 	      "run these through (pdf)latex."
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	make -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
 
 changes:
 	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
diff --git a/doc/_static/mapproxy.css b/doc/_static/mapproxy.css
index 21cbedc..3f48fb8 100644
--- a/doc/_static/mapproxy.css
+++ b/doc/_static/mapproxy.css
@@ -36,7 +36,6 @@ code {
   top: 5px;
 }
 
-
 .bs-sidenav .nav > li > a {
   padding: 3px 20px;
 }
@@ -49,11 +48,6 @@ code {
   background-color: #F5F5F5;
 }
 
-
-.navbar-brand {
-  padding-top: 0px;
-}
-
 .navbar-default, .footer, .bs-sidenav {
   background-color: #ececec;
 }
diff --git a/doc/_templates/layout.html b/doc/_templates/layout.html
index bd76e01..5f5a6d5 100644
--- a/doc/_templates/layout.html
+++ b/doc/_templates/layout.html
@@ -14,3 +14,25 @@
 </div>
 {%- endblock %}
 
+{%- block footer %}
+<footer class="footer">
+  <div class="container">
+    <p class="pull-right">
+      <a href="#">Back to top</a>
+    </p>
+    <p>
+     {% trans copyright=copyright|e %}
+       © Copyright {{ copyright }}, <a href="http://mapproxy.org/about">Legal</a>
+     {% endtrans %}
+     <br/>
+     {% trans last_updated=last_updated|e %}
+       Last updated on {{ last_updated }}
+     {% endtrans %}<br/>
+
+     {% trans sphinx_version=sphinx_version|e %}
+       Created using <a href="http://sphinx-doc.org/">Sphinx</a> {{ sphinx_version }}.
+     {% endtrans %}
+   </p>
+ </div>
+</footer>
+{%- endblock %}
diff --git a/doc/_templates/navbar.html b/doc/_templates/navbar.html
index 8ad5e2b..f00a454 100644
--- a/doc/_templates/navbar.html
+++ b/doc/_templates/navbar.html
@@ -1,4 +1,4 @@
-<div id="navbar" class="{{ theme_navbar_class }} navbar-default {% if theme_navbar_fixed_top == 'true' -%} navbar-fixed-top{%- endif -%}">
+<div id="navbar" class="{{ theme_navbar_class }} navbar-default {% if theme_navbar_fixed_top|tobool -%} navbar-fixed-top{%- endif -%}">
   <div class="container">
     <div class="navbar-header">
       <!-- .btn-navbar is used as the toggle for collapsed navbar content -->
@@ -7,12 +7,20 @@
         <span class="icon-bar"></span>
         <span class="icon-bar"></span>
       </button>
-      <a class="navbar-brand" href="{{ pathto(master_doc) }}">
-        {%- block sidebarlogo %}
+      {%- block sidebarlogo %}
+      <a href="{{ pathto(master_doc) }}" class="pull-left">
         {%- if logo %}<img src="{{ pathto('_static/' + logo, 1) }}" height="50">{%- endif %}
-        {%- endblock %}
-        {% if theme_navbar_title -%}{{ theme_navbar_title|e }}{%- else -%}{{ project|e }}{%- endif -%}
-        {{ release|e }}
+      </a>
+      {%- endblock %}
+      <a class="navbar-brand" href="{{ pathto(master_doc) }}">
+        <span>
+          {% if theme_navbar_title -%}
+            {{ theme_navbar_title|e }}
+          {%- else -%}
+            {{ project|e }}
+          {%- endif -%}
+        </span>
+        <span>{{ release|e }}</span>
       </a>
     </div>
     <div class="collapse navbar-collapse nav-collapse">
diff --git a/doc/caches.rst b/doc/caches.rst
index 7519844..45fd07d 100644
--- a/doc/caches.rst
+++ b/doc/caches.rst
@@ -31,10 +31,10 @@ The following backend types are available.
 This is the default cache type and it uses a single file for each tile. Available options are:
 
 ``directory_layout``:
-  The directory layout MapProxy uses to store tiles on disk. Defaults to ``tc`` which uses a TileCache compatible directory layout (``zz/xxx/xxx/xxx/yyy/yyy/yyy.format``). ``tms`` uses TMS compatible directories (``zz/xxxx/yyyy.format``). ``quadkey`` uses Microsoft Virtual Earth or quadkey compatible directories (see http://msdn.microsoft.com/en-us/library/bb259689.aspx);
+  The directory layout MapProxy uses to store tiles on disk. Defaults to ``tc`` which uses a TileCache compatible directory layout (``zz/xxx/xxx/xxx/yyy/yyy/yyy.format``). ``mp`` uses a directory layout with less nesting (``zz/xxxx/xxxx/yyyy/yyyy.format```). ``tms`` uses TMS compatible directories (``zz/xxxx/yyyy.format``). ``quadkey`` uses Microsoft Virtual Earth or quadkey compatible directories (see http://msdn.microsoft.com/en-us/library/bb259689.aspx). ``arcgis`` uses a directory la [...]
 
   .. note::
-    ``tms`` and ``quadkey`` layout are not suited for large caches, since it will create directories with thousands of files, which most file systems do not handle well.
+    ``tms``, ``quadkey`` and ``arcgis`` layout are not suited for large caches, since it will create directories with thousands of files, which most file systems do not handle well.
 
 ``use_grid_names``:
   When ``true`` MapProxy will use the actual grid name in the path instead of the SRS code. E.g. tiles will be stored in ``./cache_data/mylayer/mygrid/`` instead of ``./cache_data/mylayer/EPSG1234/``.
diff --git a/doc/conf.py b/doc/conf.py
index cc01455..89628f0 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -51,7 +51,7 @@ copyright = u'Oliver Tonnhofer, Omniscale'
 # The short X.Y version.
 version = '1.8'
 # The full version, including alpha/beta/rc tags.
-release = '1.8.2'
+release = '1.8.2a0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/doc/configuration.rst b/doc/configuration.rst
index cc79bbd..1e73ebd 100644
--- a/doc/configuration.rst
+++ b/doc/configuration.rst
@@ -192,6 +192,14 @@ A list of data sources for this layer. You can use sources defined in the ``sour
 
 WMS and Mapserver sources also support tagged names (``wms:lyr1,lyr2``). See :ref:`tagged_source_names`.
 
+``tile_sources``
+""""""""""""""""
+
+.. versionadded:: 1.8.2
+
+A list of caches for this layer. This list overrides ``sources`` for WMTS and TMS. ``tile_sources`` are not merged like ``sources``, instead all the caches are added as additional tile (matrix) sets.
+
+
 ``min_res``, ``max_res`` or ``min_scale``, ``max_scale``
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""
 .. NOTE paragraph also in sources/wms section
@@ -316,10 +324,49 @@ Available options are:
 
 A list of data sources for this cache. You can use sources defined in the ``sources`` and ``caches`` section. This parameter is `required`. MapProxy will merge multiple sources from left (bottom) to right (top) before they are stored on disk.
 
+::
+
+    caches:
+      my_cache:
+        sources: [background_wms, overlay_wms]
+        ...
+
 WMS and Mapserver sources also support tagged names (``wms:lyr1,lyr2``). See :ref:`tagged_source_names`.
 
-Cache souces
+Band merging
 ^^^^^^^^^^^^
+.. versionadded:: 1.9.0
+
+You can also define a list of sources for each color band. The target color bands are specified as ``r``, ``g``, ``b`` for RGB images, optionally with ``a`` for the alpha band. You can also use ``l`` (luminance) to create tiles with a single color band (e.g. grayscale images).
+
+You need to define the ``source`` and the ``band`` index for each source band. The indices of the source bands are numeric and start from 0.
+
+
+The following example creates a colored infra-red (false-color) image by using near infra-red for red, red (band 0) for green, and green (band 1) for blue::
+
+  caches:
+    cir_cache:
+       sources:
+           r: [{source: nir_cache, band: 0}]
+           g: [{source: dop_cache, band: 0}]
+           b: [{source: dop_cache, band: 1}]
+
+
+You can define multiple sources for each target band. The values are summed and clipped at 255. An optional ``factor`` allows you to reduce the values. You can use this to mix multiple bands into a single grayscale image::
+
+  caches:
+   grayscale_cache:
+       sources:
+           l: [
+               {source: dop_cache, band: 0, factor: 0.21},
+               {source: dop_cache, band: 1, factor: 0.72},
+               {source: dop_cache, band: 2, factor: 0.07},
+           ]
+
+
+
+Cache sources
+^^^^^^^^^^^^^
 .. versionadded:: 1.5.0
 
 You can also use other caches as a source. MapProxy loads tiles directly from that cache if the grid of the target cache is identical or *compatible* with the grid of the source cache. You have a compatible grid when all tiles in the cache grid are also available in source grid, even if the tile coordinates (X/Y/Z) are different.
diff --git a/doc/configuration_examples.rst b/doc/configuration_examples.rst
index 3ed2d32..0e2b66a 100644
--- a/doc/configuration_examples.rst
+++ b/doc/configuration_examples.rst
@@ -228,11 +228,11 @@ Here is an example of a cache in UTM that uses data from an existing cache in we
 
     caches:
       new_cache:
-        grids: [new_grid]
+        grids: [utm32n]
         sources: [existing_cache]
 
       existing_cache:
-        grids: [old_grid]
+        grids: [GLOBAL_WEBMERCATOR]
         sources: [my_source]
 
     grids:
@@ -243,10 +243,6 @@ Here is an example of a cache in UTM that uses data from an existing cache in we
         origin: 'nw'
         min_res: 5700
 
-      osm_grid:
-        base: GLOBAL_MERCATOR
-        origin: nw
-
 
 Reprojecting Tiles
 ==================
@@ -273,14 +269,14 @@ Here is an example that makes OSM tiles available as tiles in UTM. Note that rep
         sources: [osm_cache_in]
 
       osm_cache_in:
-        grids: [osm_grid]
+        grids: [GLOBAL_WEBMERCATOR]
         disable_storage: true
         sources: [osm_source]
 
     sources:
       osm_source:
         type: tile
-        grid: osm_grid
+        grid: GLOBAL_WEBMERCATOR
         url: http://a.tile.openstreetmap.org/%(z)s/%(x)s/%(y)s.png
 
     grids:
@@ -291,9 +287,25 @@ Here is an example that makes OSM tiles available as tiles in UTM. Note that rep
         origin: 'nw'
         min_res: 5700
 
-      osm_grid:
-        base: GLOBAL_MERCATOR
-        origin: nw
+
+Create grayscale images
+=======================
+
+.. versionadded:: 1.9.0
+
+You can create a grayscale layer from an existing source by creating a cache that merges multiple bands into a single band.
+The band sources can come from caches, but also from any direct source. You can ``disable_storage`` to make this conversion on-the-fly.
+The following example mixes the RGB bands of a source with factors that matches the intensity perception of most humans::
+
+  caches:
+   grayscale_cache:
+       disable_storage: true
+       sources:
+           l: [
+               {source: dop, band: 0, factor: 0.21},
+               {source: dop, band: 1, factor: 0.72},
+               {source: dop, band: 2, factor: 0.07},
+           ]
 
 
 Cache raster data
@@ -755,17 +767,12 @@ Example part of ``mapproxy.yaml`` to generate a quadkey cache::
 
   caches:
     osm_cache:
-      grids: [osm_grid]
+      grids: [GLOBAL_WEBMERCATOR]
       sources: [osm_wms]
       cache:
         type: file
         directory_layout: quadkey
 
-  grids:
-    osm_grid:
-      base: GLOBAL_MERCATOR
-      origin: nw
-
 
 .. _hq_tiles:
 
@@ -829,3 +836,48 @@ With that configuration ``/wmts/mapnik/webmercator/0/0/0.png`` returns a regular
 ``/wmts/mapnik_hq/webmercator_hq/0/0/0.png`` returns the same tile with 512x512 pixel:
 
 .. image:: imgs/mapnik-webmerc-hq.png
+
+
+Serve multiple caches for a single layer
+========================================
+
+.. versionadded:: 1.8.2
+
+You have a data set that you need to serve with different grids (i.e. WMTS tile matrix sets).
+
+You can create a cache with multiple grids and use this as a layers source::
+
+  layers:
+    - name: map
+      title: Layer with multiple grids
+      sources: [cache]
+
+  caches:
+    cache:
+      grids: [full_grid, sub_grid]
+      sources: [source]
+
+This `map` layer is available in WMS and in tile services. The grids are available as separate tile matrix sets in the WMTS.
+However, this is limited to a single cache for each layer. You can't reuse the tiles from the `full_grid` for the `sub_grid`.
+
+You need to use ``tile_sources`` to make multiple caches available as a single layer.
+``tile_sources`` allows you to override ``sources`` for tile services. This allows you to `use caches that build up on other caches  <using_existing_caches>`_.
+
+For example::
+
+  layers:
+    - name: map
+      title: Layer with sources for tile services and for WMS
+      tile_sources: [full_cache, inspire_cache]
+      sources: [full_cache]
+
+  caches:
+    full_cache:
+      grids: [full_grid]
+      sources: [source]
+    inspire_cache:
+      grids: [sub_grid]
+      sources: [full_cache]
+      disable_storage: true
+
+
diff --git a/doc/deployment.rst b/doc/deployment.rst
index c366229..84070ca 100644
--- a/doc/deployment.rst
+++ b/doc/deployment.rst
@@ -290,7 +290,7 @@ Here are the most important loggers:
   Logs errors and warnings for service ``XXX``.
 
 ``mapproxy.source.request``
-  Logs all requests to sources with URL, size in kB and duration in milliseconds.
+  Logs all requests to sources with URL, size in kB and duration in milliseconds. The duration is the time it took to receive the header of the response. The actual request duration might be longer, especially for larger images or when the network bandwith is limited.
 
 
 Enabling logging
diff --git a/doc/epydoc.ini b/doc/epydoc.ini
new file mode 100644
index 0000000..1e8a4c1
--- /dev/null
+++ b/doc/epydoc.ini
@@ -0,0 +1,17 @@
+[epydoc] # Epydoc section marker (required by ConfigParser)
+
+# Information about the project.
+name:  MapProxy
+url: http://mapproxy.org/
+
+modules: mapproxy
+exclude: mapproxy.tests
+
+docformat: reStructuredText
+output: html
+target: api/
+
+# Include all automatically generated graphs.  These graphs are
+# generated using Graphviz dot.
+# graph: all
+# dotpath: /usr/local/bin/dot
\ No newline at end of file
diff --git a/doc/imgs/labeling.graffle b/doc/imgs/labeling.graffle
new file mode 100644
index 0000000..56b88c3
--- /dev/null
+++ b/doc/imgs/labeling.graffle
@@ -0,0 +1,4373 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActiveLayerIndex</key>
+	<integer>0</integer>
+	<key>ApplicationVersion</key>
+	<array>
+		<string>com.omnigroup.OmniGraffle</string>
+		<string>138.17.0.133677</string>
+	</array>
+	<key>AutoAdjust</key>
+	<true/>
+	<key>BackgroundGraphic</key>
+	<dict>
+		<key>Bounds</key>
+		<string>{{0, 0}, {559, 783}}</string>
+		<key>Class</key>
+		<string>SolidGraphic</string>
+		<key>FontInfo</key>
+		<dict>
+			<key>Font</key>
+			<string>GeezaPro</string>
+			<key>Size</key>
+			<real>12</real>
+		</dict>
+		<key>ID</key>
+		<integer>2</integer>
+		<key>Style</key>
+		<dict>
+			<key>shadow</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+			<key>stroke</key>
+			<dict>
+				<key>Draws</key>
+				<string>NO</string>
+			</dict>
+		</dict>
+	</dict>
+	<key>CanvasOrigin</key>
+	<string>{0, 0}</string>
+	<key>ColumnAlign</key>
+	<integer>1</integer>
+	<key>ColumnSpacing</key>
+	<real>36</real>
+	<key>CreationDate</key>
+	<string>2011-02-15 10:27:28 +0100</string>
+	<key>Creator</key>
+	<string>olt</string>
+	<key>DisplayScale</key>
+	<string>1.000 cm = 1.000 cm</string>
+	<key>GraphDocumentVersion</key>
+	<integer>6</integer>
+	<key>GraphicsList</key>
+	<array>
+		<dict>
+			<key>Bounds</key>
+			<string>{{316.261, 358.353}, {66.3628, 67.419}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>133</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>128</integer>
+				<key>Position</key>
+				<real>0.39329057931900024</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{334.191, 369.687}, {76.968, 46.6472}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>132</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>c</key>
+						<string>0.73</string>
+						<key>k</key>
+						<string>0</string>
+						<key>m</key>
+						<string>0.15</string>
+						<key>y</key>
+						<string>0.25</string>
+					</dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>129</integer>
+			<key>Points</key>
+			<array>
+				<string>{300, 408.732}</string>
+				<string>{425.714, 408.732}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>128</integer>
+			<key>Points</key>
+			<array>
+				<string>{300, 392.062}</string>
+				<string>{425.714, 392.062}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>127</integer>
+			<key>Points</key>
+			<array>
+				<string>{300, 375.393}</string>
+				<string>{425.714, 375.393}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>126</integer>
+			<key>Points</key>
+			<array>
+				<string>{300, 358.724}</string>
+				<string>{425.714, 358.724}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>125</integer>
+			<key>Points</key>
+			<array>
+				<string>{300, 425.143}</string>
+				<string>{425.714, 425.143}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>122</integer>
+			<key>Points</key>
+			<array>
+				<string>{414.805, 343.309}</string>
+				<string>{414.805, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>121</integer>
+			<key>Points</key>
+			<array>
+				<string>{398.526, 343.309}</string>
+				<string>{398.526, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>120</integer>
+			<key>Points</key>
+			<array>
+				<string>{382.247, 343.309}</string>
+				<string>{382.247, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>119</integer>
+			<key>Points</key>
+			<array>
+				<string>{365.969, 343.309}</string>
+				<string>{365.969, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>118</integer>
+			<key>Points</key>
+			<array>
+				<string>{349.69, 343.309}</string>
+				<string>{349.69, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>117</integer>
+			<key>Points</key>
+			<array>
+				<string>{333.411, 343.309}</string>
+				<string>{333.411, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>116</integer>
+			<key>Points</key>
+			<array>
+				<string>{316.884, 343.309}</string>
+				<string>{316.884, 439.416}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{337.843, 256.459}, {76.968, 46.6472}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>115</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>c</key>
+						<string>0.73</string>
+						<key>k</key>
+						<string>0</string>
+						<key>m</key>
+						<string>0.15</string>
+						<key>y</key>
+						<string>0.25</string>
+					</dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{386.415, 245.125}, {65.8534, 67.419}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>113</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>107</integer>
+				<key>Position</key>
+				<real>0.72275584936141968</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{320.16, 245.055}, {66.3628, 67.419}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>112</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>96</integer>
+				<key>Position</key>
+				<real>0.50616776943206787</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>108</integer>
+			<key>Points</key>
+			<array>
+				<string>{312.5, 295.504}</string>
+				<string>{460.326, 295.504}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>107</integer>
+			<key>Points</key>
+			<array>
+				<string>{312.5, 278.835}</string>
+				<string>{460.326, 278.835}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>106</integer>
+			<key>Points</key>
+			<array>
+				<string>{312.5, 262.166}</string>
+				<string>{460.326, 262.166}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>105</integer>
+			<key>Points</key>
+			<array>
+				<string>{312.5, 245.497}</string>
+				<string>{460.326, 245.497}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>104</integer>
+			<key>Points</key>
+			<array>
+				<string>{312.5, 311.916}</string>
+				<string>{460.326, 311.916}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>102</integer>
+			<key>Points</key>
+			<array>
+				<string>{451.014, 238.375}</string>
+				<string>{451.014, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>101</integer>
+			<key>Points</key>
+			<array>
+				<string>{434.735, 238.375}</string>
+				<string>{434.735, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>100</integer>
+			<key>Points</key>
+			<array>
+				<string>{418.457, 238.375}</string>
+				<string>{418.457, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>99</integer>
+			<key>Points</key>
+			<array>
+				<string>{402.178, 238.375}</string>
+				<string>{402.178, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>98</integer>
+			<key>Points</key>
+			<array>
+				<string>{385.899, 238.375}</string>
+				<string>{385.899, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>97</integer>
+			<key>Points</key>
+			<array>
+				<string>{369.62, 238.375}</string>
+				<string>{369.62, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>96</integer>
+			<key>Points</key>
+			<array>
+				<string>{353.342, 238.375}</string>
+				<string>{353.342, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>95</integer>
+			<key>Points</key>
+			<array>
+				<string>{337.063, 238.375}</string>
+				<string>{337.063, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>94</integer>
+			<key>Points</key>
+			<array>
+				<string>{320.536, 238.375}</string>
+				<string>{320.536, 318.17}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{424.53, 126.332}, {15, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>92</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Lorem}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{418.311, 162.119}, {21, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>90</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremips}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{325.992, 153.239}, {14, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>89</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 ipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{390.547, 148.007}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>88</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{331.621, 162.119}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>87</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{403.51, 103.1}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>86</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{404.948, 137.17}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>85</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{392.514, 116.914}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>84</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{334.707, 140.094}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>83</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{338.226, 103.1}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>82</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{326.325, 130.835}, {22, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>81</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 remipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{340.547, 118.069}, {28, 6}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Helvetica</string>
+				<key>Size</key>
+				<real>5</real>
+			</dict>
+			<key>ID</key>
+			<integer>79</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs10 \cf0 Loremipsum}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{120.443, 648.6}, {57.0152, 25.2748}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>78</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs28 \cf0 Park}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>77</integer>
+			<key>Points</key>
+			<array>
+				<string>{40.7444, 661.836}</string>
+				<string>{98.0224, 614.029}</string>
+				<string>{143.525, 618.345}</string>
+				<string>{222.662, 609.712}</string>
+				<string>{252.878, 643.525}</string>
+				<string>{261.628, 674.806}</string>
+				<string>{243.885, 702.158}</string>
+				<string>{217.266, 687.189}</string>
+				<string>{184.109, 705.216}</string>
+				<string>{113.953, 698.837}</string>
+				<string>{47.2868, 693.798}</string>
+				<string>{40.6475, 661.914}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{64.9493, 628.736}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>72</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{63.429, 575.54}, {107, 13}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>BradleyHandITCTT-Bold</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>70</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 BradleyHandITCTT-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs20 \cf0 request with meta buffer}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{81.5356, 547.613}, {6.61024, 6.61023}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>68</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{72.7386, 527.31}, {45.7994, 20.3029}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>67</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs24 \cf0 burg}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{89.9172, 498.203}, {61.435, 61.4349}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>66</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>65</integer>
+			<key>Points</key>
+			<array>
+				<string>{159.712, 338.489}</string>
+				<string>{191.367, 351.489}</string>
+				<string>{224.935, 340.288}</string>
+				<string>{235.811, 378.777}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Class</key>
+			<string>LineGraphic</string>
+			<key>ID</key>
+			<integer>64</integer>
+			<key>Points</key>
+			<array>
+				<string>{78.4173, 371.942}</string>
+				<string>{108.273, 340.647}</string>
+				<string>{155.169, 338.129}</string>
+			</array>
+			<key>Style</key>
+			<dict>
+				<key>stroke</key>
+				<dict>
+					<key>HeadArrow</key>
+					<string>0</string>
+					<key>TailArrow</key>
+					<string>0</string>
+					<key>Width</key>
+					<real>0.5</real>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{169.056, 361.926}, {57.0152, 25.2748}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>63</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs28 \cf0 Park}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{169.071, 413.183}, {57, 13}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>BradleyHandITCTT-Bold</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>62</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 BradleyHandITCTT-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs20 \cf0 right request}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{92.429, 413.183}, {49, 13}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>BradleyHandITCTT-Bold</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>61</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 BradleyHandITCTT-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs20 \cf0 left request}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{159.331, 331.05}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>60</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{88.4214, 361.926}, {57.0152, 25.2748}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>58</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs28 \cf0 Park}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{78.6892, 331.293}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>57</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{108.273, 296.086}, {103, 13}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>BradleyHandITCTT-Bold</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>47</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 BradleyHandITCTT-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs20 \cf0 two overlapping request}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{169.071, 187.41}, {57, 13}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>BradleyHandITCTT-Bold</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>45</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 BradleyHandITCTT-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs20 \cf0 right request}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{92.429, 187.41}, {49, 13}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FitText</key>
+			<string>YES</string>
+			<key>Flow</key>
+			<string>Resize</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>BradleyHandITCTT-Bold</string>
+				<key>Size</key>
+				<real>12</real>
+			</dict>
+			<key>ID</key>
+			<integer>44</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 BradleyHandITCTT-Bold;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\b\fs20 \cf0 left request}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{163.006, 268.022}, {8.22901, 8.229}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>43</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{167.919, 242.027}, {57.0152, 25.2748}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>42</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs28 \cf0 Hamburg}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{159.331, 211.871}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>41</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{144.998, 268.021}, {8.22901, 8.229}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>40</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{88.2872, 241.308}, {57.0152, 25.2748}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>39</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs28 \cf0 Hamburg}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{78.6892, 212.114}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>38</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{159.331, 105.277}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>37</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{144.998, 161.428}, {8.22901, 8.229}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>28</integer>
+			<key>Shape</key>
+			<string>Circle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Color</key>
+					<dict>
+						<key>b</key>
+						<string>0</string>
+						<key>g</key>
+						<string>0</string>
+						<key>r</key>
+						<string>0</string>
+					</dict>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{104.474, 136.153}, {57.0152, 25.2748}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>FontInfo</key>
+			<dict>
+				<key>Font</key>
+				<string>Verdana</string>
+				<key>Size</key>
+				<real>14</real>
+			</dict>
+			<key>ID</key>
+			<integer>4</integer>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+			<key>Text</key>
+			<dict>
+				<key>Pad</key>
+				<integer>0</integer>
+				<key>Text</key>
+				<string>{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
+{\fonttbl\f0\fnil\fcharset0 Verdana;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
+
+\f0\fs28 \cf0 Hamb}</string>
+				<key>VerticalPad</key>
+				<integer>0</integer>
+			</dict>
+			<key>Wrap</key>
+			<string>NO</string>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{78.6892, 105.52}, {76.4797, 76.4797}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>3</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{80.1499, 488.436}, {80.9696, 80.9696}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>69</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Pattern</key>
+					<integer>1</integer>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{325.992, 90.4448}, {113.538, 86.7809}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>91</integer>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+			</dict>
+		</dict>
+		<dict>
+			<key>Bounds</key>
+			<string>{{309.4, 352.165}, {80.9696, 79.7955}}</string>
+			<key>Class</key>
+			<string>ShapedGraphic</string>
+			<key>ID</key>
+			<integer>134</integer>
+			<key>Line</key>
+			<dict>
+				<key>ID</key>
+				<integer>128</integer>
+				<key>Position</key>
+				<real>0.39680808782577515</real>
+				<key>RotationType</key>
+				<integer>0</integer>
+			</dict>
+			<key>Magnets</key>
+			<array>
+				<string>{1, 1}</string>
+				<string>{1, -1}</string>
+				<string>{-1, 1}</string>
+				<string>{-1, -1}</string>
+			</array>
+			<key>Shape</key>
+			<string>Rectangle</string>
+			<key>Style</key>
+			<dict>
+				<key>fill</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>shadow</key>
+				<dict>
+					<key>Draws</key>
+					<string>NO</string>
+				</dict>
+				<key>stroke</key>
+				<dict>
+					<key>Pattern</key>
+					<integer>1</integer>
+					<key>Width</key>
+					<real>2</real>
+				</dict>
+			</dict>
+		</dict>
+	</array>
+	<key>GridInfo</key>
+	<dict/>
+	<key>GuidesLocked</key>
+	<string>NO</string>
+	<key>GuidesVisible</key>
+	<string>YES</string>
+	<key>HPages</key>
+	<integer>1</integer>
+	<key>ImageCounter</key>
+	<integer>1</integer>
+	<key>KeepToScale</key>
+	<false/>
+	<key>Layers</key>
+	<array>
+		<dict>
+			<key>Lock</key>
+			<string>NO</string>
+			<key>Name</key>
+			<string>Layer 1</string>
+			<key>Print</key>
+			<string>YES</string>
+			<key>View</key>
+			<string>YES</string>
+		</dict>
+	</array>
+	<key>LayoutInfo</key>
+	<dict>
+		<key>Animate</key>
+		<string>NO</string>
+		<key>circoMinDist</key>
+		<real>18</real>
+		<key>circoSeparation</key>
+		<real>0.0</real>
+		<key>layoutEngine</key>
+		<string>dot</string>
+		<key>neatoSeparation</key>
+		<real>0.0</real>
+		<key>twopiSeparation</key>
+		<real>0.0</real>
+	</dict>
+	<key>LinksVisible</key>
+	<string>NO</string>
+	<key>MagnetsVisible</key>
+	<string>NO</string>
+	<key>MasterSheets</key>
+	<array/>
+	<key>ModificationDate</key>
+	<string>2011-02-15 15:45:45 +0100</string>
+	<key>Modifier</key>
+	<string>olt</string>
+	<key>NotesVisible</key>
+	<string>NO</string>
+	<key>Orientation</key>
+	<integer>2</integer>
+	<key>OriginVisible</key>
+	<string>NO</string>
+	<key>PageBreaks</key>
+	<string>YES</string>
+	<key>PrintInfo</key>
+	<dict>
+		<key>NSBottomMargin</key>
+		<array>
+			<string>float</string>
+			<string>41</string>
+		</array>
+		<key>NSLeftMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSPaperSize</key>
+		<array>
+			<string>size</string>
+			<string>{595, 842}</string>
+		</array>
+		<key>NSRightMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+		<key>NSTopMargin</key>
+		<array>
+			<string>float</string>
+			<string>18</string>
+		</array>
+	</dict>
+	<key>PrintOnePage</key>
+	<false/>
+	<key>QuickLookPreview</key>
+	<data>
+	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
+	Y4e50Q5LLkG3MjPVyti3w9xoK7M8XD8Y9WBOB6qimMkDJZoats21jWZeZdxpI/VBdh59
+	O55vFHZdGnei2DM9U+AKu26zAUOJneRpPVHCN54FkcykZTr24B7oJieTukcGS1UZO3is
+	zRzK8wxaPmOaZuuapEw9658DPHIqKzoGAsvuArizTgV4lTQ5+idXmv+jOYJ53TEZjNyN
+	NHAfu2l61ZDx9SC7kQbuA/lpzS/8/QGDx8jNfryQHudesws9q4vgY7ObZYGQ1DO4mYG8
+	dLwDdyU9w2s8VGceI0g27k4aZB/xmsl0tfxTLLn4swomMsDJ28j7jXYcIp3fevpkwnzk
+	77TD/OK5xj/JttXmXfmd9jS/spnKGsqmruvfac/gl41ltOBmtL/Sal4WlAvO1BfhjNk3
+	S0xLsUqhPIvLQR6N7uPs2QgzYUlsDKljBxKKbrD94b8e9JkQCmVuZHN0cmVhbQplbmRv
+	YmoKNiAwIG9iagoyODY1CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJl
+	bnQgNCAwIFIgL1Jlc291cmNlcyA3IDAgUiAvQ29udGVudHMgNSAwIFIgL01lZGlhQm94
+	IFswIDAgNTU5IDc4M10KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERG
+	IC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL0NvbG9yU3BhY2UgPDwgL0Nz
+	MiAxMyAwIFIKL0NzMyAxNyAwIFIgL0NzMSA4IDAgUiA+PiAvRm9udCA8PCAvRjEuMCAx
+	NCAwIFIgL0YyLjAgMTUgMCBSIC9GMy4wIDE2IDAgUgo+PiAvWE9iamVjdCA8PCAvSW0x
+	IDkgMCBSIC9JbTIgMTEgMCBSID4+ID4+CmVuZG9iago5IDAgb2JqCjw8IC9MZW5ndGgg
+	MTAgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggNjIgL0hl
+	aWdodCA2MiAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFjZSAxOCAwIFIgL0ludGVu
+	dCAvUGVyY2VwdHVhbCAvU01hc2sgMTkgMCBSIC9CaXRzUGVyQ29tcG9uZW50CjggL0Zp
+	bHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dABDQAAAMKg909tDjeIQGHAgAED
+	BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgIG/gQEtDAAB
+	CmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKNzQKZW5kb2JqCjExIDAgb2JqCjw8IC9M
+	ZW5ndGggMTIgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGgg
+	NTggL0hlaWdodCA1OCAvSW50ZXJwb2xhdGUKdHJ1ZSAvQ29sb3JTcGFjZSAxOCAwIFIg
+	L0ludGVudCAvUGVyY2VwdHVhbCAvU01hc2sgMjEgMCBSIC9CaXRzUGVyQ29tcG9uZW50
+	CjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dCBAAAAAMOg+VPf4ASF
+	UGHAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgy8gQEnbAAB
+	CmVuZHN0cmVhbQplbmRvYmoKMTIgMCBvYmoKNjgKZW5kb2JqCjIxIDAgb2JqCjw8IC9M
+	ZW5ndGggMjIgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGgg
+	NTggL0hlaWdodCA1OCAvQ29sb3JTcGFjZQovRGV2aWNlR3JheSAvSW50ZXJwb2xhdGUg
+	dHJ1ZSAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0
+	cmVhbQp4Ae2W2XKiUBCGTVxAVlkUZREExQ0DbsGoGPfE0Xn/15k+B52kKuDkOjV941J+
+	/t19+vxNJvM/fnoHHiAeb4E+fK/gK5S9Bf6Hb9CYy2Zz+Y/I5bKIvq8cc4AVCIKMgyAK
+	+XwuC/A9FIFIDqgiRcdBFUkSYKybWi8CMQcYw3JxsAwNMIF0QTalVRgsECRFsxwvCCIK
+	QShxLGKxbErCKNV8gSzSDFcSJLlcUSAqsiwKwGI0TfThCrK8IJeVmqppuqapNYBBl6ZA
+	NSVfnCtRpLmSKCuqbpgWCtPQVaUsxSiUmlRpLEmzJbFc1eqW3Wy5EE3Hquu1iiRwdJHI
+	51LIXJ6kGB5A3bRb7W7f87x+t+M6lgFoiaXJQi6xUlwlzQlyVbcct+f5wXA4DPxBr90E
+	tCzyDIgmpYuSJSm2JCua6bQ9fzh5DsPweTLyvU7T0qsy5EsmpvsAQ0CCZFk1bLfvj8OX
+	xTKKFvNwEngdx1QrIo/T/doiIAtFhpcUzWp1AZxH681ms14tZpOg7zaMqlxiId3Hxy9j
+	9PCYJyhWkGuG3faG4Xy12R2Oh/32dRmOn7pOXS0LHEVCoV9IKJOgULJms+tPXqLN/vh+
+	Or0dtqv51O+1LK0iokKTSShTrKhWqx88L9a74+l8Pp/e9utlOPTchq5I90ko04Vkl5vD
+	+6/L5XI+HbfRbOS1G4YiQYvuaF7JaAOSl9+Xy+m4A3LQtmMSZiGpTpTtX/IA5CfNf5MV
+	OBRc5/4N0POv98MmutV5J9uP3s5X28Pb6XR6P+5e59OgD71V0nr7cZ5OZzAKF6/b/fF4
+	POzW0Qydp4nOM7lD1xmSFd1ye/5ktlytt7vt5jV6mQaea8MMCSyVMkO5QnygdRj4YBLO
+	YWyjaD6bDgcgqcGhMEVobdLc3u6KbjU7nj+ehrPZLJyOg0G3ZSHJ9LsC4wdeIpRrBqD9
+	J384Go+GwZPXbTUMdFXS7mcGvLaALqhUAdRxuz1vMBiAKbhwsVVFBifCHvY12wy62tjA
+	ANXNhtNy2+226zq2icD7PgSLAdyWE6RyVTXqVsO27QaYn1YF3+SY2DYTJDNYFPKNbbOq
+	arphGLqmVhXk1RhMNjBEgqEgjwerFsGrFaWKTV4SeGTU4JlJ/oUvAFQaowzHlwRRkmVZ
+	gsXCcwwsBwwmnOaVxCgBsrCTOB4Fx6FldtuDiVUiFvKFBsPava5PBq1QtAPx8k10aSyJ
+	ULTP0KYH+BbXpY32/e1nSa/xusdwvoACPS7gXX932eO/wiwow1MGDvSEgPTuCt6S+Pw0
+	FFPfwm441BzH3y/+v/nZHfgD0o5+9QplbmRzdHJlYW0KZW5kb2JqCjIyIDAgb2JqCjk4
+	NgplbmRvYmoKMTkgMCBvYmoKPDwgL0xlbmd0aCAyMCAwIFIgL1R5cGUgL1hPYmplY3Qg
+	L1N1YnR5cGUgL0ltYWdlIC9XaWR0aCA2MiAvSGVpZ2h0IDYyIC9Db2xvclNwYWNlCi9E
+	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
+	spkdhX0AdirL7BDwBejxsmIP54F7Yf9bUcOTwCdhP2SHedatH/YXrlPge4Q9NeDOFK7F
+	8dqKH14tAUP3VCNojHNNxNPXOXOkiO8x1BmY90Y5pgsxd5aqEzeAO2EfWapmCrFd+67q
+	Je57AnfT4zvRmzkLXKAcSXKxFdkU0DwJWBR9i7BJDjw+zh5V4HeomMAcuYnczSj3HtUR
+	G2ejUoFWeo1Xxk/jufHF+GVsGM+Afqx213t8/+njFXXXtj48+Y163DmuvZ0bVWFWcWUL
+	3f/HMoSP2Sc5psHToVlYa9h25A+azEywDCjEfwU+l/qSE1Xc1e7tuEUSzFA+LGwluktU
+	binU6j2DSqwcK9gAdnCSxCxaHLhTa7o5eHfYInpt+U1XsuuG/vr2evva8h5tyqgpKBPN
+	s0RmlLFbo+TdeNv9ZpERnzg6vue9ilrJ/klFED+FOVoq8hRV9FZQ1sRvZw5+G7Z+XD+l
+	5/VB/TwJPa2f0a/ooxG+DHRJz8JzUR+jSfCwaSHiEqCKgzPUTlRjjQPiKfHytFtkkf0P
+	QBn9ZgplbmRzdHJlYW0KZW5kb2JqCjI0IDAgb2JqCjcwNAplbmRvYmoKMTMgMCBvYmoK
+	WyAvSUNDQmFzZWQgMjMgMCBSIF0KZW5kb2JqCjI1IDAgb2JqCjw8IC9MZW5ndGggMjYg
+	MCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
+	ID4+CnN0cmVhbQp4AYWSS0sjQRSFT1o0ig9kFAm4qZUvdKaJWQRX0cTHaIT2AdFhNp1O
+	GwNJbDrtayH4K2Y1iyDoyqXgZhA37tyIosFfIQhuVNpTKUJgIHqLpr66nDrVdesCTTHT
+	cfIagELRc5dnp8Ta+i8RrKADAbShBUHTKjmThpGkpEG83FPLuB2TXg1EjdKdLg8EAoKC
+	3qziiOS04jnJu57jUfNbsrVpZsgOedRdXY6T/5K7sopPJacV/5O8Y2Xl3muyXszkiuQ3
+	cjRjlyxAk2cdWY5LjVYhxwqFLfo3hchDshacGWXef+GGcFfP/ehk/pi/NF/PDR4APWXg
+	orWee65U6xPoay1tjIelGwLt50DzH99/TgHBYeD9wfdfz33//YRnPwKXL9a2u1PVUq2N
+	A1+t1T2VO/D2VKNGrGpRVenA6SGwdMkSMXHGeeAB+NYPGDFgNQZtorn2qbpRBoQS08mk
+	CEf0aGrGEHEzn0u7pmezfCpCSGAaSQ6BMCI0jyKFGRhcx2EijxzScEkebFS3fWVZs/58
+	9uw9vicQ33L23Vx20xOT7Exb/Cxa30dFWNejn+9XPSA13eyn8oi+mFi56uZT/RcfjoOG
+	rAplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2JqCjQ0OQplbmRvYmoKMTggMCBvYmoKWyAv
+	SUNDQmFzZWQgMjUgMCBSIF0KZW5kb2JqCjI3IDAgb2JqCjw8IC9MZW5ndGggMjggMCBS
+	IC9OIDQgL0FsdGVybmF0ZSAvRGV2aWNlQ01ZSyAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
+	PgpzdHJlYW0KeAHs2/d3XGmaH/ZCYGYzsxmbOWeCEcw5A0wAQRA5FIDK8eb03pzrVs7I
+	iQBz7O7pMD09Mz0zG2Z3Z/Nqtdqg1VqSLUvyemXLsuViz5GO5CMf/wEWfig8dZ+Lqlt1
+	C6c+9X2fstn+8FSH3+8u32Cz+YPh4MWaxpu3Ojo3zPqVbZ6t0jbfZrPN7+gK+c/fuXOr
+	VNs+7Pvh93/98w9/ZCv7sOX39/63+//13v+Pa/O67aEum61sdmm7r6t0EDbb7/19qT6O
+	hP2lugwt1cvOV104UKoNm61uaamu+i/qg/+pvlB1vrRP/ZDNdv/vS3Vp+3+uS/v/uu7t
+	8JRucypps+1o7Q51eWy2X+2x2SoW/foYSvdksy2/avfag46uDR+eiw13gr4eh9v+fefX
+	F/9f/f9i1//38mHjow2/7r79G5vty0qbLfbPPD3h0jHbbJUVc0oP6dfd/3z537peVl5R
+	OWPmrNlz5s6b/9GChYsWL1m6bPnHK1auWr1m7Sfr1m/YuGnzlq3btu/YuWv3nr379h84
+	WHXo8JGjx45Xnzh56vSZs+fOX7h46fKVq9eu37h5q6b29p279+7X1T9oKB1bU3NLa1t7
+	R2dXt72nt8/hdLk9Xp8/EAyFIRhBMZwgKZoBLMcLoiQrqqYbZsSKxuKJZCqdyebyhWL/
+	wODQ8Mjo2PjE5OOp6SdPnz1/8fLV6zdv373/9LPPf/DFl199/cNvfvTtj3/y0+9+9vNf
+	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
+	1PiOSp4Gl/INX0f3Evk0uXx/oqunSspM4i31FTxtLp+YN2pa21fJMtwMMDfsadrAw93y
+	vdG9p2kpT3Yn37+Z2LVetptLme93xNbKttDNfJOLDDGuLjTzyH+UFOYawWqwVVyTkBc8
+	2rmU0cyfGGlFskQUVF4eb/2IsjEuiN2uF6PMiuRPov05WauT62PRW/UqRGWlODg9RUq4
+	4I2CdwuuF3yp4FLB26dH7Zqc+tnBRF1z5GdPvod0qYHUSkq/ra1sR+p/s50Iestr7jEu
+	dkS58nG7f10pNfJT9dwZPz0q5bOwbCl6pPJGSp+jSnv5XDuLJq0grSEvxMTIRZOt3m7z
+	o+1J6Wt7XxqR2uJ1+8qW1zOu7U3Vil54e3jT/rKHqeMRUUqmjkDUHmfPssvtQrtIhO3F
+	dom9yF5Grtjm4vyH9qvGds1co5HSu0Q9vYlzESWcMgdSrP1PQFeYpgplbmRzdHJlYW0K
+	ZW5kb2JqCjI4IDAgb2JqCjM2NDQ1CmVuZG9iagoxNyAwIG9iagpbIC9JQ0NCYXNlZCAy
+	NyAwIFIgXQplbmRvYmoKMjkgMCBvYmoKPDwgL0xlbmd0aCAzMCAwIFIgL04gMyAvQWx0
+	ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+	hVTPaxNBFP42bqnQIghaaw6yeJAiSVmraEXUNv0RYmsM2x+2RZBkM0nWbjbr7ia1pYjk
+	4tEq3kXtoQf/gB568GQvSoVaRSjeqyhioRct8c1uTLal6sDOfvPeN+99b3bfAA1y0jT1
+	gATkDcdSohFpbHxCavyIAI6iCUE0JVXb7E4kBkGDc/l759h6D4FbVsN7+3eyd62a0raa
+	B4T9QOBHmtkqsO8XcQpZEgKIPN+hKcd0CN/j2PLsjzlOeXjBtQ8rPcRZInxANS3Of024
+	U80l00CDSDiU9XFSPpzXi5TXHQdpbmbGyBC9T5Cmu8zuq2KhnE72DpC9nfR+TrPePsIh
+	wgsZrT9GuI2e9YzVP+Jh4aTmxIY9HBg19PhgFbcaqfg1whRfEE0nolRx2S4N8Ziu/Vby
+	SoJwkDjKZGGAc1pIT9dMbvi6hwV9JtcTr+J3VlHheY8TZ97U3e9F2gKvMA4dDBoMmg1I
+	UBBFBGGYsFBAhjwaMTSycj8jqwYbk3sydSRqu3RiRLFBezbcPbdRpN08/igicZRDtQiS
+	/EH+Kq/JT+V5+ctcsNhW95Stm5q68uA7xeWZuRoe19PI43NNXnyV1HaTV0eWrHl6vJrs
+	Gj/sV5cx5oI1j8RzsPvxLV+VzJcpjBTF41Xz6kuEdVoxN9+fbH87PeIuzy611nOtiYs3
+	VpuXZ/1qSPvuqryT5lX5T1718fxnzcRj4ikxJnaK5yGJl8Uu8ZLYS6sL4mBtxwidlYYp
+	0m2R+iTVYGCavPUvXT9beL1Gfwz1UZQZzNJUifd/wipkNJ25Dm/6j9vH/Bfk94rnnygC
+	L2zgyJm6bVNx7xChZaVuc64CF7/RffC2bmujfjj8BFg8qxatUjWfILwBHHaHeh7oKZjT
+	lpbNOVKHLJ+TuunKYlLMUNtDUlLXJddlSxazmVVi6XbYmdMdbhyhOUL3xKdKZZP6r/ER
+	sP2wUvn5rFLZfk4a1oGX+m/AvP1FCmVuZHN0cmVhbQplbmRvYmoKMzAgMCBvYmoKNzM3
+	CmVuZG9iago4IDAgb2JqClsgL0lDQ0Jhc2VkIDI5IDAgUiBdCmVuZG9iago0IDAgb2Jq
+	Cjw8IC9UeXBlIC9QYWdlcyAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvQ291bnQgMSAv
+	S2lkcyBbIDMgMCBSIF0gPj4KZW5kb2JqCjMxIDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9n
+	IC9PdXRsaW5lcyAyIDAgUiAvUGFnZXMgNCAwIFIgL1ZlcnNpb24gLzEuNCA+PgplbmRv
+	YmoKMiAwIG9iago8PCAvTGFzdCAzMiAwIFIgL0ZpcnN0IDMzIDAgUiA+PgplbmRvYmoK
+	MzMgMCBvYmoKPDwgL1BhcmVudCAzNCAwIFIgL0NvdW50IDAgL0Rlc3QgWyAzIDAgUiAv
+	WFlaIDAgNzgzIDAgXSAvVGl0bGUgKENhbnZhcyAxKQo+PgplbmRvYmoKMzQgMCBvYmoK
+	PDwgPj4KZW5kb2JqCjMyIDAgb2JqCjw8IC9QYXJlbnQgMzQgMCBSIC9Db3VudCAwIC9E
+	ZXN0IFsgMyAwIFIgL1hZWiAwIDc4MyAwIF0gL1RpdGxlIChDYW52YXMgMSkKPj4KZW5k
+	b2JqCjM1IDAgb2JqCjw8IC9MZW5ndGggMzYgMCBSIC9MZW5ndGgxIDU4NjQgL0ZpbHRl
+	ciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBbVgLeBPXlT5zZ/SWPJItP5Asj2T5hWVh
+	I1t2HHA02DKYCNYPLGKn0UYCQww1wTEuJYQvcVpeMSk4j6UP0pTtl2yapC2y8BqbKI0D
+	qdf7SArptrvttluSL4+mGwjbJWya2taee0c2lM1839z5z7n3njvzn3PuudLgwFe2gBGG
+	gAd5845YP7BL24aPwc27B52KLHQCcN/a2n/fDkVWfQxAbr+v78Gtiqz9DYAp0bsl1qPI
+	MIvP2l5UKDJXg8+i3h2DexRZW4bPsr6dm9P92jdQztkR25NeH9AeOO+P7diijM+ZoXL/
+	zl2DaXkEn7f1D2xJj+e68H1mY7ADdsEgPAh9sAUy8JVxlB7uAw18GVRAwAyVsBFH6rkZ
+	/F6O9avIsQT88Jf3iis/BbuWmX/p4eBSCs6df/n3s4a5pwxPaaklHVpQLpS0hvkOAGPF
+	rCGlMTzFLKU72UM/CZ2pKbkgsdRXa044E3KiLdGfGEqcTMQTFxKXEvqpxNUEmcAh/X+f
+	m1crBTlxo7SRtIbvDZOdndz3Ok91kvYNuULHhhxhQ0e2cOfaDmH12jphzVqf0IL3Wn+9
+	sDLgExoCDcIdAZfQFHAIjYEOYRXeMt4Bv0/wVfcI1f4awV/TKdT4C4QLNZdqrtbwE6kr
+	p8eKW2onUpdOj5nd+Lwim8Z0Yu2YrUXYffrgaXytq6dPsxGfy6nTuqLa09YW4bHDWUJ/
+	X/8eIj7zu2eJ/N2cJbXyMzn2WvmbuYiO59prDx7IksT94gHxqHhMHJH2S0elY5VHhw4M
+	HT72xMiBkUMjh0X5azpzrTggDRD5AZ2xVtzBOWc45z9wgelPponzp/JPCWziYJN5E5Fj
+	J2NE/BLntVqECmux4LHWC+XWLGGpNVuQrAWCy9kkOK0rhX+0NQs2+xrBblsp2Kw+IRvH
+	ZeHrZlptggXvfisnW1c11YoZ5RKoOdP5kGQ8F5L0UyFJh7cqGZKEV0MSPxmSyNmQxI2H
+	JDgTks6fK5emXiuXXpU3Jl3S2UmXdGbcJZ07/4bptanXTclXf2KcPPuKcfzMhNGcHEoS
+	eXJokojjgfHW8UfGBXG8EuFOhK+N/2w8Na7V6+oEo4moBMITwgFpU3ETXIqLZ4Yg1NkY
+	z+LwuaFxVOfzhOI9HY0HvvENR/x4qKMrPuTontDimK44F+eOdse1oQ1pCB567RrctYuB
+	W5o43xxXN/fG4mp3cBcVMqiQ4Q4iiIsUi+6gh4tbm3vjVkT/z8iuhQu7lE5lIYbhK7cs
+	x0T6LoP4Rh6PukBtVV1VXRT2CRH+t5h1kPow9c78nvme+W7+aZAwQ47DSzAJ0/DWYtIk
+	4RzDuyEBU/DPi3oKHoWn4e/gX+DX8Mmi/lvwLLwM8UWZghGg2ufgRfgxnIazcB51h+EJ
+	1D4PP7xp5E44BMfgBJyEn3OOtP48sXLKG3wERnKR28UdBRtUQBDuwU3lYTiI7zXDrUNd
+	A+raUDsAe+BJ1E4C3Z1uvRpwp4nAdrgfRnHE66y7HOd2Qg9qqU65HoC98Bj8LbwAr8BO
+	xIfwfb9zqzGUHyUu4sLN7X2c+U/c35Bp/KIX4IDaijscqC5SVoUI4xZS7wDM96Q+BeA3
+	kWvk++QJOEW2wzo5O9xZV+urXOatKCmWrFmZFpMRY7LCGeeLm93N7ljvsLO51znsDkaD
+	3gqMv+ag3eXq9lY4UR10xrmoszm+endv3nAzHRDP9MRJcTO9t8flI1EE7qDL5cKerBs9
+	uMc9flOXc1tcjsXhiHO0Ymr48QkzbIp6jD3untg9XXE+hmuNAr5ML0Y8Pugd7XXGBTTM
+	Gjtq0q9I+3qj2LqDOOsL9ajWNXUdck3Z45n4bI5bPPE1aGnN3vfs/HBz3jYnFYeHDznj
+	J9u7bu510THd3d15f0HDavfq6PDwardz9XB0ODaRGtrkdprdw6Oh0HB/c9QZhzZMTtSf
+	PWKPr368O26O9nK3I3v0O1Z3dAXsLgu+qstFv/fIhAybUIgPtXcpshM22RMgV3q64yRK
+	e6YWerLDtGdooWdxetTNuG7q4u0EDYc2uEPtd3c5m4ejab+lNbcpXhwl0Djq5g63j8rc
+	4Q13d01iYjoPd3YlCEeaoo3dlEbS1Nl18yycSSMA6x2WODUPM8LP8X4LeoVZmMS7T0jC
+	65oZmOS3w6TKjHFNqy6tllgcQQ30fNACy9IapmbNQiW9obkV8SAsqlRppManZlGrFGsd
+	kyV4gVtLQrye/1j4uuoH6lL1r1CPey2dgNN4fFjPqIkA9K5887dvsmZ5lcvishRjg18H
+	nw+p4M/0CQjod2Beq1Zgbhng3QTv19JynSOKJAxas5ZotSq9hudUWh2xmrBrzGTCnonU
+	52NmMwPXxgwGBj6QDcosnY7Jf5CL2NhMoxFl0WRShyHLaMR2j0k0yaY2E6/lraqJ1NvM
+	FIJZZgrBrxVTuCiaQvkPbFUEV8aoMQaoPQrGqUlVn9F8fWG7nvNFbgieOR8EVgZWZtZX
+	PuC5jEy4kQq3pRrbatWK6bkl09Pkw2nyq7lS1cW5CdKCpx/kQziOfJhxn/mNXHW7tcER
+	soYcbRmd4hZRs6QGNGYN0Wh0eTV6XqcVXZKLWLKdUAUy9KM7J1KLlHwmGxgZRkYBHjgW
+	2Ps9AiQCv0zOYZTsdImugIss0Vh1GZRY3QIbCNJs6BgbKCskIFBoQaCYQ/A+Y0PX57xB
+	AGXjmkJN5HIEAoHLSEUEmeAinFWtUavdbuTD5cvJzcnR1JSUlpSgotpXW1dbKxxvvmP9
+	2yenp7mnD55tCUfeqq2reuiv33hhz/HKylJB3PziHevXz/1CddFbVf/SofUDRZJ97kee
+	yqrtyGFv6h3BIeyBEqjmtsndRr3gXqLPdgsejAZ1uIK1XtZ2Z7QX3FOxLSPq2Ol9SL/X
+	2u94qEJPtGUNVRbZQiwWp7Y1n8vPzws4heWrtHpOKzo4h6XUL1Nm8RB3bWwRUJapRuGU
+	2MBhADUL08zFGLWwGM1jbrGlY3mWRRV64xKNO/QLezHqSDlbp0NZCd4n/KJf8gf8/LKJ
+	1GfMkwiuySY6ZZmWftcyuwEzQ66jaxqMdE2Dlq5hyKfrGYwMq+lrGnKoYQNibPU0GAwH
+	am44zXMZPRYxf7AQ0h6Ppd48RyWfr5I5MXC5ujJiYa7MrF9eFcEuLuJy+9XMpYUl/hr0
+	YFGdX/FooVrj9tfWVjMvZ/MWNirbmoN+FhyvLAmXVe7t+ObbO7Zs5Qqe85aX9TfcOR7T
+	113YsvuUHGh8ZeNHwfaewa9ufu6rlobMXGnmxCPf9XqdWofcmZdrLi1+TSwqrVz2ZN+8
+	g6tTWbNyY+FobD3GwCTGwAhW7ixwcpny0hriF1dkVzmDpFkMZcvOuzLvy3xE+1C+MUOn
+	zm20CEauQFbrDVor9SnlhQKMZxK22tEXV8eY5yhIO/OabGAOzEhn18cYCSyplOk453/k
+	pSzPRgqlwkAhybDrjNQROpaPNJ/UDGNrM06k/pPtQwjeVbYfIxuM8hXmbATXZQNdy6im
+	M1G+yt4TwSfjdB3jYdcNF6a9tZh81KU0+1gCUo+ls6+wpFRD9yPqnUy+psSNvrLkMM+M
+	tDateWnrvUebjfFka2Ln9Pvn9j/V8YOWtl1rnxkldY9fWtfa6i2pUVvn/nXVhvkL8x/M
+	/GzNbXNDRflvYk2AvvluoUnYB26o4iplb0PWHeW+iturgrpQ1rryxopQ1Ze4iOrunO1c
+	n2p7zj5Vv9NSqMp0ZZfJBYJmYZ+nQLbT+NZoDDJvWrYqWyOqObWryCdTb2RSV1FGGaDU
+	UCDrqfcybaDOQx9cl9tZCmqZ18zMiYxYKGd+w+DH8mBjeSfSielse9In+QI+4sHEImEP
+	ekwd9tjzzNRK3kRqXi6mlvIwjbBl/sxTU0sUq8MUY3tg+cLWR9mPmN9bzKe/TKfLNJs8
+	Hro11gfQNcVmcKFf/NXMD7gT+jGv3IXEQpOKZVFdNW/BnbJQnU6ipvn5+WvdL3bol830
+	RB92uwvCJ/bM/Ff76lVn74l9fS36L/SofCKx/9sdzz8y/9789SW5U5n+ZUtL7w9uDTZx
+	Lk4zcnHdmtbSsqrZX5JYoePCdPJcACsznqeFU5hBBvhcDpaRf+f+Q8frONEkcQ4imbxc
+	panKIBs6DdvIXs5ICM/ZcKhWN0YMel6vJSq9SsNh6TaQqL5fT/R6tqWVMarB5MQaTLQ8
+	8wXPGOQFGtcUY2vD4qpkBIJ0RqjYYJSv31yHWUFm1R8LMTOBI/6XpQYFLDVUj91UoD1K
+	bkQsSDruYvX1tEIHkHssSofMU1N7P80TphDNaae4yAMuN6dhFZur5oRTn83Le5NJIl2e
+	+xP30eD8EbV11kYq52aRLfytocnFiPdwM3KIL+KXZhVlLQ06gyVnyjXjxVyx5MjX5jaW
+	FQoOFWfO18peTvJWeWVvm7ffqwIlJhkPSCHdSBgPYPPSJMil0eaVaSxyeTSeORbPHC3C
+	tAvBNdlCg5GrYoPyaTCi9o/YrabgquyhVjlCI5OLmYsN+SJbE4MerYpsTYrVYdFmZnsN
+	XcfM1kH5bZmVLnMJHW1mWYPaz5h5Bqh1BH9mxCNIyS66lFmysWVsbBkbW4Ziddhmy19w
+	MYL08S2fDUZZcTECZfejQKmO+Xq6Esq0bCpAzqAr5ccks2weMvPmykj6xIH5pvjavJh5
+	TLbU1y9mJu2h5c4TwcK2EgNh5ZwPC1t9BBMRT2uLBSwnJxvDYFGkIZGtJCNrszW5SVN2
+	7sb21mdbeUGB60+sTya7Tm0e+F7pQPLLE6fIvpaDZZ6K1obchoI5P9l354Eyj2fditmf
+	CJF9azui4Wj4d3j4Y5HED+DvzExIylYwmTFXME9EzMYmvajSaTGPPlgsR3IZ28HAKlv7
+	rcSoYQRqGNsaVigoxh3UhuczJaEQsJMGrUSsHi2wjR1XZAs1pyuiYaNjVKP2M0Y1gj+x
+	bNIdzrpRaG7OJlphkL5K5I9WGDfbolj2pKniB/TlrbV3fT+UTPa/3L28ooIf0evWN8x+
+	KESevzukwp8dHIxi3b4Lvz6Hs8tWg3qJZq+GJ6psncrSqMLzl/ULD13XWfGlXewIiocv
+	+i0OZetnmz5GHm70hTR8AZMAWyV5WMm+LleznDNRqoCFEzyZJ+VF84iBcYSFFycaWPhS
+	jAcmG/5UeZfVbATp8NWywSgr4Yvgj6x4I/hvJXy1zASVGacIPmWcag/l3sSpEpA3KZQw
+	ZgUcf0uw0GQ1ocSPtdtKD8/0zGypFu5K3vvjbfE3kmabfWPH2h+FkvtCbf92gfxibn/4
+	QU9F2boVfCP9zYY3Xql1+O/KF134bwd4oBr/g2mGO+Gv8J+YMOC/v3hxGJXKL081/fN3
+	TWtXS2ijZ+OWgZ7Y/bH/A/BMsmwKZW5kc3RyZWFtCmVuZG9iagozNiAwIG9iago0MDI0
+	CmVuZG9iagozNyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0FzY2VudCAx
+	MDA1IC9DYXBIZWlnaHQgNzM4IC9EZXNjZW50IC0yMTAgL0ZsYWdzCjMyIC9Gb250QkJv
+	eCBbLTQ5NSAtMzAzIDE0NDYgMTAwMV0gL0ZvbnROYW1lIC9HT1hIS1YrVmVyZGFuYSAv
+	SXRhbGljQW5nbGUKMCAvU3RlbVYgMCAvTWF4V2lkdGggMTUyMSAvWEhlaWdodCA3NTAg
+	L0ZvbnRGaWxlMiAzNSAwIFIgPj4KZW5kb2JqCjM4IDAgb2JqClsgNzUxIDAgMCAwIDAg
+	MCAwIDAgNjAzIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjAxIDYyMyAw
+	IDAgMCAwIDYyMwowIDAgMCA1OTIgMCA5NzMgMCAwIDAgMCA0MjcgMCAwIDYzMyBdCmVu
+	ZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jh
+	c2VGb250IC9HT1hIS1YrVmVyZGFuYSAvRm9udERlc2NyaXB0b3IKMzcgMCBSIC9XaWR0
+	aHMgMzggMCBSIC9GaXJzdENoYXIgNzIgL0xhc3RDaGFyIDExNyAvRW5jb2RpbmcgL01h
+	Y1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjM5IDAgb2JqCjw8IC9MZW5ndGggNDAgMCBS
+	IC9MZW5ndGgxIDE3NzA0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ab18
+	CXxU9fXv/f3u8rv7NnNnJskkk2SSTCAhA9mGJZCw74vIJiqIyKYgiOyLLIK4ICiCogIu
+	f1dQEVEL7nWBLmpdqFpbxbW12qpVW60W8r6/mWAjbV/b93nvJbkzc2fuvbOdc77LOTcL
+	5i+cJljCakEURk2cMm+6kP3pu1oQyF1T50yZl1tXPsD1T6YuWlCcWye/EQRp1/R5M+a0
+	Pb4C1+EZs5e27c/eEIQe1TOnTTkn97jwN1w3zsQduXVSj+uymXMWLMmtK1fheszsuVPb
+	Hmf3YL16zpQlbc8v4PmE4vOnzJmW277vKFx3njf3wgVt6xKuh82bP61tezIB6+sEgsuA
+	1gsKzQhMoIIqtAg63tkX4ieChEf541imzdjy68lO058FV/wI9wh7t+et5tdPVdwsHO93
+	/AL5DcnHdiKOkPvBPuLo4xcIguId79d6jTQme6S2B7NXQUuHaDQSCYJwOBTyfc9zXcex
+	bcsyTcPQdU2TJFGklOBI5MoDpHV9/5n9/o//9ivyAKFqv8pwuU+WcZx9jOHy+P7Wo2Qv
+	Feh8YZQwUBgkNAm9hdFCSjhIVGE6PtObyNu4vJtcReaTT4Wl5w+evGTv4L/d1Nga2tez
+	+I3V9I7uqVc2OJeWXvDNmY9/tmTwbfPeC9btnLryKemKrT3qP71u69Tlbxy56bvuD1X1
+	fPOtpQW3xF78bNbKd357w85ls/v+6OKPX3m+U2JOr6J31mye0t158JHxlcefmTXAuuuR
+	w5kV171z37OhOb8runBLXt3Ga9jj38399ciJ73f+9aPzz/jDazdlOo2+9ZvGBa8WNhyb
+	9YRS88ShiSuf15deE6z8cM2H9x+5uPyl5aWnz/2lve7B2ZHX6w68WDL0yh8/uKFyxtWV
+	e166oNfTk29+6bTFfzEq9w4/44PntndMTnj2o3Nr9y54KnruWw/Mf53Nv6yg83W/6DV9
+	a/f665dt+ku3bUenNr806o7X6nsf/fa8N29NHpv60kOhjWNf/Gblm+8veObYnCuZc8Ud
+	qVG3PmtdWKq9/sKQBbuffeaxGYP+/Msblyz/eXDXs3ZXZ8z76y67Rx9w8wczl1jOXWv7
+	sed/W/3a3KXk/QcvTfY6+tpF/e7bet9jL2ztcvuk03710bzzPmY/+1Vd8aJVgwdctfnp
+	g7OHB0cf7Z356I31AxvuvPrtc/v/4YNrLl6gFvxt69wK+4GDY8ZfvuGKPWeF9O5XHqkY
+	/9sP1y7rYB++YtjKjWsev3/zmjeOhBtXLSn6/fqfT5/VIf3u5urVZy698fYtf5rxq+GT
+	3+ty6denDPk8s/oNte/D740/8vby+79OXvVi86TXvx1bdq/+txUv3HLhEXfl/s/H3Ph+
+	5v7tZ2/crX3Qa+Ndzsg/31/yaqwu74w/vrlqYeyPW148L/PA/N8P/8l1hYcrZ70dmv3Q
+	n3puf7l+2G17z3rtm+G7Put5+bvRTR8XT3ugYMADP61quGbBk/mJq7S6W37R23m94zkv
+	/3Xu9k+GfXnVl7c8/Xn0memxu5b/9r0bV5927tHynZ+SKrv31ze9fnffc4cOfuH4kwvl
+	sT3eeeOs5dIfNjxqLtnYcfsX8mMd6n/z+rJOty09PCr17qBtn6aW3uxPfPqaHh9rJS3C
+	jf2/e2fbJU74loNDRr31fN8V/1P55s1LKt5/bk0HfcDxj65a5th3rBm/ckPTnlfCE3p+
+	99riseM/+WLJ9VZ06/6lPdb3eFBfN/nofdWfL34i79THri6605327eDUobFP3pzYaUy6
+	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
+	JiKmVSoj0ZA+susmfeoQpLskMWIhaZGAoiwSWTFwgxAiWhx4JJNKyAxGFI1aKNmOylwv
+	EVI8ooq6wiRTNKksShSZ3osyzYrIkiz5qmVKum4pBJlJNMWkasQK+1LMVVAZpLgWM0W6
+	Q4vFTVULRUyT+Jolq5Kmq5pJeNkJCOvEVF83DZXixST0HrYS1yKKrRdXipZs2CorZKIo
+	oRTpGtONUpH6gW44KAeKKEmuzxQrXzGVQFVdDe9fDUxFNSTDKRYTAXV8F1KOmhaTVEtR
+	JVGx8aFIlkFiOglUh0nFouwpiiLbakSXRbVKc7v5Xk1JYZLKPjFChmPmeWHNjSTx+eKp
+	fZ+XAyaqtiRqopkf1iPRfJfnelHrYTKDvCBcITwgvNwymezf3/Kg0Iaht26/duuWqzZf
+	fhkHzSlnTR4xvLlXprE+VXHvPbduXLb0wgvOHT9u7Kmja9NVHTukKsrLEkUF+cJspaR4
+	FsJ2+QoWHuqFfRKNOKJFdI2Q4u/TEknZlEZaZhkBCMH3GfJPbvyzRPrBZm1ZVSzsb59V
+	+7NZFUa8yinkVEWyNJtNqSTAqyFNGxDrCNMMq880IG2QPDy7Ij1INiPqM3XNBNCVXWms
+	q41mopEER0nEu4gcqMqmZ1JxRNwV5r9BGFvQIEGaZWQU9utBIiJP49IkPoxUadJR8Coa
+	cdhopg5/Dc1iI5nhy7pi+CHdMBAWimXa+L41T63QTcVEXMsAFRlpB0blAPjw7SkqVWUx
+	LKkI/AKmMpmZphcVRU0PkeICLSSG3JhPkUcEYUaQAoxF1NKwruhynqSJYdGOSKGpIvKE
+	GwX40zXZM1xNROwBtWxVMWRmidSio03f1UlINH1gp0Z8k0iyEhUVT3Wqy9zAZSbVdDnm
+	WcjPPGCpKcl5niSFZKqKeDeUKhrQVVMsyS/RS5T8wI3anFapSDEvxkTkHp4eKCwq4I1U
+	ZEh2vB9Z8uwI8UWECyGA64gaVzyTMdxhSo6BdxqSQUFbPzn+PvmUPiocIgNadpHDh1t+
+	Ijz1xMEDDz+07/49u6/bejXo2YZ1F/fv17e5qUdN0nNMAzUIOfXg/nvuuO3WW268YfPF
+	qy9auezCC+bOmT39nLOnTJ542oRxY0cOHzpk8KCBXYsT+Xl+WN973317hw3X1qxevWb3
+	3fIhYU9ykux7hUXyrp2nj1ZWLF2yeJG8fMQwZeGC+eKqPr16s4b62s5VHSor1PJLL1nP
+	tl376EyyuY0EpznvzaIP54McjXIX/Eb2EVycQKAT1/8FEv3bLMmmTFuqbBYOt0+Vw1ku
+	GOZ4U5FCqccNHrMBL/YiCjynaIjdTLQxU9cZmIF84EtdDhxSChILCZECOHBwyf4CNpTC
+	HNgAiyKFJIcWaTHLGDl+caDiUMWTsDGTTLXBHbAOxwakIJMoxzNcNjZUdAmDRIJn0rra
+	niRTh+xCIkX4y0hI5NOY6oaponiKFTC4YKIOxNPA0kxJIjYlBigiuJ9YCijQTVNTFc0q
+	EzvlG/lIHyNuyyqCW7EALrpIVGzMZEN0UemrVZOGeQUVdeQUGB0qOtUly4l7hbrMqkXZ
+	ipKS7vGYBuUjqsQApTHBQgm1ASlGXLVsJkfyqaJLtmnrjkTHhsOylnJ0hLOqiDrR3ahe
+	oBha2Ac0lHlSDK+YIDEojieKJK4aFtANKcl0gICXX2nbEbxY0iGMfPDCbpdGIDXyFcle
+	QV3mdzV8JLfnGZFmatiWUa+UqQnT6yFJIJIkbHgpRkF/rUIzbKiGWSRbtqaojXJEFj1V
+	K7QkXaIyMlMK9LATh4RLHP+S2uQpfCxzW7aTo2//8sgvHn9s3/333nLzDddfu23WuLGj
+	R40YNqR/n94tzb0aOyRLfe/4d99+8/UnH/3uw5/+5PCh56DGrt224ZJ106ed3dLcs6lH
+	9261XTqXl4V8aCwD+U6FceO1wni88NBh7ZL16y95/Alt86ZNm/fer91+222333ufdted
+	d951ztRJ4lmKPnOGIpKHHmQ7b+pYmfqU7tpJly9bSci6E7ACUGmG0sriygEipw8Q0gTh
+	1ZQG7TuRUv/u+r9IuRwIHSBCzQFCsbCa/ygJkYMHCQxjrn/XEa0tEQ8STWjpeoBo0MFE
+	O8EIOQvjBCzgjIskswyOZ6WMnGMBsg7pKkKMgQA21nXm3A4IlQky2QxqBBerjdbW1WYi
+	dbU8YxiHOGQezz0cgh8Fh0Cqp+Us92tsABukjRBcGYacRKaD0fE0T8jAPZKmALwcBRST
+	TjbPIwA8FAO+B+QdR0sxmj0EyGma8kqRECNRpD90Ja8WfKfsFbXBm8BFAAFIL6gZWQZU
+	+V7IMdVwnqJ5ZioW6EVhp1KhoqmranmYmmpNlFFiEt0sU7hyQ8oDxhCtxQ5yXJEBepKq
+	AjYUx8+Px4p1x7Zc1YnEDVlTJT8/BATQKQpEBIc0JVNlpXhaw9RAx/Id39AVW4KIA/oV
+	OjbTZZfkAYgVMERkkuRQBCyEIwEYebJWqURKRdRHlbh6HqRjjJqurAKfRd1l0HcWclKm
+	hoiQ1RhqkbKi3BQ1DSLUHBfi6SjCMGHMNUBJLexBDVBUQD5Q2ledCskNgemCzZq6LTN8
+	VmDLEp5dikct2zIL8hQzEnG7ePGgGPrPKvQL80KmxixVBV8gJC8vqCwsNRK+5XdQNc+y
+	dCmi4VOGvrB1HFe1qQQeboSlGI6uqg4UdYhoAbODsFmlGhWmqRtUkcA5LB+4rFBOf0sl
+	MRa3jIbAdgxb91XN0iOar5lMcX0wfOBrXgjflQmE5u5YuvU9coTOFnaShpYdZNeulpuE
+	VRfN7FAZL4jdeMMl6yEhlyxaOOmM0yeeOjRXQHo21UV829SEklKTGy3LV5ibrrxy09Jl
+	eqKoKFFSqs09//y5p4zWhgwePOTC+fLmSrnLddu2XrVZvlpRokE4BOfGYviIr71my4xp
+	M5WG2i5i/ZjpynBOXs+cMH6cOlYZ2K9bV2nApXTEcCldQzrBDyBD2+pHM8pHU3MWmyET
+	2/AZ4NyE8sGVo3vsfyMaT64r/66OfF8q2iB5qLCrPSTvyrFXoDDYKshpTuxlAZMnL4UL
+	k3TEVDItZhEyKwnxaFYopkXIOCReNkN54uV+geMA8YZm1gDmm813Lvcy8G4g2ZCpSHMR
+	1QNeTJRxshuNkCNVga5Dl9k6kg3hxxAPkSLTFw1DNnxgRRhqwvcc1zIN7o+owD8ZsQ08
+	QtKgvIuy7Bi6FjFsZAo3XwgqvgyEosgLbMi3oQYkpU5MnRJfphoQmRi+m6+DsuHoPDCx
+	JTEkWa/07JQNu0MMQgEIp6+VVJWYeUyrIIUmWGwyYqsxv1xJ+GHZLWvwwmna3wrEYsOW
+	xTizCwu1ApcVO4W25xo+/BVKS6rjpmfHwlJPm5U4BSrejmqF3DByD0GtUldVJV30kPCw
+	V6hlS4ZiR0cltSFWOBJydEMVPa6halo/Jz3pL4W4sFjY1zKULFnSsrRw0cJ5c8+fM/u8
+	aeec3TltnDV50plncIY5etTIQQP69u7V1C3TUBiEPRdCU5h3gV5SXFzCVA2NvXDBcDp0
+	CO1CSMOJwASskf8ywL6PrxxKtUVZg7CkfZQt4VEWAsQojoJgQBw0U44BYiQUhs7JSh0U
+	U5oEymQtPlyAkFWkehHO4xKcqkW5dwh44rVdyZqHYG4k2ixHASB1gBMIodfdkO3oUd3N
+	d0WDOFDdpgQrQO0zXZVhBtiaZbIIZY4rs7DbIUQkE5JXRnlH3QMbEgtMUwwziTKG/RA6
+	IEgOJDuKMsxARcdmkAXRiGTQ2xBGUdG3FFuNOnk+D1xH0mhYo0rMPfZCVOFVTxNteEXQ
+	TBRfc1GqizlBcmwtHlVYKCpqBiwHTY3BXotIpqFJtTZKUkWelWfrUd+E2EcUwDxDyDKU
+	RJflal1t63ekD50nXCjsbhlJFixoWShcMH0a6o5r44s/dTT3v4YPGzSge7pDZaqiLJmI
+	RgQ53ix3bunRJFdNPF0pHK+UFMXFwiEDeyl14EidqqtYjd8okbK2KEjnVENWNqAQ4S9b
+	kX4ghdutfB8AbV99mbCg/Ve/IFdg8O0qYAGoM5wGUBQaiX/RjVweo9DkNHK2+DQma8Hk
+	8RmhokDvclMoB+jcWOIWUw7dWQSEAaEEIc0DqjFTn6nNFBHSR4Vbomn4QsJQh5LoFUSZ
+	rxjcpMQXLMMDwdcN7CUgA6KodJRdnTrcW6EySgbRUH9ghKK0oHYQhAbgXrMUTQE1xxtw
+	Zdtz5LAxx2AwTUxJA5+3ZaLD4xEtNayVR1xs1dHwnTzPCdtaknWsUosK9CYdcjaQQgoq
+	imfLhgIHFAGlFQdBqFqOxhXiGbZjyTJeKIIOylaSTHB60eH41r31mLiU7CEDybqWVeSL
+	1195+UcP77/tfxZcOKlvn8aG6o4VIUP/+i9f/OmzT//4h4/hlL7/3jtH337rhZ//7Kf7
+	7t191+23XH/dtdu2XrPpsgvmnT7xtPFjxwzj4rO5V5d0eVmytKRY+OJLralHjyYEz3Bp
+	pDxL3n71xnXSFfsfuFO8Tb5hwyVrpfU3qTtW9ttByQ0nYgQhcQLAIDEPkBKQ4PwDJHGA
+	lB8gHQ+Q6gMETBWYlv1px4sPkhjJ23CAxGrsAyTvWfsgsQX9b7htPfvvoKxd0P3jzQNE
+	xRPqWCJY4ljKsFT8K6p8gLh4uCuWbli6Y+lXkyXMg3OE+QYy6HvCPChLmAdxwjwoG80I
+	ZMQzCC0DNpZmo7oCtiXaFbAvEc2ZFLMJQp0hVhHInENndygtJJzYsgpuC7X5rNnrXBJU
+	pBx+WBsGBS+V2KsUT8KfpzSd7XvgwDBgeyLcU1mGzZ8Jd3ESHgnqWQrZwf94uqBKBlzE
+	IjdgAOUusTF2w70cirGTFPCa+n1WcfgGs+fZ1IB0attTLm3ojOJa1zkhcRMKLZRcGWa1
+	vB5nFXeCQQdkSTm2A7yLS2UEt4wkgm0Eqio7umXbtmuLCHuwWvRRFFHWQ0wmKLFghXya
+	xJL1wIJWMFmsCI+rIN6EyCq4uwiqC2PZMmOUI2SIKNjOtBSdAPxF4tqunK9yezcrZuGE
+	UhN2LTeTwlHQBU+EOUTA7tHKgasLhxNsmFoo/TKeP4QN5TBwnwIxaBidi0CXZFsDnzY4
+	JHB1DGwo1iWNu7ISCDmcLBUdDAMwoaKh4eN9EeQtKjX3frkjBVfLUBRJ1iD0bckjhqeo
+	mmEpi2xmyDpeoa7BZdVkBiIumppl6HFXKzITeSwv0KAwOPCYqijbetiK2RQaxtFozLCM
+	Qk1PQGKIimSEVF8rDDxNdCXXKDJ8GLSarYRh13pw8VRqhyRXtdSqCEUrKeS6gRygyYQ2
+	EmFeyCy0I46fwiiPL8aIp0o1KebC81NtvAyq5YVCiuX7Nj4yyYNXETA0UACRzCWKKzGb
+	ooWkOzHPhPxXZJ1zL1u0S6QkdqMogNzqgwXHHNNR7BhaSy48AebaBiJOhr+NRhhcE3jk
+	/FvRoc1SuomvBbRN1Q3ZNk2023J17y90N9kkPCv8qeUC8txzLYeEJx9+aO+996xaMfeM
+	cvRPn+Et2F07r7zisks3XLx21UUrlixeuOD8Oeedc9bkUcPhr/XrU12VKMrPE/Y9oGN8
+	ya7soK1ds2btlKnygKRy800zzlXGD+srDpg5fZp4toLaOG7M6JFD1QnXXdtMBuYqHdy0
+	dnWOO2j/hJv/54Xre7DMFbA2yBwoPNceMp/LQaYj5eqMlOJ2GX57ErBwXgnSxJHhDwMb
+	eXXgtYXXjWz3pg1Nswyd14j6Nv+riBQCSPGLfM9WCbQ+uZDmyNuMjECxwHVDWzeVS2ve
+	ooEcDxJilqRDgGdKo7V4IIM+a2OzlOBWG90NbqTBEDIstDu0/FIN3zjaDR7cH43qILOy
+	VoaWqUrQnNFCVDO0CLoDSKs8I2w5HGMNFeRKUkF3gLcclv0EXFsJW0F1o+speyBAooU4
+	11JynFqag3y0SVjzFQpNGAONZygM6I9AkIk+iBgS0wCREyGHCaIXPCtUoJFbVcsLoyyF
+	bTA+9CiRegzlxA3zxo0filrjPBM2XUVgu6qcgHwPKzQi22EZwkT2UGgieTGLWjF0TKOS
+	zdwinbvJRC023IIi2YtoZlAJcDd8lIZA03TwBHRMQBFMXalWQGkcT5cthL0NBUN8CusZ
+	RQ+CRaSBHonFK8qCfJjiYQM1SiZIZNQ0FBUGmQrVXohaBAJIhXjrG2QjuVM4VbhReL7l
+	DLJjR8tO4VIYXxdPHzYUhL+lR/fqquuv23rNiuXLll4wD27z+DGnju7eDVSvUxnAXpaE
+	q65Gr9ayFy9aKC6Ry5OpuXK6umbIYHXgmtVrWf5AGicF+YSUtkE9BgxyFDA3XZCTqSdE
+	wr+J/JPCvYZDLLejSoUd7QN+RzbgOdcLHD0LeEoS0hNiIItwPI7hCPMmJFwlmEedcc0Z
+	P/xZjn2ZBKmL1kWAZzxR+C5Iloa0VJoC50S8ozeTGzYIWELkYoG3WXgMK5Ah/OBkIzdJ
+	0E1Q4dWYJGSFJDuqW+jbWbZX5URkB/0CCukISagSkQUgipJD8mx0yjRNNfJtQ3UQXpQF
+	oW5oJuCblSze7dMCVaFoTYo64Mbl/UeRoK1PNFjB+bBmCGQglGg+DRsugYssS8rHfj4E
+	H7ONPLweTzGZLxNwAVi4SIlo1C1F599WQpoeZbYDgSHZTiE4qxfVtACYqVtMNQNZKkjr
+	PWSmyqEQOj+SC0IBKIVBZcj5im06QB0NiWcWyHHMdWKAgOoAOnBjbMDj37DgZJvAOh5z
+	ra8e30/2kseE7cLb5LyWB8jRoy3vCL967ZdHXn35Fy/8/KeHn3t239777r1nD4rxHVdu
+	XLN6xfLFi+ZfMGM62nkQJpyPhICShv7Wb5595umnnnz80Ud+9PBDO3fcyJ1d8NIrL92w
+	etXs86acBemKIgz/ZCxCFi2SwQP7N3XvWl9dBZ5awudmfA+N/ExXvVN1dadZcumg5lql
+	plONckpjwwFMBaA3WFqkFSvcKB7Qu0e3TJ3ed0Fngcw6QVpPVHLu1eZi+j+M43+km//8
+	nn+I93++2Q/ubUuJWcLR9ilxNJcS0awD61D0SqKAAZYq5dMyXBHxWo7qzDkYF0Vgm7yW
+	Z6M/U0MQ1Dywc6vZS66weAuk7Zc1cCKaYtmtuJvaDOs0E+XZhAkalknIAdqMdWjRR9Bz
+	51qM75hWsUs6u2MacJL1fEAZ215ElPF8jNZmYAW3NW7Qzkxyz4jsNVUJzUTq247ioNUt
+	elI8Tw/ARrL8Dg+JCgWJomJcKYQyIpKqgcdQA1xQEZkGLDTQnSPoKWAoBvIM1k8ZM1Bc
+	5S4aieexYhaXtZir+RaqOBxCEjFCVoyEVElFElGdGjpkVT9M54DsqRJ4pua64CiSrau6
+	5KMTYRvAH/QSebNAJIHENGQy+pcgsCrT1LCr0RCAi20tCiuujduWStA4hbgHw4HuRytI
+	C+kRI69CR9/FUUQN5kDlALWo2o8UWVEz7Cs6Sr/IrEC3NKOwgxUyQrIXSJIhuZ6FcQdD
+	Z66CVo2kF3qm6rgE7RhKk3I+hgI08COFmYoLZxUEUjbCYLFRl+muH3gYNNBU3TXydU8K
+	qEstzpyZaIYMVIuiEPr54JQakMviLjZ6S4ouhmzYsTlPofT483Qm2UnKyKst15M/f/XH
+	T159BXPCj2TbnPfsyU63bd2wZvW8ubNmTp40dkzvlp7or3Tt0rkUVZN++9dvPv3jW7/5
+	9Zu/PPKTQ5s3bTzv3Fkzc3kMNjV8SCKeHw181xGOvv320USxdv8+beCAAQPff7eosCCi
+	xJQvf/fhe0dLMGXw1Z/33q8MHnTfvcrQm27YtkXaxT5fv3zp4oXKgovWSicG3sDHeDsz
+	CjDK9TPByKJNB4gC/UnRi4EEhLQ7QPwDJHyABG36k29zItUPIoYYBKjCBSj7+6TcQQBs
+	VoiS/1yI5noyXOlKWBgWA4uJxcJiY3GweFhCWPKw5GMpwJITqP91vYDCxs7FWEpzcrUi
+	J1eHkPLv5Wp5Vq6Wc7lazqsIyQ7VJdMY76E8h/lFFiaz3gu331QMDaC2YLsKOL0KHs+W
+	Dz7oU1cLAom6ATYIHQnLjjCYdyKGcOqy6FsX4TfRo82gdGTRuB54y426bHsXR0Vpakgq
+	gQMvBPhLwCBRa6LYpRn2U0NFAGzHLTwHN3Gyz8RtoMY6Xpl4KYGFzBs7HOizx+WI3lb/
+	TlTBbC3kUxGoh+AC/PXQmaYdsu1CUiTqDH1ZmypowYBvghKiePBWEDQYn4cJPOp46EIw
+	G11UWcMMieFaKiDTwwgNJiPA2Lj2QQcIIAnpB7cHGhaiT/XRA9FkX5bjKqggfDy4S2i3
+	OKaF+5lJVC3KZ38MAzOC6NbA81UxoaRZ5VBGUIm4Hy0fA8yCoP0bkZH3yFN0y2QVVjaz
+	dBFdGAhjPHN2gg3cWKRayIExaSoYYMKD8AdBZfEoSCQqBWAc9AQdaTOEuuiHj/9ORYHQ
+	KPhKyGFGZ2poXlGBpoYUDAqWVKpWT1/mxYT5happ2OAoEh95MlAiKPxySQLRMGzUyXBc
+	hxpXKbx0MHMMRoXzQauJDO0Jgo8WD0aVHHwAqJaQiszB/BPmPDBpBYotivCxJIht6HW0
+	tM3OiaSvlaJ0QhLyVJR0PiiFVhHkX1g0MNZh+ZRZ2AOTGvDdIG91/j2hRaWp6EhbnstC
+	YYxzYODFzXMK0KmOyp5ve+h8S1I45poU9E0KQwJzDVmLs0juIjcIlwk/bRlHLr+85Qrh
+	krVrVi5aeLahS+KaVSvBOk4fN3bUCExkDBrYv2+2wYz+cbcMRixqYI6mypN8ajcfM7sq
+	E8KB3tLc3KJq2uJFixaP7kjIqO/ZxYkKc+L635DjH7CA3Er7etDGC0YJl7fnBZfnMhp9
+	GYpebRKeOQIGnkx2egI4DIMmQcCd29wlyD+eR3x0L/fLc5p3b2BU8Qf4zATMI26qOyAA
+	SO9GPlfEopiJrQt3KQ24sYN0ipC70Bm1YK4HkD4MjQ7EBkaEkEcO1aH6CfUsM16OeEXr
+	BWY510YcaaHGNP7tV+fJYJiYwwPGwtMBDCFoJRsDrxaf7xHhdWP+DAM7NgINZq0m6flk
+	QYmMqTS4sbrvSVGqurIJSelgoE+xPAtSL5sRflSznajmuNCKYOmAaswgiXD6ozo8Fx0M
+	yrdcJYZhDNg7IasAIQKpyMIRuLZMBU6j92k6GFiDMIN5C0dXgZjEq4AgzeGj0PoZuZX8
+	SNhBrJY1ZOfOll3C5vkXzMvaqAP79G7u1bOpvq5Lxw6VhZq644brL1m/du75M2dMH9u7
+	pXtVRw+NKWHJUn3SpMlnnjkJHZizz546ZcrZl1+hjRwxYmS6Rq4o76KM2baVMaVvfzYV
+	097mVSxkLFk8m02tZYmC/MCzFHMum3o2jeDDKf9elqWPcSTkPDbnSuAWH/ABMPKrE0G4
+	oUZtw7jc9b8IyvaR98PAbIvDcmFn+zjcmeWnjsw5ZMCRo7FOATNkUF5V2Rm4NEFLETOk
+	KPW8KCMqOYRwWwGjPxiOy2SRATewklZ58ecNIZkHY9BGaBvwGCvFL4YAFFZE8ABM/4QE
+	qKF8WIAABsitfLojbIVNwyoHn9MVtRIDoIobAQlEvbUxDloeiqFBo6iWuDohUpsGPuiQ
+	bMGdgwnPLEtD6RfthF4hxR2UQGo7jmQ6zUa4pBmGhQsrI4Les20xy0CjH+VO0dC9gTsI
+	meSqYSsKY0KyIj514zC+RDbahsaiqN+YHQd7xZMhJ0BtMaWGot1ds9GEkEyCaRp0pZAq
+	mow6CCaKkQBAlIZZbkwolHj1ShRNA3icZgx1X5Ix7okp6zwPTglgyEShxXCPreAFabKM
+	D4hblmhLiMy1cKUb2dht/aD1r2QKTQsXCx+2zCLr1rWsF9auWb1qZVZqjT6luVfnirLS
+	kOdYgByFewaYNVu4YN75c6bxZvYk3s0eMQxWWv+6Wn7ighCNaf379esPUSeGlVEjhw+Q
+	ho451cQnueKimuqOrFvX85rIhFyMpttG0XJ0LcvaTkTlv4jCH0Tevw7JEzbCBGFd+5hc
+	l62NXO3DO1cQWXDakwqDD8+lSoDx/3ACZY3PkeASzIWPrUA/wXFIMq6gkmmZV8mcjOLR
+	lyzlZyJEMZuSs9FQMhHCOAKXPOhzZ4kH1BK2gKtApvgYblQCN8/UCjygloEzVSAh0AVE
+	09GEzAA/sABi4ApaNLBjWqFpReEcaFZSC8wIH7kE6KE+yizki0VmKM8KBZYlc0kiqgVa
+	MRpWQEmY1aipqprIVGPmNEFmaOiHY4QCE8UwpalYEU9W+HYRkBpDyTAgMOCrElizrBQW
+	gaFQKSTGrdo0ED8CV913ZVeUrGIx5GMkKxxnTgKuBhwIVS6E14xyyCx4suGY5nMqxM9F
+	yuDMpIlkq7Bb+KJlAdmzp+Ue4e5dO6/eeMWsylQcsA9hD1W/ft3KFYsWnjl2zCk8fgb0
+	6dUVOV7XJV6A01+CkHDZ5frWa67ZOvksrU/v3n1u2rVdvE4+f05C7jZ13GjxVGVItqk5
+	6fQJ47XTlH69m7pL3W5n1ohOtkW6toVXdgLrhKYHw3d54fs70f9vYq3mpD5RW9HrKuxp
+	H2B7skWPd6wRLKAfVSQtZQGVgyqQOMkNWZp0pBQaNt97r9kTVBBTuS3BrdHESaDHw6Mn
+	203hUZQV8rjgsZlpqOVcO8uIuT0rdea3OelOoXwC3vn4BCI6q855XUVE0okYjAEV5Swq
+	klDzvArVRfnB9LdDVcOwMARYxk/PiJaEw6pGXHA9kDU+asuJmphSbdipoJG8SsmIA5i5
+	8F4NILuHghJiviFZKDtQxYrIfVtcG0ohENaBvYlJdirji2E6+JhqFnU3PRQ1DGbIanEB
+	dkMTAJS0KJ8GUszBdFB5REMx1X1UO5zfosQRtKAEhp4Puwyi3yxpcROIdRrOx9yF6qKQ
+	KhhwdExbAYXmLRicj8L5NMP7k+yQwps80O8awXSTq5YiTqkfJiG3KpxSHMNnxZ3yPTSb
+	YJNZONWatH7X+jnw/VNhmfBwywiyfHnLCmHaOeNxstbQIU3dMxjgVhZceO6sGdMnTxo5
+	on8/Du8NmDyvTJbmxzwUV9AClN5ly4SlS5e19NbSNTXpZQsX0OL2gxTt5yj+t8D795J3
+	cr1ri8EGYXn7GFyeLXKgayInfxF+PlMYHWk+Lo6gjKYlVKp01tYBQDZmuHcjBQmJdwJ5
+	pzCKJQDOosihwxflp1AhwOD3N9Tx058wpy1ijgH6CCBF3GjIReHCyLThK+FEaUFETIK5
+	Gfn89AnmA1zzqjLgbjr6OwAx1aCupeOr5LQQnTCEl2OpsB8xcoZGoGSgHWhhAhxiwXQl
+	OU5e8kKYBMM0TbGtMLshoWPWC3QfXTPN0IPGOKszpZiR1123DebbJdBVJXGvvDyK86NM
+	14whDryUU5zSgfEKRs5NNRQGyKOLLqHlT0ULBnuEJkxHjcOILRExRENaj7V+Qe8gTwq3
+	kGJwuVtvbfkfYd2CSWeOh3mYh1nT7dduu2bL5k2XX7bqopVAw3nnn3cumNy0qWePHZMd
+	rEDnvHf3bihk9Z3T0AYVpSVBGPGw/hKMlpjWhkvxwnXj6i1whVUNA2SNDQ2NY8dptV26
+	oF2qrbv44nW+6u7asZP2py4hvdu4HM7g4/30EwXrP73+T0D07+H1g1t/j7W2KOst3No+
+	ym49EWUWJqlxQg7OmxMznODxMxq4LY8eVAYdb1zykpQbAUOoiZznidmzGlDAsgYkrnMu
+	OyIvIaHSoaUkNUvw8vnwB+WefnbkBxAKRkfvkKmJE8gMN1QoO16R4hZ5aNHIHaHKo64W
+	oQ5mmSM4VQ4SGr1MDHRRHTOGcNVhE3rQqwFCTIXQ0NGERSsKvWY7Cl9f4W2gbFMYOpdi
+	NAcSP6TDtmOeFCZ6VPYNRKquwON3EK6+ZhQXSJiFJltDesp2Qm6yuMoqSDbGorqeLtXj
+	ygTQ8mIvv0BL4D8jiFEKRQ7ZUOBbUlUBXDctEoqwfFfX9SofJxPois9cXXOdTkZBcYUZ
+	C1St3MOApI/mN145KCaIJFwE3YTSIZ4Tc42IViSKnTFZrZVrgQxXAH0iU0RXwDYikSJ8
+	hhA0jJO8tv/r0DpR6Mkp3z/8BLhHFPoJ/fE/FAYLQ4ShwjBhJP6nwin4bwqnCmOEscI4
+	YTzOKD5NmIgtCc7XzcoenNMbF4QhI0YPHDmkqs/8KefMnrZ00JTzzxk8pu+YMZ36zJ3N
+	/ztGbkv+lGdgmYmF/0+MS7Fsx3IXlgNYfoLlDSwfYfkGO6lYYlgqsXTFMgjLBCwzsSzB
+	cimW7a1tP9hH+P42EYpPWp9y0vrZJ61n/+dGu/2z/+Oj3fqMk7bHa/jB8806aX32SevZ
+	/yHS7njnn/T43JPWs//jo932+D8cP3i++SetX3jSevZ/hrTbf+FJjy86aX0xX/9f05S/
+	+QplbmRzdHJlYW0KZW5kb2JqCjQwIDAgb2JqCjEyMzQ3CmVuZG9iago0MSAwIG9iago8
+	PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0FzY2VudCA4NTAgL0NhcEhlaWdodCA2NTcg
+	L0Rlc2NlbnQgLTM5OSAvRmxhZ3MgMzIKL0ZvbnRCQm94IFstNDQ0IC0zOTkgMTQ5NiAx
+	MDQyXSAvRm9udE5hbWUgL0pOUkdPSitCcmFkbGV5SGFuZElUQ1RULUJvbGQgL0l0YWxp
+	Y0FuZ2xlCjAgL1N0ZW1WIDAgL01heFdpZHRoIDE1NTMgL1hIZWlnaHQgNTYwIC9Gb250
+	RmlsZTIgMzkgMCBSID4+CmVuZG9iago0MiAwIG9iagpbIDI1NSAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+	MCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDAgMCAwIDUxNSA0ODUgMCAwIDM3Nwo0MTIgNjAwIDUzMyAzMjggMCAwIDMy
+	NyA5MDEgNjcwIDQyNyA0NjggNjAzIDM5MSA0NTQgMzUyIDYxOCA0OTQgNjc4IF0KZW5k
+	b2JqCjE1IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFz
+	ZUZvbnQgL0pOUkdPSitCcmFkbGV5SGFuZElUQ1RULUJvbGQKL0ZvbnREZXNjcmlwdG9y
+	IDQxIDAgUiAvV2lkdGhzIDQyIDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMTkg
+	L0VuY29kaW5nCi9NYWNSb21hbkVuY29kaW5nID4+CmVuZG9iago0MyAwIG9iago8PCAv
+	TGVuZ3RoIDQ0IDAgUiAvTGVuZ3RoMSA3NDIwIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+
+	CnN0cmVhbQp4Ab1ZCVBUV9Y+9y39Ht3QdENDL3TT3Tx6YQdRFCHyxG5AWURQQxsxNAqC
+	y4QokpDFn2R0JqIxiwlR45/JMnHBMT6B0lYTf5My0dRkJmYZEzOZmWSiSWYqlPPnT+ZP
+	RqH/814DUWuS8q9K5d06955zz13O/e655/W73blmXQvEQA/QULso2NEKymPNxeKNpauD
+	HRE57kMsVy3t6nREZNYLQK9q7Vi+OiLzjwGobctXdY/1j28C4DvbWoLLInq4gmVBG1ZE
+	ZDIZy9S21Z13RuS4ISy9q25bOqaPr0A5cXXwzrH5QZ7f8bPg6pZIe2s0lqkdt63tjMhJ
+	72I5rWNNy1h70oD2vQkEa9VwG0TBSuCAAh2mRgDuc7UNGNTKenyWZWq23Rpb/DXoeUW+
+	tfohpXzN+eK5b1queDSP8N9iRdR4e7lUpY2mAUQT1A9rHpnQKP0wU4egPiMEs5FKkKYg
+	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
+	2SN/kmPhJjwsj6Iv62Gu6PbQ7pipdDnDaHkdpY3SR0V7eBa9Vq/mLfEkW5emB3NcfIj4
+	0UHXj4dHXKJ8ZqpLTo2ckqON7JdjXil7Y6IxIZtEXHHT/oRfr2RNNl2S7oFH0eWOFjxJ
+	0Sdo6uCake1K/A+/Rx9mKvGmL4dkiw9Ni9rO9sXtMGxP2J6u8qa6PAXOMmd5arlnYerN
+	ntbU5e7u6O6Ybm2X0Jna6ep0707emxlPY5his5jseLAkJBmtpoQsQ7Y3VtPOu10FLsqV
+	EqNmMuJNr1lt8Rxjy96ZocnhorQ6ioMcZ47Fbko0eYwzvG7O47Xkae0e3QzwZJtz8wYm
+	YisexULZaUcKdcjJyy3MwVxfWCjvMUZY5WjernhyFcmi3Akui9uptTshCq/QCZ2Jl11s
+	OnK2OKxLMpicxBGb4gRnijaG96idxO2KUpMsxon/m2CWrLc6iTkRMyXE6ooxviqZ4iLj
+	jt9IGuMxyuZPUtwlRw6rUyYr8YATIiFWdh87kSOxAR3H7SGXeJdv77LtN3nWPrRpZucf
+	j365chbVz7pn7Ght93tr7niltP38ny+d5sgRUrso9+abb/Gn4lspJX32fdtf3Lqo7aZJ
+	5TViWbo53paT6X/sobPnn6a+xfPSE/6E/jOeFyPGhyXi9JDhjIGKiucN5nizwau6g36P
+	43hgtWpQxahZjA0mzmTSJMZkq9OiNRYLSUs0my1vj4e+ajk4yEcI4Y3Eh5JiGXDZtUgj
+	0csHAl8pU/T5emGq8k7BVetdZJol9+cv+lxD/ZQwefm2i/VZ5CCTM1JYN7lp76L/pLSX
+	33rqpvT5O+o2Ue9bZJ9TnnAL3p/+u0eNlTl4B1uFN8B1eKe7ABZCg9KQ4M1w5PeRCv8r
+	g/K5DRWVCzMqWlZ1tXS2Lw1im4hWbpyLVIxUhbQYSb7TuwdpC9IupN8gvRgee5CHCZ4o
+	fa6WFTuv0rdf1175n/Eq/W3X6Tuuk9dcJ6+9Tl4ny/8HFKOfyQplbmRzdHJlYW0KZW5k
+	b2JqCjQ0IDAgb2JqCjQ1NjgKZW5kb2JqCjQ1IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVz
+	Y3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDcxNyAvRGVzY2VudCAtMjMwIC9G
+	bGFncyAzMgovRm9udEJCb3ggWy05NTEgLTQ4MSAxNDQ1IDExMjJdIC9Gb250TmFtZSAv
+	R09YSEtWK0hlbHZldGljYSAvSXRhbGljQW5nbGUgMAovU3RlbVYgMCAvTWF4V2lkdGgg
+	MTUwMCAvWEhlaWdodCA2MzcgL0ZvbnRGaWxlMiA0MyAwIFIgPj4KZW5kb2JqCjQ2IDAg
+	b2JqClsgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
+	IDAgMCAwIDU1NiAwIDAgMCAyMjIgMCAwIDAKODMzIDAgNTU2IDU1NiAwIDMzMyA1MDAg
+	MCA1NTYgXQplbmRvYmoKMTYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1Ry
+	dWVUeXBlIC9CYXNlRm9udCAvR09YSEtWK0hlbHZldGljYSAvRm9udERlc2NyaXB0b3IK
+	NDUgMCBSIC9XaWR0aHMgNDYgMCBSIC9GaXJzdENoYXIgNzYgL0xhc3RDaGFyIDExNyAv
+	RW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjQ3IDAgb2JqCihNYWMg
+	T1MgWCAxMC42LjYgUXVhcnR6IFBERkNvbnRleHQpCmVuZG9iago0OCAwIG9iagooRDoy
+	MDExMDIxNTE1MTMwNVowMCcwMCcpCmVuZG9iagoxIDAgb2JqCjw8IC9Qcm9kdWNlciA0
+	NyAwIFIgL0NyZWF0aW9uRGF0ZSA0OCAwIFIgL01vZERhdGUgNDggMCBSID4+CmVuZG9i
+	agp4cmVmCjAgNDkKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDY5MDMyIDAwMDAwIG4g
+	CjAwMDAwNDU2OTkgMDAwMDAgbiAKMDAwMDAwMjk4MSAwMDAwMCBuIAowMDAwMDQ1NTM2
+	IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMjk2MSAwMDAwMCBuIAow
+	MDAwMDAzMDg1IDAwMDAwIG4gCjAwMDAwNDU1MDAgMDAwMDAgbiAKMDAwMDAwMzI5NiAw
+	MDAwMCBuIAowMDAwMDAzNTg4IDAwMDAwIG4gCjAwMDAwMDM2MDcgMDAwMDAgbiAKMDAw
+	MDAwMzg5NCAwMDAwMCBuIAowMDAwMDA3Mzg2IDAwMDAwIG4gCjAwMDAwNTA0NDQgMDAw
+	MDAgbiAKMDAwMDA2MzU1MCAwMDAwMCBuIAowMDAwMDY4NzYzIDAwMDAwIG4gCjAwMDAw
+	NDQ2MDMgMDAwMDAgbiAKMDAwMDAwNzk5NSAwMDAwMCBuIAowMDAwMDA1MTA5IDAwMDAw
+	IG4gCjAwMDAwMDY1MzcgMDAwMDAgbiAKMDAwMDAwMzkxMyAwMDAwMCBuIAowMDAwMDA1
+	MDg5IDAwMDAwIG4gCjAwMDAwMDY1NTggMDAwMDAgbiAKMDAwMDAwNzM2NiAwMDAwMCBu
+	IAowMDAwMDA3NDIzIDAwMDAwIG4gCjAwMDAwMDc5NzUgMDAwMDAgbiAKMDAwMDAwODAz
+	MiAwMDAwMCBuIAowMDAwMDQ0NTgxIDAwMDAwIG4gCjAwMDAwNDQ2NDAgMDAwMDAgbiAK
+	MDAwMDA0NTQ4MCAwMDAwMCBuIAowMDAwMDQ1NjE5IDAwMDAwIG4gCjAwMDAwNDU4NjIg
+	MDAwMDAgbiAKMDAwMDA0NTc0NyAwMDAwMCBuIAowMDAwMDQ1ODQwIDAwMDAwIG4gCjAw
+	MDAwNDU5NTUgMDAwMDAgbiAKMDAwMDA1MDA2OSAwMDAwMCBuIAowMDAwMDUwMDkwIDAw
+	MDAwIG4gCjAwMDAwNTAzMTQgMDAwMDAgbiAKMDAwMDA1MDYxNyAwMDAwMCBuIAowMDAw
+	MDYzMDU1IDAwMDAwIG4gCjAwMDAwNjMwNzcgMDAwMDAgbiAKMDAwMDA2MzMxNCAwMDAw
+	MCBuIAowMDAwMDYzNzM3IDAwMDAwIG4gCjAwMDAwNjgzOTUgMDAwMDAgbiAKMDAwMDA2
+	ODQxNiAwMDAwMCBuIAowMDAwMDY4NjQxIDAwMDAwIG4gCjAwMDAwNjg5MzggMDAwMDAg
+	biAKMDAwMDA2ODk5MCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDQ5IC9Sb290IDMx
+	IDAgUiAvSW5mbyAxIDAgUiAvSUQgWyA8MTM2ZTNjMTFkM2FhOWZjYTc3Y2ZjZDBiYWFl
+	ZDUwMGE+CjwxMzZlM2MxMWQzYWE5ZmNhNzdjZmNkMGJhYWVkNTAwYT4gXSA+PgpzdGFy
+	dHhyZWYKNjkxMDcKJSVFT0YKMSAwIG9iago8PC9BdXRob3IgKG9sdCkvQ3JlYXRpb25E
+	YXRlIChEOjIwMTEwMjE1MDkyNzAwWikvQ3JlYXRvciAoT21uaUdyYWZmbGUgNS4yLjMp
+	L01vZERhdGUgKEQ6MjAxMTAyMTUxNDQ1MDBaKS9Qcm9kdWNlciA0NyAwIFIgL1RpdGxl
+	IChsYWJlbGluZyk+PgplbmRvYmoKeHJlZgoxIDEKMDAwMDA3MDI0NSAwMDAwMCBuIAp0
+	cmFpbGVyCjw8L0lEIFs8MTM2ZTNjMTFkM2FhOWZjYTc3Y2ZjZDBiYWFlZDUwMGE+IDwx
+	MzZlM2MxMWQzYWE5ZmNhNzdjZmNkMGJhYWVkNTAwYT5dIC9JbmZvIDEgMCBSIC9QcmV2
+	IDY5MTA3IC9Sb290IDMxIDAgUiAvU2l6ZSA0OT4+CnN0YXJ0eHJlZgo3MDQwMQolJUVP
+	Rgo=
+	</data>
+	<key>QuickLookThumbnail</key>
+	<data>
+	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
+	</data>
+	<key>ReadOnly</key>
+	<string>NO</string>
+	<key>RowAlign</key>
+	<integer>1</integer>
+	<key>RowSpacing</key>
+	<real>36</real>
+	<key>SheetTitle</key>
+	<string>Canvas 1</string>
+	<key>SmartAlignmentGuidesActive</key>
+	<string>YES</string>
+	<key>SmartDistanceGuidesActive</key>
+	<string>YES</string>
+	<key>UniqueID</key>
+	<integer>1</integer>
+	<key>UseEntirePage</key>
+	<false/>
+	<key>VPages</key>
+	<integer>1</integer>
+	<key>WindowInfo</key>
+	<dict>
+		<key>CurrentSheet</key>
+		<integer>0</integer>
+		<key>ExpandedCanvases</key>
+		<array>
+			<dict>
+				<key>name</key>
+				<string>Canvas 1</string>
+			</dict>
+		</array>
+		<key>Frame</key>
+		<string>{{614, 113}, {1033, 1065}}</string>
+		<key>ListView</key>
+		<true/>
+		<key>OutlineWidth</key>
+		<integer>142</integer>
+		<key>RightSidebar</key>
+		<false/>
+		<key>ShowRuler</key>
+		<true/>
+		<key>Sidebar</key>
+		<true/>
+		<key>SidebarWidth</key>
+		<integer>120</integer>
+		<key>VisibleRegion</key>
+		<string>{{0, 422.481}, {342.636, 347.287}}</string>
+		<key>Zoom</key>
+		<real>2.5799999237060547</real>
+		<key>ZoomValues</key>
+		<array>
+			<array>
+				<string>Canvas 1</string>
+				<real>2.5799999237060547</real>
+				<real>2.7300000190734863</real>
+			</array>
+		</array>
+	</dict>
+	<key>saveQuickLookFiles</key>
+	<string>YES</string>
+</dict>
+</plist>
diff --git a/doc/make.bat b/doc/make.bat
new file mode 100644
index 0000000..7069193
--- /dev/null
+++ b/doc/make.bat
@@ -0,0 +1,113 @@
+ at ECHO OFF
+
+REM Command file for Sphinx documentation
+
+set SPHINXBUILD=sphinx-build
+set BUILDDIR=_build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
+if NOT "%PAPER%" == "" (
+	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+	:help
+	echo.Please use `make ^<target^>` where ^<target^> is one of
+	echo.  html      to make standalone HTML files
+	echo.  dirhtml   to make HTML files named index.html in directories
+	echo.  pickle    to make pickle files
+	echo.  json      to make JSON files
+	echo.  htmlhelp  to make HTML files and a HTML help project
+	echo.  qthelp    to make HTML files and a qthelp project
+	echo.  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+	echo.  changes   to make an overview over all changed/added/deprecated items
+	echo.  linkcheck to check all external links for integrity
+	echo.  doctest   to run all doctests embedded in the documentation if enabled
+	goto end
+)
+
+if "%1" == "clean" (
+	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+	del /q /s %BUILDDIR%\*
+	goto end
+)
+
+if "%1" == "html" (
+	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+	goto end
+)
+
+if "%1" == "dirhtml" (
+	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+	goto end
+)
+
+if "%1" == "pickle" (
+	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+	echo.
+	echo.Build finished; now you can process the pickle files.
+	goto end
+)
+
+if "%1" == "json" (
+	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+	echo.
+	echo.Build finished; now you can process the JSON files.
+	goto end
+)
+
+if "%1" == "htmlhelp" (
+	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+	echo.
+	echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+	goto end
+)
+
+if "%1" == "qthelp" (
+	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+	echo.
+	echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\OmniscaleProxy.qhcp
+	echo.To view the help file:
+	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\OmniscaleProxy.ghc
+	goto end
+)
+
+if "%1" == "latex" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	echo.
+	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "changes" (
+	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+	echo.
+	echo.The overview file is in %BUILDDIR%/changes.
+	goto end
+)
+
+if "%1" == "linkcheck" (
+	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+	echo.
+	echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+	goto end
+)
+
+if "%1" == "doctest" (
+	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+	echo.
+	echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+	goto end
+)
+
+:end
diff --git a/doc/mapproxy_util.rst b/doc/mapproxy_util.rst
index 1d91de2..881f38a 100644
--- a/doc/mapproxy_util.rst
+++ b/doc/mapproxy_util.rst
@@ -506,6 +506,9 @@ Export types
 ``mbtile``:
     Exports tiles into a MBTile file.
 
+``arcgis``:
+    Exports tiles in a ArcGIS exploded cache directory structure.
+
 
 
 Examples
diff --git a/doc/seed.rst b/doc/seed.rst
index 6ce38e0..f6b0717 100644
--- a/doc/seed.rst
+++ b/doc/seed.rst
@@ -460,19 +460,19 @@ Example configuration
 
   views:
     germany:
-      ogr_datasource: 'shps/world_boundaries_m.shp'
-      ogr_where: 'CNTRY_NAME = "Germany"'
-      ogr_srs: 'EPSG:900913'
+      datasource: 'shps/world_boundaries_m.shp'
+      where: 'CNTRY_NAME = "Germany"'
+      srs: 'EPSG:900913'
       level: [0, 14]
       srs: ['EPSG:900913', 'EPSG:4326']
     switzerland:
-      polygons: 'polygons/SZ.txt'
-      polygons_srs: EPSG:900913
+      datasource: 'polygons/SZ.txt'
+      srs: EPSG:900913
       level: [0, 14]
       srs: ['EPSG:900913']
     austria:
       bbox: [9.36, 46.33, 17.28, 49.09]
-      bbox_srs: EPSG:4326
+      srs: EPSG:4326
       level: [0, 14]
       srs: ['EPSG:900913']
 
diff --git a/doc/services.rst b/doc/services.rst
index ae094cd..6d4c8b5 100644
--- a/doc/services.rst
+++ b/doc/services.rst
@@ -175,6 +175,7 @@ Full example
           address: Fakestreet 123
           city: Somewhere
           postcode: 12345
+          state: XYZ
           country: Germany
           phone: +49(0)000-000000-0
           fax: +49(0)000-000000-0
diff --git a/doc/sources.rst b/doc/sources.rst
index 0888248..77aaea5 100644
--- a/doc/sources.rst
+++ b/doc/sources.rst
@@ -6,6 +6,7 @@ Sources
 MapProxy supports the following sources:
 
 - :ref:`wms_label`
+- :ref:`arcgis_label`
 - :ref:`tiles_label`
 - :ref:`mapserver_label`
 - :ref:`mapnik_label`
@@ -139,7 +140,7 @@ This feature only works with :ref:`uncached sources <direct_source>`.
 ``supported_formats``
 ^^^^^^^^^^^^^^^^^^^^^
 
-Use this option to specify which image formats you source WMS supports. MapProxy only requests images in one of these formats, and will convert any image if it needs another format. If you do not supply this options, MapProxy assumes that the source supports all formats.
+Use this option to specify which image formats your source WMS supports. MapProxy only requests images in one of these formats, and will convert any image if it needs another format. If you do not supply this options, MapProxy assumes that the source supports all formats.
 
 ``image``
 ^^^^^^^^^
@@ -181,7 +182,7 @@ You can configure the following HTTP related options for this source:
 
 See :ref:`HTTP Options <http_ssl>` for detailed documentation.
 
-.. _wms_source-ssl_no_cert_checks:
+.. _wms_source_ssl_no_cert_checks:
 
 ``ssl_no_cert_checks``
 
@@ -253,6 +254,50 @@ Full example::
       transparent: true
 
 
+.. _arcgis_label:
+
+ArcGIS REST API
+"""
+
+Use the type ``arcgis`` for ArcGIS MapServer and ImageServer REST server endpoints. This
+source is based on :ref:`the WMS source <wms_label>` and most WMS options apply to the
+ArcGIS source too.
+
+``req``
+^^^^^^^
+
+This describes the ArcGIS source. The only required option is ``url``. You need to set ``transparent`` to ``true`` if you want to use this source as an overlay.
+::
+
+  req:
+    url: http://example.org/ArcGIS/rest/services/Imagery/MapService
+    layers: show: 0,1
+    transparent: true
+
+.. _example_configuration:
+
+Example configuration
+^^^^^^^^^^^^^^^^^^^^^
+
+Minimal example::
+
+  my_minimal_arcgissource:
+    type: arcgis
+    req:
+      url: http://example.org/ArcGIS/rest/services/Imagery/MapService
+
+Full example::
+
+  my_arcgissource:
+    type: arcgis
+    coverage:
+       polygons: GM.txt
+       polygons_srs: EPSG:900913
+    req:
+      url: http://example.org/ArcGIS/rest/services/Imagery/MapService
+      layers: show:0,1
+      transparent: true
+
 .. _tiles_label:
 
 Tiles
diff --git a/doc/test.html b/doc/test.html
new file mode 100644
index 0000000..963f327
--- /dev/null
+++ b/doc/test.html
@@ -0,0 +1,43 @@
+<html>
+<body onload="init();">
+
+<div style="width:500px; height:300px; background-color: #ddd; " id='map'>
+</div>
+
+  <script src="http://openlayers.org/api/OpenLayers.js"></script>
+  <script type="text/javascript">
+    var map;
+    function init(){
+        map = new OpenLayers.Map('map', {
+            projection: new OpenLayers.Projection("EPSG:900913")
+        });
+
+        var base_layer = new OpenLayers.Layer.OSM();
+
+        var overlay_layer = new OpenLayers.Layer.TMS(
+            'TMS street_layer',
+            'http://127.0.0.1:8080/tiles/',
+            {layername: 'street_layer_EPSG900913',
+             type: 'png', isBaseLayer: false}
+        );
+
+
+
+        // var overlay_layer = new OpenLayers.Layer.TMS('TMS street_layer', 'http://x.osm.omniscale.net/proxy/tiles/',
+        //     {layername: 'osm_roads_EPSG900913', type: 'png',
+        //      isBaseLayer: false
+        // });
+
+        var overlay_layer = new OpenLayers.Layer.OSM("OSM osm_layer",
+            "http://x.osm.omniscale.net/proxy/tiles/osm_roads_EPSG900913/${z}/${x}/${y}.png?origin=nw",
+            {isBaseLayer: false, tileOptions: {crossOriginKeyword: null}}
+        );
+
+        map.addLayer(base_layer);
+        map.addLayer(overlay_layer);
+        map.zoomToMaxExtent();
+    };
+  </script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/tutorial.rst b/doc/tutorial.rst
index 360c49d..9ec6978 100644
--- a/doc/tutorial.rst
+++ b/doc/tutorial.rst
@@ -8,14 +8,14 @@ You should have a :doc:`working MapProxy installation <install>`, if you want to
 Configuration format
 ====================
 
-The configuration of MapProxy uses the YAML format. YAML is a superset of JSON. That means every valid 
-JSON is also valid YAML. MapProxy uses no advanced features of YAML, so you could 
-even use JSON. YAML uses a more readable and user-friendly syntax. We encourage 
+The configuration of MapProxy uses the YAML format. YAML is a superset of JSON. That means every valid
+JSON is also valid YAML. MapProxy uses no advanced features of YAML, so you could
+even use JSON. YAML uses a more readable and user-friendly syntax. We encourage
 you to use it.
 
-If you are familiar with YAML you can skip to the next section. 
+If you are familiar with YAML you can skip to the next section.
 
-The YAML configuration consist of comments, dictionaries, lists, strings, numbers 
+The YAML configuration consist of comments, dictionaries, lists, strings, numbers
 and booleans.
 
 Comments
@@ -28,9 +28,9 @@ Any numerical value like ``12``, ``-4``, ``0``, and ``3.1415``.
 
 Strings
 -------
-Any string within single or double quotes. You can omit the quotes if the string 
+Any string within single or double quotes. You can omit the quotes if the string
 has no other meaning in YAML syntax. For example::
-  
+
     'foo'
     foo
     '43' # with quotes, otherwise it would be numeric
@@ -40,31 +40,31 @@ has no other meaning in YAML syntax. For example::
 Booleans
 --------
 True or false values::
-  
+
     yes
     true
     True
     no
     false
     False
-    
+
 
 List
 ----
-A list is a collection of other valid objects. There are two formats. The condensed 
+A list is a collection of other valid objects. There are two formats. The condensed
 form uses square brackets::
-  
+
     [1, 2, 3]
     [42, string, [another list with a string]]
 
 
-The block form requires every list item on a separate line, starting with 
+The block form requires every list item on a separate line, starting with
 ``-`` (dash and a blank)::
-  
+
     - 1
     - 2
     - 3
-    
+
     - 42
     - string
     - [another list]
@@ -78,7 +78,7 @@ There are two formats. The condensed form uses braces::
   {foo: 3, bar: baz}
 
 The block form requires every key value pair on a seperate line::
-  
+
     foo: 3
     bar: baz
 
@@ -100,25 +100,25 @@ Configuration Layout
 The MapProxy configuration is a dictionary, each key configures a different aspect
 of MapProxy. There are the following keys:
 
-  
-- ``services``:  This is the place to activate and configure MapProxy's services 
+
+- ``services``:  This is the place to activate and configure MapProxy's services
                  like WMS and TMS.
 
-- ``layers``: Configure the layers that MapProxy offers. Each layer can consist 
+- ``layers``: Configure the layers that MapProxy offers. Each layer can consist
               of multiple sources and caches.
 
-- ``sources``: 
+- ``sources``:
     Define where MapProxy can retrieve new data.
 
 - ``caches``:
     Here you can configure the internal caches.
 
-- ``grids``: MapProxy aligns all cached images (tiles) to a grid. Here you can define 
+- ``grids``: MapProxy aligns all cached images (tiles) to a grid. Here you can define
              that grid.
 
-- ``globals``:  Here you can define some internals of MapProxy and default values 
+- ``globals``:  Here you can define some internals of MapProxy and default values
                 that are used in the other configuration directives.
-  
+
 The order of the directives is not important, so you can organize it your way.
 
 
@@ -128,8 +128,8 @@ Example Configuration
 Configuring a Service
 ---------------------
 
-At first we need to :ref:`configure at least one service <services>`. To enable 
-a service, you have to include its name as a key in the `services` dictionary. 
+At first we need to :ref:`configure at least one service <services>`. To enable
+a service, you have to include its name as a key in the `services` dictionary.
 For example::
 
   services:
@@ -137,11 +137,11 @@ For example::
 
 
 Each service is a YAML dictionary, with the service type as the key. The dictionary
-can be empty, but you need to add the colon so that the configuration parser knows 
+can be empty, but you need to add the colon so that the configuration parser knows
 it's a dictionary.
 
 
-A service might accept more configuration options. The WMS service, for example, 
+A service might accept more configuration options. The WMS service, for example,
 takes a dictionary with metadata. This data is used in the capabilities documents.
 
 Here is an example with some contact information:
@@ -150,13 +150,13 @@ Here is an example with some contact information:
   :end-before: #end services
 
 `access_constraints` demonstrates how you can write a string over multiple lines,
-just indent every line the same way as the first. And remember, YAML does not 
+just indent every line the same way as the first. And remember, YAML does not
 accept tab characters, you must use space.
 
-For this tutorial we add another service called `demo`. This is a demo service 
-that lists all configured WMS and TMS layers. You can test each layer with a 
+For this tutorial we add another service called `demo`. This is a demo service
+that lists all configured WMS and TMS layers. You can test each layer with a
 simple OpenLayers client. So our configuration file should look like::
-  
+
   services:
     demo:
     wms:
@@ -173,28 +173,28 @@ a name and a type. Let's add a WMS source:
   :start-after: #start source
   :end-before: #end source
 
-In this example `test_wms` is the name of the source, you need this name later 
-to reference it. Most sources take more parameters – some are optional, some are 
-required. The type `wms` requires the `req` parameter that describes the WMS 
-request. You need to define at least a URL and the layer names, but you can add 
+In this example `test_wms` is the name of the source, you need this name later
+to reference it. Most sources take more parameters – some are optional, some are
+required. The type `wms` requires the `req` parameter that describes the WMS
+request. You need to define at least a URL and the layer names, but you can add
 more options like `transparent` or `format`.
 
 
 Adding a Layer
 --------------
 
-After defining a source we can use it to :ref:`create a layer <layers_section>` for the 
-MapProxy WMS. 
+After defining a source we can use it to :ref:`create a layer <layers_section>` for the
+MapProxy WMS.
 
-A layer requires a title, which will be used in the capabilities documents and 
+A layer requires a title, which will be used in the capabilities documents and
 a source. For this layer we want to use our `test_wms` data source:
 
 .. literalinclude:: tutorial.yaml
   :prepend: layers:
   :start-after: #start cascaded layer
   :end-before: #end cascaded layer
-  
-Now we have setuped MapProxy as cascading WMS. That means MapProxy only redirect 
+
+Now we have setuped MapProxy as cascading WMS. That means MapProxy only redirect
 requests to the WMS defined in `test_wms` data source.
 
 
@@ -209,7 +209,7 @@ That's it for the first configuration, you can now :ref:`start MapProxy <mapprox
 You can :download:`download the configuration <yaml/simple_conf.yaml>`.
 
 
-When you type `localhost:8080/demo/` in the URL of your webbrowser you should 
+When you type `localhost:8080/demo/` in the URL of your webbrowser you should
 see a demo site like shown below.
 
 .. image:: imgs/mapproxy-demo.png
@@ -220,16 +220,16 @@ Here you can see the capabilities of your configured service and watch it in act
 Adding a Cache
 --------------
 
-To speed up the source with MapProxy we :ref:`create a cache <caches>` for this 
+To speed up the source with MapProxy we :ref:`create a cache <caches>` for this
 source.
 
-Each cache needs to know where it can get new data and how it should be cached. 
+Each cache needs to know where it can get new data and how it should be cached.
 We define our `test_wms` as source for the cache. MapProxy splits images in
-small tiles and these tiles will be aligned to a grid. It also caches images in 
-different resolutions, like an image pyramid. You can define this image pyramid 
-in detail but we start with one of the default grid definitions of MapProxy. 
-`GLOBAL_GEODETIC` defines a grid that covers the whole world. It uses EPSG:4326 
-as the spatial reference system and aligns with the default grid and resolutions that OpenLayers 
+small tiles and these tiles will be aligned to a grid. It also caches images in
+different resolutions, like an image pyramid. You can define this image pyramid
+in detail but we start with one of the default grid definitions of MapProxy.
+`GLOBAL_GEODETIC` defines a grid that covers the whole world. It uses EPSG:4326
+as the spatial reference system and aligns with the default grid and resolutions that OpenLayers
 uses.
 
 Our cache configuration should now look like:
@@ -242,17 +242,17 @@ Our cache configuration should now look like:
 Adding a cached Layer
 ---------------------
 
-We can now use our defined cache as source for a layer. When the layer is 
-requested by a client, MapProxy looks in the cache for the requested data and only if 
+We can now use our defined cache as source for a layer. When the layer is
+requested by a client, MapProxy looks in the cache for the requested data and only if
 it hasn't cached the data yet, it requests the `test_wms` data source.
 
 The layer configuration should now look like:
-    
+
 .. literalinclude:: tutorial.yaml
   :prepend: layers:
   :start-after: #start cached layer
   :end-before: #end cached layer
-  
+
 You can :download:`download the configuration <yaml/cache_conf.yaml>`.
 
 
@@ -260,10 +260,10 @@ Defining Resolutions
 --------------------
 
 By default MapProxy caches traditional power-of-two image pyramids with a default
-number of cached resolutions of 20. The resolutions 
+number of cached resolutions of 20. The resolutions
 between each pyramid level doubles. If you want to change this, you can do so by
-:ref:`defining your own grid <grids>`. Fortunately MapProxy grids provied the 
-ability to inherit from an other grid. We let our grid inherit from the previously 
+:ref:`defining your own grid <grids>`. Fortunately MapProxy grids provied the
+ability to inherit from an other grid. We let our grid inherit from the previously
 used `GLOBAL_GEODETIC` grid and add five fixed resolutions to it.
 
 The grid configuration should look like:
@@ -272,20 +272,20 @@ The grid configuration should look like:
   :prepend: grids:
   :start-after: #start res grid
   :end-before: #end res grid
-  
+
 As you see, we used `base` to inherit from `GLOBAL_GEODETIC` and `res` to define
 our preferred resolutions. The resolutions are always in the unit of the SRS, in
 this case in degree per pixel. You can use the :ref:`MapProxy scales util <mapproxy_util_scales>`
 to convert between scales and resolutions.
 
-Instead of defining fixed resolutions, we can also define a factor that is used 
-to calculate the resolutions. The default value of this factor is 2, but you can 
-set it to each value you want. Just change `res` with `res_factor` and add your 
+Instead of defining fixed resolutions, we can also define a factor that is used
+to calculate the resolutions. The default value of this factor is 2, but you can
+set it to each value you want. Just change `res` with `res_factor` and add your
 preferred factor after it.
 
-A magical value of `res_factor` is **sqrt2**, the square root of two. It doubles 
+A magical value of `res_factor` is **sqrt2**, the square root of two. It doubles
 the number of cached resolutions, so you have 40 instead of 20 available resolutions.
-Every second resolution is identical to the power-of-two resolutions, so you can 
+Every second resolution is identical to the power-of-two resolutions, so you can
 use this layer not only in classic WMS clients with free zomming, but also in tile-based clients
 like OpenLayers which only request in these resolutions. Look at the :ref:`configuration
 examples for vector data for more information <cache_resolutions>`.
@@ -298,25 +298,25 @@ resolutions, but sometimes `GLOBAL_GEODETIC` grid is not useful because it cover
 the whole world and we want only a part of it. So let's see how to :ref:`define our own grid <grids>`.
 
 For this example we define a grid for Germany. We need a spatial reference system (`srs`)
-that match the region of Germany and a bounding box (`bbox`) around Germany to limit 
-the requestable aera. To make the specification of the `bbox` a little bit easier, 
+that match the region of Germany and a bounding box (`bbox`) around Germany to limit
+the requestable aera. To make the specification of the `bbox` a little bit easier,
 we put the `bbox_srs` parameter to the grid configuration. So we can define the
 `bbox` in EPSG:4326.
 
-The `grids` configuration is a dictionary and each grid configuration is identified 
+The `grids` configuration is a dictionary and each grid configuration is identified
 by its name. We call our grid `germany` and its configuration should look like:
 
 .. literalinclude:: tutorial.yaml
   :prepend: grids:
   :start-after: #start germany grid
   :end-before: #end germany grid
-  
+
 We have to replace `GLOBAL_GEODETIC` in the cache configuration with our
 `germany` grid. After that MapProxy caches all data in UTM32.
 
 MapProxy request the source in the projection of the grid. You can configure
 :ref:`the supported SRS for each WMS source <supported_srs>` and MapProxy
-takes care of any transformations if the `srs` of our grid is 
+takes care of any transformations if the `srs` of our grid is
 different from the data source.
 
 You can :download:`download the configuration <yaml/grid_conf.yaml>`.
@@ -324,31 +324,31 @@ You can :download:`download the configuration <yaml/grid_conf.yaml>`.
 Merging Multiple Layers
 -----------------------
 
-If you have two WMS and want to offer a single layer with data from both server, 
-you can combine these in one cache. MapProxy will combine the images before it stores 
-the tiles on disk. The sources should be defined from bottom to top and 
+If you have two WMS and want to offer a single layer with data from both server,
+you can combine these in one cache. MapProxy will combine the images before it stores
+the tiles on disk. The sources should be defined from bottom to top and
 all sources except the bottom need to be transparent.
 
-The code below is an example for configure MapProxy to combine two WMS in one 
+The code below is an example for configure MapProxy to combine two WMS in one
 cache and one layer:
 
 .. literalinclude:: tutorial.yaml
   :start-after: #start combined sources
   :end-before: #end combined sources
-  
+
 You can :download:`download the configuration <yaml/merged_conf.yaml>`.
 
 Coverages
 ---------
 
-Sometimes you don't want to provide the full data of a WMS in a layer. With 
-MapProxy you can define areas where data is available or where data you are 
-interested in is. MapProxy provides three ways to restrict the area of available 
-data: Bounding boxes, polygons and OGR datasource. To keep it simple, we only 
+Sometimes you don't want to provide the full data of a WMS in a layer. With
+MapProxy you can define areas where data is available or where data you are
+interested in is. MapProxy provides three ways to restrict the area of available
+data: Bounding boxes, polygons and OGR datasource. To keep it simple, we only
 discuss bounding boxes. For more informations about the other methods take
 a look at :ref:`the coverages documentation <coverages>`.
-To restrict the area with a bounding box, we have to define it in the coverage 
-option of the data source. The listing below restricts the requestable area to 
+To restrict the area with a bounding box, we have to define it in the coverage
+option of the data source. The listing below restricts the requestable area to
 Germany:
 
 .. literalinclude:: tutorial.yaml
@@ -374,15 +374,15 @@ Seeding
 
 Configuration
 ~~~~~~~~~~~~~
-MapProxy creates all tiles on demand. That means, only tiles requested once are 
-cached. Fortunately MapProxy comes with a command line script for pre-generating 
-all required tiles called ``mapproxy-seed``. It has its own configuration file called 
+MapProxy creates all tiles on demand. That means, only tiles requested once are
+cached. Fortunately MapProxy comes with a command line script for pre-generating
+all required tiles called ``mapproxy-seed``. It has its own configuration file called
 ``seed.yaml`` and a couple of options. We now create a config file for ``mapproxy-seed``.
 
-As all MapProxy configuration files it's notated in YAML. The mandatory option 
+As all MapProxy configuration files it's notated in YAML. The mandatory option
 is ``seeds``. Here you can create multiple seeding tasks that define what should be seeded.
-You can specify a list of caches for seeding with ``caches`` . The cache names 
-should match the names in your MapProxy configuration. If you have specified 
+You can specify a list of caches for seeding with ``caches`` . The cache names
+should match the names in your MapProxy configuration. If you have specified
 multiple grids for one cache in your MapProxy configuration, you can select these
 caches to seed. They must also comply with the caches in your MapProxy configuration.
 Furthermore you can limit the levels that should be seeded. If you want to seed only
@@ -395,7 +395,7 @@ define a coverage, we use a polygon file to determine the area we want to seed.
 .. literalinclude:: yaml/seed.yaml
 
 As you see in the ``coverages`` section the ``polygons`` option point to a
-text file. This text file contains polygons in Well-Known-Text (WKT) form. The third option tells 
+text file. This text file contains polygons in Well-Known-Text (WKT) form. The third option tells
 ``mapproxy-seed`` the ``srs`` of the WKT polygons.
 
 You can :download:`download the configuration <yaml/seed.yaml>` and the :download:`polygon file <GM.txt>`.
@@ -403,16 +403,16 @@ You can :download:`download the configuration <yaml/seed.yaml>` and the :downloa
 Start Seeding
 ~~~~~~~~~~~~~
 
-Now it's time to start seeding. ``mapproxy-seed`` has a couple 
+Now it's time to start seeding. ``mapproxy-seed`` has a couple
 of options. We have to use options ``-s`` to define our ``seed.yaml`` and ``-f``
 for our MapProxy configuration file. We also use the ``--dry-run`` option to see what
 MapProxy would do, without making any actual requests to our sources. A mis-configured seeding
 can take days or weeks, so you should keep an eye on the tile numbers the dry-run prints out.
 
 Run ``mapproxy-seed`` like::
-    
+
     mapproxy-seed -f mapproxy.yaml -s seed.yaml --dry-run
-    
+
 If you sure, that seeding works right, remove ``--dry-run``.
 
 What's next?
@@ -424,6 +424,6 @@ more ideas what MapProxy can do.
 MapProxy has lots of small features that might be useful for your projects, so it is a good idea
 to read the other chapters of the documentation after that.
 
-If you have any questions? We have a `mailing list and IRC channel <http://mapproxy.org/support.html>`_
+If you have any questions? We have a `mailing list and IRC channel <http://mapproxy.org/support>`_
 where you can get support.
 
diff --git a/mapproxy/cache/file.py b/mapproxy/cache/file.py
index 839e759..42aa4f5 100644
--- a/mapproxy/cache/file.py
+++ b/mapproxy/cache/file.py
@@ -45,19 +45,28 @@ class FileCache(TileCacheBase):
 
         if directory_layout == 'tc':
             self.tile_location = self._tile_location_tc
+            self.level_location = self._level_location
+        elif directory_layout == 'mp':
+            self.tile_location = self._tile_location_mp
+            self.level_location = self._level_location
         elif directory_layout == 'tms':
             self.tile_location = self._tile_location_tms
+            self.level_location = self._level_location_tms
         elif directory_layout == 'quadkey':
             self.tile_location = self._tile_location_quadkey
+            self.level_location = self._level_location
+        elif directory_layout == 'arcgis':
+            self.tile_location = self._tile_location_arcgiscache
+            self.level_location = self._level_location_arcgiscache
         else:
             raise ValueError('unknown directory_layout "%s"' % directory_layout)
 
-    def level_location(self, level):
+    def _level_location(self, level):
         """
         Return the path where all tiles for `level` will be stored.
 
         >>> c = FileCache(cache_dir='/tmp/cache/', file_ext='png')
-        >>> c.level_location(2)
+        >>> c._level_location(2)
         '/tmp/cache/02'
         """
         if isinstance(level, string_type):
@@ -81,7 +90,7 @@ class FileCache(TileCacheBase):
         """
         if tile.location is None:
             x, y, z = tile.coord
-            parts = (self.level_location(z),
+            parts = (self._level_location(z),
                      "%03d" % int(x / 1000000),
                      "%03d" % (int(x / 1000) % 1000),
                      "%03d" % (int(x) % 1000),
@@ -93,6 +102,34 @@ class FileCache(TileCacheBase):
             ensure_directory(tile.location)
         return tile.location
 
+    def _tile_location_mp(self, tile, create_dir=False):
+        """
+        Return the location of the `tile`. Caches the result as ``location``
+        property of the `tile`.
+
+        :param tile: the tile object
+        :param create_dir: if True, create all necessary directories
+        :return: the full filename of the tile
+
+        >>> from mapproxy.cache.tile import Tile
+        >>> c = FileCache(cache_dir='/tmp/cache/', file_ext='png', directory_layout='mp')
+        >>> c.tile_location(Tile((3, 4, 2))).replace('\\\\', '/')
+        '/tmp/cache/02/0000/0003/0000/0004.png'
+        >>> c.tile_location(Tile((12345678, 98765432, 22))).replace('\\\\', '/')
+        '/tmp/cache/22/1234/5678/9876/5432.png'
+        """
+        if tile.location is None:
+            x, y, z = tile.coord
+            parts = (self._level_location(z),
+                     "%04d" % int(x / 10000),
+                     "%04d" % (int(x) % 10000),
+                     "%04d" % int(y / 10000),
+                     "%04d.%s" % (int(y) % 10000, self.file_ext))
+            tile.location = os.path.join(*parts)
+        if create_dir:
+            ensure_directory(tile.location)
+        return tile.location
+
     def _tile_location_tms(self, tile, create_dir=False):
         """
         Return the location of the `tile`. Caches the result as ``location``
@@ -117,6 +154,9 @@ class FileCache(TileCacheBase):
             ensure_directory(tile.location)
         return tile.location
 
+    def _level_location_tms(self, z):
+        return self._level_location(str(z))
+
     def _tile_location_quadkey(self, tile, create_dir=False):
         """
         Return the location of the `tile`. Caches the result as ``location``
@@ -150,6 +190,32 @@ class FileCache(TileCacheBase):
             ensure_directory(tile.location)
         return tile.location
 
+    def _tile_location_arcgiscache(self, tile, create_dir=False):
+        """
+        Return the location of the `tile`. Caches the result as ``location``
+        property of the `tile`.
+
+        :param tile: the tile object
+        :param create_dir: if True, create all necessary directories
+        :return: the full filename of the tile
+
+        >>> from mapproxy.cache.tile import Tile
+        >>> from mapproxy.cache.file import FileCache
+        >>> c = FileCache(cache_dir='/tmp/cache/', file_ext='png', directory_layout='arcgis')
+        >>> c.tile_location(Tile((1234567, 87654321, 9))).replace('\\\\', '/')
+        '/tmp/cache/L09/R05397fb1/C0012d687.png'
+        """
+        if tile.location is None:
+            x, y, z = tile.coord
+            parts = (self._level_location_arcgiscache(z), 'R%08x' % y, 'C%08x.%s' % (x, self.file_ext))
+            tile.location = os.path.join(*parts)
+        if create_dir:
+            ensure_directory(tile.location)
+        return tile.location
+
+    def _level_location_arcgiscache(self, z):
+        return self._level_location('L%02d' % z)
+
     def _single_color_tile_location(self, color, create_dir=False):
         """
         >>> c = FileCache(cache_dir='/tmp/cache/', file_ext='png')
diff --git a/mapproxy/cache/mbtiles.py b/mapproxy/cache/mbtiles.py
index 492179d..ebc1687 100644
--- a/mapproxy/cache/mbtiles.py
+++ b/mapproxy/cache/mbtiles.py
@@ -198,29 +198,35 @@ class MBTilesCache(TileCacheBase):
             # all tiles loaded or coords are None
             return True
 
-        if len(coords) > 1000:
-            # SQLite is limited to 1000 args
-            raise CacheBackendError('cannot query SQLite for more than 333 tiles')
-
         if self.supports_timestamp:
-            stmt = "SELECT tile_column, tile_row, tile_data, last_modified FROM tiles WHERE "
+            stmt_base = "SELECT tile_column, tile_row, tile_data, last_modified FROM tiles WHERE "
         else:
-            stmt = "SELECT tile_column, tile_row, tile_data FROM tiles WHERE "
-        stmt += ' OR '.join(['(tile_column = ? AND tile_row = ? AND zoom_level = ?)'] * (len(coords)//3))
-
-        cursor = self.db.cursor()
-        cursor.execute(stmt, coords)
+            stmt_base = "SELECT tile_column, tile_row, tile_data FROM tiles WHERE "
 
         loaded_tiles = 0
-        for row in cursor:
-            loaded_tiles += 1
-            tile = tile_dict[(row[0], row[1])]
-            data = row[2]
-            tile.size = len(data)
-            tile.source = ImageSource(BytesIO(data))
-            if self.supports_timestamp:
-                tile.timestamp = sqlite_datetime_to_timestamp(row[3])
-        cursor.close()
+
+        # SQLite is limited to 1000 args -> split into multiple requests if more arguments are needed
+        while coords:
+            cur_coords = coords[:999]
+
+            stmt = stmt_base + ' OR '.join(
+                ['(tile_column = ? AND tile_row = ? AND zoom_level = ?)'] * (len(cur_coords) // 3))
+
+            cursor = self.db.cursor()
+            cursor.execute(stmt, cur_coords)
+
+            for row in cursor:
+                loaded_tiles += 1
+                tile = tile_dict[(row[0], row[1])]
+                data = row[2]
+                tile.size = len(data)
+                tile.source = ImageSource(BytesIO(data))
+                if self.supports_timestamp:
+                    tile.timestamp = sqlite_datetime_to_timestamp(row[3])
+            cursor.close()
+
+            coords = coords[999:]
+
         return loaded_tiles == len(tile_dict)
 
     def remove_tile(self, tile):
@@ -343,4 +349,3 @@ class MBTilesLevelCache(TileCacheBase):
             return True
         else:
             return level_cache.remove_level_tiles_before(level, timestamp)
-
diff --git a/mapproxy/cache/tile.py b/mapproxy/cache/tile.py
index 9f28118..95c55bc 100644
--- a/mapproxy/cache/tile.py
+++ b/mapproxy/cache/tile.py
@@ -196,13 +196,14 @@ class TileManager(object):
         return tile
 
 class TileCreator(object):
-    def __init__(self, tile_mgr, dimensions=None):
+    def __init__(self, tile_mgr, dimensions=None, image_merger=None):
         self.cache = tile_mgr.cache
         self.sources = tile_mgr.sources
         self.grid = tile_mgr.grid
         self.meta_grid = tile_mgr.meta_grid
         self.tile_mgr = tile_mgr
         self.dimensions = dimensions
+        self.image_merger = image_merger
 
     def is_cached(self, tile):
         """
@@ -254,8 +255,9 @@ class TileCreator(object):
             if not self.is_cached(tile):
                 source = self._query_sources(query)
                 if not source: return []
-                # call as_buffer to force conversion into cache format
-                source.as_buffer(self.tile_mgr.image_opts)
+                if self.tile_mgr.image_opts != source.image_opts:
+                    # call as_buffer to force conversion into cache format
+                    source.as_buffer(self.tile_mgr.image_opts)
                 source.image_opts = self.tile_mgr.image_opts
                 tile.source = source
                 tile.cacheable = source.cacheable
@@ -271,7 +273,7 @@ class TileCreator(object):
         Query all sources and return the results as a single ImageSource.
         Multiple sources will be merged into a single image.
         """
-        if len(self.sources) == 1:
+        if len(self.sources) == 1 and not self.image_merger:
             try:
                 return self.sources[0].get_map(query)
             except BlankImage:
@@ -290,8 +292,10 @@ class TileCreator(object):
             if img is not None:
                 imgs.append(img)
 
-        if not imgs: return None
-        return merge_images(imgs, size=query.size, image_opts=self.tile_mgr.image_opts)
+        merger = self.image_merger
+        if not merger:
+            merger = merge_images
+        return merger(imgs, size=query.size, image_opts=self.tile_mgr.image_opts)
 
     def _create_meta_tiles(self, meta_tiles):
         if self.tile_mgr.concurrent_tile_creators > 1 and len(meta_tiles) > 1:
diff --git a/mapproxy/client/arcgis.py b/mapproxy/client/arcgis.py
new file mode 100644
index 0000000..fc72200
--- /dev/null
+++ b/mapproxy/client/arcgis.py
@@ -0,0 +1,35 @@
+# This file is part of the MapProxy project.
+# Copyright (C) 2010 Omniscale <http://omniscale.de>
+#
+# 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.
+
+class ArcGISClient(object):
+    def __init__(self, request_template, http_client=None):
+        self.request_template = request_template
+        self.http_client = http_client
+
+    def retrieve(self, query, format):
+        url  = self._query_url(query, format)
+        resp = self.http_client.open(url)
+        return resp
+
+    def _query_url(self, query, format):
+        req = self.request_template.copy()
+        req.params.format = format
+        req.params.bbox = query.bbox
+        req.params.size = query.size
+        req.params.bboxSR = query.srs
+        req.params.imageSR = query.srs
+        req.params.transparent = query.transparent
+
+        return req.complete_url
diff --git a/mapproxy/compat/image.py b/mapproxy/compat/image.py
index d6378ec..8b7165f 100644
--- a/mapproxy/compat/image.py
+++ b/mapproxy/compat/image.py
@@ -19,14 +19,14 @@ __all__ = ['Image', 'ImageColor', 'ImageDraw', 'ImageFont', 'ImagePalette',
            'ImageChops', 'quantize']
 
 try:
-    from PIL import Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops
+    from PIL import Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops, ImageMath
     # prevent pyflakes warnings
-    Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops
+    Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops, ImageMath
 except ImportError:
     try:
-        import Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops
+        import Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops, ImageMath
         # prevent pyflakes warnings
-        Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops
+        Image, ImageColor, ImageDraw, ImageFont, ImagePalette, ImageChops, ImageMath
     except ImportError:
         # allow MapProxy to start without PIL (for tilecache only).
         # issue warning and raise ImportError on first use of
diff --git a/mapproxy/config/loader.py b/mapproxy/config/loader.py
index c6e6fad..4a7fb77 100644
--- a/mapproxy/config/loader.py
+++ b/mapproxy/config/loader.py
@@ -1,5 +1,5 @@
 # This file is part of the MapProxy project.
-# Copyright (C) 2010-2012 Omniscale <http://omniscale.de>
+# Copyright (C) 2010-2016 Omniscale <http://omniscale.de>
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -161,7 +161,10 @@ class ProxyConfiguration(object):
             if isinstance(layers_conf[0], dict) and len(layers_conf[0].keys()) == 1:
                 # looks like ordered legacy config
                 layers_conf = self._legacy_layers_conf_dict()
-            elif len(layers_conf) == 1 and ('layers' in layers_conf[0] or 'sources' in layers_conf[0]):
+            elif len(layers_conf) == 1 and (
+                'layers' in layers_conf[0]
+                or 'sources' in layers_conf[0]
+                or 'tile_sources' in layers_conf[0]):
                 # single root layer in list -> remove list
                 layers_conf = layers_conf[0]
             else:
@@ -186,7 +189,7 @@ class ProxyConfiguration(object):
             for layer in layers_conf.pop('layers'):
                 self._flatten_layers_conf_dict(layer, layers)
 
-        if 'sources' in layers_conf and 'name' in layers_conf:
+        if 'name' in layers_conf and ('sources' in layers_conf or 'tile_sources' in layers_conf):
             layers[layers_conf['name']] = layers_conf
 
         return layers
@@ -592,6 +595,40 @@ def resolution_range(conf):
                                 max_scale=conf.get('max_scale'))
 
 
+class ArcGISSourceConfiguration(SourceConfiguration):
+    source_type = ('arcgis',)
+    def __init__(self, conf, context):
+        SourceConfiguration.__init__(self, conf, context)
+
+    def source(self, params=None):
+        from mapproxy.client.arcgis import ArcGISClient
+        from mapproxy.source.arcgis import ArcGISSource
+        from mapproxy.srs import SRS
+        from mapproxy.request.arcgis import create_request
+
+        # Get the supported SRS codes and formats from the configuration.
+        supported_srs = [SRS(code) for code in self.conf.get("supported_srs", [])]
+        supported_formats = [file_ext(f) for f in self.conf.get("supported_formats", [])]
+
+        # Construct the parameters
+        if params is None:
+            params = {}
+
+        request_format = self.conf['req'].get('format')
+        if request_format:
+            params['format'] = request_format
+
+        request = create_request(self.conf["req"], params)
+        http_client, request.url = self.http_client(request.url)
+        coverage = self.coverage()
+
+        client = ArcGISClient(request, http_client)
+        image_opts = self.image_opts(format=params.get('format'))
+        return ArcGISSource(client, image_opts=image_opts, coverage=coverage,
+                            supported_srs=supported_srs,
+                            supported_formats=supported_formats or None)
+
+
 class WMSSourceConfiguration(SourceConfiguration):
     source_type = ('wms',)
 
@@ -893,6 +930,7 @@ class DebugSourceConfiguration(SourceConfiguration):
 
 source_configuration_types = {
     'wms': WMSSourceConfiguration,
+    'arcgis': ArcGISSourceConfiguration,
     'tile': TileSourceConfiguration,
     'debug': DebugSourceConfiguration,
     'mapserver': MapServerSourceConfiguration,
@@ -1106,6 +1144,92 @@ class CacheConfiguration(ConfigurationBase):
             image_opts=image_opts, tiled_only=tiled_only)
         return source
 
+    def _sources_for_grid(self, source_names, grid_conf, request_format):
+        sources = []
+        source_image_opts = []
+
+        # a cache can directly access source tiles when _all_ sources are caches too
+        # and when they have compatible grids by using tiled_only on the CacheSource
+        # check if all sources support tiled_only
+        tiled_only = True
+        for source_name in source_names:
+            if source_name in self.context.sources:
+                tiled_only = False
+                break
+            elif source_name in self.context.caches:
+                cache_conf = self.context.caches[source_name]
+                tiled_only = cache_conf.supports_tiled_only_access(
+                    params={'format': request_format},
+                    tile_grid=grid_conf.tile_grid(),
+                )
+                if not tiled_only:
+                    break
+
+        for source_name in source_names:
+            if source_name in self.context.sources:
+                source_conf = self.context.sources[source_name]
+                source = source_conf.source({'format': request_format})
+            elif source_name in self.context.caches:
+                cache_conf = self.context.caches[source_name]
+                source = cache_conf.source(
+                    params={'format': request_format},
+                    tile_grid=grid_conf.tile_grid(),
+                    tiled_only=tiled_only,
+                )
+            else:
+                raise ConfigurationError('unknown source %s' % source_name)
+            if source:
+                sources.append(source)
+                source_image_opts.append(source.image_opts)
+
+        return sources, source_image_opts
+
+    def _sources_for_band_merge(self, sources_conf, grid_conf, request_format):
+        from mapproxy.image.merge import BandMerger
+
+        source_names = []
+
+        for band, band_sources in iteritems(sources_conf):
+            for source in band_sources:
+                name = source['source']
+                if name in source_names:
+                    idx = source_names.index(name)
+                else:
+                    source_names.append(name)
+                    idx = len(source_names) - 1
+
+                source["src_idx"] = idx
+
+        sources, source_image_opts = self._sources_for_grid(
+            source_names=source_names,
+            grid_conf=grid_conf,
+            request_format=request_format,
+        )
+
+        if 'l' in sources_conf:
+            mode = 'L'
+        elif 'a' in sources_conf:
+            mode = 'RGBA'
+        else:
+            mode = 'RGB'
+
+        band_merger = BandMerger(mode=mode)
+        available_bands = {'r': 0, 'g': 1, 'b': 2, 'a': 3, 'l': 0}
+        for band, band_sources in iteritems(sources_conf):
+            band_idx = available_bands.get(band)
+            if band_idx is None:
+                raise ConfigurationError("unsupported band '%s' for cache %s"
+                    % (band, self.conf['name']))
+            for source in band_sources:
+                band_merger.add_ops(
+                    dst_band=band_idx,
+                    src_img=source['src_idx'],
+                    src_band=source['band'],
+                    factor=source.get('factor', 1.0),
+                )
+
+        return band_merger.merge, sources, source_image_opts
+
     @memoize
     def caches(self):
         from mapproxy.cache.dummy import DummyCache, DummyLocker
@@ -1136,43 +1260,21 @@ class CacheConfiguration(ConfigurationBase):
 
         renderd_address = self.context.globals.get_value('renderd.address', self.conf)
 
+        band_merger = None
         for grid_name, grid_conf in self.grid_confs():
-            sources = []
-            source_image_opts = []
-
-            # a cache can directly access source tiles when _all_ sources are caches too
-            # and when they have compatible grids by using tiled_only on the CacheSource
-            # check if all sources support tiled_only
-            tiled_only = True
-            for source_name in self.conf['sources']:
-                if source_name in self.context.sources:
-                    tiled_only = False
-                    break
-                elif source_name in self.context.caches:
-                    cache_conf = self.context.caches[source_name]
-                    tiled_only = cache_conf.supports_tiled_only_access(
-                        params={'format': request_format},
-                        tile_grid=grid_conf.tile_grid(),
-                    )
-                    if not tiled_only:
-                        break
-
-            for source_name in self.conf['sources']:
-                if source_name in self.context.sources:
-                    source_conf = self.context.sources[source_name]
-                    source = source_conf.source({'format': request_format})
-                elif source_name in self.context.caches:
-                    cache_conf = self.context.caches[source_name]
-                    source = cache_conf.source(
-                        params={'format': request_format},
-                        tile_grid=grid_conf.tile_grid(),
-                        tiled_only=tiled_only,
-                    )
-                else:
-                    raise ConfigurationError('unknown source %s' % source_name)
-                if source:
-                    sources.append(source)
-                    source_image_opts.append(source.image_opts)
+            if isinstance(self.conf['sources'], dict):
+                band_merger, sources, source_image_opts = self._sources_for_band_merge(
+                    self.conf['sources'],
+                    grid_conf=grid_conf,
+                    request_format=request_format,
+                )
+            else:
+                sources, source_image_opts = self._sources_for_grid(
+                    self.conf['sources'],
+                    grid_conf=grid_conf,
+                    request_format=request_format,
+                )
+
             if not sources:
                 from mapproxy.source import DummySource
                 sources = [DummySource()]
@@ -1210,9 +1312,14 @@ class CacheConfiguration(ConfigurationBase):
 
                 lock_timeout = self.context.globals.get_value('http.client_timeout', {})
                 locker = TileLocker(lock_dir, lock_timeout, identifier + '_renderd')
+                # TODO band_merger
                 tile_creator_class = partial(RenderdTileCreator, renderd_address,
                     priority=priority, tile_locker=locker)
 
+            else:
+                from mapproxy.cache.tile import TileCreator
+                tile_creator_class = partial(TileCreator, image_merger=band_merger)
+
             if isinstance(cache, DummyCache):
                 locker = DummyLocker()
             else:
@@ -1288,13 +1395,15 @@ class WMSLayerConfiguration(ConfigurationBase):
         if 'layers' in self.conf:
             layers_conf = self.conf['layers']
             for layer_conf in layers_conf:
-                layers.append(WMSLayerConfiguration(layer_conf, self.context).wms_layer())
+                lyr = WMSLayerConfiguration(layer_conf, self.context).wms_layer()
+                if lyr:
+                    layers.append(lyr)
 
         if 'sources' in self.conf or 'legendurl' in self.conf:
             this_layer = LayerConfiguration(self.conf, self.context).wms_layer()
 
         if not layers and not this_layer:
-            raise ValueError('wms layer requires sources and/or layers')
+            return None
 
         if not layers:
             layer = this_layer
@@ -1389,23 +1498,26 @@ class LayerConfiguration(ConfigurationBase):
         from mapproxy.cache.dummy import DummyCache
 
         sources = []
-        for source_name in self.conf.get('sources', []):
-            # we only support caches for tiled access...
-            if not source_name in self.context.caches:
-                if source_name in self.context.sources:
-                    src_conf = self.context.sources[source_name].conf
-                    # but we ignore debug layers for convenience
-                    if src_conf['type'] == 'debug':
-                        continue
-                    # and WMS layers with map: False (i.e. FeatureInfo only sources)
-                    if src_conf['type'] == 'wms' and src_conf.get('wms_opts', {}).get('map', True) == False:
-                        continue
-
+        if 'tile_sources' in self.conf:
+            sources = self.conf['tile_sources']
+        else:
+            for source_name in self.conf.get('sources', []):
+                # we only support caches for tiled access...
+                if not source_name in self.context.caches:
+                    if source_name in self.context.sources:
+                        src_conf = self.context.sources[source_name].conf
+                        # but we ignore debug layers for convenience
+                        if src_conf['type'] == 'debug':
+                            continue
+                        # and WMS layers with map: False (i.e. FeatureInfo only sources)
+                        if src_conf['type'] == 'wms' and src_conf.get('wms_opts', {}).get('map', True) == False:
+                            continue
+
+                    return []
+                sources.append(source_name)
+
+            if len(sources) > 1:
                 return []
-            sources.append(source_name)
-
-        if len(sources) > 1:
-            return []
 
         dimensions = self.dimensions()
 
@@ -1464,6 +1576,15 @@ def extents_for_srs(bbox_srs):
 
 
 class ServiceConfiguration(ConfigurationBase):
+    def __init__(self, conf, context):
+        if 'wms' in conf:
+            if conf['wms'] is None:
+                conf['wms'] = {}
+            if 'md' not in conf['wms']:
+                conf['wms']['md'] = {'title': 'MapProxy WMS'}
+
+        ConfigurationBase.__init__(self, conf, context)
+
     def services(self):
         services = []
         ows_services = []
@@ -1531,7 +1652,7 @@ class ServiceConfiguration(ConfigurationBase):
 
         md = self.context.services.conf.get('wms', {}).get('md', {}).copy()
         md.update(conf.get('md', {}))
-        layers = self.tile_layers(conf)
+        layers = self.tile_layers(conf, use_grid_names=True)
 
         kvp = conf.get('kvp')
         restful = conf.get('restful')
@@ -1567,6 +1688,8 @@ class ServiceConfiguration(ConfigurationBase):
         on_source_errors = self.context.globals.get_value('on_source_errors',
             conf, global_key='wms.on_source_errors')
         root_layer = self.context.wms_root_layer.wms_layer()
+        if not root_layer:
+            raise ConfigurationError("found no WMS layer")
         if not root_layer.title:
             # set title of root layer to WMS title
             root_layer.title = md.get('title')
@@ -1579,7 +1702,7 @@ class ServiceConfiguration(ConfigurationBase):
         for format in image_formats_names:
             opts = self.context.globals.image_options.image_opts({}, format)
             if opts.format in image_formats:
-                log.warn('duplicate mime-type for WMS image_formats: "%s" already configured',
+                log.warn('duplicate mime-type for WMS image_formats: "%s" already configured, will use last format',
                     opts.format)
             image_formats[opts.format] = opts
         info_types = conf.get('featureinfo_types')
@@ -1623,7 +1746,9 @@ class ServiceConfiguration(ConfigurationBase):
         md.update(conf.get('md', {}))
         layers = odict()
         for layer_name, layer_conf in iteritems(self.context.layers):
-            layers[layer_name] = layer_conf.wms_layer()
+            lyr = layer_conf.wms_layer()
+            if lyr:
+                layers[layer_name] = lyr
         tile_layers = self.tile_layers(conf)
         image_formats = self.context.globals.get_value('image_formats', conf, global_key='wms.image_formats')
         srs = self.context.globals.get_value('srs', conf, global_key='wms.srs')
diff --git a/mapproxy/config/spec.py b/mapproxy/config/spec.py
index 26b1e2d..9d1a214 100644
--- a/mapproxy/config/spec.py
+++ b/mapproxy/config/spec.py
@@ -283,6 +283,20 @@ ogc_service_md = {
     ],
 }
 
+band_source = {
+    required('source'): str(),
+    required('band'): int,
+    'factor': number(),
+}
+
+band_sources = {
+    'r': [band_source],
+    'g': [band_source],
+    'b': [band_source],
+    'a': [band_source],
+    'l': [band_source],
+}
+
 mapproxy_yaml_spec = {
     '__config_files__': anything(), # only used internaly
     'globals': {
@@ -336,7 +350,7 @@ mapproxy_yaml_spec = {
     },
     'caches': {
         anything(): {
-            required('sources'): [string_type],
+            required('sources'): one_of([string_type], band_sources),
             'name': str(),
             'grids': [str()],
             'cache_dir': str(),
@@ -464,6 +478,17 @@ mapproxy_yaml_spec = {
                 'use_mapnik2': bool(),
                 'scale_factor': number(),
             }),
+            'arcgis': combined(source_commons, {
+               required('req'): {
+                    required('url'): str(),
+                    'dpi': int(),
+                    'layers': str(),
+                    'transparent': bool(),
+                    'time': str()
+                },
+                'supported_srs': [str()],
+                'http': http_opts
+            }),
             'debug': {
             },
         })
@@ -480,6 +505,7 @@ mapproxy_yaml_spec = {
         },
         recursive([combined(scale_hints, {
             'sources': [string_type],
+            'tile_sources': [string_type],
             'name': str(),
             required('title'): string_type,
             'legendurl': str(),
diff --git a/mapproxy/config/validator.py b/mapproxy/config/validator.py
index da3ac92..74b9757 100644
--- a/mapproxy/config/validator.py
+++ b/mapproxy/config/validator.py
@@ -14,7 +14,7 @@
 # limitations under the License.
 
 import os.path
-from mapproxy.compat import string_type
+from mapproxy.compat import string_type, iteritems
 
 import logging
 log = logging.getLogger('mapproxy.config')
@@ -66,9 +66,10 @@ class Validator(object):
 
     def _validate_layer(self, layer):
         layer_sources = layer.get('sources', [])
+        tile_sources = layer.get('tile_sources', [])
         child_layers = layer.get('layers', [])
 
-        if not layer_sources and not child_layers:
+        if not layer_sources and not child_layers and not tile_sources:
             self.errors.append(
                 "Missing sources for layer '%s'" % layer.get('name')
             )
@@ -91,6 +92,19 @@ class Validator(object):
                 )
             )
 
+        for source in tile_sources:
+            if source in self.caches_conf:
+                self._validate_cache(source, self.caches_conf[source])
+                continue
+
+            self.errors.append(
+                "Tile source '%s' for layer '%s' not in cache section" % (
+                    source,
+                    layer['name']
+                )
+            )
+
+
     def _split_tagged_source(self, source_name):
         layers = None
         if ':' in str(source_name):
@@ -167,34 +181,15 @@ class Validator(object):
                 ))
 
     def _validate_cache(self, name, cache):
-        for cache_source in cache.get('sources', []):
-            cache_source, layers = self._split_tagged_source(cache_source)
-            if self.sources_conf and cache_source in self.sources_conf:
-                source = self.sources_conf.get(cache_source)
-                if (
-                    layers is not None and
-                    source.get('type') not in TAGGED_SOURCE_TYPES
-                ):
-                    self.errors.append(
-                        "Found tagged source '%s' in cache '%s' but tagged sources only "
-                        "supported for '%s' sources" % (
-                            cache_source,
-                            name,
-                            ', '.join(TAGGED_SOURCE_TYPES)
-                        )
-                    )
-                    continue
-                self._validate_source(cache_source, source, layers)
-                continue
-            if self.caches_conf and cache_source in self.caches_conf:
-                self._validate_cache(cache_source, self.caches_conf[cache_source])
-                continue
-            self.errors.append(
-                "Source '%s' for cache '%s' not found in config" % (
-                    cache_source,
-                    name
-                )
-            )
+        if isinstance(cache.get('sources', []), dict):
+            self._validate_bands(name, set(cache['sources'].keys()))
+            for band, confs  in iteritems(cache['sources']):
+                for conf in confs:
+                    band_source = conf['source']
+                    self._validate_cache_source(name, band_source)
+        else:
+            for cache_source in cache.get('sources', []):
+                self._validate_cache_source(name, cache_source)
 
         for grid in cache.get('grids', []):
             if grid not in self.known_grids:
@@ -204,3 +199,41 @@ class Validator(object):
                         name
                     )
                 )
+
+    def _validate_cache_source(self, cache_name, source_name):
+        source_name, layers = self._split_tagged_source(source_name)
+        if self.sources_conf and source_name in self.sources_conf:
+            source = self.sources_conf.get(source_name)
+            if (
+                layers is not None and
+                source.get('type') not in TAGGED_SOURCE_TYPES
+            ):
+                self.errors.append(
+                    "Found tagged source '%s' in cache '%s' but tagged sources only "
+                    "supported for '%s' sources" % (
+                        source_name,
+                        cache_name,
+                        ', '.join(TAGGED_SOURCE_TYPES)
+                    )
+                )
+                return
+            self._validate_source(source_name, source, layers)
+            return
+        if self.caches_conf and source_name in self.caches_conf:
+            self._validate_cache(source_name, self.caches_conf[source_name])
+            return
+        self.errors.append(
+            "Source '%s' for cache '%s' not found in config" % (
+                source_name,
+                cache_name
+            )
+        )
+
+    def _validate_bands(self, cache_name, bands):
+        if 'l' in bands and len(bands) > 1:
+            self.errors.append(
+                "Cannot combine 'l' band with bands in cache '%s'" % (
+                    cache_name
+                )
+            )
+
diff --git a/mapproxy/config_template/paster/tmp/.empty b/mapproxy/config_template/paster/tmp/.empty
new file mode 100644
index 0000000..e69de29
diff --git a/mapproxy/config_template/paster/var/.empty b/mapproxy/config_template/paster/var/.empty
new file mode 100644
index 0000000..e69de29
diff --git a/mapproxy/grid.py b/mapproxy/grid.py
index 4608d60..c905949 100644
--- a/mapproxy/grid.py
+++ b/mapproxy/grid.py
@@ -439,7 +439,7 @@ class TileGrid(object):
         tile_y = y/float(res*self.tile_size[1])
         return (int(math.floor(tile_x)), int(math.floor(tile_y)), level)
 
-    def flip_tile_coord(self, xxx_todo_changeme):
+    def flip_tile_coord(self, tile_coord):
         """
         Flip the tile coord on the y-axis. (Switch between bottom-left and top-left
         origin.)
@@ -450,7 +450,7 @@ class TileGrid(object):
         >>> grid.flip_tile_coord((1, 3, 2))
         (1, 0, 2)
         """
-        (x, y, z) = xxx_todo_changeme
+        (x, y, z) = tile_coord
         return (x, self.grid_sizes[z][1]-1-y, z)
 
     def supports_access_with_origin(self, origin):
diff --git a/mapproxy/image/__init__.py b/mapproxy/image/__init__.py
index c599bf4..42572c7 100644
--- a/mapproxy/image/__init__.py
+++ b/mapproxy/image/__init__.py
@@ -273,7 +273,9 @@ def img_has_transparency(img):
 def img_to_buf(img, image_opts):
     defaults = {}
     image_opts = image_opts.copy()
-    if image_opts.mode and img.mode[0] == 'I' and img.mode != image_opts.mode:
+
+    # convert I or L images to target mode
+    if image_opts.mode and img.mode[0] in ('I', 'L') and img.mode != image_opts.mode:
         img = img.convert(image_opts.mode)
 
     if (image_opts.colors is None and base_config().image.paletted
@@ -290,7 +292,8 @@ def img_to_buf(img, image_opts):
             image_opts.colors = None
             image_opts.transparent = False
 
-    if image_opts.colors:
+    # quantize if colors is set, but not if we already have a paletted image
+    if image_opts.colors and not (img.mode == 'P' and len(img.getpalette()) == image_opts.colors*3):
         quantizer = None
         if 'quantizer' in image_opts.encoding_options:
             quantizer = image_opts.encoding_options['quantizer']
@@ -318,7 +321,13 @@ def quantize(img, colors=256, alpha=False, defaults=None, quantizer=None):
     if hasattr(Image, 'FASTOCTREE') and quantizer in (None, 'fastoctree'):
         if not alpha:
             img = img.convert('RGB')
-        img = img.quantize(colors, Image.FASTOCTREE)
+        try:
+            if img.mode == 'P':
+                # quantize with alpha does not work with P images
+                img = img.convert('RGBA')
+            img = img.quantize(colors, Image.FASTOCTREE)
+        except ValueError:
+            pass
     else:
         if alpha and img.mode == 'RGBA':
             img.load() # split might fail if image is not loaded
diff --git a/mapproxy/image/merge.py b/mapproxy/image/merge.py
index 20aa58b..7b40a2c 100644
--- a/mapproxy/image/merge.py
+++ b/mapproxy/image/merge.py
@@ -1,5 +1,5 @@
 # This file is part of the MapProxy project.
-# Copyright (C) 2010,2012 Omniscale <http://omniscale.de>
+# Copyright (C) 2010-2016 Omniscale <http://omniscale.de>
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -18,7 +18,8 @@ Image and tile manipulation (transforming, merging, etc).
 """
 from __future__ import with_statement
 
-from mapproxy.compat.image import Image, ImageColor, ImageChops
+from collections import namedtuple
+from mapproxy.compat.image import Image, ImageColor, ImageChops, ImageMath
 from mapproxy.compat.image import has_alpha_composite_support
 from mapproxy.image import BlankImageSource, ImageSource
 from mapproxy.image.opts import create_image, ImageOptions
@@ -92,7 +93,7 @@ class LayerMerger(object):
                     alpha = img.split()[3]
                     alpha = ImageChops.multiply(
                         alpha,
-                        ImageChops.constant(alpha, 255 * opacity)
+                        ImageChops.constant(alpha, int(255 * opacity))
                     )
                     img.putalpha(alpha)
                 if img.mode == 'RGB':
@@ -124,6 +125,100 @@ class LayerMerger(object):
 
         return ImageSource(result, size=size, image_opts=image_opts, cacheable=cacheable)
 
+
+band_ops = namedtuple("band_ops", ["dst_band", "src_img", "src_band", "factor"])
+
+class BandMerger(object):
+    """
+    Merge bands from multiple sources into one image.
+
+       sources:
+           r: [{source: nir_cache, band: 0, factor: 0.4}, {source: dop_cache, band: 0, factor: 0.6}]
+           g: [{source: dop_cache, band: 2}]
+           b: [{source: dop_cache, band: 1}]
+
+       sources:
+           l: [
+               {source: dop_cache, band: 0, factor: 0.6},
+               {source: dop_cache, band: 1, factor: 0.3},
+               {source: dop_cache, band: 2, factor: 0.1},
+           ]
+    """
+    def __init__(self, mode=None):
+        self.ops = []
+        self.cacheable = True
+        self.mode = mode
+        self.max_band = {}
+
+    def add_ops(self, dst_band, src_img, src_band, factor=1.0):
+        self.ops.append(band_ops(
+            dst_band=dst_band,
+            src_img=src_img,
+            src_band=src_band,
+            factor=factor,
+         ))
+        # store highest requested band index for each source
+        self.max_band[src_img] = max(self.max_band.get(src_img, 0), src_band)
+
+    def merge(self, sources, image_opts, size=None, bbox=None, bbox_srs=None, coverage=None):
+        if not sources:
+            return BlankImageSource(size=size, image_opts=image_opts, cacheable=True)
+
+        if size is None:
+            size = sources[0].size
+
+        # load src bands
+        src_img_bands = []
+        for i, layer_img in enumerate(sources):
+            img = layer_img.as_image()
+
+            if i not in self.max_band:
+                # do not split img if not requested by any op
+                src_img_bands.append(None)
+                continue
+
+            if self.max_band[i] == 3 and img.mode != 'RGBA':
+                # convert to RGBA if band idx 3 is requestd (e.g. P or RGB src)
+                img = img.convert('RGBA')
+            elif img.mode == 'P':
+                img = img.convert('RGB')
+            src_img_bands.append(img.split())
+
+        tmp_mode = self.mode
+
+        if tmp_mode == 'RGBA':
+            result_bands = [None, None, None, None]
+        elif tmp_mode == 'RGB':
+            result_bands = [None, None, None]
+        elif tmp_mode == 'L':
+            result_bands = [None]
+        else:
+            raise ValueError("unsupported destination mode %s", image_opts.mode)
+
+        for op in self.ops:
+            chan = src_img_bands[op.src_img][op.src_band]
+            if op.factor != 1.0:
+                chan = ImageMath.eval("convert(int(float(a) * %f), 'L')" % op.factor, a=chan)
+                if result_bands[op.dst_band] is None:
+                    result_bands[op.dst_band] = chan
+                else:
+                    result_bands[op.dst_band] = ImageChops.add(
+                        result_bands[op.dst_band],
+                        chan,
+                    )
+            else:
+                result_bands[op.dst_band] = chan
+
+        for i, b in enumerate(result_bands):
+            if b is None:
+                # band not set
+                b = Image.new("L", size, 255 if i == 3 else 0)
+                result_bands[i] = b
+
+        result = Image.merge(tmp_mode, result_bands)
+        return ImageSource(result, size=size, image_opts=image_opts)
+
+
 def merge_images(images, image_opts, size=None):
     """
     Merge multiple images into one.
diff --git a/mapproxy/image/opts.py b/mapproxy/image/opts.py
index 3489d54..09d3ba8 100644
--- a/mapproxy/image/opts.py
+++ b/mapproxy/image/opts.py
@@ -41,6 +41,21 @@ class ImageOptions(object):
                 options.append('%s=%r' % (k, v))
         return 'ImageOptions(%s)' % (', '.join(options), )
 
+    def __eq__(self, other):
+        if not isinstance(other, ImageOptions):
+            return NotImplemented
+
+        return (
+                self.transparent == other.transparent
+            and self.opacity == other.opacity
+            and self.resampling == other.resampling
+            and self.format == other.format
+            and self.mode == other.mode
+            and self.bgcolor == other.bgcolor
+            and self.colors == other.colors
+            and self.encoding_options == other.encoding_options
+        )
+
     def copy(self):
         return copy.copy(self)
 
diff --git a/mapproxy/image/transform.py b/mapproxy/image/transform.py
index eb117d3..9b15998 100644
--- a/mapproxy/image/transform.py
+++ b/mapproxy/image/transform.py
@@ -119,7 +119,8 @@ class ImageTransformer(object):
             result = src_img.as_image().crop((minx, miny,
                                               minx+dst_size[0], miny+dst_size[1]))
         else:
-            result = src_img.as_image().transform(dst_size, Image.EXTENT,
+            img = img_for_resampling(src_img.as_image(), image_opts.resampling)
+            result = img.transform(dst_size, Image.EXTENT,
                                                   (minx, miny, maxx, maxy),
                                                   image_filter[image_opts.resampling])
         return ImageSource(result, size=dst_size, image_opts=image_opts)
@@ -152,7 +153,8 @@ class ImageTransformer(object):
         for quad in griddify(dst_quad, mesh_div):
             meshes.append(dst_quad_to_src(quad))
 
-        result = src_img.as_image().transform(dst_size, Image.MESH, meshes,
+        img = img_for_resampling(src_img.as_image(), image_opts.resampling)
+        result = img.transform(dst_size, Image.MESH, meshes,
                                               image_filter[image_opts.resampling])
         return ImageSource(result, size=dst_size, image_opts=image_opts)
 
@@ -173,6 +175,15 @@ class ImageTransformer(object):
                 self.src_srs == self.dst_srs and
                 bbox_equals(src_bbox, dst_bbox, xres/10, yres/10))
 
+def img_for_resampling(img, resampling):
+    """
+    Convert P images to RGB(A) for non-NEAREST resamplings.
+    """
+    resampling = image_filter[resampling]
+    if img.mode == 'P' and resampling != Image.NEAREST:
+        img.load() # load to get actual palette mode
+        img = img.convert(img.palette.mode)
+    return img
 
 def griddify(quad, steps):
     """
diff --git a/mapproxy/request/arcgis.py b/mapproxy/request/arcgis.py
new file mode 100644
index 0000000..6acae96
--- /dev/null
+++ b/mapproxy/request/arcgis.py
@@ -0,0 +1,125 @@
+# This file is part of the MapProxy project.
+# Copyright (C) 2010 Omniscale <http://omniscale.de>
+#
+# 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.
+
+from functools import partial as fp
+from mapproxy.request.base import RequestParams, BaseRequest
+from mapproxy.compat import string_type
+
+
+class ArcGISExportRequestParams(RequestParams):
+    """
+    Supported params f, bbox(required), size, dpi, imageSR, bboxSR, format, layerDefs,
+    layers, transparent, time, layerTimeOptions.
+
+    @param layers: Determines which layers appear on the exported map. There are
+                   four ways to specify layers: show, hide, include, exclude.
+                   (ex show:1,2)
+    """
+    def _get_format(self):
+        """
+        The requested format as string (w/o any 'image/', 'text/', etc prefixes)
+        """
+        return self["format"]
+    def _set_format(self, format):
+        self["format"] = format.rsplit("/")[-1]
+    format = property(_get_format, _set_format)
+    del _get_format
+    del _set_format
+
+    def _get_bbox(self):
+        """
+        ``bbox`` as a tuple (minx, miny, maxx, maxy).
+        """
+        if 'bbox' not in self.params or self.params['bbox'] is None:
+            return None
+        points = [float(val) for val in self.params['bbox'].split(',')]
+        return tuple(points[:4])
+    def _set_bbox(self, value):
+        if value is not None and not isinstance(value, string_type):
+            value = ','.join(str(x) for x in value)
+        self['bbox'] = value
+    bbox = property(_get_bbox, _set_bbox)
+    del _get_bbox
+    del _set_bbox
+
+    def _get_size(self):
+        """
+        Size of the request in pixel as a tuple (width, height),
+        or None if one is missing.
+        """
+        if 'size' not in self.params or self.params['size'] is None:
+            return None
+        dim = [float(val) for val in self.params['size'].split(',')]
+        return tuple(dim[:2])
+    def _set_size(self, value):
+        if value is not None and not isinstance(value, string_type):
+            value = ','.join(str(x) for x in value)
+        self['size'] = value
+    size = property(_get_size, _set_size)
+    del _get_size
+    del _set_size
+
+    def _get_srs(self, key):
+        return self.params.get(key, None)
+    def _set_srs(self, srs, key):
+        if hasattr(srs, 'srs_code'):
+            code = srs.srs_code
+        else:
+            code = srs
+        self.params[key] = code.rsplit(":", 1)[-1]
+
+    bboxSR = property(fp(_get_srs, key="bboxSR"), fp(_set_srs, key="bboxSR"))
+    imageSR = property(fp(_get_srs, key="imageSR"), fp(_set_srs, key="imageSR"))
+    del _get_srs
+    del _set_srs
+
+
+class ArcGISRequest(BaseRequest):
+    request_params = ArcGISExportRequestParams
+    fixed_params = {"f": "image"}
+
+    def __init__(self, param=None, url='', validate=False, http=None):
+        BaseRequest.__init__(self, param, url, validate, http)
+
+        self.url = self.url.rstrip("/")
+        if not self.url.endswith("export"):
+            self.url += "/export"
+
+    def copy(self):
+        return self.__class__(param=self.params.copy(), url=self.url)
+
+    @property
+    def query_string(self):
+        params = self.params.copy()
+        for key, value in self.fixed_params.items():
+            params[key] = value
+        return params.query_string
+
+
+def create_request(req_data, param):
+    req_data = req_data.copy()
+
+    # Pop the URL off the request data.
+    url = req_data['url']
+    del req_data['url']
+
+    if 'format' in param:
+        req_data['format'] = param['format']
+
+    if 'transparent' in req_data:
+        # Convert boolean to a string.
+        req_data['transparent'] = str(req_data['transparent'])
+
+    return ArcGISRequest(url=url, param=req_data)
diff --git a/mapproxy/script/export.py b/mapproxy/script/export.py
index c1effd4..32c47d1 100644
--- a/mapproxy/script/export.py
+++ b/mapproxy/script/export.py
@@ -209,6 +209,12 @@ def export_command(args=None):
             'type': 'file',
             'directory': options.dest,
         }
+    elif options.type == 'arcgis':
+        cache_conf['cache'] = {
+            'type': 'file',
+            'directory_layout': 'arcgis',
+            'directory': options.dest,
+        }
     elif options.type in ('tms', None): # default
         cache_conf['cache'] = {
             'type': 'file',
diff --git a/mapproxy/script/grids.py b/mapproxy/script/grids.py
index 43d0c96..667c392 100644
--- a/mapproxy/script/grids.py
+++ b/mapproxy/script/grids.py
@@ -15,6 +15,7 @@
 
 from __future__ import print_function, division
 
+import math
 import sys
 import optparse
 
@@ -81,20 +82,16 @@ def display_grid(grid_conf, coverage=None):
 
         if coverage:
             coverage_tiles = total_tiles * area_ratio
-            print("        %.2d:  %r,%s# %6d * %-6d = %8s (%s)" % (level, res, ' '*spaces, tiles_in_x, tiles_in_y, human_readable_number(total_tiles), human_readable_number(coverage_tiles)))
+            print("        %.2d:  %r,%s# %6d * %-6d = %10s (%s)" % (level, res, ' '*spaces, tiles_in_x, tiles_in_y, human_readable_number(total_tiles), human_readable_number(coverage_tiles)))
         else:
-            print("        %.2d:  %r,%s# %6d * %-6d = %8s" % (level, res, ' '*spaces, tiles_in_x, tiles_in_y, human_readable_number(total_tiles)))
+            print("        %.2d:  %r,%s# %6d * %-6d = %10s" % (level, res, ' '*spaces, tiles_in_x, tiles_in_y, human_readable_number(total_tiles)))
 
 def human_readable_number(num):
-    if num > 10**12:
-        return '%.3fT' % (num/10**12)
-    if num > 10**9:
-        return '%.3fG' % (num/10**9)
     if num > 10**6:
-        return '%.3fM' % (num/10**6)
-    if num > 10**3:
-        return '%.3fK' % (num/10**3)
-    return '%d' % num
+        return '%7.2fM' % (num/10**6)
+    if math.isnan(num):
+        return '?'
+    return '%d' % int(num)
 
 def display_grids_list(grids):
     for grid_name in sorted(grids.keys()):
@@ -143,26 +140,26 @@ def grids_command(args=None):
         print('ERROR: invalid configuration (see above)', file=sys.stderr)
         sys.exit(2)
 
-    if options.show_all or options.grid_name:
-        grids = proxy_configuration.grids
-    else:
-        caches = proxy_configuration.caches
-        grids = {}
-        for cache in caches.values():
-            grids.update(cache.grid_confs())
-        grids = dict(grids)
-
-    if options.grid_name:
-        options.grid_name = options.grid_name.lower()
-        # ignore case for keys
-        grids = dict((key.lower(), value) for (key, value) in iteritems(grids))
-        if not grids.get(options.grid_name, False):
-            print('grid not found: %s' % (options.grid_name,))
-            sys.exit(1)
+    with local_base_config(proxy_configuration.base_config):
+        if options.show_all or options.grid_name:
+            grids = proxy_configuration.grids
+        else:
+            caches = proxy_configuration.caches
+            grids = {}
+            for cache in caches.values():
+                grids.update(cache.grid_confs())
+            grids = dict(grids)
+
+        if options.grid_name:
+            options.grid_name = options.grid_name.lower()
+            # ignore case for keys
+            grids = dict((key.lower(), value) for (key, value) in iteritems(grids))
+            if not grids.get(options.grid_name, False):
+                print('grid not found: %s' % (options.grid_name,))
+                sys.exit(1)
 
-    coverage = None
-    if options.coverage and options.seed_config:
-        with local_base_config(proxy_configuration.base_config):
+        coverage = None
+        if options.coverage and options.seed_config:
             try:
                 seed_conf = load_seed_tasks_conf(options.seed_config, proxy_configuration)
             except SeedConfigurationError as e:
@@ -176,16 +173,16 @@ def grids_command(args=None):
             coverage = seed_conf.coverage(options.coverage)
             coverage.name = options.coverage
 
-    elif (options.coverage and not options.seed_config) or (not options.coverage and options.seed_config):
-        print('--coverage and --seed-conf can only be used together')
-        sys.exit(1)
+        elif (options.coverage and not options.seed_config) or (not options.coverage and options.seed_config):
+            print('--coverage and --seed-conf can only be used together')
+            sys.exit(1)
 
-    if options.list_grids:
-        display_grids_list(grids)
-    elif options.grid_name:
-        display_grids({options.grid_name: grids[options.grid_name]}, coverage=coverage)
-    else:
-        display_grids(grids, coverage=coverage)
+        if options.list_grids:
+            display_grids_list(grids)
+        elif options.grid_name:
+            display_grids({options.grid_name: grids[options.grid_name]}, coverage=coverage)
+        else:
+            display_grids(grids, coverage=coverage)
 
 
 
diff --git a/mapproxy/script/util.py b/mapproxy/script/util.py
index 585f51f..5449aaf 100755
--- a/mapproxy/script/util.py
+++ b/mapproxy/script/util.py
@@ -85,9 +85,26 @@ def serve_develop_command(args):
     except ConfigurationError:
         sys.exit(2)
 
+    extra_files = app.config_files.keys()
+
+    if options.debug:
+        try:
+            from repoze.profile import ProfileMiddleware
+            app = ProfileMiddleware(
+               app,
+               log_filename='/tmp/mapproxy_profile.log',
+               discard_first_request=True,
+               flush_at_shutdown=True,
+               path='/__profile__',
+               unwind=False,
+            )
+            print('Installed profiler at /__profile__')
+        except ImportError:
+            pass
+
     run_simple(host, port, app, use_reloader=True, processes=1,
         threaded=True, passthrough_errors=True,
-        extra_files=app.config_files.keys())
+        extra_files=extra_files)
 
 def serve_multiapp_develop_command(args):
     parser = optparse.OptionParser("usage: %prog serve-multiapp-develop [options] projects/")
diff --git a/mapproxy/seed/script.py b/mapproxy/seed/script.py
index 9644fd2..d01369e 100644
--- a/mapproxy/seed/script.py
+++ b/mapproxy/seed/script.py
@@ -48,7 +48,7 @@ class SeedScript(object):
     parser = OptionParser(usage)
     parser.add_option("-q", "--quiet",
                       action="count", dest="quiet", default=0,
-                      help="don't print status messages to stdout")
+                      help="reduce number of messages to stdout, repeat to disable progress output")
     parser.add_option("-s", "--seed-conf",
                       dest="seed_file", default=None,
                       help="seed configuration")
diff --git a/mapproxy/seed/util.py b/mapproxy/seed/util.py
index 4898998..c375c8e 100644
--- a/mapproxy/seed/util.py
+++ b/mapproxy/seed/util.py
@@ -28,6 +28,7 @@ except ImportError:
     import pickle
 
 from mapproxy.layer import map_extent_from_grid
+from mapproxy.util.fs import write_atomic
 
 import logging
 log = logging.getLogger(__name__)
@@ -78,7 +79,7 @@ class ETA(object):
             return 'N/A'
         try:
             return time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(timestamp))
-        except ValueError:
+        except (ValueError, OSError): # OSError since Py 3.3
             # raised when time is out of range (e.g. year >2038)
             return 'N/A'
 
@@ -121,11 +122,7 @@ class ProgressStore(object):
 
     def write(self):
         try:
-            with open(self.filename + '.tmp', 'wb') as f:
-                f.write(pickle.dumps(self.status))
-                f.flush()
-                os.fsync(f.fileno())
-            os.rename(self.filename + '.tmp', self.filename)
+            write_atomic(self.filename, pickle.dumps(self.status))
         except (IOError, OSError) as ex:
             log.error('unable to write seed progress: %s', ex)
 
diff --git a/mapproxy/service/templates/demo/wmts_demo.html b/mapproxy/service/templates/demo/wmts_demo.html
index 4d302f0..91d7ff1 100644
--- a/mapproxy/service/templates/demo/wmts_demo.html
+++ b/mapproxy/service/templates/demo/wmts_demo.html
@@ -22,7 +22,8 @@ function init(){
     projection: new OpenLayers.Projection('{{srs}}'),
     resolutions: [{{', '.join(str(r) for r in resolutions)}}],
     units: '{{units}}',
-    maxExtent: new OpenLayers.Bounds({{', '.join(str(s) for s in layer.grid.bbox)}})
+    maxExtent: new OpenLayers.Bounds({{', '.join(str(s) for s in layer.grid.bbox)}}),
+    tileSize: new OpenLayers.Size({{', '.join(str(s) for s in layer.grid.tile_size)}})
     };
 
     map = new OpenLayers.Map('map', mapOptions);
diff --git a/mapproxy/service/wms.py b/mapproxy/service/wms.py
index 177d9c8..95e2e67 100644
--- a/mapproxy/service/wms.py
+++ b/mapproxy/service/wms.py
@@ -34,7 +34,7 @@ from mapproxy.image.message import attribution_image, message_image
 from mapproxy.layer import BlankImage, MapQuery, InfoQuery, LegendQuery, MapError, LimitedLayer
 from mapproxy.layer import MapBBOXError, merge_layer_extents, merge_layer_res_ranges
 from mapproxy.util import async
-from mapproxy.util.py import cached_property
+from mapproxy.util.py import cached_property, reraise
 from mapproxy.util.coverage import load_limited_to
 from mapproxy.util.ext.odict import odict
 from mapproxy.template import template_loader, bunch, recursive_bunch
@@ -552,7 +552,7 @@ class LayerRenderer(object):
                 else:
                     ex = layer_task.exception
                     async_pool.shutdown(True)
-                    raise ex[1]
+                    reraise(ex)
         except SourceError as ex:
             raise RequestError(ex.args[0], request=self.request)
 
@@ -575,7 +575,7 @@ class LayerRenderer(object):
                     errors.append(ex[1].args[0])
                 else:
                     async_pool.shutdown(True)
-                    raise ex[1]
+                    reraise(ex)
 
         if render_layers and not rendered:
             errors = '\n'.join(errors)
diff --git a/mapproxy/service/wmts.py b/mapproxy/service/wmts.py
index 8f7a15b..59c251e 100644
--- a/mapproxy/service/wmts.py
+++ b/mapproxy/service/wmts.py
@@ -29,6 +29,7 @@ from mapproxy.service.base import Server
 from mapproxy.response import Response
 from mapproxy.exception import RequestError
 from mapproxy.util.coverage import load_limited_to
+from mapproxy.util.ext.odict import odict
 
 from mapproxy.template import template_loader, bunch
 env = {'bunch': bunch}
@@ -50,7 +51,7 @@ class WMTSServer(Server):
 
     def _matrix_sets(self, layers):
         sets = {}
-        layers_grids = {}
+        layers_grids = odict()
         for layer in layers.values():
             grid = layer.grid
             if not grid.supports_access_with_origin('nw'):
@@ -62,8 +63,8 @@ class WMTSServer(Server):
                     sets[grid.name] = TileMatrixSet(grid)
                 except AssertionError:
                     continue # TODO
-            layers_grids.setdefault(layer.name, {})[grid.name] = layer
-        wmts_layers = {}
+            layers_grids.setdefault(layer.name, odict())[grid.name] = layer
+        wmts_layers = odict()
         for layer_name, layers in layers_grids.items():
             wmts_layers[layer_name] = WMTSTileLayer(layers)
         return wmts_layers, sets.values()
diff --git a/mapproxy/source/arcgis.py b/mapproxy/source/arcgis.py
new file mode 100644
index 0000000..18015d0
--- /dev/null
+++ b/mapproxy/source/arcgis.py
@@ -0,0 +1,26 @@
+# This file is part of the MapProxy project.
+# Copyright (C) 2010 Omniscale <http://omniscale.de>
+#
+# 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.
+
+from mapproxy.source.wms import WMSSource
+
+import logging
+log = logging.getLogger('mapproxy.source.arcgis')
+
+
+class ArcGISSource(WMSSource):
+    def __init__(self, client, image_opts=None, coverage=None,
+                 supported_srs=None, supported_formats=None):
+        WMSSource.__init__(self, client, image_opts=image_opts, coverage=coverage,
+                           supported_srs=supported_srs, supported_formats=supported_formats)
diff --git a/mapproxy/test/http.py b/mapproxy/test/http.py
index 00f12bb..5295f43 100644
--- a/mapproxy/test/http.py
+++ b/mapproxy/test/http.py
@@ -190,7 +190,7 @@ def mock_http_handler(requests_responses, unordered=False, query_comparator=None
                 query_actual = set(query_to_dict(self.query_data).items())
                 query_expected = set(query_to_dict(req['path']).items())
                 self.server.assertions.append(
-                    RequestMissmatch('requests params differ', query_actual - query_expected, query_expected - query_actual)
+                    RequestMissmatch('requests params differ', query_expected - query_actual, query_actual - query_expected)
                 )
                 self.server.shutdown = True
             if 'req_assert_function' in req:
diff --git a/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemddataset.xml b/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemddataset.xml
deleted file mode 100644
index 85ebd77..0000000
--- a/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemddataset.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-26-APR-2011 1.0.1 Conformity element:
-                    Restricted allowed citations to "INSPIRE interoperability of spatial data sets and services", according to the MD regulation,
-                    requirements for the conformity element (page 17 of the MD regulation).
-                  Inspire Themes:
-                    Removed leading blank for German, Bulgarian, Czech and Danish translations
--->
-<SpatialDataSet xmlns="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/common/1.0 http://inspire.ec.europa.eu/schemas/common/1.0/common.xsd">
-	<ResourceTitle>resourcetitle2</ResourceTitle>
-	<ResourceAbstract>resourceabstract</ResourceAbstract>
-	<ResourceType>dataset</ResourceType>
-	<ResourceLocator>
-		<URL>http://resourcelocator1.com</URL>
-		<MediaType>text/html</MediaType>
-	</ResourceLocator>
-	<ResourceLocator>
-		<URL>http://resourcelocator2.com</URL>
-		<MediaType>text/html</MediaType>
-	</ResourceLocator>
-	<MandatoryKeyword xsi:type="inspireTheme_eng">
-		<OriginatingControlledVocabulary>
-			<Title>GEMET - INSPIRE themes</Title>
-			<DateOfPublication>2008-06-01</DateOfPublication>
-		</OriginatingControlledVocabulary>
-		<KeywordValue>Addresses</KeywordValue>
-	</MandatoryKeyword>
-	<Keyword>
-		<KeywordValue>satellite imagery</KeywordValue>
-	</Keyword>
-	<GeographicBoundingBox>
-		<East>1.11</East>
-		<West>-2.22</West>
-		<North>3.33</North>
-		<South>-4.44</South>
-	</GeographicBoundingBox>
-	<GeographicBoundingBox>
-		<East>1.11</East>
-		<West>-2.22</West>
-		<North>3.33</North>
-		<South>-4.44</South>
-	</GeographicBoundingBox>
-	<TemporalReference>
-		<TemporalExtent>
-			<IntervalOfDates>
-				<StartingDate>2010-11-11T00:00:00</StartingDate>
-				<EndDate>2010-11-19T00:00:00</EndDate>
-			</IntervalOfDates>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<TemporalExtent>
-			<IndividualDate>2010-11-19T00:00:00</IndividualDate>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<TemporalExtent>
-			<IndividualDate>2010-11-19T10:20:30</IndividualDate>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<TemporalExtent>
-			<IntervalOfDates>
-				<StartingDate>2011-11-11T00:00:00</StartingDate>
-				<EndDate>2011-11-19T00:00:00</EndDate>
-			</IntervalOfDates>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfCreation>2000-11-22</DateOfCreation>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfLastRevision>2010-11-19T10:20:30</DateOfLastRevision>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfPublication>2020-11-19T00:00:00</DateOfPublication>
-	</TemporalReference>
-	<SpatialResolution>
-		<EquivalentScale>10</EquivalentScale>
-	</SpatialResolution>
-	<SpatialResolution abstract="testabstractres2">
-		<EquivalentScale>2</EquivalentScale>
-	</SpatialResolution>
-	<SpatialResolution abstract="testabstractres3">
-		<ResolutionDistance>333</ResolutionDistance>
-		<UnitOfMeasure>myuom</UnitOfMeasure>
-	</SpatialResolution>
-	<Conformity>
-				<Specification xsi:type="citationInspireInteroperabilityRegulation_eng">
-					<Title>COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services</Title>
-					<DateOfPublication>2010-12-08</DateOfPublication>
-					<URI>OJ:L:2010:323:0011:0102:EN:PDF</URI>
-					<ResourceLocator>
-						<URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:EN:PDF</URL>
-						<MediaType>application/pdf</MediaType>
-					</ResourceLocator>
-				</Specification>
-		<Degree>notEvaluated</Degree>
-	</Conformity>
-	<ConditionsForAccessAndUse>no conditions apply</ConditionsForAccessAndUse>
-	<LimitationsOnPublicAccess>copyright</LimitationsOnPublicAccess>
-	<ResponsibleOrganisation>
-		<ResponsibleParty>
-			<OrganisationName>resppartyorgname1</OrganisationName>
-			<EmailAddress>jrc1 at jrc.it</EmailAddress>
-		</ResponsibleParty>
-		<ResponsiblePartyRole>pointOfContact</ResponsiblePartyRole>
-	</ResponsibleOrganisation>
-	<MetadataPointOfContact>
-		<OrganisationName>MDPointOfContact1</OrganisationName>
-		<EmailAddress>MDPointOfContac12 at orgemail1.com</EmailAddress>
-	</MetadataPointOfContact>
-	<MetadataDate>2010-11-10</MetadataDate>
-	<MetadataLanguage>eng</MetadataLanguage>
-	<UniqueResourceIdentifier metadataURL="ciao">
-		<Code>code1</Code>
-		<Namespace>namespace1</Namespace>
-	</UniqueResourceIdentifier>
-	<UniqueResourceIdentifier>
-		<Code>code2</Code>
-		<Namespace>namespace2</Namespace>
-	</UniqueResourceIdentifier>
-	<ResourceLanguage>por</ResourceLanguage>
-	<ResourceLanguage>ita</ResourceLanguage>
-	<TopicCategory>biota</TopicCategory>
-	<TopicCategory>inlandWaters</TopicCategory>
-	<Lineage>lineage statement</Lineage>
-</SpatialDataSet>
\ No newline at end of file
diff --git a/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdseries.xml b/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdseries.xml
deleted file mode 100644
index a9b9499..0000000
--- a/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdseries.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-26-APR-2011 1.0.1 Conformity element:
-                    Restricted allowed citations to "INSPIRE interoperability of spatial data sets and services", according to the MD regulation,
-                    requirements for the conformity element (page 17 of the MD regulation).
-                  Inspire Themes:
-                    Removed leading blank for German, Bulgarian, Czech and Danish translations
--->
-<SpatialDataSetSeries xmlns="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/common/1.0 http://inspire.ec.europa.eu/schemas/common/1.0/common.xsd">
-	<ResourceTitle>EDGAR V4.1 Activity Data</ResourceTitle>
-	<ResourceAbstract>The Emissions Database for Global Atmospheric Research (EDGAR) provides global past and present day Human Activity Data classified following the EDGAR Source Categories classification</ResourceAbstract>
-	<ResourceType>series</ResourceType>
-	<ResourceLocator>
-		<URL>http://edgar.jrc.ec.europa.eu/index.php</URL>
-		<MediaType>text/html</MediaType>
-	</ResourceLocator>
-	<MandatoryKeyword xsi:type="inspireTheme_eng">
-		<OriginatingControlledVocabulary>
-			<Title>GEMET - INSPIRE themes</Title>
-			<DateOfPublication>2008-06-01</DateOfPublication>
-		</OriginatingControlledVocabulary>
-		<KeywordValue>Energy resources</KeywordValue>
-	</MandatoryKeyword>
-	<Keyword>
-		<KeywordValue>satellite imagery</KeywordValue>
-	</Keyword>
-	<GeographicBoundingBox>
-		<East>180.00</East>
-		<West>-180.00</West>
-		<North>80.00</North>
-		<South>-80.00</South>
-	</GeographicBoundingBox>
-	<TemporalReference>
-		<TemporalExtent>
-			<IntervalOfDates>
-				<StartingDate>1970-01-01T00:00:00</StartingDate>
-				<EndDate>2005-12-31T00:00:00</EndDate>
-			</IntervalOfDates>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfCreation>2010-05-01</DateOfCreation>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfPublication>2010-05-01</DateOfPublication>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfLastRevision>2010-05-01</DateOfLastRevision>
-	</TemporalReference>
-	<SpatialResolution>
-		<EquivalentScale>1</EquivalentScale>
-	</SpatialResolution>
-	<SpatialResolution>
-		<ResolutionDistance>222</ResolutionDistance>
-		<UnitOfMeasure>myuom</UnitOfMeasure>
-	</SpatialResolution>
-	<Conformity>
-				<Specification xsi:type="citationInspireInteroperabilityRegulation_eng">
-					<Title>COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services</Title>
-					<DateOfPublication>2010-12-08</DateOfPublication>
-					<URI>OJ:L:2010:323:0011:0102:EN:PDF</URI>
-					<ResourceLocator>
-						<URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:EN:PDF</URL>
-						<MediaType>application/pdf</MediaType>
-					</ResourceLocator>
-				</Specification>
-		<Degree>notEvaluated</Degree>
-	</Conformity>
-	<Conformity>
-		<Specification>
-			<Title>spec2</Title>
-			<DateOfCreation>2010-11-09</DateOfCreation>
-		</Specification>
-		<Degree>notConformant</Degree>
-	</Conformity>
-	<Conformity>
-		<Specification>
-			<Title>spec2</Title>
-			<DateOfCreation>2010-11-09</DateOfCreation>
-		</Specification>
-		<Degree>conformant</Degree>
-	</Conformity>
-	<ConditionsForAccessAndUse>no conditions apply</ConditionsForAccessAndUse>
-	<LimitationsOnPublicAccess>free access provided a credentials required 2</LimitationsOnPublicAccess>
-	<ResponsibleOrganisation>
-		<ResponsibleParty>
-			<OrganisationName>EC/JRC/IES</OrganisationName>
-			<EmailAddress>greet.maenhout at jrc.ec.europa.eu</EmailAddress>
-		</ResponsibleParty>
-		<ResponsiblePartyRole>principalInvestigator</ResponsiblePartyRole>
-	</ResponsibleOrganisation>
-	<ResponsibleOrganisation>
-		<ResponsibleParty>
-			<OrganisationName>EC/JRC/IES</OrganisationName>
-			<EmailAddress>greet.maenhout at jrc.ec.europa.eu</EmailAddress>
-		</ResponsibleParty>
-		<ResponsiblePartyRole>pointOfContact</ResponsiblePartyRole>
-	</ResponsibleOrganisation>
-	<MetadataPointOfContact>
-		<OrganisationName>EC/JRC/IES</OrganisationName>
-		<EmailAddress>valerio.pagliari at jrc.it</EmailAddress>
-	</MetadataPointOfContact>
-	<MetadataDate>2010-10-11</MetadataDate>
-	<MetadataLanguage>eng</MetadataLanguage>
-	<UniqueResourceIdentifier>
-		<Code>edgar.jrc.ec.europa.eu</Code>
-		<Namespace>http://edgar.jrc.ec.europa.eu</Namespace>
-	</UniqueResourceIdentifier>
-	<ResourceLanguage>eng</ResourceLanguage>
-	<TopicCategory>environment</TopicCategory>
-	<Lineage>IEA for Energy statistics
-FAO for agricoltural data
-</Lineage>
-</SpatialDataSetSeries>
\ No newline at end of file
diff --git a/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdservice.xml b/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdservice.xml
deleted file mode 100644
index 7cbeb47..0000000
--- a/mapproxy/test/schemas/inspire/common/1.0/examples/inspireresourcemdservice.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-26-APR-2011 1.0.1 Conformity element:
-                    Restricted allowed citations to "INSPIRE interoperability of spatial data sets and services", according to the MD regulation,
-                    requirements for the conformity element (page 17 of the MD regulation).
-                  Inspire Themes:
-                    Removed leading blank for German, Bulgarian, Czech and Danish translations
--->
-<SpatialDataService xmlns="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/common/1.0 http://inspire.ec.europa.eu/schemas/common/1.0/common.xsd">
-<!--31-JAN-2011 INSPIRE schema updated to 0.19 (Removed language dependent schema implementations)-->
-	<ResourceTitle>Europe Mapping Service based on the Image2000 European mosaic (multispectral)</ResourceTitle>
-	<ResourceAbstract>Map Service of a European Mosaic. The mosaic is a harmonised dataset and is based on the individual orthorectified scenes from the Image 2000 project. This service covers the Landsat 7 multispectral bands 3, 2 and 1.</ResourceAbstract>
-	<ResourceType>service</ResourceType>
-	<ResourceLocator>
-		<URL>http://edgar.jrc.ec.europa.eu/index.php</URL>
-		<MediaType>text/html</MediaType>
-	</ResourceLocator>
-	<MandatoryKeyword>
-		<KeywordValue>humanGeographicViewer</KeywordValue>
-	</MandatoryKeyword>
-	<Keyword>
-		<KeywordValue>satellite imagery</KeywordValue>
-	</Keyword>
-	<TemporalReference>
-		<TemporalExtent>
-			<IntervalOfDates>
-				<StartingDate>2010-11-11T00:00:00</StartingDate>
-				<EndDate>2010-11-19T00:00:00</EndDate>
-			</IntervalOfDates>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<TemporalExtent>
-			<IndividualDate>2010-11-19T00:00:00</IndividualDate>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<TemporalExtent>
-			<IntervalOfDates>
-				<StartingDate>2011-11-11T00:00:00</StartingDate>
-				<EndDate>2011-11-19T00:00:00</EndDate>
-			</IntervalOfDates>
-		</TemporalExtent>
-	</TemporalReference>
-	<TemporalReference>
-		<DateOfCreation>2005-12-12</DateOfCreation>
-	</TemporalReference>
-	<SpatialResolution abstract="Map Service of a European Mosaic. The mosaic is a harmonised dataset and is based on the individual orthorectified scenes from the Image 2000 project. This service covers the Landsat 7 multispectral bands 3, 2 and 1.">
-		<EquivalentScale>1</EquivalentScale>
-	</SpatialResolution>
-	<Conformity>
-				<Specification xsi:type="citationInspireInteroperabilityRegulation_eng">
-					<Title>COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services</Title>
-					<DateOfPublication>2010-12-08</DateOfPublication>
-					<URI>OJ:L:2010:323:0011:0102:EN:PDF</URI>
-					<ResourceLocator>
-						<URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:EN:PDF</URL>
-						<MediaType>application/pdf</MediaType>
-					</ResourceLocator>
-				</Specification>
-		<Degree>notConformant</Degree>
-	</Conformity>
-	<ConditionsForAccessAndUse>no conditions apply</ConditionsForAccessAndUse>
-	<ConditionsForAccessAndUse>no conditions apply</ConditionsForAccessAndUse>
-	<LimitationsOnPublicAccess>no limitations</LimitationsOnPublicAccess>
-	<ResponsibleOrganisation>
-		<ResponsibleParty>
-			<OrganisationName>(R Service)Spatial Data Infrastructure Unit, Institute for Environment & Sustainability, Joint Research Centre, European Commission</OrganisationName>
-			<EmailAddress>(r)image2000 at jrc.ec.europa.eu</EmailAddress>
-		</ResponsibleParty>
-		<ResponsiblePartyRole>resourceProvider</ResponsiblePartyRole>
-	</ResponsibleOrganisation>
-	<ResponsibleOrganisation>
-		<ResponsibleParty>
-			<OrganisationName>(R Service)Spatial Data Infrastructure Unit, Institute for Environment & Sustainability, Joint Research Centre, European Commission</OrganisationName>
-			<EmailAddress>(r)image2000 at jrc.ec.europa.eu</EmailAddress>
-		</ResponsibleParty>
-		<ResponsiblePartyRole>publisher</ResponsiblePartyRole>
-	</ResponsibleOrganisation>
-	<MetadataPointOfContact>
-		<OrganisationName>MC Spatial Data Infrastructure Unit, Institute for Environment & Sustainability, Joint Research Centre, European Commission</OrganisationName>
-		<EmailAddress>(MC)image2000 at jrc.ec.europa.eu</EmailAddress>
-	</MetadataPointOfContact>
-	<MetadataDate>2010-06-15</MetadataDate>
-	<MetadataLanguage>eng</MetadataLanguage>
-	<CoupledResource>
-		<Code>sfdsdf</Code>
-		<Namespace>adsasd</Namespace>
-	</CoupledResource>
-	<SpatialDataServiceType>view</SpatialDataServiceType>
-</SpatialDataService>
diff --git a/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/WMS_Image2000GetCapabilities_InspireSchema.xml b/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/WMS_Image2000GetCapabilities_InspireSchema.xml
deleted file mode 100644
index 4ccd8fe..0000000
--- a/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/WMS_Image2000GetCapabilities_InspireSchema.xml
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-26-APR-2011 1.0.1 Conformity element:
-                    Restricted allowed citations to "INSPIRE interoperability of spatial data sets and services", according to the MD regulation,
-                    requirements for the conformity element (page 17 of the MD regulation).
-                  Inspire Themes:
-                    Removed leading blank for German, Bulgarian, Czech and Danish translations
-17-MAR-2011 Changed alias inspire_common and inspire_vs
-18-FEB-2011 Changed encoding for Language Elements in Network Services
-16-FEB-2011 Introduced namespace "common"
-                    Removed unnecessary namespace references
-20-DEC-2010 Restored ins_com alias
-16-DEC-2010 Switched to INSPIRE Schema
--->
-<WMS_Capabilities version="1.3.0" xmlns="http://www.opengis.net/wms" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://inspire.ec.europa.eu/schemas/inspire_vs/1.0 http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd">
-	<Service>
-		<Name>WMS</Name>
-		<Title>Europe Mapping Service based on the Image2000 European mosaic (panchromatic)</Title>
-		<Abstract>Map Service of a European Mosaic. The mosaic is a harmonised dataset and is based on the individual orthorectified scenes from the Image 2000 project. This service is based on the panchromatic sensor of the Landsat 7 satellite.</Abstract>
-		<KeywordList>
-			<Keyword vocabulary="ISO">humanGeographicViewer</Keyword>
-			<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
-			<Keyword>satellite imagery</Keyword>
-			<Keyword vocabulary="GEMET - INSPIRE themes">orthoimagery</Keyword>
-		</KeywordList>
-		<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://ags-sdi-public.jrc.ec.europa.eu/arcgis/services/image2000_pan/Mapserver/WMSServer?request=GetCapabilities&service=wms&version=1.3.0"/>
-		<ContactInformation>
-			<ContactPersonPrimary>
-				<ContactPerson>Hildegard Gerlach</ContactPerson>
-				<ContactOrganization>Spatial Data Infrastructure Unit, Institute for Environment & Sustainability, Joint Research Centre, European Commission</ContactOrganization>
-			</ContactPersonPrimary>
-			<ContactPosition>pointOfContact</ContactPosition>
-			<ContactAddress>
-				<AddressType>Postal</AddressType>
-				<Address>Via Fermi 2749</Address>
-				<City>Ispra</City>
-				<StateOrProvince>VA</StateOrProvince>
-				<PostCode>21027</PostCode>
-				<Country>Italy</Country>
-			</ContactAddress>
-			<ContactVoiceTelephone>+390332785638</ContactVoiceTelephone>
-			<ContactFacsimileTelephone>+390332785638</ContactFacsimileTelephone>
-			<ContactElectronicMailAddress>hildegard.gerlach at jrc.ec.europa.eu</ContactElectronicMailAddress>
-		</ContactInformation>
-		<Fees>no conditions apply</Fees>
-		<AccessConstraints>no limitations</AccessConstraints>
-		<MaxWidth>2048</MaxWidth>
-		<MaxHeight>2048</MaxHeight>
-	</Service>
-	<Capability>
-		<Request>
-			<GetCapabilities>
-				<Format>application/vnd.ogc.wms_xml</Format>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://ags-sdi-public.jrc.ec.europa.eu/arcgis/services/image2000_pan/MapServer/WMSServer"/>
-						</Get>
-					</HTTP>
-				</DCPType>
-			</GetCapabilities>
-			<GetMap>
-				<Format>image/bmp</Format>
-				<Format>image/jpeg</Format>
-				<Format>image/tiff</Format>
-				<Format>image/png</Format>
-				<Format>image/gif</Format>
-				<Format>image/svg+xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://ags-sdi-public.jrc.ec.europa.eu/arcgis/services/image2000_pan/MapServer/WMSServer"/>
-						</Get>
-					</HTTP>
-				</DCPType>
-			</GetMap>
-			<GetFeatureInfo>
-				<Format>application/vnd.ogc.wms_xml</Format>
-				<Format>text/xml</Format>
-				<Format>text/html</Format>
-				<Format>text/plain</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://ags-sdi-public.jrc.ec.europa.eu/arcgis/services/image2000_pan/MapServer/WMSServer"/>
-						</Get>
-					</HTTP>
-				</DCPType>
-			</GetFeatureInfo>
-		</Request>
-		<Exception>
-			<Format>application/vnd.ogc.se_xml</Format>
-			<Format>application/vnd.ogc.se_inimage</Format>
-			<Format>application/vnd.ogc.se_blank</Format>
-			<Format>text/xml</Format>
-			<Format>XML</Format>
-		</Exception>
-		<inspire_vs:ExtendedCapabilities>
-			<inspire_common:ResourceLocator>
-				<inspire_common:URL>http://image2000.jrc.ec.europa.eu</inspire_common:URL>
-				<inspire_common:MediaType>text/html</inspire_common:MediaType>
-			</inspire_common:ResourceLocator>
-			<inspire_common:ResourceLocator>
-				<inspire_common:URL>http://ags-sdi-public.jrc.ec.europa.eu/arcgis/services/image2000_pan/Mapserver/WMSServer?request=GetCapabilities&service=wms&version=1.3.0</inspire_common:URL>
-				<inspire_common:MediaType>application/vnd.ogc.wms_xml</inspire_common:MediaType>
-			</inspire_common:ResourceLocator>
-			<inspire_common:ResourceType>service</inspire_common:ResourceType>
-			<inspire_common:TemporalReference>
-				<inspire_common:DateOfCreation>2005-12-12</inspire_common:DateOfCreation>
-				<inspire_common:DateOfLastRevision>2005-12-13</inspire_common:DateOfLastRevision>
-				<inspire_common:DateOfPublication>2005-12-13</inspire_common:DateOfPublication>
-			</inspire_common:TemporalReference>
-			<inspire_common:TemporalReference>
-				<inspire_common:TemporalExtent>
-					<inspire_common:IndividualDate>2005-01-01T00:00:00</inspire_common:IndividualDate>
-					<inspire_common:IntervalOfDates>
-						<inspire_common:StartingDate>2005-01-01T00:00:00</inspire_common:StartingDate>
-						<inspire_common:EndDate>2005-12-31T00:00:00</inspire_common:EndDate>
-					</inspire_common:IntervalOfDates>
-				</inspire_common:TemporalExtent>
-			</inspire_common:TemporalReference>
-			<inspire_common:Conformity>
-				<inspire_common:Specification xsi:type="inspire_common:citationInspireInteroperabilityRegulation_eng">
-					<inspire_common:Title>COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services</inspire_common:Title>
-					<inspire_common:DateOfPublication>2010-12-08</inspire_common:DateOfPublication>
-					<inspire_common:URI>OJ:L:2010:323:0011:0102:EN:PDF</inspire_common:URI>
-					<inspire_common:ResourceLocator>
-						<inspire_common:URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:EN:PDF</inspire_common:URL>
-						<inspire_common:MediaType>application/pdf</inspire_common:MediaType>
-					</inspire_common:ResourceLocator>
-				</inspire_common:Specification>
-				<inspire_common:Degree>conformant</inspire_common:Degree>
-			</inspire_common:Conformity>
-			<inspire_common:MetadataPointOfContact>
-				<inspire_common:OrganisationName>Spatial Data Infrastructure Unit, Institute for Environment & Sustainability, Joint Research Centre, European Commission</inspire_common:OrganisationName>
-				<inspire_common:EmailAddress>image2000 at jrc.ec.europa.eu</inspire_common:EmailAddress>
-			</inspire_common:MetadataPointOfContact>
-			<inspire_common:MetadataDate>2010-06-15</inspire_common:MetadataDate>
-			<inspire_common:SpatialDataServiceType>view</inspire_common:SpatialDataServiceType>
-			<inspire_common:MandatoryKeyword>
-				<inspire_common:KeywordValue>humanGeographicViewer</inspire_common:KeywordValue>
-			</inspire_common:MandatoryKeyword>
-			<inspire_common:MandatoryKeyword>
-				<inspire_common:KeywordValue>infoMapAccessService</inspire_common:KeywordValue>
-			</inspire_common:MandatoryKeyword>
-			<inspire_common:Keyword xsi:type="inspire_common:inspireTheme_eng">
-				<inspire_common:OriginatingControlledVocabulary>
-					<inspire_common:Title>GEMET - INSPIRE themes</inspire_common:Title>
-					<inspire_common:DateOfPublication>2008-06-01</inspire_common:DateOfPublication>
-				</inspire_common:OriginatingControlledVocabulary>
-				<inspire_common:KeywordValue>Orthoimagery</inspire_common:KeywordValue>
-			</inspire_common:Keyword>
-			<inspire_common:Keyword>
-				<inspire_common:KeywordValue>satellite imagery</inspire_common:KeywordValue>
-			</inspire_common:Keyword>
-			<inspire_common:SupportedLanguages>
-				<inspire_common:DefaultLanguage>
-					<inspire_common:Language>eng</inspire_common:Language>
-				</inspire_common:DefaultLanguage>
-				<inspire_common:SupportedLanguage>
-					<inspire_common:Language>cze</inspire_common:Language>
-				</inspire_common:SupportedLanguage>
-			</inspire_common:SupportedLanguages>
-			<inspire_common:ResponseLanguage>
-				<inspire_common:Language>eng</inspire_common:Language>
-			</inspire_common:ResponseLanguage>
-			<inspire_common:MetadataUrl>
-				<inspire_common:URL>	http://www.inspire-geoportal.eu/discovery/csw?Service=CSW&Request=GetRecordById&Version=2.0.2&id=jrc_img2k_service_pan&outputSchema=http://www.isotc211.org/2005/gmd&elementSetName=full</inspire_common:URL>
-				<inspire_common:MediaType>application/vnd.iso.19139+xml</inspire_common:MediaType>
-			</inspire_common:MetadataUrl>
-		</inspire_vs:ExtendedCapabilities>
-		<Layer>
-			<!-- Each layer in the capabilities that has a <Name> element can be requested to the service, therefore we have put it out (it is not physical layer of WMS, but logical. 
-			<Name>OI.IM2K_PAN.Layers</Name>-->
-			<Title>Image 2000 Panchromatic Mosaic Layers</Title>
-			<CRS>CRS:84</CRS>
-			<CRS>EPSG:4326</CRS>
-			<CRS>EPSG:4258</CRS>
-			<CRS>EPSG:3035</CRS>
-			<CRS>EPSG:3034</CRS>
-			<EX_GeographicBoundingBox>
-				<westBoundLongitude>-14.317500</westBoundLongitude>
-				<eastBoundLongitude>35.017500</eastBoundLongitude>
-				<southBoundLatitude>32.688750</southBoundLatitude>
-				<northBoundLatitude>72.536250</northBoundLatitude>
-			</EX_GeographicBoundingBox>
-			<BoundingBox CRS="CRS:84" minx="-14.317500" miny="32.688750" maxx="35.017500" maxy="72.536250"/>
-			<BoundingBox CRS="EPSG:4326" minx="32.688750" miny="-14.317500" maxx="72.536250" maxy="35.017500"/>
-			<BoundingBox CRS="EPSG:4258" minx="32.688750" miny="-14.317500" maxx="72.536250" maxy="35.017500"/>
-			<BoundingBox CRS="EPSG:3035" minx="1065289.448885" miny="2096360.959822" maxx="5634890.300005" maxy="6607617.368400"/>
-			<BoundingBox CRS="EPSG:3034" minx="695310.772226" miny="1795068.846538" maxx="5204512.451326" maxy="6266414.527296"/>
-			<Layer>
-				<Name>0</Name>
-				<Title>Mosaic</Title>
-				<Abstract>Image 2000 Panchromatic Mosaic</Abstract>
-				<KeywordList>
-					<Keyword>Orthoimagery</Keyword>
-				</KeywordList>
-				<CRS>CRS:84</CRS>
-				<CRS>EPSG:4326</CRS>
-				<CRS>EPSG:4258</CRS>
-				<CRS>EPSG:3035</CRS>
-				<CRS>EPSG:3034</CRS>
-				<EX_GeographicBoundingBox>
-					<westBoundLongitude>-12.075000</westBoundLongitude>
-					<eastBoundLongitude>32.775000</eastBoundLongitude>
-					<southBoundLatitude>34.500000</southBoundLatitude>
-					<northBoundLatitude>70.725000</northBoundLatitude>
-				</EX_GeographicBoundingBox>
-				<BoundingBox CRS="CRS:84" minx="-12.075000" miny="34.500000" maxx="32.775000" maxy="70.725000"/>
-				<BoundingBox CRS="EPSG:4326" minx="34.500000" miny="-12.075000" maxx="70.725000" maxy="32.775000"/>
-				<BoundingBox CRS="EPSG:4258" minx="34.500000" miny="-12.075000" maxx="70.725000" maxy="32.775000"/>
-				<BoundingBox CRS="EPSG:3035" minx="1272998.578481" miny="2301418.069303" maxx="5427181.170408" maxy="6402560.258919"/>
-				<BoundingBox CRS="EPSG:3034" minx="900274.484912" miny="1998311.832027" maxx="4999548.738640" maxy="6063171.541807"/>
-				<MetadataURL type="ISO19115:2003 ">
-					<Format>text/xml</Format>
-					<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.inspire-geoportal.eu/discovery/csw?Service=CSW&Request=GetRecordById&Version=2.0.2&id=jrc_img2k_pr5_mosaic_PAN&outputSchema=http://www.isotc211.org/2005/gmd&elementSetName=full#jrc_img2k_pr5_mosaic_PAN"/>
-				</MetadataURL>
-				<Style>
-					<Name>inspire_common:DEFAULT</Name>
-					<Title>Image 2000 Panchromatic Mosaic</Title>
-					<LegendURL width="100" height="40">
-						<Format>image/png</Format>
-						<OnlineResource xlink:href="http://ags-sdi-public.jrc.ec.europa.eu/arcgis/wms/image2000_pan/default0.png" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-					</LegendURL>
-				</Style>
-				<Layer>
-					<Name>0.1</Name>
-					<Title>RecursionTest</Title>
-					<Abstract>Image 2000 Panchromatic Mosaic</Abstract>
-					<KeywordList>
-						<Keyword>Orthoimagery</Keyword>
-					</KeywordList>
-					<CRS>CRS:84</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:4258</CRS>
-					<CRS>EPSG:3035</CRS>
-					<CRS>EPSG:3034</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>-12.075000</westBoundLongitude>
-						<eastBoundLongitude>32.775000</eastBoundLongitude>
-						<southBoundLatitude>34.500000</southBoundLatitude>
-						<northBoundLatitude>70.725000</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="CRS:84" minx="-12.075000" miny="34.500000" maxx="32.775000" maxy="70.725000"/>
-					<BoundingBox CRS="EPSG:4326" minx="34.500000" miny="-12.075000" maxx="70.725000" maxy="32.775000"/>
-					<BoundingBox CRS="EPSG:4258" minx="34.500000" miny="-12.075000" maxx="70.725000" maxy="32.775000"/>
-					<BoundingBox CRS="EPSG:3035" minx="1272998.578481" miny="2301418.069303" maxx="5427181.170408" maxy="6402560.258919"/>
-					<BoundingBox CRS="EPSG:3034" minx="900274.484912" miny="1998311.832027" maxx="4999548.738640" maxy="6063171.541807"/>
-					<MetadataURL type="ISO19115:2003 ">
-						<Format>text/xml</Format>
-						<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.inspire-geoportal.eu/discovery/csw?Service=CSW&Request=GetRecordById&Version=2.0.2&id=jrc_img2k_pr5_mosaic_PAN&outputSchema=http://www.isotc211.org/2005/gmd&elementSetName=full#jrc_img2k_pr5_mosaic_PAN21"/>
-					</MetadataURL>
-					<MetadataURL type="ISO19115:2003 ">
-						<Format>text/xml</Format>
-						<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://www.inspire-geoportal.eu/discovery/csw?Service=CSW&Request=GetRecordById&Version=2.0.2&id=jrc_img2k_pr5_mosaic_PAN&outputSchema=http://www.isotc211.org/2005/gmd&elementSetName=full#jrc_img2k_pr5_mosaic_PAN22"/>
-					</MetadataURL>
-					<Style>
-						<Name>inspire_common:DEFAULT</Name>
-						<Title>Image 2000 Panchromatic Mosaic</Title>
-						<LegendURL width="100" height="40">
-							<Format>image/png</Format>
-							<OnlineResource xlink:href="http://ags-sdi-public.jrc.ec.europa.eu/arcgis/wms/image2000_pan/default0.png" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-						</LegendURL>
-					</Style>
-				</Layer>
-			</Layer>
-		</Layer>
-	</Capability>
-</WMS_Capabilities>
diff --git a/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_at.xml b/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_at.xml
deleted file mode 100644
index 66656d9..0000000
--- a/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_at.xml
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-26-APR-2011 1.0.1 Conformity element:
-                    Restricted allowed citations to "INSPIRE interoperability of spatial data sets and services", according to the MD regulation,
-                    requirements for the conformity element (page 17 of the MD regulation).
-                  Inspire Themes:
-                    Removed leading blank for German, Bulgarian, Czech and Danish translations
-17-MAR-2011 Changed alias inspire_common and inspire_vs
-18-FEB-2011 Changed encoding for Language Elements in Network Services
-16-FEB-2011 Introduced namespace "common"
-                    Removed unnecessary namespace references
-                    Switched to short form of INSPIRE namespace alises
--->
-<WMS_Capabilities xmlns="http://www.opengis.net/wms" xmlns:sld="http://www.opengis.net/sld" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs/1.0" version="1.3.0" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd  http://www.opengis.net/sld http: [...]
-	<!-- MapServer version 5.6.5 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=CAIRO SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS SUPPORTS=RGBA_PNG INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->
-	<Service>
-		<Name>WMS</Name>
-		<Title>Geoimage_1m</Title>
-		<Abstract>This service provides starting from October 2010 middle resolution orthoimagery of Austria and is intended to support open Data communities such as openstreetmap.org in creating new or enhancing free spatial data. This service is provided for the time being, there is no guarantee for long-term availability.</Abstract>
-		<KeywordList>
-			<Keyword>GEOIMAGE</Keyword>
-			<Keyword>ORTHOPHOTO</Keyword>
-			<Keyword>ORTHOFOTO</Keyword>
-			<Keyword>REMOTE SENSING</Keyword>
-			<Keyword>AUSTRIA</Keyword>
-			<Keyword>LFRZ</Keyword>
-		</KeywordList>
-		<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-		<ContactInformation>
-			<ContactPersonPrimary>
-				<ContactPerson>Wolfgang Tinkl</ContactPerson>
-				<ContactOrganization>http://www.geoimage.at</ContactOrganization>
-			</ContactPersonPrimary>
-			<ContactElectronicMailAddress>office at geoimage.at</ContactElectronicMailAddress>
-		</ContactInformation>
-		<Fees>no conditions apply</Fees>
-		<AccessConstraints>The content of this service is copyright by GEOIMAGE-AUSTRIA(R) and protected by law. This WMS can be used by anybody for private, governmental and non-profit purposes. Use for Commercial purposes is NOT allowed, however secondary products (created on basis of this service) are not subject to this non-commercial restriction as long as these secondary products are made freely available e.g. under the Creative Commons Attribution-ShareAlike 2.0 (CC-BY-SA) license. Syst [...]
-		<MaxWidth>2048</MaxWidth>
-		<MaxHeight>2048</MaxHeight>
-	</Service>
-	<Capability>
-		<Request>
-			<GetCapabilities>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</GetCapabilities>
-			<GetMap>
-				<Format>image/png</Format>
-				<Format>image/jpg</Format>
-				<Format>image/gif</Format>
-				<Format>image/png; mode=24bit</Format>
-				<Format>image/vnd.wap.wbmp</Format>
-				<Format>image/jpeg</Format>
-				<Format>image/tiff</Format>
-				<Format>image/svg+xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</GetMap>
-			<GetFeatureInfo>
-				<Format>text/plain</Format>
-				<Format>application/vnd.ogc.gml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</GetFeatureInfo>
-			<sld:DescribeLayer>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</sld:DescribeLayer>
-			<sld:GetLegendGraphic>
-				<Format>image/png</Format>
-				<Format>image/jpg</Format>
-				<Format>image/gif</Format>
-				<Format>image/png; mode=24bit</Format>
-				<Format>image/vnd.wap.wbmp</Format>
-				<Format>image/jpeg</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</sld:GetLegendGraphic>
-			<ms:GetStyles>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</ms:GetStyles>
-		</Request>
-		<Exception>
-			<Format>XML</Format>
-			<Format>INIMAGE</Format>
-			<Format>BLANK</Format>
-		</Exception>
-		<inspire_vs:ExtendedCapabilities>
-			<inspire_common:ResourceLocator>
-				<inspire_common:URL>http://www.geoimage.at</inspire_common:URL>
-				<inspire_common:MediaType>text/html</inspire_common:MediaType>
-			</inspire_common:ResourceLocator>
-			<inspire_common:ResourceLocator>
-				<inspire_common:URL>http://gis.lebensministerium.at/dop-1mfree-beta110223%5C?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities</inspire_common:URL>
-				<inspire_common:MediaType>application/vnd.ogc.csw.capabilities.response_xml</inspire_common:MediaType>
-			</inspire_common:ResourceLocator>
-			<inspire_common:ResourceType>service</inspire_common:ResourceType>
-			<inspire_common:TemporalReference>
-				<inspire_common:DateOfCreation>2011-02-23</inspire_common:DateOfCreation>
-				<inspire_common:DateOfLastRevision>2011-02-23</inspire_common:DateOfLastRevision>
-				<inspire_common:DateOfPublication>2011-02-23</inspire_common:DateOfPublication>
-			</inspire_common:TemporalReference>
-			<inspire_common:Conformity>
-				<inspire_common:Specification xsi:type="inspire_common:citationInspireInteroperabilityRegulation_eng">
-					<inspire_common:Title>COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services</inspire_common:Title>
-					<inspire_common:DateOfPublication>2010-12-08</inspire_common:DateOfPublication>
-					<inspire_common:URI>OJ:L:2010:323:0011:0102:EN:PDF</inspire_common:URI>
-					<inspire_common:ResourceLocator>
-						<inspire_common:URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:EN:PDF</inspire_common:URL>
-						<inspire_common:MediaType>application/pdf</inspire_common:MediaType>
-					</inspire_common:ResourceLocator>
-				</inspire_common:Specification>
-				<inspire_common:Degree>notEvaluated</inspire_common:Degree>
-			</inspire_common:Conformity>
-			<inspire_common:MetadataPointOfContact>
-				<inspire_common:OrganisationName>www.geoimage.at</inspire_common:OrganisationName>
-				<inspire_common:EmailAddress>office at geoimage.at</inspire_common:EmailAddress>
-			</inspire_common:MetadataPointOfContact>
-			<inspire_common:MetadataDate>2011-02-23</inspire_common:MetadataDate>
-			<inspire_common:SpatialDataServiceType>view</inspire_common:SpatialDataServiceType>
-			<inspire_common:MandatoryKeyword>
-				<inspire_common:KeywordValue>humanGeographicViewer</inspire_common:KeywordValue>
-			</inspire_common:MandatoryKeyword>
-			<inspire_common:MandatoryKeyword>
-				<inspire_common:KeywordValue>infoMapAccessService</inspire_common:KeywordValue>
-			</inspire_common:MandatoryKeyword>
-			<inspire_common:Keyword xsi:type="inspire_common:inspireTheme_eng">
-				<inspire_common:OriginatingControlledVocabulary>
-					<inspire_common:Title>GEMET - INSPIRE themes</inspire_common:Title>
-					<inspire_common:DateOfPublication>2008-06-01</inspire_common:DateOfPublication>
-				</inspire_common:OriginatingControlledVocabulary>
-				<inspire_common:KeywordValue>Orthoimagery</inspire_common:KeywordValue>
-			</inspire_common:Keyword>
-			<inspire_common:SupportedLanguages>
-				<inspire_common:DefaultLanguage>
-					<inspire_common:Language>eng</inspire_common:Language>
-				</inspire_common:DefaultLanguage>
-			</inspire_common:SupportedLanguages>
-			<inspire_common:ResponseLanguage>
-				<inspire_common:Language>eng</inspire_common:Language>
-			</inspire_common:ResponseLanguage>
-			<inspire_common:MetadataUrl>
-				<inspire_common:URL>http://www.geoimage.at/test/metadata/</inspire_common:URL>
-				<inspire_common:MediaType>application/vnd.iso.19139+xml</inspire_common:MediaType>
-			</inspire_common:MetadataUrl>
-		</inspire_vs:ExtendedCapabilities>
-		<sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0" InlineFeature="0" RemoteWCS="0"/>
-		<Layer>
-			<Name>DOP</Name>
-			<Title>Geoimage_1m</Title>
-			<Abstract>This service provides starting from October 2010 middle resolution orthoimagery of Austria and is intended to support open Data communities such as openstreetmap.org in creating new or enhancing free spatial data. This service is provided for the time being, there is no guarantee for long-term availability.</Abstract>
-			<KeywordList>
-				<Keyword>GEOIMAGE</Keyword>
-				<Keyword>ORTHOPHOTO</Keyword>
-				<Keyword>ORTHOFOTO</Keyword>
-				<Keyword>REMOTE SENSING</Keyword>
-				<Keyword>AUSTRIA</Keyword>
-				<Keyword>LFRZ</Keyword>
-			</KeywordList>
-			<CRS>EPSG:31287</CRS>
-			<CRS>EPSG:4326</CRS>
-			<CRS>EPSG:3857</CRS>
-			<CRS>EPSG:900913</CRS>
-			<CRS>EPSG:31255</CRS>
-			<EX_GeographicBoundingBox>
-				<westBoundLongitude>9.35647</westBoundLongitude>
-				<eastBoundLongitude>17.3085</eastBoundLongitude>
-				<southBoundLatitude>46.0867</southBoundLatitude>
-				<northBoundLatitude>49.2085</northBoundLatitude>
-			</EX_GeographicBoundingBox>
-			<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-			<Layer>
-				<Name>Orthophoto</Name>
-				<Title>Orthophoto</Title>
-				<Abstract>Orthophoto</Abstract>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Luftbild_1m</Name>
-					<Title>Luftbild_1m_LB</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<CRS>EPSG:31255</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MaxScaleDenominator>15500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Message</Name>
-					<Title>Message</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<CRS>EPSG:31255</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MaxScaleDenominator>7500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Luftbild_4m</Name>
-					<Title>Luftbild_4m_LB</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<CRS>EPSG:31255</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MinScaleDenominator>15001</MinScaleDenominator>
-					<MaxScaleDenominator>150500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Satellitenbild_30m</Name>
-					<Title>Satellitenbild_30m</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<CRS>EPSG:31255</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MinScaleDenominator>150001</MinScaleDenominator>
-					<MaxScaleDenominator>1e+007</MaxScaleDenominator>
-				</Layer>
-			</Layer>
-			<Layer>
-				<Name>Metadata</Name>
-				<Title>Metadata</Title>
-				<Abstract>Metadata</Abstract>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Metadata_Tiles</Name>
-					<Title>Metadata_Tiles</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<CRS>EPSG:31255</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<Style>
-						<Name>inspire_vs:DEFAULT</Name>
-						<Title>inspire_vs:DEFAULT</Title>
-						<LegendURL width="102" height="25">
-							<Format>image/png</Format>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=Metadata_Tiles&format=image/png&STYLE=inspire_vs:DEFAULT"/>
-						</LegendURL>
-					</Style>
-					<MinScaleDenominator>100</MinScaleDenominator>
-					<MaxScaleDenominator>150500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Metadata-dissolve</Name>
-					<Title>Metadata-dissolve</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<CRS>EPSG:31255</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<Style>
-						<Name>inspire_vs:DEFAULT</Name>
-						<Title>inspire_vs:DEFAULT</Title>
-						<LegendURL width="86" height="25">
-							<Format>image/png</Format>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://wms.geoimage.at/dop-1mfree-beta110223?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=Metadata-dissolve&format=image/png&STYLE=inspire_vs:DEFAULT"/>
-						</LegendURL>
-					</Style>
-					<MinScaleDenominator>100</MinScaleDenominator>
-					<MaxScaleDenominator>1e+007</MaxScaleDenominator>
-				</Layer>
-			</Layer>
-		</Layer>
-	</Capability>
-</WMS_Capabilities>
diff --git a/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_geoimage.xml b/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_geoimage.xml
deleted file mode 100644
index 5557833..0000000
--- a/mapproxy/test/schemas/inspire/inspire_vs/1.0/examples/wms_geoimage.xml
+++ /dev/null
@@ -1,346 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
-<!--
-26-APR-2011 1.0.1 Conformity element:
-                    Restricted allowed citations to "INSPIRE interoperability of spatial data sets and services", according to the MD regulation,
-                    requirements for the conformity element (page 17 of the MD regulation).
-                  Inspire Themes:
-                    Removed leading blank for German, Bulgarian, Czech and Danish translations
-17-MAR-2011 Changed alias inspire_common and inspire_vs
-18-FEB-2011 Changed encoding for Language Elements in Network Services
-16-FEB-2011 Introduced namespace "common"
-                    Removed unnecessary namespace references
-                    Switched to short form of INSPIRE namespace alises
--->
-<WMS_Capabilities xmlns="http://www.opengis.net/wms" xmlns:sld="http://www.opengis.net/sld" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs/1.0" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.3.0" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_ [...]
-	<!--31-JAN-2011 INSPIRE schema updated to 0.19 (Removed language dependent schema implementations)-->
-	<!--SGW + MapServer-->
-	<Service>
-		<Name>WMS</Name>
-		<Title>Geoimage_1m</Title>
-		<Abstract>This service provides starting from October 2010 middle resolution orthoimagery of Austria and is intended to support open Data communities such as openstreetmap.org in creating new or enhancing free spatial data. This service is provided for the time being, there is no guarantee for long-term availability.</Abstract>
-		<KeywordList>
-			<Keyword>GEOIMAGE</Keyword>
-			<Keyword>ORTHOPHOTO</Keyword>
-			<Keyword>ORTHOFOTO</Keyword>
-			<Keyword>REMOTE SENSING</Keyword>
-			<Keyword>AUSTRIA</Keyword>
-			<Keyword>LFRZ</Keyword>
-		</KeywordList>
-		<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-		<ContactInformation>
-			<ContactPersonPrimary>
-				<ContactPerson>Wolfgang Tinkl</ContactPerson>
-				<ContactOrganization>http://www.geoimage.at</ContactOrganization>
-			</ContactPersonPrimary>
-			<ContactElectronicMailAddress>office at geoimage.at</ContactElectronicMailAddress>
-		</ContactInformation>
-		<Fees>no conditions apply</Fees>
-		<AccessConstraints>The content of this service is copyright by GEOIMAGE-AUSTRIA(R) and protected by law. This WMS can be used by anybody for private, governmental and non-profit purposes. Use for Commercial purposes is NOT allowed, however secondary products (created on basis of this service) are not subject to this non-commercial restriction as long as these secondary products are made freely available e.g. under the Creative Commons Attribution-ShareAlike 2.0 (CC-BY-SA) license. Syst [...]
-		<MaxWidth>2048</MaxWidth>
-		<MaxHeight>2048</MaxHeight>
-	</Service>
-	<Capability>
-		<Request>
-			<GetCapabilities>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</GetCapabilities>
-			<GetMap>
-				<Format>image/png</Format>
-				<Format>image/jpg</Format>
-				<Format>image/gif</Format>
-				<Format>image/png; mode=24bit</Format>
-				<Format>image/vnd.wap.wbmp</Format>
-				<Format>image/jpeg</Format>
-				<Format>image/tiff</Format>
-				<Format>image/svg+xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</GetMap>
-			<GetFeatureInfo>
-				<Format>text/plain</Format>
-				<Format>application/vnd.ogc.gml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</GetFeatureInfo>
-			<sld:DescribeLayer>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</sld:DescribeLayer>
-			<sld:GetLegendGraphic>
-				<Format>image/png</Format>
-				<Format>image/jpg</Format>
-				<Format>image/gif</Format>
-				<Format>image/png; mode=24bit</Format>
-				<Format>image/vnd.wap.wbmp</Format>
-				<Format>image/jpeg</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</sld:GetLegendGraphic>
-			<ms:GetStyles>
-				<Format>text/xml</Format>
-				<DCPType>
-					<HTTP>
-						<Get>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Get>
-						<Post>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?"/>
-						</Post>
-					</HTTP>
-				</DCPType>
-			</ms:GetStyles>
-		</Request>
-		<Exception>
-			<Format>XML</Format>
-			<Format>INIMAGE</Format>
-			<Format>BLANK</Format>
-		</Exception>
-		<inspire_vs:ExtendedCapabilities>
-			<inspire_common:ResourceLocator>
-				<inspire_common:URL>http://www.geoimage.at</inspire_common:URL>
-				<inspire_common:MediaType>text/html</inspire_common:MediaType>
-			</inspire_common:ResourceLocator>
-			<inspire_common:ResourceType>service</inspire_common:ResourceType>
-			<inspire_common:TemporalReference>
-				<inspire_common:DateOfCreation>2010-12-21</inspire_common:DateOfCreation>
-			</inspire_common:TemporalReference>
-			<inspire_common:Conformity>
-				<inspire_common:Specification xsi:type="inspire_common:citationInspireInteroperabilityRegulation_eng">
-					<inspire_common:Title>COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services</inspire_common:Title>
-					<inspire_common:DateOfPublication>2010-12-08</inspire_common:DateOfPublication>
-					<inspire_common:URI>OJ:L:2010:323:0011:0102:EN:PDF</inspire_common:URI>
-					<inspire_common:ResourceLocator>
-						<inspire_common:URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:EN:PDF</inspire_common:URL>
-						<inspire_common:MediaType>application/pdf</inspire_common:MediaType>
-					</inspire_common:ResourceLocator>
-				</inspire_common:Specification>
-				<inspire_common:Degree>notEvaluated</inspire_common:Degree>
-			</inspire_common:Conformity>
-			<inspire_common:MetadataPointOfContact>
-				<inspire_common:OrganisationName>www.geoimage.at</inspire_common:OrganisationName>
-				<inspire_common:EmailAddress>office at geoimage.at</inspire_common:EmailAddress>
-			</inspire_common:MetadataPointOfContact>
-			<inspire_common:MetadataDate>2010-12-10</inspire_common:MetadataDate>
-			<inspire_common:SpatialDataServiceType>view</inspire_common:SpatialDataServiceType>
-			<inspire_common:MandatoryKeyword>
-				<inspire_common:KeywordValue>humanGeographicViewer</inspire_common:KeywordValue>
-			</inspire_common:MandatoryKeyword>
-			<inspire_common:MandatoryKeyword>
-				<inspire_common:KeywordValue>infoMapAccessService</inspire_common:KeywordValue>
-			</inspire_common:MandatoryKeyword>
-			<inspire_common:Keyword>
-				<inspire_common:OriginatingControlledVocabulary>
-					<inspire_common:Title>GEMET INSPIRE themes</inspire_common:Title>
-					<inspire_common:DateOfPublication>2008-06-01</inspire_common:DateOfPublication>
-				</inspire_common:OriginatingControlledVocabulary>
-				<inspire_common:KeywordValue>Orthoimagery</inspire_common:KeywordValue>
-			</inspire_common:Keyword>
-			<inspire_common:SupportedLanguages>
-				<inspire_common:DefaultLanguage>
-					<inspire_common:Language>eng</inspire_common:Language>
-				</inspire_common:DefaultLanguage>
-			</inspire_common:SupportedLanguages>
-			<inspire_common:ResponseLanguage>
-				<inspire_common:Language>eng</inspire_common:Language>
-			</inspire_common:ResponseLanguage>
-			<inspire_common:MetadataUrl>
-				<inspire_common:URL>http://www.geoimage.at/test/metadata/</inspire_common:URL>
-				<inspire_common:MediaType>application/vnd.iso.19139+xml</inspire_common:MediaType>
-			</inspire_common:MetadataUrl>
-		</inspire_vs:ExtendedCapabilities>
-		<sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0" InlineFeature="0" RemoteWCS="0"/>
-		<Layer>
-			<Name>DOP</Name>
-			<Title>Geoimage_1m</Title>
-			<Abstract>This service provides starting from October 2010 middle resolution orthoimagery of Austria and is intended to support open Data communities such as openstreetmap.org in creating new or enhancing free spatial data. This service is provided for the time being, there is no guarantee for long-term availability.</Abstract>
-			<KeywordList>
-				<Keyword>GEOIMAGE</Keyword>
-				<Keyword>ORTHOPHOTO</Keyword>
-				<Keyword>ORTHOFOTO</Keyword>
-				<Keyword>REMOTE SENSING</Keyword>
-				<Keyword>AUSTRIA</Keyword>
-				<Keyword>LFRZ</Keyword>
-			</KeywordList>
-			<CRS>EPSG:31287</CRS>
-			<CRS>EPSG:4326</CRS>
-			<CRS>EPSG:3857</CRS>
-			<CRS>EPSG:900913</CRS>
-			<EX_GeographicBoundingBox>
-				<westBoundLongitude>9.35647</westBoundLongitude>
-				<eastBoundLongitude>17.3085</eastBoundLongitude>
-				<southBoundLatitude>46.0867</southBoundLatitude>
-				<northBoundLatitude>49.2085</northBoundLatitude>
-			</EX_GeographicBoundingBox>
-			<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-			<Layer>
-				<Name>Orthophoto</Name>
-				<Title>Orthophoto</Title>
-				<Abstract>Orthophoto</Abstract>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Luftbild_1m</Name>
-					<Title>Luftbild_1m_LB</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MaxScaleDenominator>15500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Message</Name>
-					<Title>Message</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MaxScaleDenominator>7500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Luftbild_4m</Name>
-					<Title>Luftbild_4m_LB</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MinScaleDenominator>15001</MinScaleDenominator>
-					<MaxScaleDenominator>150500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Satellitenbild_30m</Name>
-					<Title>Satellitenbild_30m</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<MinScaleDenominator>150001</MinScaleDenominator>
-					<MaxScaleDenominator>1e+007</MaxScaleDenominator>
-				</Layer>
-			</Layer>
-			<Layer>
-				<Name>Metadata</Name>
-				<Title>Metadata</Title>
-				<Abstract>Metadata</Abstract>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Metadata_Tiles</Name>
-					<Title>Metadata_Tiles</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<Style>
-						<Name>inspire_com:DEFAULT</Name>
-						<Title>inspire_com:DEFAULT</Title>
-						<LegendURL width="102" height="25">
-							<Format>image/png</Format>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=Metadata_Tiles&format=image/png&STYLE=inspire_com:DEFAULT"/>
-						</LegendURL>
-					</Style>
-					<MinScaleDenominator>100</MinScaleDenominator>
-					<MaxScaleDenominator>150500</MaxScaleDenominator>
-				</Layer>
-				<Layer queryable="0" opaque="0" cascaded="0">
-					<Name>Metadata-dissolve</Name>
-					<Title>Metadata-dissolve</Title>
-					<CRS>EPSG:31287</CRS>
-					<CRS>EPSG:4326</CRS>
-					<CRS>EPSG:3857</CRS>
-					<CRS>EPSG:900913</CRS>
-					<EX_GeographicBoundingBox>
-						<westBoundLongitude>9.35647</westBoundLongitude>
-						<eastBoundLongitude>17.3085</eastBoundLongitude>
-						<southBoundLatitude>46.0867</southBoundLatitude>
-						<northBoundLatitude>49.2085</northBoundLatitude>
-					</EX_GeographicBoundingBox>
-					<BoundingBox CRS="EPSG:31287" minx="110000" miny="250000" maxx="690000" maxy="590000"/>
-					<Style>
-						<Name>inspire_com:DEFAULT</Name>
-						<Title>inspire_com:DEFAULT</Title>
-						<LegendURL width="86" height="25">
-							<Format>image/png</Format>
-							<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://wms.geoimage.at/dop-1mfree-beta101221?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=Metadata-dissolve&format=image/png&STYLE=inspire_com:DEFAULT"/>
-						</LegendURL>
-					</Style>
-					<MinScaleDenominator>100</MinScaleDenominator>
-					<MaxScaleDenominator>1e+007</MaxScaleDenominator>
-				</Layer>
-			</Layer>
-		</Layer>
-	</Capability>
-</WMS_Capabilities>
diff --git a/mapproxy/test/system/fixture/arcgis.yaml b/mapproxy/test/system/fixture/arcgis.yaml
new file mode 100644
index 0000000..ac0e590
--- /dev/null
+++ b/mapproxy/test/system/fixture/arcgis.yaml
@@ -0,0 +1,39 @@
+services:
+  tms:
+
+layers:
+  - name: app2_layer
+    title: ArcGIS Cache Layer
+    sources: [app2_cache]
+  - name: app2_with_layers_layer
+    title: ArcGIS Cache Layer
+    sources: [app2_with_layers_cache]
+  - name: app2_wrong_url_layer
+    title: ArcGIS Cache Layer
+    sources: [app2_wrong_url_cache]
+
+caches:
+  app2_cache:
+    grids: [GLOBAL_MERCATOR]
+    sources: [app2_source]
+  app2_with_layers_cache:
+    grids: [GLOBAL_MERCATOR]
+    sources: [app2_with_layers_source]
+  app2_wrong_url_cache:
+    grids: [GLOBAL_MERCATOR]
+    sources: [app2_wrong_url_source]
+
+sources:
+  app2_source:
+    type: arcgis
+    req:
+      url: http://localhost:42423/arcgis/rest/services/ExampleLayer/ImageServer
+  app2_with_layers_source:
+    type: arcgis
+    req:
+      layers: show:0,1
+      url: http://localhost:42423/arcgis/rest/services/ExampleLayer/ImageServer
+  app2_wrong_url_source:
+    type: arcgis
+    req:
+      url: http://localhost:42423/arcgis/rest/services/NonExistentLayer/ImageServer
diff --git a/mapproxy/test/system/fixture/cache_band_merge.yaml b/mapproxy/test/system/fixture/cache_band_merge.yaml
new file mode 100644
index 0000000..dd15ab6
--- /dev/null
+++ b/mapproxy/test/system/fixture/cache_band_merge.yaml
@@ -0,0 +1,73 @@
+services:
+  demo:
+  wmts:
+  wms:
+    md:
+      title: Foo
+
+layers:
+  - name: dop_l
+    title: DOP L
+    sources: [dop_l_cache]
+    tile_sources: [dop_l_cache]
+  - name: dop_0
+    title: DOP 0
+    tile_sources: [dop_0_cache]
+  - name: dop_021
+    title: DOP 021
+    tile_sources: [dop_021_cache]
+  - name: dop_0122
+    title: DOP 0122
+    tile_sources: [dop_0122_cache]
+
+caches:
+
+  dop_l_cache:
+    grids: [GLOBAL_WEBMERCATOR]
+    disable_storage: true
+    sources:
+      l: [
+        {source: dop_cache, band: 0, factor: 0.25},
+        {source: dop_cache, band: 1, factor: 0.7},
+        {source: dop_cache, band: 2, factor: 0.05},
+      ]
+
+  dop_0_cache:
+    grids: [GLOBAL_WEBMERCATOR]
+    disable_storage: true
+    image:
+      mode: RGB
+    sources:
+      l: [{source: dop_cache, band: 0}]
+
+  dop_021_cache:
+    grids: [GLOBAL_WEBMERCATOR]
+    disable_storage: true
+    sources:
+      r: [{source: dop_cache, band: 0}]
+      g: [{source: dop_cache, band: 2}]
+      b: [{source: dop_cache, band: 1}]
+
+  dop_0122_cache:
+    grids: [GLOBAL_WEBMERCATOR]
+    disable_storage: true
+    sources:
+      r: [{source: dop_cache, band: 0}]
+      g: [{source: dop_cache, band: 1}]
+      b: [{source: dop_cache, band: 2}]
+      a: [{source: dop_cache, band: 2, factor: 0.25}]
+
+  dop_cache:
+    grids: [GLOBAL_WEBMERCATOR]
+    sources: [dop_wms]
+
+sources:
+  dop_wms:
+    type: wms
+    req:
+      url: http://localhost:42423/
+      layers: dop
+
+globals:
+  image:
+    paletted: false
\ No newline at end of file
diff --git a/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png b/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png
new file mode 100755
index 0000000..719a209
Binary files /dev/null and b/mapproxy/test/system/fixture/cache_data/dop_cache_EPSG3857/00/000/000/000/000/000/000.png differ
diff --git a/mapproxy/test/system/fixture/multi_cache_layers.yaml b/mapproxy/test/system/fixture/multi_cache_layers.yaml
new file mode 100644
index 0000000..a65ad80
--- /dev/null
+++ b/mapproxy/test/system/fixture/multi_cache_layers.yaml
@@ -0,0 +1,100 @@
+globals:
+  cache:
+    base_dir: cache_data/
+    meta_size: [1, 1]
+    meta_buffer: 0
+  image:
+    # resampling: 'bicubic'
+    paletted: False
+
+services:
+  tms:
+  kml:
+  wmts:
+    restful_template: '/myrest/{{Layer}}/{{TileMatrixSet}}/{{TileMatrix}}/{{TileCol}}/{{TileRow}}.{{Format}}'
+  wms:
+    md:
+      title: MapProxy test fixture
+      abstract: This is MapProxy.
+      online_resource: http://mapproxy.org/
+      contact:
+        person: Oliver Tonnhofer
+        position: Technical Director
+        organization: Omniscale
+        address: Nadorster Str. 60
+        city: Oldenburg
+        postcode: 26123
+        country: Germany
+        phone: +49(0)441-9392774-0
+        fax: +49(0)441-9392774-9
+        email: info at omniscale.de
+
+layers:
+  - name: multi_cache
+    title: WMTS only layer
+    tile_sources: [utm_cache, webmerc_cache, gk_cache]
+  - name: wms_only
+    title: WMS only layer
+    tile_sources: []
+    sources: [utm_cache]
+  - name: cache
+    title: single cache layer
+    sources: [utm_cache]
+
+caches:
+  utm_cache:
+    grids: [utm32]
+    sources: [wms_source]
+  webmerc_cache:
+    grids: [GLOBAL_WEBMERCATOR, wmts_incompatible_grid, crs84quad]
+    sources: [wms_source]
+  gk_cache:
+    grids: [gk3]
+    disable_storage: true
+    sources: [utm_cache]
+
+sources:
+  wms_source:
+    type: wms
+    req:
+      url: http://localhost:42423/service
+      layers: foo,bar
+
+grids:
+  wmts_incompatible_grid: # shoud no be included in WMTS
+    srs: 'EPSG:25832'
+    bbox: [3000000, 5000000, 4000000, 6000000]
+    res_factor: sqrt2
+    origin: 'll'
+
+  crs84quad:
+    name: InspireCrs84Quad
+    srs: 'CRS:84'
+    bbox: [-180, -90, 180, 90]
+    origin: 'ul'
+    min_res: 0.703125
+
+  gk3:
+    bbox: [3400000, 5400000, 3600000, 5600000]
+    srs: 'EPSG:31467'
+
+  utm32:
+    srs: 'EPSG:25832'
+    res:
+      - 4891.96981025128
+      - 2445.98490512564
+      - 1222.99245256282
+      - 611.49622628141
+      - 305.748113140705
+      - 152.874056570353
+      - 76.4370282851763
+      - 38.2185141425881
+      - 19.1092570712941
+      - 9.55462853564703
+      - 4.77731426782352
+      - 2.38865713391176
+      - 1.19432856695588
+      - 0.597164283477939
+    bbox: [-46133.17, 5048875.26857567, 1206211.10142433, 6301219.54]
+    bbox_srs: 'EPSG:25832'
+    origin: 'ul'
\ No newline at end of file
diff --git a/mapproxy/test/system/test_arcgis.py b/mapproxy/test/system/test_arcgis.py
new file mode 100644
index 0000000..8047538
--- /dev/null
+++ b/mapproxy/test/system/test_arcgis.py
@@ -0,0 +1,71 @@
+# This file is part of the MapProxy project.
+# Copyright (C) 2010 Omniscale <http://omniscale.de>
+#
+# 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.
+
+from __future__ import with_statement, division
+
+from io import BytesIO
+from mapproxy.request.arcgis import ArcGISRequest
+from mapproxy.test.image import is_png, create_tmp_image
+from mapproxy.test.http import mock_httpd
+from mapproxy.test.system import module_setup, module_teardown, SystemTest
+from nose.tools import eq_
+
+test_config = {}
+
+def setup_module():
+    module_setup(test_config, 'arcgis.yaml')
+
+def teardown_module():
+    module_teardown(test_config)
+
+transp = create_tmp_image((512, 512), mode='RGBA', color=(0, 0, 0, 0))
+
+class TestArcgisSource(SystemTest):
+    config = test_config
+    def setup(self):
+        SystemTest.setup(self)
+
+    def test_get_tile(self):
+        expected_req = [({'path': '/arcgis/rest/services/ExampleLayer/ImageServer/export?f=image&format=png&imageSR=900913&bboxSR=900913&bbox=-20037508.342789244,-20037508.342789244,20037508.342789244,20037508.342789244&size=512,512'},
+                 {'body': transp, 'headers': {'content-type': 'image/png'}}),
+                ]
+
+        with mock_httpd(('localhost', 42423), expected_req, bbox_aware_query_comparator=True):
+            resp = self.app.get('/tms/1.0.0/app2_layer/0/0/1.png')
+            eq_(resp.content_type, 'image/png')
+            eq_(resp.content_length, len(resp.body))
+            data = BytesIO(resp.body)
+            assert is_png(data)
+
+    def test_get_tile_with_layer(self):
+        expected_req = [({'path': '/arcgis/rest/services/ExampleLayer/ImageServer/export?f=image&format=png&layers=show:0,1&imageSR=900913&bboxSR=900913&bbox=-20037508.342789244,-20037508.342789244,20037508.342789244,20037508.342789244&size=512,512'},
+                 {'body': transp, 'headers': {'content-type': 'image/png'}}),
+                ]
+
+        with mock_httpd(('localhost', 42423), expected_req, bbox_aware_query_comparator=True):
+            resp = self.app.get('/tms/1.0.0/app2_with_layers_layer/0/0/1.png')
+            eq_(resp.content_type, 'image/png')
+            eq_(resp.content_length, len(resp.body))
+            data = BytesIO(resp.body)
+            assert is_png(data)
+
+    def test_get_tile_from_missing_arcgis_layer(self):
+        expected_req = [({'path': '/arcgis/rest/services/NonExistentLayer/ImageServer/export?f=image&format=png&imageSR=900913&bboxSR=900913&bbox=-20037508.342789244,-20037508.342789244,20037508.342789244,20037508.342789244&size=512,512'},
+                 {'body': b'', 'status': 400}),
+                ]
+
+        with mock_httpd(('localhost', 42423), expected_req, bbox_aware_query_comparator=True):
+            resp = self.app.get('/tms/1.0.0/app2_wrong_url_layer/0/0/1.png', status=500)
+            eq_(resp.status_code, 500)
diff --git a/mapproxy/test/system/test_cache_band_merge.py b/mapproxy/test/system/test_cache_band_merge.py
new file mode 100644
index 0000000..cca22b6
--- /dev/null
+++ b/mapproxy/test/system/test_cache_band_merge.py
@@ -0,0 +1,96 @@
+# This file is part of the MapProxy project.
+# Copyright (C) 2016 Omniscale <http://omniscale.de>
+#
+# 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.
+
+from __future__ import with_statement
+from mapproxy.request.wms import WMS111MapRequest
+from mapproxy.request.wmts import WMTS100CapabilitiesRequest
+from mapproxy.test.image import img_from_buf
+from mapproxy.test.system import module_setup, module_teardown, SystemTest, make_base_config
+from nose.tools import eq_
+
+test_config = {}
+base_config = make_base_config(test_config)
+
+def setup_module():
+    module_setup(test_config, 'cache_band_merge.yaml', with_cache_data=True)
+
+def teardown_module():
+    module_teardown(test_config)
+
+
+class TestCacheSource(SystemTest):
+
+    # test various band merge configurations with
+    # cached base tile 0/0/0.png (R: 50 G: 100 B: 200)
+
+    config = test_config
+
+    def setup(self):
+        SystemTest.setup(self)
+        self.common_cap_req = WMTS100CapabilitiesRequest(url='/service?', param=dict(service='WMTS',
+             version='1.0.0', request='GetCapabilities'))
+        self.common_map_req = WMS111MapRequest(url='/service?', param=dict(service='WMS',
+             version='1.1.1', bbox='-180,0,0,80', width='100', height='100',
+             layers='dop_l', srs='EPSG:4326', format='image/png',
+             styles='', request='GetMap'))
+
+    def test_capabilities(self):
+        req = str(self.common_cap_req)
+        resp = self.app.get(req)
+        eq_(resp.content_type, 'application/xml')
+
+    def test_get_tile_021(self):
+        resp = self.app.get('/wmts/dop_021/GLOBAL_WEBMERCATOR/0/0/0.png')
+        eq_(resp.content_type, 'image/png')
+        img = img_from_buf(resp.body)
+        eq_(img.mode, 'RGB')
+        eq_(img.getpixel((0, 0)), (50, 200, 100))
+
+    def test_get_tile_l(self):
+        resp = self.app.get('/wmts/dop_l/GLOBAL_WEBMERCATOR/0/0/0.png')
+        eq_(resp.content_type, 'image/png')
+        img = img_from_buf(resp.body)
+        eq_(img.mode, 'L')
+        eq_(img.getpixel((0, 0)), int(50*0.25+0.7*100+0.05*200))
+
+    def test_get_tile_0(self):
+        resp = self.app.get('/wmts/dop_0/GLOBAL_WEBMERCATOR/0/0/0.png')
+        eq_(resp.content_type, 'image/png')
+        img = img_from_buf(resp.body)
+        eq_(img.mode, 'RGB') # forced with image.mode
+        eq_(img.getpixel((0, 0)), (50, 50, 50))
+
+    def test_get_tile_0122(self):
+        resp = self.app.get('/wmts/dop_0122/GLOBAL_WEBMERCATOR/0/0/0.png')
+        eq_(resp.content_type, 'image/png')
+        img = img_from_buf(resp.body)
+        eq_(img.mode, 'RGBA')
+        eq_(img.getpixel((0, 0)), (50, 100, 200, 50))
+
+    def test_get_map_l(self):
+        resp = self.app.get(str(self.common_map_req))
+        eq_(resp.content_type, 'image/png')
+        img = img_from_buf(resp.body)
+        eq_(img.mode, 'L')
+        eq_(img.getpixel((0, 0)), int(50*0.25+0.7*100+0.05*200))
+
+    def test_get_map_l_jpeg(self):
+        self.common_map_req.params.format = 'image/jpeg'
+        resp = self.app.get(str(self.common_map_req))
+        eq_(resp.content_type, 'image/jpeg')
+        img = img_from_buf(resp.body)
+        eq_(img.mode, 'RGB')
+        # L converted to RGB for jpeg
+        eq_(img.getpixel((0, 0)), (92, 92, 92))
diff --git a/mapproxy/test/system/test_multi_cache_layers.py b/mapproxy/test/system/test_multi_cache_layers.py
new file mode 100644
index 0000000..befcfbe
--- /dev/null
+++ b/mapproxy/test/system/test_multi_cache_layers.py
@@ -0,0 +1,151 @@
+# -:- encoding: utf8 -:-
+# This file is part of the MapProxy project.
+# Copyright (C) 2015 Omniscale <http://omniscale.de>
+#
+# 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.
+
+from __future__ import with_statement, division
+
+import functools
+
+from io import BytesIO
+from mapproxy.request.wmts import (
+    WMTS100TileRequest, WMTS100CapabilitiesRequest
+)
+from mapproxy.request.wms import WMS111CapabilitiesRequest
+from mapproxy.test.image import is_png, create_tmp_image
+from mapproxy.test.http import MockServ
+from mapproxy.test.helper import validate_with_xsd
+from mapproxy.test.system import module_setup, module_teardown, SystemTest, make_base_config
+from nose.tools import eq_
+
+test_config = {}
+base_config = make_base_config(test_config)
+
+
+def setup_module():
+    module_setup(test_config, 'multi_cache_layers.yaml', with_cache_data=True)
+
+
+def teardown_module():
+    module_teardown(test_config)
+
+ns_wmts = {
+    'wmts': 'http://www.opengis.net/wmts/1.0',
+    'ows': 'http://www.opengis.net/ows/1.1',
+    'xlink': 'http://www.w3.org/1999/xlink'
+}
+
+
+def eq_xpath(xml, xpath, expected, namespaces=None):
+    eq_(xml.xpath(xpath, namespaces=namespaces)[0], expected)
+
+eq_xpath_wmts = functools.partial(eq_xpath, namespaces=ns_wmts)
+
+
+TEST_TILE = create_tmp_image((256, 256))
+
+
+class TestMultiCacheLayer(SystemTest):
+    config = test_config
+
+    def setup(self):
+        SystemTest.setup(self)
+        self.common_cap_req = WMTS100CapabilitiesRequest(
+            url='/service?',
+            param=dict(service='WMTS', version='1.0.0', request='GetCapabilities'))
+        self.common_tile_req = WMTS100TileRequest(
+            url='/service?',
+            param=dict(service='WMTS', version='1.0.0', tilerow='0', tilecol='0', tilematrix='01',
+                       tilematrixset='GLOBAL_WEBMERCATOR', layer='multi_cache', format='image/png', style='', request='GetTile'))
+
+    def test_tms_capabilities(self):
+        resp = self.app.get('/tms/1.0.0/')
+        assert 'http://localhost/tms/1.0.0/multi_cache/wmts_incompatible_grid' in resp
+        assert 'http://localhost/tms/1.0.0/multi_cache/GLOBAL_WEBMERCATOR' in resp
+        assert 'http://localhost/tms/1.0.0/multi_cache/InspireCrs84Quad' in resp
+        assert 'http://localhost/tms/1.0.0/multi_cache/gk3' in resp
+        assert 'http://localhost/tms/1.0.0/cache/utm32' in resp
+        xml = resp.lxml
+        assert xml.xpath('count(//TileMap)') == 5
+
+    def test_wmts_capabilities(self):
+        req = str(self.common_cap_req)
+        resp = self.app.get(req)
+        eq_(resp.content_type, 'application/xml')
+        xml = resp.lxml
+
+        assert validate_with_xsd(
+            xml, xsd_name='wmts/1.0/wmtsGetCapabilities_response.xsd')
+        eq_(set(xml.xpath('//wmts:Layer/ows:Identifier/text()',
+                          namespaces=ns_wmts)), set(['cache', 'multi_cache']))
+        eq_(set(xml.xpath('//wmts:Contents/wmts:TileMatrixSet/ows:Identifier/text()',
+                          namespaces=ns_wmts)), set(['gk3', 'GLOBAL_WEBMERCATOR', 'utm32', 'InspireCrs84Quad']))
+
+    def test_wms_capabilities(self):
+        req = WMS111CapabilitiesRequest(url='/service?')
+        resp = self.app.get(req)
+        eq_(resp.content_type, 'application/vnd.ogc.wms_xml')
+        xml = resp.lxml
+        eq_(xml.xpath('//GetMap//OnlineResource/@xlink:href',
+                      namespaces=dict(xlink="http://www.w3.org/1999/xlink"))[0],
+            'http://localhost/service?')
+
+        layer_names = set(xml.xpath('//Layer/Layer/Name/text()'))
+        expected_names = set(['wms_only', 'cache'])
+        eq_(layer_names, expected_names)
+
+    def test_get_tile_webmerc(self):
+        serv = MockServ(42423, bbox_aware_query_comparator=True)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=-20037508.3428,0.0,0.0,20037508.3428&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A3857&request=GetMap&height=256').returns(TEST_TILE)
+        with serv:
+            resp = self.app.get(str(self.common_tile_req))
+        eq_(resp.content_type, 'image/png')
+        data = BytesIO(resp.body)
+        assert is_png(data)
+
+    def test_get_tile_utm(self):
+        serv = MockServ(42423, bbox_aware_query_comparator=True)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=-46133.17,5675047.40429,580038.965712,6301219.54&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        self.common_tile_req.params['tilematrixset'] = 'utm32'
+
+        with serv:
+            resp = self.app.get(str(self.common_tile_req))
+        eq_(resp.content_type, 'image/png')
+        data = BytesIO(resp.body)
+        assert is_png(data)
+
+    def test_get_tile_cascaded_cache(self):
+        serv = MockServ(
+            42423, bbox_aware_query_comparator=True, unordered=True)
+        # gk3 cache requests UTM tiles
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=423495.931784,5596775.88732,501767.448748,5675047.40429&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=345224.41482,5596775.88732,423495.931784,5675047.40429&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=345224.41482,5518504.37036,423495.931784,5596775.88732&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=423495.931784,5518504.37036,501767.448748,5596775.88732&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=345224.41482,5440232.8534,423495.931784,5518504.37036&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        serv.expects(
+            '/service?layers=foo,bar&width=256&version=1.1.1&bbox=423495.931784,5440232.8534,501767.448748,5518504.37036&service=WMS&format=image%2Fpng&styles=&srs=EPSG%3A25832&request=GetMap&height=256').returns(TEST_TILE)
+        self.common_tile_req.params['tilematrixset'] = 'gk3'
+        with serv:
+            resp = self.app.get(str(self.common_tile_req))
+        eq_(resp.content_type, 'image/png')
+        data = BytesIO(resp.body)
+        assert is_png(data)
diff --git a/mapproxy/test/system/test_wmts.py b/mapproxy/test/system/test_wmts.py
index 65c1f4d..257c3ec 100644
--- a/mapproxy/test/system/test_wmts.py
+++ b/mapproxy/test/system/test_wmts.py
@@ -76,7 +76,9 @@ class TestWMTS(SystemTest):
         eq_(resp.content_type, 'application/xml')
         xml = resp.lxml
         assert validate_with_xsd(xml, xsd_name='wmts/1.0/wmtsGetCapabilities_response.xsd')
-        eq_(len(xml.xpath('//wmts:Layer', namespaces=ns_wmts)), 5)
+        eq_(xml.xpath('//wmts:Layer/ows:Identifier/text()', namespaces=ns_wmts),
+            ['wms_cache','wms_cache_multi','tms_cache','tms_cache_ul','gk3_cache'],
+        )
         eq_(len(xml.xpath('//wmts:Contents/wmts:TileMatrixSet', namespaces=ns_wmts)), 5)
 
         goog_matrixset = xml.xpath('//wmts:Contents/wmts:TileMatrixSet[./ows:Identifier/text()="GoogleMapsCompatible"]', namespaces=ns_wmts)[0]
diff --git a/mapproxy/test/unit/test_cache_tile.py b/mapproxy/test/unit/test_cache_tile.py
index de3e8f4..284d22c 100644
--- a/mapproxy/test/unit/test_cache_tile.py
+++ b/mapproxy/test/unit/test_cache_tile.py
@@ -254,12 +254,22 @@ class TestMBTileCache(TileCacheTestBase):
         TileCacheTestBase.setup(self)
         self.cache = MBTilesCache(os.path.join(self.cache_dir, 'tmp.mbtiles'))
 
+    def teardown(self):
+        if self.cache:
+            self.cache.cleanup()
+        TileCacheTestBase.teardown(self)
+
     def test_load_empty_tileset(self):
         assert self.cache.load_tiles([Tile(None)]) == True
         assert self.cache.load_tiles([Tile(None), Tile(None), Tile(None)]) == True
 
-    def test_load_1001_tiles(self):
-        assert_raises(CacheBackendError, self.cache.load_tiles, [Tile((19, 1, 1))] * 1001)
+    def test_load_more_than_2000_tiles(self):
+        # prepare data
+        for i in range(0, 2010):
+            assert self.cache.store_tile(Tile((i, 0, 10),  ImageSource(BytesIO(b'foo'))))
+
+        tiles = [Tile((i, 0, 10)) for i in range(0, 2010)]
+        assert self.cache.load_tiles(tiles)
 
     def test_timeouts(self):
         self.cache._db_conn_cache.db = sqlite3.connect(self.cache.mbtile_file, timeout=0.05)
diff --git a/mapproxy/test/unit/test_client.py b/mapproxy/test/unit/test_client.py
index 8ed0939..1c000d6 100644
--- a/mapproxy/test/unit/test_client.py
+++ b/mapproxy/test/unit/test_client.py
@@ -144,7 +144,7 @@ class TestHTTPClient(object):
                 assert_re(e.args[0], r'Could not verify connection to URL')
 
     def test_timeouts(self):
-        test_req = ({'path': '/', 'req_assert_function': lambda x: time.sleep(0.5) or True},
+        test_req = ({'path': '/', 'req_assert_function': lambda x: time.sleep(0.9) or True},
                     {'body': b'nothing'})
 
         import mapproxy.client.http
@@ -153,7 +153,7 @@ class TestHTTPClient(object):
         mapproxy.client.http._max_set_timeout = None
 
         client1 = HTTPClient(timeout=0.1)
-        client2 = HTTPClient(timeout=0.2)
+        client2 = HTTPClient(timeout=0.5)
         with mock_httpd(TESTSERVER_ADDRESS, [test_req]):
             try:
                 start = time.time()
@@ -174,14 +174,9 @@ class TestHTTPClient(object):
                 assert False, 'HTTPClientError expected'
             duration2 = time.time() - start
 
-        if sys.version_info >= (2, 6):
-            # check individual timeouts
-            assert 0.1 <= duration1 < 0.2
-            assert 0.2 <= duration2 < 0.3
-        else:
-            # use max timeout in Python 2.5
-            assert 0.2 <= duration1 < 0.3
-            assert 0.2 <= duration2 < 0.3
+        # check individual timeouts
+        assert 0.1 <= duration1 < 0.5, duration1
+        assert 0.5 <= duration2 < 0.9, duration2
 
         mapproxy.client.http._max_set_timeout = old_timeout
 
diff --git a/mapproxy/test/unit/test_conf_loader.py b/mapproxy/test/unit/test_conf_loader.py
index b3ae990..848cab2 100644
--- a/mapproxy/test/unit/test_conf_loader.py
+++ b/mapproxy/test/unit/test_conf_loader.py
@@ -24,6 +24,7 @@ from mapproxy.config.loader import (
     merge_dict,
     ConfigurationError,
 )
+from mapproxy.config.spec import validate_options
 from mapproxy.cache.tile import TileManager
 from mapproxy.test.helper import TempFile
 from mapproxy.test.unit.test_grid import assert_almost_equal_bbox
@@ -235,6 +236,8 @@ class TestLayerConfiguration(object):
 
     def test_without_sources_or_layers(self):
         conf = self._test_conf('''
+            services:
+                wms:
             layers:
               title: Root Layer
               layers:
@@ -242,12 +245,14 @@ class TestLayerConfiguration(object):
                   title: Layer One
         ''')
         conf = ProxyConfiguration(conf)
+        assert conf.wms_root_layer.wms_layer() == None
         try:
-            conf.wms_root_layer.wms_layer()
-        except ValueError:
+            conf.services.services()
+        except ConfigurationError:
+            # found no WMS layer
             pass
         else:
-            assert False, 'expected ValueError'
+            assert False, 'expected ConfigurationError'
 
 
 class TestGridConfiguration(object):
@@ -512,6 +517,35 @@ class TestWMSSourceConfiguration(object):
             raise SkipTest('no ssl support')
 
 
+class TestBandMergeConfig(object):
+
+    def test_invalid_band(self):
+        conf_dict = {
+            'caches': {
+                'osm': {
+                    'sources': {'f': [{'source': 'foo', 'band': 1}]},
+                    'grids': ['GLOBAL_WEBMERCATOR'],
+                }
+            }
+        }
+        errors, informal_only = validate_options(conf_dict)
+        eq_(len(errors), 1)
+        assert "unknown 'f' in caches" in errors[0]
+
+    def test_no_band_cache(self):
+        conf_dict = {
+            'caches': {
+                'osm': {
+                    'sources': {'l': [{'source': 'foo'}]},
+                    'grids': ['GLOBAL_WEBMERCATOR'],
+                }
+            }
+        }
+        errors, informal_only = validate_options(conf_dict)
+        eq_(len(errors), 1)
+        assert "missing 'band', not in caches" in errors[0], errors
+
+
 def load_services(conf_file):
     conf = load_configuration(conf_file)
     return conf.configured_services()
diff --git a/mapproxy/test/unit/test_conf_validator.py b/mapproxy/test/unit/test_conf_validator.py
index 21ecb23..c914060 100644
--- a/mapproxy/test/unit/test_conf_validator.py
+++ b/mapproxy/test/unit/test_conf_validator.py
@@ -101,6 +101,18 @@ class TestValidator(object):
             'Missing services section'
         ])
 
+    def test_tile_source(self):
+        conf = self._test_conf('''
+            layers:
+                - name: one
+                  tile_sources: [missing]
+        ''')
+
+        errors = validate_references(conf)
+        eq_(errors, [
+            "Tile source 'missing' for layer 'one' not in cache section"
+        ])
+
     def test_missing_grid(self):
         conf = self._test_conf('''
             caches:
@@ -329,3 +341,37 @@ class TestValidator(object):
 
         errors = validate_references(conf)
         eq_(errors, [])
+
+    def test_band_merge_missing_source(self):
+        conf = self._test_conf('''
+            caches:
+                one_cache:
+                    sources:
+                        l:
+                            - source: dop
+                              band: 1
+                              factor: 0.4
+                            - source: missing1
+                              band: 2
+                              factor: 0.2
+                            - source: cache_missing_source
+                              band: 2
+                              factor: 0.2
+                    grids: [GLOBAL_MERCATOR]
+                cache_missing_source:
+                    sources: [missing2]
+                    grids: [GLOBAL_MERCATOR]
+
+            sources:
+                dop:
+                    type: wms
+                    req:
+                        url: http://localhost/service?
+                        layers: dop
+        ''')
+
+        errors = validate_references(conf)
+        eq_(errors, [
+            "Source 'missing1' for cache 'one_cache' not found in config",
+            "Source 'missing2' for cache 'cache_missing_source' not found in config",
+        ])
\ No newline at end of file
diff --git a/mapproxy/test/unit/test_geom.py b/mapproxy/test/unit/test_geom.py
index 3f39711..e5a455b 100644
--- a/mapproxy/test/unit/test_geom.py
+++ b/mapproxy/test/unit/test_geom.py
@@ -15,9 +15,12 @@
 
 from __future__ import division, with_statement
 
+import os
+
 from mapproxy.srs import SRS, bbox_equals
 from mapproxy.util.geom import (
     load_polygons,
+    load_datasource,
     transform_geometry,
     geom_support,
     bbox_polygon,
@@ -345,3 +348,19 @@ class TestMapExtent(object):
         bbox = SRS(3857).transform_bbox_to(SRS(4326), (0, 0, 100000, 100000), 0)
         assert bbox_equals(bbox, sub.bbox)
 
+
+class TestLoadDatasource(object):
+    def test_shp(self):
+        polygon_file = os.path.join(os.path.dirname(__file__), 'polygons', 'polygons.shp')
+        geoms = load_datasource(polygon_file)
+        eq_(len(geoms), 3)
+
+    def test_wkt(self):
+        with TempFile() as fname:
+            with open(fname, 'wb') as f:
+                f.write(VALID_POLYGON1)
+                f.write(b"\n")
+                f.write(VALID_POLYGON1)
+
+            geoms = load_datasource(fname)
+            eq_(len(geoms), 2)
diff --git a/mapproxy/test/unit/test_image.py b/mapproxy/test/unit/test_image.py
index 69e5de9..8435834 100644
--- a/mapproxy/test/unit/test_image.py
+++ b/mapproxy/test/unit/test_image.py
@@ -21,7 +21,7 @@ from io import BytesIO
 from mapproxy.compat.image import Image, ImageDraw
 from mapproxy.image import ImageSource, ReadBufWrapper, is_single_color_image
 from mapproxy.image import peek_image_format
-from mapproxy.image.merge import merge_images
+from mapproxy.image.merge import merge_images, BandMerger
 from mapproxy.image import _make_transparent as make_transparent, SubImageSource, img_has_transparency, quantize
 from mapproxy.image.opts import ImageOptions
 from mapproxy.image.tile import TileMerger, TileSplitter
@@ -90,6 +90,21 @@ class TestImageSource(object):
         assert is_tiff(ir.as_buffer(TIFF_FORMAT))
         assert is_tiff(ir.as_buffer())
 
+
+    def test_output_formats_greyscale_png(self):
+        img = Image.new('L', (100, 100))
+        ir = ImageSource(img, image_opts=PNG_FORMAT)
+        img = Image.open(ir.as_buffer(ImageOptions(colors=256, transparent=True, format='image/png')))
+        assert img.mode == 'P'
+        assert img.getpixel((0, 0)) == 255
+
+    def test_output_formats_greyscale_alpha_png(self):
+        img = Image.new('LA', (100, 100))
+        ir = ImageSource(img, image_opts=PNG_FORMAT)
+        img = Image.open(ir.as_buffer(ImageOptions(colors=256, transparent=True, format='image/png')))
+        assert img.mode == 'LA'
+        assert img.getpixel((0, 0)) == (0, 0)
+
     def test_output_formats_png8(self):
         img = Image.new('RGBA', (100, 100))
         ir = ImageSource(img, image_opts=PNG_FORMAT)
@@ -394,7 +409,7 @@ class TestTransform(object):
         result = transformer.transform(self.src_img, self.src_bbox, self.dst_size, self.dst_bbox,
             image_opts=ImageOptions(resampling='nearest'))
         assert isinstance(result, ImageSource)
-        assert result.as_image() != self.src_img
+        assert result.as_image() != self.src_img.as_image()
         assert result.size == (100, 150)
 
     def _test_compare_mesh_div(self):
@@ -560,3 +575,184 @@ class TestPeekImageFormat(object):
         buf = BytesIO()
         Image.new('RGB', (100, 100)).save(buf, format)
         eq_(peek_image_format(buf), expected_format)
+
+class TestBandMerge(object):
+    def setup(self):
+        self.img0 = ImageSource(Image.new('RGB', (10, 10), (0, 10, 20)))
+        self.img1 = ImageSource(Image.new('RGB', (10, 10), (100, 110, 120)))
+        self.img2 = ImageSource(Image.new('RGB', (10, 10), (200, 210, 220)))
+        self.img3 = ImageSource(Image.new('RGB', (10, 10), (0, 255, 0)))
+
+    def test_merge_noops(self):
+        """
+        Check that black image is returned for no ops.
+        """
+        merger = BandMerger(mode='RGB')
+
+        img_opts = ImageOptions('RGB')
+        result = merger.merge([self.img0], img_opts)
+        img = result.as_image()
+        eq_(img.size, (10, 10))
+        eq_(img.getpixel((0, 0)), (0, 0, 0))
+
+    def test_merge_no_source(self):
+        """
+        Check that empty source list returns BlankImageSource.
+        """
+        merger = BandMerger(mode='RGB')
+        merger.add_ops(dst_band=0, src_img=0, src_band=0)
+
+        img_opts = ImageOptions('RGBA', transparent=True)
+        result = merger.merge([], img_opts, size=(10, 10))
+        img = result.as_image()
+
+        eq_(img.size, (10, 10))
+        eq_(img.getpixel((0, 0)), (255, 255, 255, 0))
+
+    def test_rgb_merge(self):
+        """
+        Check merge of RGB bands
+        """
+        merger = BandMerger(mode='RGB')
+
+        merger.add_ops(dst_band=1, src_img=0, src_band=0, factor=0.5)
+        merger.add_ops(dst_band=1, src_img=3, src_band=1, factor=0.5)
+        merger.add_ops(dst_band=0, src_img=2, src_band=1)
+        merger.add_ops(dst_band=2, src_img=1, src_band=2)
+
+        img_opts = ImageOptions('RGB')
+        result = merger.merge([self.img0, self.img1, self.img2, self.img3], img_opts)
+        img = result.as_image()
+
+        eq_(img.getpixel((0, 0)), (210, 127, 120))
+
+    def test_rgb_merge_missing(self):
+        """
+        Check missing band is set to 0
+        """
+        merger = BandMerger(mode='RGB')
+
+        merger.add_ops(dst_band=0, src_img=2, src_band=1)
+        merger.add_ops(dst_band=2, src_img=1, src_band=2)
+
+        img_opts = ImageOptions('RGB')
+        result = merger.merge([self.img0, self.img1, self.img2, self.img3], img_opts)
+        img = result.as_image()
+
+        eq_(img.getpixel((0, 0)), (210, 0, 120))
+
+    def test_rgba_merge(self):
+        """
+        Check merge of RGBA bands
+        """
+        merger = BandMerger(mode='RGBA')
+
+        merger.add_ops(dst_band=1, src_img=0, src_band=0, factor=0.5)
+        merger.add_ops(dst_band=1, src_img=3, src_band=1, factor=0.5)
+        merger.add_ops(dst_band=0, src_img=2, src_band=1)
+        merger.add_ops(dst_band=2, src_img=1, src_band=2)
+        merger.add_ops(dst_band=3, src_img=1, src_band=1)
+
+        img_opts = ImageOptions('RGBA')
+        result = merger.merge([self.img0, self.img1, self.img2, self.img3], img_opts)
+        img = result.as_image()
+
+        eq_(img.getpixel((0, 0)), (210, 127, 120, 110))
+
+    def test_rgba_merge_missing_a(self):
+        """
+        Check that missing alpha band defaults to opaque
+        """
+        merger = BandMerger(mode='RGBA')
+
+        merger.add_ops(dst_band=1, src_img=0, src_band=0, factor=0.5)
+        merger.add_ops(dst_band=1, src_img=3, src_band=1, factor=0.5)
+        merger.add_ops(dst_band=0, src_img=2, src_band=1)
+        merger.add_ops(dst_band=2, src_img=1, src_band=2)
+
+        img_opts = ImageOptions('RGBA')
+        result = merger.merge([self.img0, self.img1, self.img2, self.img3], img_opts)
+        img = result.as_image()
+
+        eq_(img.getpixel((0, 0)), (210, 127, 120, 255))
+
+    def test_l_merge(self):
+        """
+        Check merge bands to grayscale image
+        """
+        merger = BandMerger(mode='L')
+
+        merger.add_ops(dst_band=0, src_img=0, src_band=2, factor=0.2)
+        merger.add_ops(dst_band=0, src_img=2, src_band=1, factor=0.3)
+        merger.add_ops(dst_band=0, src_img=3, src_band=1, factor=0.5)
+
+        img_opts = ImageOptions('L')
+        result = merger.merge([self.img0, self.img1, self.img2, self.img3], img_opts)
+        img = result.as_image()
+
+        eq_(img.getpixel((0, 0)), int(20*0.2) + int(210*0.3) + int(255*0.5))
+
+    def test_p_merge(self):
+        """
+        Check merge bands to paletted image
+        """
+        merger = BandMerger(mode='RGB')
+
+        merger.add_ops(dst_band=1, src_img=0, src_band=0, factor=0.5)
+        merger.add_ops(dst_band=1, src_img=3, src_band=1, factor=0.5)
+        merger.add_ops(dst_band=0, src_img=2, src_band=1)
+        merger.add_ops(dst_band=2, src_img=1, src_band=2)
+
+        img_opts = ImageOptions('P', format='image/png', encoding_options={'quantizer': 'mediancut'})
+        result = merger.merge([self.img0, self.img1, self.img2, self.img3], img_opts)
+
+        # need to encode to get conversion to P
+        img = Image.open(result.as_buffer())
+
+        eq_(img.mode, 'P')
+        img = img.convert('RGB')
+        eq_(img.getpixel((0, 0)), (210, 127, 120))
+
+    def test_from_p_merge(self):
+        """
+        Check merge bands from paletted image
+        """
+        merger = BandMerger(mode='RGB')
+
+        merger.add_ops(dst_band=0, src_img=0, src_band=2)
+        merger.add_ops(dst_band=1, src_img=0, src_band=1)
+        merger.add_ops(dst_band=2, src_img=0, src_band=0)
+
+        img = Image.new('RGB', (10, 10), (0, 100, 200)).quantize(256)
+        eq_(img.mode, 'P')
+        # src img is P but we can still access RGB bands
+        src_img = ImageSource(img)
+
+        img_opts = ImageOptions('RGB')
+        result = merger.merge([src_img], img_opts)
+
+        img = result.as_image()
+        eq_(img.mode, 'RGB')
+        eq_(img.getpixel((0, 0)), (200, 100, 0))
+
+    def test_from_mixed_merge(self):
+        """
+        Check merge RGBA bands from image without alpha (mixed)
+        """
+        merger = BandMerger(mode='RGBA')
+
+        merger.add_ops(dst_band=0, src_img=0, src_band=2)
+        merger.add_ops(dst_band=1, src_img=0, src_band=1)
+        merger.add_ops(dst_band=2, src_img=0, src_band=0)
+        merger.add_ops(dst_band=3, src_img=0, src_band=3)
+
+        img = Image.new('RGB', (10, 10), (0, 100, 200))
+        src_img = ImageSource(img)
+
+        img_opts = ImageOptions('RGBA')
+        result = merger.merge([src_img], img_opts)
+
+        img = result.as_image()
+        eq_(img.mode, 'RGBA')
+        eq_(img.getpixel((0, 0)), (200, 100, 0, 255))
+
diff --git a/mapproxy/test/unit/test_request.py b/mapproxy/test/unit/test_request.py
index da40da2..e99d972 100644
--- a/mapproxy/test/unit/test_request.py
+++ b/mapproxy/test/unit/test_request.py
@@ -22,6 +22,7 @@ from mapproxy.request.tile import TMSRequest, tile_request, TileRequest
 from mapproxy.request.wms import (wms_request, WMSMapRequest, WMSMapRequestParams,
                               WMS111MapRequest, WMS100MapRequest, WMS130MapRequest,
                               WMS111FeatureInfoRequest)
+from mapproxy.request.arcgis import ArcGISRequest
 from mapproxy.exception import RequestError
 from mapproxy.request.wms.exception import (WMS111ExceptionHandler, WMSImageExceptionHandler,
                                      WMSBlankExceptionHandler)
@@ -214,6 +215,24 @@ class TestWMS111FeatureInfoRequest(TestWMSMapRequest):
         eq_(req.params.pos_coords, (7.25, 50.5))
 
 
+class TestArcGISRequest(object):
+    def test_base_request(self):
+        req = ArcGISRequest(url="http://example.com/ArcGIS/rest/MapServer/")
+        eq_("http://example.com/ArcGIS/rest/MapServer/export", req.url)
+        req.params.bbox = [-180.0, -90.0, 180.0, 90.0]
+        eq_((-180.0, -90.0, 180.0, 90.0), req.params.bbox)
+        eq_("-180.0,-90.0,180.0,90.0", req.params["bbox"])
+        req.params.size = [256, 256]
+        eq_((256, 256), req.params.size)
+        eq_("256,256", req.params["size"])
+        req.params.imageSR = "EPSG:4326"
+        eq_("4326", req.params.imageSR)
+        eq_("4326", req.params["imageSR"])
+        req.params.bboxSR = SRS("EPSG:4326")
+        eq_("4326", req.params.bboxSR)
+        eq_("4326", req.params["bboxSR"])
+
+
 class TestRequest(object):
     def setup(self):
         self.env = {
diff --git a/mapproxy/test/unit/test_utils.py b/mapproxy/test/unit/test_utils.py
index 29c4511..3190393 100644
--- a/mapproxy/test/unit/test_utils.py
+++ b/mapproxy/test/unit/test_utils.py
@@ -364,6 +364,7 @@ class TestCleanupDirectory(DirTest):
 
     def test_remove_some(self):
         files = []
+        # create a few files, every other file is one week old
         new_date = timestamp_before(weeks=1)
         for n in range(10):
             fname = 'foo'+str(n)
@@ -372,17 +373,24 @@ class TestCleanupDirectory(DirTest):
                 os.utime(filename, (new_date, new_date))
             files.append(filename)
 
+        # check all files are present
         for filename in files:
             assert os.path.exists(filename), filename
-        cleanup_directory(self.tmpdir, timestamp_before())
+
+        # cleanup_directory for all files older then one minute
+        cleanup_directory(self.tmpdir, timestamp_before(minutes=1))
+
+        # check old files and dirs are removed
         for filename in files[::2]:
             assert not os.path.exists(filename), filename
             assert not os.path.exists(os.path.dirname(filename)), filename
+
+        # check new files are still present
         for filename in files[1::2]:
             assert os.path.exists(filename), filename
 
-def write_atomic_data(xxx_todo_changeme):
-    (i, filename) = xxx_todo_changeme
+def _write_atomic_data(i_filename):
+    (i, filename) = i_filename
     data = str(i) + '\n' + 'x' * 10000
     write_atomic(filename, data.encode('utf-8'))
     time.sleep(0.001)
@@ -402,7 +410,7 @@ class TestWriteAtomic(object):
         concurrent_writes = 8
 
         p = multiprocessing.Pool(concurrent_writes)
-        p.map(write_atomic_data, ((i, filename) for i in range(num_writes)))
+        p.map(_write_atomic_data, ((i, filename) for i in range(num_writes)))
         p.close()
         p.join()
 
diff --git a/mapproxy/util/ext/dictspec/validator.py b/mapproxy/util/ext/dictspec/validator.py
index 69c9678..efa03af 100644
--- a/mapproxy/util/ext/dictspec/validator.py
+++ b/mapproxy/util/ext/dictspec/validator.py
@@ -132,7 +132,7 @@ class Validator(object):
         for k in iterkeys(spec):
             if isinstance(k, required):
                 if k not in data:
-                    self._handle_error("missing '%s' not in %s" %
+                    self._handle_error("missing '%s', not in %s" %
                         (k, self.context.current_pos))
             if isinstance(k, anything):
                 accept_any_key = True
diff --git a/mapproxy/util/ext/odict.py b/mapproxy/util/ext/odict.py
index c1e1f97..774099d 100644
--- a/mapproxy/util/ext/odict.py
+++ b/mapproxy/util/ext/odict.py
@@ -282,7 +282,7 @@ class odict(dict):
     def setdefault(self, key, default=None):
         if key not in self:
             self._keys.append(key)
-        dict.setdefault(self, key, default)
+        return dict.setdefault(self, key, default)
 
     def update(self, *args, **kwargs):
         sources = []
diff --git a/mapproxy/util/ext/wmsparse/parse.py b/mapproxy/util/ext/wmsparse/parse.py
index 2b07666..59229a3 100644
--- a/mapproxy/util/ext/wmsparse/parse.py
+++ b/mapproxy/util/ext/wmsparse/parse.py
@@ -53,7 +53,7 @@ class WMSCapabilities(object):
 
     def parse_contact(self):
         elem = self.find(self.tree, 'Service/ContactInformation')
-        if not elem:
+        if elem is None or len(elem) is 0:
             elem = etree.Element(None)
         md = dict(
             person = self.findtext(elem, 'ContactPersonPrimary/ContactPerson'),
@@ -302,4 +302,4 @@ def parse_capabilities(fileobj):
 if __name__ == '__main__':
     import sys
     cap = parse_capabilities(sys.argv[1])
-    yaml_sources(cap)
\ No newline at end of file
+    yaml_sources(cap)
diff --git a/mapproxy/util/geom.py b/mapproxy/util/geom.py
index b767652..7ea1ffb 100644
--- a/mapproxy/util/geom.py
+++ b/mapproxy/util/geom.py
@@ -57,9 +57,9 @@ def load_datasource(datasource, where=None):
     """
     # check if it is a  wkt file
     if os.path.exists(os.path.abspath(datasource)):
-        with open(os.path.abspath(datasource), 'r') as fp:
+        with open(os.path.abspath(datasource), 'rb') as fp:
             data = fp.read(50)
-        if data.lower().lstrip().startswith(('polygon', 'multipolygon')):
+        if data.lower().lstrip().startswith((b'polygon', b'multipolygon')):
             return load_polygons(datasource)
 
     # otherwise pass to OGR
@@ -78,7 +78,7 @@ def load_ogr_datasource(datasource, where=None):
         with closing(OGRShapeReader(datasource)) as reader:
             for wkt in reader.wkts(where):
                 try:
-                    geom = shapely.wkt.loads(wkt)
+                    geom = shapely.wkt.loads(wkt.decode())
                 except ReadingError as ex:
                     raise GeometryError(ex)
                 if geom.type == 'Polygon':
diff --git a/mapproxy/util/ogr.py b/mapproxy/util/ogr.py
index a18a930..b1a627e 100644
--- a/mapproxy/util/ogr.py
+++ b/mapproxy/util/ogr.py
@@ -118,6 +118,9 @@ class CtypesOGRShapeReader(object):
             if feature is None:
                 break
             geom = libgdal.OGR_F_GetGeometryRef(feature)
+            if geom is None:
+                libgdal.OGR_F_Destroy(feature)
+                continue
             res = c_char_p()
             libgdal.OGR_G_ExportToWkt(geom, ctypes.byref(res))
             yield res.value
diff --git a/pylint.ini b/pylint.ini
new file mode 100644
index 0000000..d8b7aad
--- /dev/null
+++ b/pylint.ini
@@ -0,0 +1,237 @@
+[MASTER]
+
+# Specify a configuration file.
+#rcfile=
+
+# Python code to execute, usually for sys.path manipulation such as
+# pygtk.require().
+#init-hook=
+
+# Profiled execution.
+profile=no
+
+# Add <file or directory> to the black list. It should be a base name, not a
+# path. You may set this option multiple times.
+ignore=test
+
+# Pickle collected data for later comparisons.
+persistent=yes
+
+# List of plugins (as comma separated values of python modules names) to load,
+# usually to register additional checkers.
+load-plugins=
+
+
+[MESSAGES CONTROL]
+
+# Enable the message, report, category or checker with the given id(s). You can
+# either give multiple identifier separated by comma (,) or put this option
+# multiple time.
+#enable=
+
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifier separated by comma (,) or put this option
+# multiple time (only on the command line, not in the configuration file where
+# it should appears only once).
+disable=W0231
+
+
+[REPORTS]
+
+# Set the output format. Available formats are text, parseable, colorized, msvs
+# (visual studio) and html
+output-format=text
+
+# Include message's id in output
+include-ids=no
+
+# Put messages in a separate file for each module / package specified on the
+# command line instead of printing them on stdout. Reports (if any) will be
+# written in a file name "pylint_global.[txt|html]".
+files-output=no
+
+# Tells whether to display a full report or only the messages
+reports=yes
+
+# Python expression which should return a note less than 10 (10 is the highest
+# note). You have access to the variables errors warning, statement which
+# respectively contain the number of errors / warnings messages and the total
+# number of statements analyzed. This is used by the global evaluation report
+# (R0004).
+evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
+
+# Add a comment according to your evaluation note. This is used by the global
+# evaluation report (R0004).
+comment=no
+
+
+[BASIC]
+
+# Required attributes for module, separated by a comma
+required-attributes=
+
+# List of builtins function names that should not be used, separated by a comma
+bad-functions=map,filter,apply,input
+
+# Regular expression which should only match correct module names
+module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
+
+# Regular expression which should only match correct module level names
+const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__)|log)$
+
+# Regular expression which should only match correct class names
+class-rgx=[A-Z_][a-zA-Z0-9]+$
+
+# Regular expression which should only match correct function names
+function-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct method names
+method-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct instance attribute names
+attr-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct argument names
+argument-rgx=([a-z_][a-z0-9_]{2,30}|[xyz][01s]?|ll|ur)$
+
+# Regular expression which should only match correct variable names
+variable-rgx=([a-z_][a-z0-9_]{2,30}|[xyz][01s]?|ll|ur)$
+
+# Regular expression which should only match correct list comprehension /
+# generator expression variable names
+inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
+
+# Good variable names which should always be accepted, separated by a comma
+good-names=i,j,k,ex,Run,_
+
+# Bad variable names which should always be refused, separated by a comma
+bad-names=foo,bar,baz,toto,tutu,tata
+
+# Regular expression which should only match functions or classes name which do
+# not require a docstring
+no-docstring-rgx=_.*
+
+
+[FORMAT]
+
+# Maximum number of characters on a single line.
+max-line-length=90
+
+# Maximum number of lines in a module
+max-module-lines=1000
+
+# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
+# tab).
+indent-string='    '
+
+
+[MISCELLANEOUS]
+
+# List of note tags to take in consideration, separated by a comma.
+notes=FIXME,XXX,TODO
+
+
+[SIMILARITIES]
+
+# Minimum lines number of a similarity.
+min-similarity-lines=4
+
+# Ignore comments when computing similarities.
+ignore-comments=yes
+
+# Ignore docstrings when computing similarities.
+ignore-docstrings=yes
+
+
+[TYPECHECK]
+
+# Tells whether missing members accessed in mixin class should be ignored. A
+# mixin class is detected if its name ends with "mixin" (case insensitive).
+ignore-mixin-members=yes
+
+# List of classes names for which member attributes should not be checked
+# (useful for classes with attributes dynamically set).
+ignored-classes=SQLObject,hashlib
+
+# When zope mode is activated, add a predefined set of Zope acquired attributes
+# to generated-members.
+zope=no
+
+# List of members which are set dynamically and missed by pylint inference
+# system, and so shouldn't trigger E0201 when accessed.
+generated-members=REQUEST,acl_users,aq_parent
+
+
+[VARIABLES]
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# A regular expression matching names used for dummy variables (i.e. not used).
+dummy-variables-rgx=_|dummy
+
+# List of additional names supposed to be defined in builtins. Remember that
+# you should avoid to define new builtins when possible.
+additional-builtins=
+
+
+[CLASSES]
+
+# List of interface methods to ignore, separated by a comma. This is used for
+# instance to not check methods defines in Zope's Interface base class.
+ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
+
+# List of method names used to declare (i.e. assign) instance attributes.
+defining-attr-methods=__init__,__new__,setUp
+
+
+[DESIGN]
+
+# Maximum number of arguments for function / method
+max-args=8
+
+# Argument names that match this expression will be ignored. Default to name
+# with leading underscore
+ignored-argument-names=_.*
+
+# Maximum number of locals for function / method body
+max-locals=15
+
+# Maximum number of return / yield for function / method body
+max-returns=6
+
+# Maximum number of branch for function / method body
+max-branchs=12
+
+# Maximum number of statements in function / method body
+max-statements=50
+
+# Maximum number of parents for a class (see R0901).
+max-parents=7
+
+# Maximum number of attributes for a class (see R0902).
+max-attributes=10
+
+# Minimum number of public methods for a class (see R0903).
+min-public-methods=1
+
+# Maximum number of public methods for a class (see R0904).
+max-public-methods=20
+
+
+[IMPORTS]
+
+# Deprecated modules which should not be used, separated by a comma
+deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
+
+# Create a graph of every (i.e. internal and external) dependencies in the
+# given file (report RP0402 must not be disabled)
+import-graph=
+
+# Create a graph of external dependencies in the given file (report RP0402 must
+# not be disabled)
+ext-import-graph=
+
+# Create a graph of internal dependencies in the given file (report RP0402 must
+# not be disabled)
+int-import-graph=
diff --git a/release.py b/release.py
new file mode 100644
index 0000000..ce9faec
--- /dev/null
+++ b/release.py
@@ -0,0 +1,121 @@
+try:
+    from nose.plugins.skip import SkipTest
+    import sys
+    if 'nosetest' in ''.join(sys.argv):
+        raise SkipTest()
+except ImportError:
+    pass
+
+import scriptine
+from scriptine import path
+from scriptine.shell import backtick_, sh
+
+PACKAGE_NAME = 'MapProxy'
+REMOTE_DOC_LOCATION = 'omniscale.de:domains/mapproxy.org/docs'
+REMOTE_REL_LOCATION = 'omniscale.de:domains/mapproxy.org/static/rel'
+
+VERSION_FILES = [
+    ('setup.py', 'version="###"'),
+    ('doc/conf.py', "version = '##'"),
+    ('doc/conf.py', "release = '###'"),
+]
+
+def version_command():
+    print version()
+
+def prepare_command(tag=""):
+    sh('python setup.py egg_info -D -b "%s"' % tag)
+
+def version():
+    package_name = PACKAGE_NAME
+    version = backtick_('grep Version: %(package_name)s.egg-info/PKG-INFO' % locals())
+    version = version.split(':')[-1].strip()
+    return version
+
+def clean_all_command():
+    path('build/').rmtree(ignore_errors=True)
+    for pyc in path.cwd().walkfiles('*.pyc'):
+        pyc.remove()
+
+def bump_version_command(version):
+    short_version = '.'.join(version.split('.')[:2])
+    for filename, replace in VERSION_FILES:
+        if '###' in replace:
+            search_for = replace.replace('###', '[^\'"]+')
+            replace_with = replace.replace('###', version)
+        else:
+            search_for = replace.replace('##', '[^\'"]+')
+            replace_with = replace.replace('##', short_version)
+
+        search_for = search_for.replace('"', '\\"')
+        replace_with = replace_with.replace('"', '\\"')
+        sh('''perl -p -i -e "s/%(search_for)s/%(replace_with)s/" %(filename)s ''' % locals())
+
+    prepare_command()
+
+def build_docs_command():
+    sh('python setup.py build_sphinx')
+    ver = version()
+    package_name = PACKAGE_NAME
+    sh("tar -c -v -z -C build/sphinx/ -f dist/%(package_name)s-docs-%(ver)s.tar.gz -s "
+       "'/^html/%(package_name)s-docs-%(ver)s/' html"
+        % locals())
+
+def upload_docs_command():
+    ver = version()
+    remote_doc_location = REMOTE_DOC_LOCATION
+    sh('rsync -a -v -P -z build/sphinx/html/ %(remote_doc_location)s/%(ver)s' % locals())
+
+def build_sdist_command():
+    sh('python setup.py egg_info -b "" -D sdist')
+
+def build_wheel_command():
+    sh('python setup.py egg_info -b "" -D bdist_wheel')
+
+def upload_sdist_command():
+    sh('python setup.py egg_info -b "" -D sdist')
+    ver = version()
+    remote_rel_location = REMOTE_REL_LOCATION
+    sh('scp dist/MapProxy-%(ver)s.* %(remote_rel_location)s' % locals())
+
+def upload_final_sdist_command():
+    sh('python setup.py egg_info -b "" -D sdist upload')
+
+def upload_final_wheel_command():
+    sh('python setup.py egg_info -b "" -D bdist_wheel upload')
+
+def register_command():
+    sh('python setup.py egg_info -b "" -D register')
+
+def link_latest_command(ver=None):
+    if ver is None:
+        ver = version()
+    host, path = REMOTE_DOC_LOCATION.split(':')
+    sh('ssh %(host)s "cd %(path)s && rm latest && ln -s %(ver)s latest"' % locals())
+
+
+def update_deb_command():
+    import email.utils
+    import time
+    changelog_entry_template = """mapproxy (%(version)s) unstable; urgency=low
+
+  * New upstream release.
+
+ -- %(user)s <%(email)s>  %(time)s
+
+"""
+    with open('debian/changelog') as f:
+        old_changelog = f.read()
+
+    changelog = changelog_entry_template % {
+        'version': version(),
+        'user': backtick_('git config --get user.name').strip(),
+        'email': backtick_('git config --get user.email').strip(),
+        'time': email.utils.formatdate(time.time(), True),
+    }
+    changelog += old_changelog
+    with open('debian/changelog', 'w') as f:
+        f.write(changelog)
+
+if __name__ == '__main__':
+    scriptine.run()
diff --git a/requirements-travis.txt b/requirements-travis.txt
new file mode 100644
index 0000000..dc47f9b
--- /dev/null
+++ b/requirements-travis.txt
@@ -0,0 +1,9 @@
+WebTest==1.4.0
+webob==1.1.1
+lxml==2.3.5
+mocker==1.1.1
+nose==1.1.2
+Shapely==1.2.15
+PyYAML==3.10
+Pillow==1.7.7
+eventlet==0.9.17
\ No newline at end of file
diff --git a/setup.cfg b/setup.cfg
index ee4fd5f..d0d0a6b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -5,10 +5,8 @@ doctest-tests = 1
 with-doctest = 1
 
 [egg_info]
-tag_date = 0
-tag_build = 
-tag_svn_revision = 0
+#tag_build = .dev
+tag_date = true
 
 [bdist_wheel]
-universal = 1
-
+universal=1
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 434d606..11f23e4 100644
--- a/setup.py
+++ b/setup.py
@@ -54,7 +54,7 @@ def long_description(changelog_releases=10):
 
 setup(
     name='MapProxy',
-    version="1.8.2",
+    version="1.8.2a0",
     description='An accelerating proxy for web map services',
     long_description=long_description(7),
     author='Oliver Tonnhofer',
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..fc8b286
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,35 @@
+[tox]
+envlist = py26,py27,py33,py34,docs
+
+[testenv]
+commands = nosetests --with-xunit --xunit-file=nosetests-{envname}.xml mapproxy
+deps =
+    WebTest==2.0.10
+    lxml==3.2.4
+    nose==1.3.0
+    Shapely==1.3.2
+    PyYAML==3.10
+    Pillow==2.3.1
+    WebOb==1.2.3
+    beautifulsoup4==4.3.2
+    coverage==3.7
+    requests==2.0.1
+    six==1.4.1
+    waitress==0.8.7
+
+[testenv:hash]
+setenv =
+    PYTHONHASHSEED = 100
+
+[testenv:docs]
+changedir = doc
+basepython = python2.7
+sitepackages = True
+deps =
+    sphinx==1.2.2
+    sphinx-bootstrap-theme==0.4.7
+commands =
+    sphinx-build -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
+    sphinx-build -b latex -d {envtmpdir}/doctrees . {envtmpdir}/latex
+    make -C {envtmpdir}/latex all-pdf
+    rsync -a --delete-after {envtmpdir}/html/ {envtmpdir}/latex/MapProxy.pdf ssh-226270-upload at mapproxy.org:domains/mapproxy.org/docs/nightly/

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mapproxy.git



More information about the Pkg-grass-devel mailing list