Merge branch 'master' of github.com:mapnik/mapnik into release/image_data_any

Conflicts:
	tests/python_tests/pgraster_test.py
This commit is contained in:
Dane Springmeyer 2015-01-27 15:19:12 -08:00
commit dfb6116786
29 changed files with 864 additions and 85 deletions

View file

@ -5,14 +5,28 @@ sudo: false
addons:
postgresql: "9.3"
matrix:
include:
- os: osx
compiler: clang
env: JOBS=6
- os: linux
compiler: clang
env: JOBS=6
- os: linux
compiler: gcc
env: JOBS=2
install:
- psql -U postgres -c 'create database template_postgis;' -U postgres
- psql -U postgres -c 'create extension postgis;' -d template_postgis -U postgres
- if [[ $(uname -s) == 'Linux' ]]; then psql -U postgres -c 'create database template_postgis;' -U postgres; psql -U postgres -c 'create extension postgis;' -d template_postgis -U postgres; fi;
- if [[ $(uname -s) == 'Darwin' ]]; then brew install bash; export PATH="$(brew --prefix)/bin":${PATH}; fi;
- echo `which bash`
script:
- source bootstrap.sh
- ./configure
- JOBS=6 make
- cat config.log
- make
- git clone --depth=1 https://github.com/mapbox/mapnik-test-data tests/data/mapnik-test-data
- make test
#- source localize.sh && make grind

View file

@ -2,9 +2,6 @@
#set -eu
# NOTE: requires at least bash >= 4.0
# brew install bash
: '
todo
@ -19,28 +16,6 @@ todo
- gdal shared lib?
'
declare -A DEPS
DEPS["freetype"]="2.5.4"
DEPS["harfbuzz"]="2cd5323"
DEPS["jpeg_turbo"]="1.4.0"
DEPS["libxml2"]="2.9.2"
DEPS["libpng"]="1.6.13"
DEPS["webp"]="0.4.2"
DEPS["icu"]="54.1"
DEPS["proj"]="4.8.0"
DEPS["libtiff"]="4.0.4beta"
DEPS["boost"]="1.57.0"
DEPS["boost_libsystem"]="1.57.0"
DEPS["boost_libthread"]="1.57.0"
DEPS["boost_libfilesystem"]="1.57.0"
DEPS["boost_libprogram_options"]="1.57.0"
DEPS["boost_libregex"]="1.57.0"
DEPS["boost_libpython"]="1.57.0"
DEPS["libpq"]="9.4.0"
DEPS["sqlite"]="3.8.6"
DEPS["gdal"]="1.11.1"
DEPS["expat"]="2.1.0"
CPP11_TOOLCHAIN="$(pwd)/toolchain"
function dpack() {
@ -86,14 +61,38 @@ function setup_mason() {
fi
}
function ip() {
if [[ ! -d ./mason_packages/${3}/${1}/ ]]; then
echo ./mason_packages/${3}/${1}/
mason install $1 $2
mason link $1 $2
fi
}
function install_mason_deps() {
MASON_PLATFORM_ID=$(mason env MASON_PLATFORM_ID)
for DEP in "${!DEPS[@]}"; do
if [[ ! -d ./mason_packages/${MASON_PLATFORM_ID}/${DEP} ]]; then
mason install ${DEP} ${DEPS[$DEP]}
mason link ${DEP} ${DEPS[$DEP]}
fi
done
ip freetype 2.5.4 $MASON_PLATFORM_ID
ip harfbuzz 2cd5323 $MASON_PLATFORM_ID
ip jpeg_turbo 1.4.0 $MASON_PLATFORM_ID
ip libxml2 2.9.2 $MASON_PLATFORM_ID
ip libpng 1.6.13 $MASON_PLATFORM_ID
ip webp 0.4.2 $MASON_PLATFORM_ID
ip icu 54.1 $MASON_PLATFORM_ID
ip proj 4.8.0 $MASON_PLATFORM_ID
ip libtiff 4.0.4beta $MASON_PLATFORM_ID
ip boost 1.57.0 $MASON_PLATFORM_ID
ip boost_libsystem 1.57.0 $MASON_PLATFORM_ID
ip boost_libthread 1.57.0 $MASON_PLATFORM_ID
ip boost_libfilesystem 1.57.0 $MASON_PLATFORM_ID
ip boost_libprogram_options 1.57.0 $MASON_PLATFORM_ID
ip boost_libregex 1.57.0 $MASON_PLATFORM_ID
ip boost_libpython 1.57.0 $MASON_PLATFORM_ID
ip libpq 9.4.0 $MASON_PLATFORM_ID
ip sqlite 3.8.6 $MASON_PLATFORM_ID
ip gdal 1.11.1 $MASON_PLATFORM_ID
ip expat 2.1.0 $MASON_PLATFORM_ID
ip pixman 0.32.6 $MASON_PLATFORM_ID
ip cairo 1.12.18 $MASON_PLATFORM_ID
}
function setup_nose() {
@ -112,19 +111,17 @@ function make_config() {
export LIBRARY_PATH="${MASON_LINKED_REL}/lib"
export PATH="${MASON_LINKED_REL}/bin":${PATH}
local CUSTOM_CXXFLAGS="-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1"
local MASON_LIBS="${MASON_LINKED_REL}/lib"
local MASON_INCLUDES="${MASON_LINKED_REL}/include"
echo "
CXX = '$CXX'
CC = '$CC'
CUSTOM_CXXFLAGS = '-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1'
CUSTOM_LDFLAGS = '-L${MASON_LINKED_REL}/lib'
RUNTIME_LINK = 'static'
INPUT_PLUGINS = 'csv,gdal,geojson,occi,ogr,osm,pgraster,postgis,python,raster,rasterlite,shape,sqlite,topojson'
INPUT_PLUGINS = 'all'
PREFIX = '/opt/mapnik-3.x'
PATH = '${MASON_LINKED_REL}/bin'
PATH_REMOVE = '/usr:/usr/local'
PATH_REPLACE = '/Users/travis/build/mapbox/mason/mason_packages:./mason_packages'
MAPNIK_NAME = 'mapnik_3-0-0'
BOOST_INCLUDES = '${MASON_LINKED_REL}/include'
BOOST_LIBS = '${MASON_LINKED_REL}/lib'

View file

@ -219,6 +219,8 @@ bool proj_transform::backward (box2d<double> & box) const
return true;
}
/* Returns points in clockwise order. This allows us to do anti-meridian checks.
*/
void envelope_points(std::vector< coord<double,2> > & coords, box2d<double>& env, int points)
{
double width = env.width();
@ -236,15 +238,32 @@ void envelope_points(std::vector< coord<double,2> > & coords, box2d<double>& env
double xstep = width / steps;
double ystep = height / steps;
for (int i=0; i<=steps; i++) {
coords.push_back(coord<double,2>(env.minx() + i * xstep, env.miny()));
coords.push_back(coord<double,2>(env.minx() + i * xstep, env.maxy()));
coords.resize(points);
for (int i=0; i<steps; i++) {
// top: left>right
coords[i] = coord<double, 2>(env.minx() + i * xstep, env.maxy());
// right: top>bottom
coords[i + steps] = coord<double, 2>(env.maxx(), env.maxy() - i * ystep);
// bottom: right>left
coords[i + steps * 2] = coord<double, 2>(env.maxx() - i * xstep, env.miny());
// left: bottom>top
coords[i + steps * 3] = coord<double, 2>(env.minx(), env.miny() + i * ystep);
}
}
/* determine if an ordered sequence of coordinates is in clockwise order */
bool is_clockwise(const std::vector< coord<double,2> > & coords)
{
int n = coords.size();
coord<double,2> c1, c2;
double a = 0.0;
for (int i=0; i<n; i++) {
c1 = coords[i];
c2 = coords[(i + 1) % n];
a += (c1.x * c2.y - c2.x * c1.y);
}
for (int i=1; i<steps; i++) {
coords.push_back(coord<double,2>(env.minx(), env.miny() + i * ystep));
coords.push_back(coord<double,2>(env.maxx(), env.miny() + i * ystep));
}
return a <= 0.0;
}
box2d<double> calculate_bbox(std::vector<coord<double,2> > & points) {
@ -276,7 +295,7 @@ bool proj_transform::backward(box2d<double>& env, int points) const
}
std::vector<coord<double,2> > coords;
envelope_points(coords, env, points);
envelope_points(coords, env, points); // this is always clockwise
double z;
for (std::vector<coord<double,2> >::iterator it = coords.begin(); it!=coords.end(); ++it) {
@ -287,6 +306,16 @@ bool proj_transform::backward(box2d<double>& env, int points) const
}
box2d<double> result = calculate_bbox(coords);
if (is_source_longlat_ && !is_clockwise(coords)) {
/* we've gone to a geographic CS, and our clockwise envelope has
* changed into an anticlockwise one. This means we've crossed the antimeridian, and
* need to expand the X direction to +/-180 to include all the data. Once we can deal
* with multiple bboxes in queries we can improve.
*/
double miny = result.miny();
result.expand_to_include(-180.0, miny);
result.expand_to_include(180.0, miny);
}
env.re_center(result.center().x, result.center().y);
env.height(result.height());
@ -306,7 +335,7 @@ bool proj_transform::forward(box2d<double>& env, int points) const
}
std::vector<coord<double,2> > coords;
envelope_points(coords, env, points);
envelope_points(coords, env, points); // this is always clockwise
double z;
for (std::vector<coord<double,2> >::iterator it = coords.begin(); it!=coords.end(); ++it) {
@ -318,6 +347,17 @@ bool proj_transform::forward(box2d<double>& env, int points) const
box2d<double> result = calculate_bbox(coords);
if (is_dest_longlat_ && !is_clockwise(coords)) {
/* we've gone to a geographic CS, and our clockwise envelope has
* changed into an anticlockwise one. This means we've crossed the antimeridian, and
* need to expand the X direction to +/-180 to include all the data. Once we can deal
* with multiple bboxes in queries we can improve.
*/
double miny = result.miny();
result.expand_to_include(-180.0, miny);
result.expand_to_include(180.0, miny);
}
env.re_center(result.center().x, result.center().y);
env.height(result.height());
env.width(result.width());

View file

@ -101,7 +101,9 @@ int main(int argc, char** argv)
BOOST_TEST(params.get<std::string>("rvalue") == std::string("rvalue"));
// Currently this fails because rvalue gets moved and nulled out
// Is this really the right behavior?
BOOST_TEST(rvalue == std::string("rvalue"));
std::clog << "FIXME: line 104 of tests/cpp_tests/params_test.cpp\n";
std::clog << "https://github.com/mapnik/mapnik/issues/2651\n";
//BOOST_TEST(rvalue == std::string("rvalue"));
// ensure that const member is not moved incorrectly when added to params
detail::string_holder holder;

View file

@ -5,7 +5,7 @@ from nose.tools import *
import mapnik
import random
import math
from utilities import run_all
from utilities import run_all, assert_box2d_almost_equal
# Tests that exercise map projections.
@ -114,5 +114,39 @@ def test_proj_transform_between_init_and_literal():
eq_(math.fabs(coord.y - lon_lat_coord4.y) < 1,True)
# Github Issue #2648
def test_proj_antimeridian_bbox():
# this is logic from feature_style_processor::prepare_layer()
PROJ_ENVELOPE_POINTS = 20 # include/mapnik/config.hpp
prjGeog = mapnik.Projection('+init=epsg:4326')
prjProj = mapnik.Projection('+init=epsg:2193')
prj_trans_fwd = mapnik.ProjTransform(prjProj, prjGeog)
prj_trans_rev = mapnik.ProjTransform(prjGeog, prjProj)
# bad = mapnik.Box2d(-177.31453250437079, -62.33374815225163, 178.02778363316355, -24.584597490955804)
better = mapnik.Box2d(-180.0, -62.33374815225163, 180.0, -24.584597490955804)
buffered_query_ext = mapnik.Box2d(274000, 3087000, 3327000, 7173000)
fwd_ext = prj_trans_fwd.forward(buffered_query_ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(fwd_ext, better)
# check the same logic works for .backward()
ext = mapnik.Box2d(274000, 3087000, 3327000, 7173000)
rev_ext = prj_trans_rev.backward(ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(rev_ext, better)
# checks for not being snapped (ie. not antimeridian)
normal = mapnik.Box2d(148.766759749,-60.1222810238,159.95484893,-24.9771195151)
buffered_query_ext = mapnik.Box2d(274000, 3087000, 276000, 7173000)
fwd_ext = prj_trans_fwd.forward(buffered_query_ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(fwd_ext, normal)
# check the same logic works for .backward()
ext = mapnik.Box2d(274000, 3087000, 276000, 7173000)
rev_ext = prj_trans_rev.backward(ext, PROJ_ENVELOPE_POINTS)
assert_box2d_almost_equal(rev_ext, normal)
if __name__ == "__main__":
exit(run_all(eval(x) for x in dir() if x.startswith("test_")))

View file

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
from nose.plugins.errorclass import ErrorClass, ErrorClassPlugin
from nose.tools import assert_almost_equal
import os, sys, inspect, traceback
import mapnik
@ -92,3 +93,10 @@ def side_by_side_image(left_im, right_im):
if width > 80:
im.composite(mapnik.Image.open(HERE+'/images/actual.png'),mapnik.CompositeOp.difference,1.0,left_im.width() + 1, 0)
return im
def assert_box2d_almost_equal(a, b, msg=None):
msg = msg or ("%r != %r" % (a, b))
assert_almost_equal(a.minx, b.minx, msg=msg)
assert_almost_equal(a.maxx, b.maxx, msg=msg)
assert_almost_equal(a.miny, b.miny, msg=msg)
assert_almost_equal(a.maxy, b.maxy, msg=msg)

View file

@ -10,15 +10,9 @@ try:
except ImportError:
import simplejson as json
COMPUTE_THRESHOLD = 16
# testcase images are generated on OS X
# so they should exactly match
if platform.uname()[0] == 'Darwin':
COMPUTE_THRESHOLD = 2
# returns true if pixels are not identical
def compare_pixels(pixel1, pixel2, alpha=True):
# returns true if pixels are not nearly identical
def compare_pixels(pixel1, pixel2, alpha=True, pixel_threshold=0):
if pixel1 == pixel2:
return False
r_diff = abs((pixel1 & 0xff) - (pixel2 & 0xff))
@ -26,15 +20,15 @@ def compare_pixels(pixel1, pixel2, alpha=True):
b_diff = abs(((pixel1 >> 16) & 0xff)- ((pixel2 >> 16) & 0xff))
if alpha:
a_diff = abs(((pixel1 >> 24) & 0xff) - ((pixel2 >> 24) & 0xff))
if(r_diff > COMPUTE_THRESHOLD or
g_diff > COMPUTE_THRESHOLD or
b_diff > COMPUTE_THRESHOLD or
a_diff > COMPUTE_THRESHOLD):
if(r_diff > pixel_threshold or
g_diff > pixel_threshold or
b_diff > pixel_threshold or
a_diff > pixel_threshold):
return True
else:
if(r_diff > COMPUTE_THRESHOLD or
g_diff > COMPUTE_THRESHOLD or
b_diff > COMPUTE_THRESHOLD):
if(r_diff > pixel_threshold or
g_diff > pixel_threshold or
b_diff > pixel_threshold):
return True
return False
@ -47,6 +41,7 @@ def compare(actual, expected, alpha=True):
delta_pixels = (im2.width() * im2.height()) - pixels
if delta_pixels != 0:
return delta_pixels
# TODO: convert to C++ to speed this up
for x in range(0,im1.width(),2):
for y in range(0,im1.height(),2):
if compare_pixels(im1.get_pixel(x,y),im2.get_pixel(x,y),alpha=alpha):

View file

@ -0,0 +1,306 @@
{
"keys": [
"",
"42",
"41",
"40",
"24",
"44",
"26",
"38",
"23",
"46",
"36",
"22",
"28",
"21",
"47",
"34",
"29",
"33",
"30",
"19",
"15",
"14",
"12",
"18",
"16",
"11",
"31",
"49",
"48",
"10",
"50",
"51",
"9",
"52",
"8",
"54",
"6",
"56",
"5",
"58",
"4",
"60",
"3",
"62",
"1",
"63",
"66",
"65",
"64"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" !# $ % ",
" & ' ",
" ( ) ",
" * + , ",
" - . ",
" / 0 1 ",
" 2 3 4 56 7 ",
" 8 9 : ",
" ; <= ",
" > ? ",
" @ ",
" A B ",
" C D ",
" ",
" E F ",
" ",
" G H ",
" I J ",
" K L ",
" ",
" M N ",
" OP ",
" Q ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,286 @@
{
"keys": [
"",
"42",
"40",
"24",
"37",
"46",
"22",
"28",
"35",
"20",
"30",
"15",
"12",
"32",
"17",
"48",
"10",
"50",
"9",
"52",
"54",
"7",
"57",
"5",
"60",
"3",
"1",
"63",
"66"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ! # $ ",
" ",
" % ",
" & ' ",
" ( ",
" ) * ",
" + , - ",
" . / ",
" 0 ",
" 1 2 ",
" ",
" 3 4 ",
" 5 ",
" 6 ",
" ",
" 7 ",
" 8 ",
" 9 ",
" : ",
" ",
" ; < ",
" = ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -5,7 +5,7 @@
],
"data": {},
"grid": [
" ! !! ",
" ! !!! ",
" !!!! !!!! ",
" !!!!!! !!!!! ",
" !!!!!!!! !!!!!!! ",

View file

@ -63,7 +63,7 @@
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",

View file

@ -66,7 +66,7 @@
" ! ! !!! !!! ",
" !! !!!! ",
" ! !!!!!! ",
" ! !!!! ",
" ! !!! ",
" ",
" ! ",
" ",

View file

@ -369,7 +369,7 @@
" \u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c \u009d\u009d\u009d\u009d\u009d ",
" \u009e\u009e \u009f\u009f\u009f\u009f\u009f\u009f \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6 \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7\u00a7 \u00a8\u00a8 \u00a9\u00a9 ",
" \u009e\u009e \u009f \u009f \u009f \u00a0\u00a0\u00a0\u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5 \u00a6\u00a6 \u00a7\u00a7 \u00a7\u00a7 \u00a8\u00a8\u00a8\u00a8 \u00a9\u00a9 \u00a9 ",
" \u009e\u009e\u009e \u009e\u009e\u009e \u009f \u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c\u009c\u009c\u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
" \u009e\u009e\u009e \u009e\u009e\u009e \u009f \u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u009c\u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5 \u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
" \u009e\u009e \u009e\u009e \u009f \u009f \u00a0\u00a0\u00a0\u00a0 \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c\u009c\u009c \u009c \u00a1\u00a1 \u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5\u00a5 \u00a5 \u00a6 \u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 ",
" \u009e\u009e \u009e\u009e \u009f \u009f \u00a0\u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c\u009c \u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3\u00a3 \u00a3\u00a3\u00a3 \u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5 \u00a5 \u00a6\u00a6 \u00a6 \u00a7 \u00a7\u00a7\u00a7 \u00a7 \u00a8\u00a8\u00a8\u00a8\u00a8 \u00a9 \u00a9 ",
" \u009e \u009e \u009f \u009f \u00a0 \u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b\u009b \u009c \u009c \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2 \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u00a4\u00a4 \u00a4 \u00a4\u00a4\u00a4 \u009d \u009d \u00a5\u00a5 \u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7\u00a7 \u00a7\u00a7 \u00a8\u00a8 \u00a8\u00a8 \u00a9 \u00a9 ",
@ -432,11 +432,11 @@
" \u00d8 \u00d9 \u00da\u00da\u00da \u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc \u00dd \u00de \u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8\u00d8\u00d8\u00d8 \u00d9 \u00da \u00da\u00da \u00db\u00db \u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00de\u00de\u00de \u00df\u00df\u00df\u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3 \u00e3\u00e3\u00e3 \u00e4 \u00e4 \u00e4 \u00e4 \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8 \u00d8\u00d8 \u00d9 \u00da \u00da\u00da \u00db\u00db \u00db\u00db \u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0 \u00e1\u00e1 \u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5 ",
" \u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db\u00db\u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1 \u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3 \u00e4 \u00e4 \u00e4 \u00e4 \u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5 ",
" \u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1 \u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3 \u00e4 \u00e4 \u00e4 \u00e4 \u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5 ",
" \u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0 \u00e0\u00e0 \u00e1 \u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8 \u00d8\u00d8 \u00d9 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de \u00df\u00df \u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3 \u00e4 \u00e4 \u00e4 \u00e4 \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8\u00d8\u00d8\u00d8\u00d8 \u00d9 \u00d9 \u00d9 \u00d9 \u00da\u00da\u00da\u00da\u00da\u00da \u00db\u00db \u00db\u00db \u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de \u00df \u00df \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 ",
" \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00d9\u00d9\u00d9 \u00d9 \u00d9 \u00d9 \u00db\u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 ",
" \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00d9\u00d9\u00d9 \u00d9 \u00d9 \u00d9 \u00db\u00db\u00db\u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00de\u00de \u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3 ",
" \u00d8 \u00e2\u00e2\u00e2 ",
" ",
" ",

View file

@ -340,7 +340,7 @@
" \u0087\u0087\u0087\u0087\u0087\u0087 \u0087\u0087\u0087\u0087\u0087}}}}} }}}}} ~~~~~~~ ~~~~~~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b \u008b\u008b\u008b\u008b\u008b\u008b\u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0084\u0084\u0084\u0084\u0084\u0084\u0085\u0085 \u0085 \u0085 \u008a\u008a \u008a\u008a\u0086 \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}} }}}}}} \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b \u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0084\u0084 \u0084\u0084\u0085\u0085\u0085\u0085\u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}} }}}}}} ~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085\u0085\u0085\u0085\u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}}}}}}}}}}}~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080 \u0080\u0080 \u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084 \u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}}}}}}}}}}}~~~~~~~ ~~~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080 \u0080\u0080 \u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089 \u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0083\u0083\u0083\u0083 \u0083\u0083\u0084 \u0084\u0084\u0084 \u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u0086\u0086\u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087\u0087}}}}}}}}}}}}}}}}}~~ ~~ ~~~~~~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082\u0082 \u0082\u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084 \u0085\u0085\u0085 \u0085 \u008a\u008a \u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}} }}}}}}}~~ ~ ~~ ~ ~~~~ \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b\u008b\u008b \u0089\u0089\u0089\u0089\u0089\u0089 \u0089\u0089\u0082\u0082\u0082\u0082\u0082 \u0082 \u0082\u0082\u0082 \u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084\u0084\u0084\u0084\u0084 \u0084\u0084\u0085\u0085\u0085 \u0085\u0085\u0085 \u008a\u008a \u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
" \u0087\u0087 \u0087\u0087 \u0087\u0087 }}}}}}} }}}}}}}~~ ~~ ~ \u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f\u007f \u0088\u0088\u0088 \u0088\u0088\u0088\u0088\u0088 \u0080\u0080\u0080\u0080\u0080 \u0080\u0080\u0080\u0080\u0080\u0080\u0080 \u008b\u008b\u008b \u0089\u0089\u0089 \u0089\u0089\u0089\u0089\u0089\u0089 \u0082\u0082\u0082\u0082\u0082\u0082\u0082 \u0082\u0082 \u0083\u0083\u0083\u0083\u0083\u0083 \u0083\u0083\u0083\u0083\u0083\u0084 \u0084\u0084 \u0084\u0085\u0085 \u0085\u0085\u0085 \u008a\u008a\u008a \u008a\u008a\u008a \u0086\u0086\u0086\u0086 \u0086\u0086\u0086\u0086\u0086\u0086\u0086 ",
@ -356,14 +356,14 @@
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f \u008f\u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092 \u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e \u008e\u008e\u008e\u008e\u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0096\u0096\u0096 \u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0097 \u0097\u0097 \u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 \u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090 \u0090\u0090 \u0090\u0090 \u0091\u0091 \u0091\u0091\u0091 \u0091\u0091\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094 \u0095\u0095\u0095\u0095\u0095 \u0095 \u0095 \u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0091\u0091\u0091 \u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099 \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095 \u0095 \u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f\u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f \u008f\u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e \u0093\u0093 \u0093 \u0094\u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095\u0095 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u0090\u0090\u0090\u0090\u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0091\u0092\u0092\u0092\u0092\u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099\u0099\u0099 \u0099\u0099\u0099\u0099\u008e\u008e\u008e\u008e \u008e \u0093\u0093 \u0093\u0093 \u0093 \u0094\u0094 \u0094 \u0094\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0095\u0095 \u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u008f \u0090\u0090\u0090\u0090 \u0090\u0090 \u0090\u0090 \u0091\u0091 \u0091\u0091\u0091 \u0091\u0091 \u0092\u0092\u0092\u0092 \u0092\u0092 \u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u0099\u0099\u0099 \u0099\u0099 \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093\u0093\u0093\u0093 \u0093 \u0094\u0094\u0094\u0094\u0094 \u0094\u0095\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0095 \u0096\u0096\u0096 \u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0097\u0097 \u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097 \u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f \u008f\u008f\u008f\u008f \u0090\u0090\u0090 \u0090\u0090 \u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u0091 \u0091\u0091\u0091 \u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093 \u0093\u0093 \u0093\u0093\u0093 \u0093 \u0094\u0094\u0094\u0094\u0094 \u0094\u0094\u0094\u0095\u0095 \u0095\u0095 \u0095\u0095 \u0095\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0097\u0097\u0097 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f \u008f\u008f\u008f\u008f \u0090\u0090 \u0090\u0090\u0090\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d\u008d \u008e\u008e \u008e \u008e\u008e \u0093\u0093\u0093\u0093\u0093 \u0093\u0093\u0093 \u0093 \u0094\u0094 \u0094\u0094\u0094\u0094\u0094\u0094\u0094\u0095\u0095 \u0095\u0095 \u0095\u0095\u0095\u0096\u0096\u0096\u0096 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097 \u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f \u0090\u0090\u0090 \u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c \u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008d\u008d\u008d \u008e\u008e\u008e\u008e\u008e\u008e \u008e \u0093\u0093\u0093\u0093 \u0093\u0093\u0093\u0093 \u0094\u0094 \u0094\u0094\u0094 \u0095\u0095\u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a\u009a \u008f\u008f\u008f\u008f\u008f\u008f\u008f\u008f \u0090 \u0091\u0091\u0091\u0091\u0091\u0091\u0091 \u0092\u0092\u0092\u0092\u0092\u0092\u0092\u0092 \u008e\u008e\u008e\u008e\u008e\u008e\u008e\u008e \u008e\u008e \u0093\u0093\u0093 \u0093\u0093\u0093 \u0094\u0094 \u0094\u0094 \u0095\u0095\u0095\u0095 \u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0096\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0097\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098\u0098 ",
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f\u009f\u009f\u009f\u0091\u0091\u0091\u0091\u0091\u009f\u009f \u00a0\u00a0 \u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u008e\u008e\u008e\u008e\u008e\u008e\u008e \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u0094\u0094\u00a4\u00a4\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7 ",
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f\u009f\u009f\u009f\u0091\u0091\u0091\u0091\u0091\u009f\u009f \u00a0\u00a0 \u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u008e\u008e\u008e\u008e\u008e\u008e \u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3\u00a3 \u0094\u0094\u00a4\u00a4\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a7 ",
" \u009b\u009b \u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c\u009c \u009d\u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f \u0091\u0091\u0091 \u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3\u00a3 \u0094\u0094\u0094\u0094\u0094 \u00a5\u00a5\u00a5\u00a5\u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9 \u00a7\u00a7 ",
" \u009b\u009b\u009b\u009b \u009c \u009c \u009c\u009c \u009d\u009d\u009d \u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e\u009e \u009f\u009f \u0091 \u009f\u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1 \u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3 \u00a4\u0094\u0094\u0094\u0094\u00a4 \u00a5 \u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9\u00a9 \u00a7\u00a7\u00a7\u00a7\u00a7\u00a7 ",
" \u009b\u009b\u009b\u009b \u009c \u009c \u009c\u009c \u009d\u009d\u009d\u009d \u009f\u009f \u009f\u009f\u009f\u009f\u009f \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a1\u00a1\u00a1\u00a1\u00a1\u00a1 \u00a2\u00a2\u00a2\u00a2\u00a2 \u00a2\u00a2\u00a2\u00a2\u00a2\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8\u00a8 \u00a3\u00a3 \u00a3\u00a3 \u00a4\u00a4 \u00a4\u00a4 \u00a5 \u00a5\u00a5 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a6\u00a6\u00a6\u00a6\u00a6\u00a6 \u00a9\u00a9\u00a9\u00a9\u00a9\u00a9 \u00a7\u00a7 \u00a7\u00a7\u00a7 ",
@ -440,7 +440,7 @@
" \u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5 \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00d8\u00d8\u00d8 \u00d8\u00d8\u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00e3\u00d9\u00d9 \u00d9\u00d9 \u00d9\u00d9 \u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de\u00de \u00df\u00df\u00df\u00df \u00d8\u00d8\u00d8 \u00d8\u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1 \u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2 \u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5\u00e5 \u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7\u00d7 \u00dc\u00dc\u00dc \u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00d8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e3\u00e3\u00e3\u00e3\u00e3\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9\u00d9 \u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4\u00e4 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 ",
" \u00e5\u00e5\u00e5\u00e5\u00e5 \u00e5\u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00dc\u00dc\u00dc\u00dc\u00dc \u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd\u00dd \u00df\u00df\u00df\u00df \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1\u00e1\u00e1\u00e1\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3 ",
" \u00e5\u00e5\u00e5\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00db\u00db \u00db\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc\u00dc \u00dd\u00dd\u00dd \u00e8\u00e8\u00e8 \u00e0\u00e0\u00e0\u00e0\u00e0\u00e0\u00e0 \u00e0\u00e0\u00e0 \u00e1\u00e1\u00e1\u00e1 \u00e1\u00e1\u00e1 \u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e2\u00e3\u00e3\u00e3\u00e3\u00e3\u00e3\u00e6\u00e6\u00e6\u00e6\u00e3\u00e3\u00e3\u00e3\u00e3 \u00e9\u00e9\u00e9\u00e9\u00e9 ",
" \u00e5\u00e5\u00e5 \u00ea\u00ea\u00ea \u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7 \u00eb\u00eb \u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec \u00ed \u00ed\u00ed \u00e8\u00e8\u00e8 \u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee \u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef \u00e2\u00e2\u00e2\u00e2\u00e2 \u00f0\u00f0 \u00e6 \u00e6\u00e6 \u00f1\u00f1\u00f1\u00f1\u00f1\u00f1\u00f1 \u00f1\u00f1\u00f1\u00f1\u00f1 \u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9 ",
" \u00f2\u00f2\u00f2\u00f2\u00f2\u00f2 \u00ea\u00ea\u00ea \u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7\u00e7 \u00eb\u00eb\u00eb \u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec\u00ec \u00ed\u00ed \u00ed\u00ed \u00f3\u00f3\u00f3\u00f3 \u00e8\u00e8\u00e8\u00e8\u00e8 \u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee\u00ee \u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef\u00ef \u00e2\u00e2\u00e2\u00e2 \u00f0\u00f0\u00f0\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6\u00e6 \u00f1\u00f1\u00f1 \u00f1\u00f1 \u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9\u00e9 ",

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 B

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View file

@ -0,0 +1,93 @@
<Map srs="+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs " maximum-extent="274000,3087000,3327000,7173000">
<Parameters>
<Parameter name="sizes">1000,1000</Parameter>
<Parameter name="bbox">200000.0,1087000.0,7007000.0,7173000.0</Parameter>
</Parameters>
<Style name="mystyle" filter-mode="first">
<Rule>
<PointSymbolizer/>
</Rule>
</Style>
<Layer name="src_layer" srs="+init=epsg:4326">
<StyleName>mystyle</StyleName>
<Datasource>
<Parameter name="extent">-180,-47.2754736667,180,-34.0036943</Parameter>
<Parameter name="type">csv</Parameter>
<Parameter name="inline">
WKT,id,
"POINT (-176.662157383264883 -43.096109795145765)",
"POINT (-176.854671182715663 -42.903595931039007)",
"POINT (-177.252533072573982 -42.646910782400411)",
"POINT (-177.611892228793693 -42.415894147047872)",
"POINT (-178.099593973519461 -42.159208996768882)",
"POINT (-178.56162722744844 -41.735678488584703)",
"POINT (-178.72847257314487 -41.555998877995457)",
"POINT (-178.985157723427307 -41.222308171291367)",
"POINT (-179.152003072780786 -40.965623011559309)",
"POINT (-179.511362290676971 -40.490755465927869)",
"POINT (-179.80655022231997 -40.054390693250525)",
"POINT (179.923930360184784 -39.784871275110177)",
"POINT (179.75708500598833 -39.643694437033751)",
"POINT (179.346388748199729 -39.772037019858125)",
"POINT (179.025532296262895 -39.861876827647727)",
"POINT (178.563499004992451 -40.067224958370574)",
"POINT (178.281145326853419 -40.208401797959127)",
"POINT (178.02446016489057 -40.054390701181269)",
"POINT (177.677935196187519 -39.900379604399049)",
"POINT (177.485421324683159 -39.669362958813636)",
"POINT (177.331410227479353 -39.425512055075657)",
"POINT (177.215901904577578 -39.181661151299444)",
"POINT (177.023388033074042 -38.86080469896423)",
"POINT (176.76670287107433 -38.604119537111721)",
"POINT (176.535686225282944 -38.565616762876971)",
"POINT (176.317503837598906 -38.783799150566402)",
"POINT (176.176326998513417 -38.989147280139598)",
"POINT (175.932476094645182 -39.425512055467188)",
"POINT (175.701459448881849 -39.759202766009246)",
"POINT (175.52177983551357 -40.080059218446856)",
"POINT (175.149586350685809 -40.37524715469236)",
"POINT (174.880066930641647 -40.298241606113201)",
"POINT (174.700387317279876 -40.131396250851466)",
"POINT (174.469370671529759 -39.861876830812001)",
"POINT (174.418033639140958 -39.707865733646173)",
"POINT (174.212685509585867 -39.374175023120273)",
"POINT (174.148514219099951 -39.143158377371385)",
"POINT (174.05867441241972 -38.937810247816806)",
"POINT (173.930331831447972 -38.719627860165083)",
"POINT (173.699315185698993 -38.527113988707669)",
"POINT (173.327121700881207 -38.552782504902005)",
"POINT (172.993430990354909 -38.655456569679323)",
"POINT (172.839419893188989 -38.732462118262291)",
"POINT (172.659740279828696 -38.899307473525418)",
"POINT (172.45439215027406 -39.027650054497059)",
"POINT (172.197706988330737 -39.284335216440311)",
"POINT (172.018027374970359 -39.669362959355176)",
"POINT (-170.809757996124091 -39.258667337666161)",
"POINT (-171.092108440755396 -39.489683796643384)",
"POINT (-171.374459297976472 -39.72070029102813)",
"POINT (-171.669644665725599 -39.95171681078768)",
"POINT (-171.964830399850541 -40.195567616117053)",
"POINT (-172.208679740446428 -40.426584197598665)",
"POINT (-172.542368540167502 -40.631932262228219)",
"POINT (-172.696378898013165 -40.785943335635686)",
"POINT (-173.055736583802087 -41.068296973781855)",
"POINT (-173.273918197572641 -41.299313602634044)",
"POINT (-173.658944763471993 -41.645838554189496)",
"POINT (-173.504934101572132 -41.491827462434976)",
"POINT (-173.979800429072611 -41.992363516983445)",
"POINT (-174.108142742586438 -42.172043129406539)",
"POINT (-174.313490466537729 -42.377391260144812)",
"POINT (-174.608677910682047 -42.736750491079746)",
"POINT (-176.058947562102475 -43.429800480947527)",
"POINT (-174.955202379135329 -42.967767146816229)",
"POINT (-175.481406377455045 -43.160281038130286)",
"POINT (-175.802262571951218 -43.352794922023079)",
"POINT (-176.328466827030041 -43.339960685516779)",
"POINT (-176.508146353344472 -43.250120886092468)",
</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -27,17 +27,9 @@ defaults = {
'grid': mapnik.has_grid_renderer()
}
cairo_threshold = 10
cairo_threshold = 0
agg_threshold = 0
grid_threshold = 5
if 'Linux' == platform.uname()[0]:
# we assume if linux then you are running packaged cairo
# which is older than the 1.12.14 version we used on OS X
# to generate the expected images, so we'll rachet back the threshold
# https://github.com/mapnik/mapnik/issues/1868
cairo_threshold = 230
agg_threshold = 12
grid_threshold = 6
grid_threshold = 0
def render_cairo(m, output, scale_factor):
mapnik.render_to_file(m, output, 'ARGB32', scale_factor)
@ -64,7 +56,7 @@ renderers = [
},
{ 'name': 'cairo',
'render': render_cairo,
'compare': lambda actual, reference: compare(actual, reference, alpha=False),
'compare': lambda actual, reference: compare(actual, reference, alpha=True),
'threshold': cairo_threshold,
'filetype': 'png',
'dir': 'images'
@ -123,6 +115,16 @@ class Reporting:
else:
print ''
def updating(self, actual, expected):
self.passed += 1
if self.quiet:
sys.stderr.write('\x1b[33m.\x1b[0m')
else:
print '\x1b[33m✓\x1b[0m (\x1b[34mUpdating\x1b[0m)'
contents = open(actual, 'r').read()
open(expected, 'wb').write(contents)
def not_found(self, actual, expected):
self.failed += 1
self.errors.append((self.NOT_FOUND, actual, expected, 0, None))
@ -244,6 +246,8 @@ def render(filename, config, scale_factor, reporting):
renderer['render'](m, actual, scale_factor)
if not os.path.exists(expected):
reporting.not_found(actual, expected)
elif os.environ.get('UPDATE'):
reporting.updating(actual, expected)
else:
diff = renderer['compare'](actual, expected)
if diff > renderer['threshold']: