diff options
Diffstat (limited to 'src/boost/libs/gil/test/extension')
144 files changed, 32248 insertions, 0 deletions
diff --git a/src/boost/libs/gil/test/extension/CMakeLists.txt b/src/boost/libs/gil/test/extension/CMakeLists.txt new file mode 100644 index 00000000..06a46302 --- /dev/null +++ b/src/boost/libs/gil/test/extension/CMakeLists.txt @@ -0,0 +1,22 @@ +# +# Copyright (c) 2019 Mateusz Loskot <mateusz at loskot dot net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +if(GIL_ENABLE_EXT_DYNAMIC_IMAGE) + add_subdirectory(dynamic_image) +endif() + +if(GIL_ENABLE_EXT_NUMERIC) + add_subdirectory(numeric) +endif() + +if(GIL_ENABLE_EXT_TOOLBOX) + add_subdirectory(toolbox) +endif() + +if(GIL_ENABLE_EXT_IO) + add_subdirectory(io) +endif() diff --git a/src/boost/libs/gil/test/extension/Jamfile b/src/boost/libs/gil/test/extension/Jamfile new file mode 100644 index 00000000..cf9ef408 --- /dev/null +++ b/src/boost/libs/gil/test/extension/Jamfile @@ -0,0 +1,12 @@ +# Boost.GIL (Generic Image Library) - extensions tests +# +# Copyright (c) 2019 Mateusz Loskot <mateusz@loskot.net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or +# copy at http://www.boost.org/LICENSE_1_0.txt) + +build-project dynamic_image ; +build-project numeric ; +build-project toolbox ; +build-project io ; diff --git a/src/boost/libs/gil/test/extension/dynamic_image/CMakeLists.txt b/src/boost/libs/gil/test/extension/dynamic_image/CMakeLists.txt new file mode 100644 index 00000000..cf80e8f8 --- /dev/null +++ b/src/boost/libs/gil/test/extension/dynamic_image/CMakeLists.txt @@ -0,0 +1,27 @@ +# +# Copyright (c) 2019 Mateusz Loskot <mateusz at loskot dot net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +message(STATUS "Boost.GIL: Configuring tests in test/extension/dynamic_image") +foreach(_name + subimage_view) + set(_test t_ext_dynamic_image_${_name}) + set(_target test_ext_dynamic_image_${_name}) + + add_executable(${_target} "") + target_sources(${_target} PRIVATE ${_name}.cpp) + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies) + target_compile_definitions(${_target} PRIVATE BOOST_GIL_USE_CONCEPT_CHECK) + add_test(NAME ${_test} COMMAND ${_target}) + + unset(_name) + unset(_target) + unset(_test) +endforeach() diff --git a/src/boost/libs/gil/test/extension/dynamic_image/Jamfile b/src/boost/libs/gil/test/extension/dynamic_image/Jamfile new file mode 100644 index 00000000..7f1f177a --- /dev/null +++ b/src/boost/libs/gil/test/extension/dynamic_image/Jamfile @@ -0,0 +1,13 @@ +# Boost.GIL (Generic Image Library) - dynamic_image tests +# +# Copyright (c) 2019 Mateusz Loskot <mateusz@loskot.net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or +# copy at http://www.boost.org/LICENSE_1_0.txt) + +import testing ; + +alias headers : [ generate_self_contained_headers extension/dynamic_image ] ; + +run subimage_view.cpp /boost/test//boost_unit_test_framework : : : <link>shared:<define>BOOST_TEST_DYN_LINK=1 ; diff --git a/src/boost/libs/gil/test/extension/dynamic_image/subimage_view.cpp b/src/boost/libs/gil/test/extension/dynamic_image/subimage_view.cpp new file mode 100644 index 00000000..49bf5fa1 --- /dev/null +++ b/src/boost/libs/gil/test/extension/dynamic_image/subimage_view.cpp @@ -0,0 +1,71 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/dynamic_image/dynamic_image_all.hpp> + +#define BOOST_TEST_MODULE test_ext_dynamic_image_subimage_view +#include "unit_test.hpp" +#include "unit_test_utility.hpp" +#include "test_fixture.hpp" +#include "core/image/test_fixture.hpp" + +namespace gil = boost::gil; +namespace fixture = boost::gil::test::fixture; + +BOOST_AUTO_TEST_SUITE(dynamic_image_subimage_view) + +BOOST_AUTO_TEST_CASE_TEMPLATE(subimage_equals_image, Image, fixture::image_types) +{ + fixture::dynamic_image i0(fixture::create_image<Image>(4, 4, 128)); + auto const v0 = gil::const_view(i0); + BOOST_TEST(v0.dimensions().x == 4); + BOOST_TEST(v0.dimensions().y == 4); + + // request with 2 x point_t values + { + auto v1 = gil::subimage_view(gil::view(i0), {0, 0}, i0.dimensions()); + BOOST_TEST(v0.dimensions() == v1.dimensions()); + BOOST_TEST(gil::equal_pixels(v0, v1)); + } + // request with 4 x dimension values + { + auto v1 = gil::subimage_view(gil::view(i0), 0, 0, i0.dimensions().x, i0.dimensions().y); + BOOST_TEST(v0.dimensions() == v1.dimensions()); + BOOST_TEST(gil::equal_pixels(v0, v1)); + } +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(subimage_equals_image_quadrants, Image, fixture::image_types) +{ + fixture::dynamic_image i0(fixture::create_image<Image>(4, 4, 0)); + auto v0 = gil::view(i0); + // create test image and set values of pixels in: + // quadrant 1 + auto const i1 = fixture::create_image<Image>(2, 2, 255); + gil::apply_operation(v0, fixture::fill_any_view<Image>({2, 3, 6, 7}, gil::const_view(i1)[0])); + // quadrant 2 + auto const i2 = fixture::create_image<Image>(2, 2, 128); + gil::apply_operation(v0, fixture::fill_any_view<Image>({0, 1, 4, 5}, gil::const_view(i2)[0])); + // quadrant 3 + auto const i3 = fixture::create_image<Image>(2, 2, 64); + gil::apply_operation(v0, fixture::fill_any_view<Image>({8, 9, 12, 13}, gil::const_view(i3)[0])); + // quadrant 4 + auto const i4 = fixture::create_image<Image>(2, 2, 32); + gil::apply_operation(v0, fixture::fill_any_view<Image>({10, 11, 14, 15}, gil::const_view(i4)[0])); + + auto v1 = gil::subimage_view(gil::view(i0), { 2, 0 }, i0.dimensions() / 2); + BOOST_TEST(gil::equal_pixels(v1, gil::const_view(i1))); + auto v2 = gil::subimage_view(gil::view(i0), { 0, 0 }, i0.dimensions() / 2); + BOOST_TEST(gil::equal_pixels(v2, gil::const_view(i2))); + auto v3 = gil::subimage_view(gil::view(i0), { 0, 2 }, i0.dimensions() / 2); + BOOST_TEST(gil::equal_pixels(v3, gil::const_view(i3))); + auto v4 = gil::subimage_view(gil::view(i0), { 2, 2 }, i0.dimensions() / 2); + BOOST_TEST(gil::equal_pixels(v4, gil::const_view(i4))); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/dynamic_image/test_fixture.hpp b/src/boost/libs/gil/test/extension/dynamic_image/test_fixture.hpp new file mode 100644 index 00000000..00b1b38c --- /dev/null +++ b/src/boost/libs/gil/test/extension/dynamic_image/test_fixture.hpp @@ -0,0 +1,61 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/dynamic_image/any_image.hpp> +#include <boost/mp11.hpp> + +#include <tuple> + +namespace boost { namespace gil { + +namespace test { namespace fixture { + +using dynamic_image = gil::any_image +< + boost::mp11::mp_list + < + gil::gray8_image_t, + gil::gray16_image_t, + gil::gray32_image_t, + gil::bgr8_image_t, + gil::bgr16_image_t, + gil::bgr32_image_t, + gil::rgb8_image_t, + gil::rgb16_image_t, + gil::rgb32_image_t, + gil::rgba8_image_t, + gil::rgba16_image_t, + gil::rgba32_image_t + > +>; + +template <typename Image> +struct fill_any_view +{ + using result_type = void; + using pixel_t = typename Image::value_type; + + fill_any_view(std::initializer_list<int> dst_view_indices, pixel_t pixel_value) + : dst_view_indices_(dst_view_indices), pixel_value_(pixel_value) + {} + + template <typename View> + void operator()(View& /*dst_view*/) { /* sink any other views here */ } + + void operator()(typename Image::view_t& dst_view) + { + // sink view of interest here + for (auto const& i : dst_view_indices_) + dst_view[i] = pixel_value_; + } + + std::initializer_list<int> dst_view_indices_; + pixel_t pixel_value_; +}; + +}}}} // namespace boost::gil::test::fixture diff --git a/src/boost/libs/gil/test/extension/io/CMakeLists.txt b/src/boost/libs/gil/test/extension/io/CMakeLists.txt new file mode 100644 index 00000000..85ea2f16 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/CMakeLists.txt @@ -0,0 +1,104 @@ +# +# Copyright (c) 2017 Mateusz Loskot <mateusz at loskot dot net> +# All rights reserved. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +message(STATUS "Boost.GIL: Configuring tests in test/extension/io") + +set(_formats + bmp + jpeg + png + pnm + simple + targa + tiff) + +if(GIL_ENABLE_EXT_IO_RAW) + list(APPEND _formats raw) +endif() + +foreach(_name ${_formats}) + set(_test t_ext_io_${_name}) + set(_target test_ext_io_${_name}) + + add_executable(${_target} "") + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies) + target_compile_definitions(${_target} + PRIVATE + BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES) + add_test(NAME ${_test} COMMAND ${_target}) + + unset(_name) + unset(_target) + unset(_test) +endforeach() + +unset(_formats) + +target_sources(test_ext_io_simple + PRIVATE + all_formats_test.cpp) + +target_sources(test_ext_io_bmp + PRIVATE + bmp_old_test.cpp bmp_read_test.cpp bmp_test.cpp bmp_write_test.cpp) + +target_sources(test_ext_io_jpeg + PRIVATE + jpeg_test.cpp jpeg_old_test.cpp jpeg_read_test.cpp jpeg_write_test.cpp) + +target_sources(test_ext_io_png + PRIVATE + png_test.cpp png_old_test.cpp png_file_format_test.cpp png_read_test.cpp) + +target_sources(test_ext_io_pnm + PRIVATE + pnm_test.cpp pnm_old_test.cpp pnm_read_test.cpp pnm_write_test.cpp) + +if(GIL_ENABLE_EXT_IO_RAW) + target_sources(test_ext_io_raw + PRIVATE + raw_test.cpp) +endif() + +target_sources(test_ext_io_targa + PRIVATE + targa_test.cpp targa_old_test.cpp targa_read_test.cpp targa_write_test.cpp) + +target_sources(test_ext_io_tiff + PRIVATE + tiff_file_format_test.cpp + tiff_old_test.cpp + tiff_subimage_test.cpp + tiff_test.cpp + tiff_tiled_float_test.cpp + tiff_tiled_minisblack_test_1-10.cpp + tiff_tiled_minisblack_test_11-20.cpp + tiff_tiled_minisblack_test_21-31_32-64.cpp + tiff_tiled_minisblack_write_test_1-10.cpp + tiff_tiled_minisblack_write_test_11-20.cpp + tiff_tiled_minisblack_write_test_21-31_32-64.cpp + tiff_tiled_palette_test_1-8.cpp + tiff_tiled_palette_test_8-16.cpp + tiff_tiled_palette_write_test_1-8.cpp + tiff_tiled_palette_write_test_8-16.cpp + tiff_tiled_rgb_contig_test_1-10.cpp + tiff_tiled_rgb_contig_test_11-20.cpp + tiff_tiled_rgb_contig_test_21-31_32_64.cpp + tiff_tiled_rgb_contig_write_test_1-10.cpp + tiff_tiled_rgb_contig_write_test_11-20.cpp + tiff_tiled_rgb_contig_write_test_21-31_32_64.cpp + tiff_tiled_rgb_planar_test_1-10.cpp + tiff_tiled_rgb_planar_test_11-20.cpp + tiff_tiled_rgb_planar_test_21-31_32_64.cpp + tiff_tiled_test.cpp + tiff_write_test.cpp) diff --git a/src/boost/libs/gil/test/extension/io/Jamfile b/src/boost/libs/gil/test/extension/io/Jamfile new file mode 100644 index 00000000..89ceb800 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/Jamfile @@ -0,0 +1,105 @@ +# Boost.GIL (Generic Image Library) - IO tests +# +# Copyright (c) 2012 Christian Henning +# Copyright (c) 2017 Stefan Seefeld +# Copyright (c) 2012-2018 Mateusz Loskot <mateusz@loskot.net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or +# copy at http://www.boost.org/LICENSE_1_0.txt) + +import ac ; + +using libjpeg : : : : true ; # work around bug on master +using zlib ; +using libpng : : : : true ; +using libtiff : : : : true ; + +lib raw : : <name>raw ; + +project + : requirements + <library>/boost/test//boost_unit_test_framework + <library>/boost/system//boost_system + <library>/boost/filesystem//boost_filesystem + <link>shared:<define>BOOST_TEST_DYN_LINK=1 + ; + +alias headers : [ generate_self_contained_headers extension/io ] ; +explicit headers ; + +# The `simple` in names of targets, somewhat misleading, means two things: +# - minimal set of tests +# - set of tests that require third-party libraries which are de-facto ubiquitous +alias simple + : [ run all_formats_test.cpp + : # args + : # input files + : # requirements + <define>BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + <define>BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + [ ac.check-library /libjpeg//libjpeg : <library>/libjpeg//libjpeg : <build>no ] + [ ac.check-library /zlib//zlib : <library>/zlib//zlib : <build>no ] + [ ac.check-library /libpng//libpng : <library>/libpng//libpng : <build>no ] + [ ac.check-library /libtiff//libtiff : <library>/libtiff//libtiff : <build>no ] + ] +; + +alias full : + [ run bmp_test.cpp bmp_old_test.cpp bmp_read_test.cpp bmp_write_test.cpp ] + [ run jpeg_test.cpp jpeg_old_test.cpp jpeg_read_test.cpp jpeg_write_test.cpp + : + : + : [ ac.check-library /libjpeg//libjpeg : <library>/libjpeg//libjpeg : <build>no ] ] + #make.cpp + [ run png_test.cpp png_old_test.cpp png_file_format_test.cpp png_read_test.cpp + : + : + : + <define>BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + [ ac.check-library /zlib//zlib : <library>/zlib//zlib : <build>no ] + [ ac.check-library /libpng//libpng : <library>/libpng//libpng : <build>no ] + ] + [ run pnm_test.cpp pnm_old_test.cpp pnm_read_test.cpp pnm_write_test.cpp ] + [ run raw_test.cpp + : # args + : # input files + : # requirements + <define>BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + <library>raw + ] + [ run targa_test.cpp targa_old_test.cpp targa_read_test.cpp targa_write_test.cpp ] + [ run + tiff_test.cpp + tiff_old_test.cpp + tiff_file_format_test.cpp + tiff_subimage_test.cpp + tiff_tiled_float_test.cpp + tiff_tiled_minisblack_test_1-10.cpp + tiff_tiled_minisblack_test_11-20.cpp + tiff_tiled_minisblack_test_21-31_32-64.cpp + tiff_tiled_minisblack_write_test_1-10.cpp + tiff_tiled_minisblack_write_test_11-20.cpp + tiff_tiled_minisblack_write_test_21-31_32-64.cpp + tiff_tiled_palette_test_1-8.cpp + tiff_tiled_palette_test_8-16.cpp + tiff_tiled_palette_write_test_1-8.cpp + tiff_tiled_palette_write_test_8-16.cpp + tiff_tiled_rgb_contig_test_1-10.cpp + tiff_tiled_rgb_contig_test_11-20.cpp + tiff_tiled_rgb_contig_test_21-31_32_64.cpp + tiff_tiled_rgb_contig_write_test_1-10.cpp + tiff_tiled_rgb_contig_write_test_11-20.cpp + tiff_tiled_rgb_contig_write_test_21-31_32_64.cpp + tiff_tiled_rgb_planar_test_1-10.cpp + tiff_tiled_rgb_planar_test_11-20.cpp + tiff_tiled_rgb_planar_test_21-31_32_64.cpp + tiff_tiled_test.cpp + tiff_write_test.cpp + : + : + : [ ac.check-library /libtiff//libtiff : <library>/libtiff//libtiff : <build>no ] + ] + ; + +explicit full ; diff --git a/src/boost/libs/gil/test/extension/io/all_formats_test.cpp b/src/boost/libs/gil/test/extension/io/all_formats_test.cpp new file mode 100644 index 00000000..34b11989 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/all_formats_test.cpp @@ -0,0 +1,88 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE all_formats_test +#include <boost/gil/extension/io/png.hpp> +#include <boost/gil/extension/io/bmp.hpp> +#include <boost/gil/extension/io/jpeg.hpp> +#include <boost/gil/extension/io/pnm.hpp> +#include <boost/gil/extension/io/targa.hpp> +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" + +// Test will include all format's headers and load and write some images. +// This test is more of a compilation test. + +using namespace std; +using namespace boost::gil; +namespace fs = boost::filesystem; + +BOOST_AUTO_TEST_SUITE( gil_io_tests ) + +BOOST_AUTO_TEST_CASE( non_bit_aligned_image_test ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + { + rgb8_image_t img; + read_image( bmp_filename, img, bmp_tag() ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + fs::create_directories(fs::path(bmp_out)); + write_view( bmp_out + "all_formats_test.bmp", view( img ), bmp_tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } + + { + rgb8_image_t img; + read_image( jpeg_filename, img, jpeg_tag() ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + fs::create_directories(fs::path(jpeg_out)); + write_view( jpeg_out + "all_formats_test.jpg", view( img ), jpeg_tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } + + { + rgba8_image_t img; + read_image( png_filename, img, png_tag() ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + fs::create_directories(fs::path(png_out)); + write_view( png_out + "all_formats_test.png", view( img ), png_tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } + + { + rgb8_image_t img; + read_image( pnm_filename, img, pnm_tag() ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + fs::create_directories(fs::path(pnm_out)); + write_view( pnm_out + "all_formats_test.pnm", view( img ), pnm_tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } + + { + rgb8_image_t img; + read_image( targa_filename, img, targa_tag() ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + fs::create_directories(fs::path(targa_out)); + write_view( targa_out + "all_formats_test.tga", view( img ), targa_tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } + + { + rgba8_image_t img; + read_image( tiff_filename, img, tiff_tag() ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + fs::create_directories(fs::path(tiff_out)); + write_view( tiff_out + "all_formats_test.tif", view( img ), tiff_tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/bmp_old_test.cpp b/src/boost/libs/gil/test/extension/io/bmp_old_test.cpp new file mode 100644 index 00000000..bad59b61 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/bmp_old_test.cpp @@ -0,0 +1,99 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE bmp_old_test_module +#include <boost/gil.hpp> +#include <boost/gil/extension/io/bmp/old.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( gil_io_bmp_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( old_read_dimensions_test ) +{ + boost::gil::point_t dim = bmp_read_dimensions(bmp_filename); + BOOST_CHECK_EQUAL( dim.x, 1000 ); + BOOST_CHECK_EQUAL( dim.y, 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_image_test ) +{ + rgb8_image_t img; + bmp_read_image( bmp_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_image_test ) +{ + rgb8_image_t img; + bmp_read_and_convert_image( bmp_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_view_test ) +{ + rgb8_image_t img( 1000, 600 ); + bmp_read_view( bmp_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_view_test ) +{ + rgb8_image_t img( 1000, 600 ); + bmp_read_and_convert_view( bmp_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_write_view_test ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + bmp_write_view( bmp_out + "old_write_view_test.bmp" + , create_mandel_view( 1000, 600 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( old_dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + bmp_read_image( bmp_filename.c_str() + , runtime_image + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + bmp_write_view( bmp_out + "old_dynamic_image_test.bmp" + , view( runtime_image ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/bmp_read_test.cpp b/src/boost/libs/gil/test/extension/io/bmp_read_test.cpp new file mode 100644 index 00000000..aecc4aaa --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/bmp_read_test.cpp @@ -0,0 +1,502 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE bmp_read_test_module +#include <boost/gil.hpp> +#include <boost/gil/extension/io/bmp.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" +#include "scanline_read_test.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = bmp_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_bmp_tests ) + +#ifdef BOOST_GIL_IO_USE_BMP_TEST_SUITE_IMAGES + +template< typename Image > +void write( Image& img + , const string& file_name + ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( bmp_out + file_name + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( read_header_test ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( bmp_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._offset , 54u ); + BOOST_CHECK_EQUAL( backend._info._header_size , 40u ); + BOOST_CHECK_EQUAL( backend._info._width , 1000 ); + BOOST_CHECK_EQUAL( backend._info._height , 600 ); + BOOST_CHECK_EQUAL( backend._info._bits_per_pixel , 24 ); + BOOST_CHECK_EQUAL( backend._info._compression , 0u ); + BOOST_CHECK_EQUAL( backend._info._image_size , 1800000u ); + BOOST_CHECK_EQUAL( backend._info._horizontal_resolution, 0 ); + BOOST_CHECK_EQUAL( backend._info._vertical_resolution , 0 ); + BOOST_CHECK_EQUAL( backend._info._num_colors , 0u ); + BOOST_CHECK_EQUAL( backend._info._num_important_colors , 0u ); + BOOST_CHECK_EQUAL( backend._info._valid , true ); + } +} + +BOOST_AUTO_TEST_CASE( read_reference_images_test ) +{ + // comments are taken from http://entropymine.com/jason/bmpsuite/reference/reference.html + + // g01bw.bmp - black and white palette (#000000,#FFFFFF) + { + rgba8_image_t img; + read_image( bmp_in + "g01bw.bmp", img, tag_t() ); + } + + // g01wb.bmp - white and black palette (#FFFFFF,#000000). + // Should look the same as g01bw, not inverted. + { + rgba8_image_t img; + + read_image( bmp_in + "g01wb.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g01wb.bmp" ); + } + + // g01bg.bmp - blue and green palette (#4040FF,#40FF40) + { + rgba8_image_t img; + + read_image( bmp_in + "g01bg.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g01bg.bmp" ); + } + + // g01p1.bmp - 1-color (blue) palette (#4040FF) + { + rgba8_image_t img; + + read_image( bmp_in + "g01p1.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g01p1.bmp" ); + } + + // g04.bmp - basic 4bpp (16 color) image + { + rgba8_image_t img; + + read_image( bmp_in + "g04.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g04.bmp" ); + } + + // g04rle.bmp - RLE compressed. + { + rgb8_image_t img; + + read_image( bmp_in + "g04rle.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g04rle.bmp" ); + } + + // g04p4.bmp - 4-color grayscale palette + { + rgba8_image_t img; + + read_image( bmp_in + "g04p4.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g04p4.bmp" ); + } + + // g08.bmp - basic 8bpp (256 color) image + { + rgba8_image_t img; + + read_image( bmp_in + "g08.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08.bmp" ); + } + + // g08p256.bmp - biClrUsed=256, biClrImportant=0 [=256] + { + rgba8_image_t img; + + read_image( bmp_in + "g08p256.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08p256.bmp" ); + } + + // g08pi256.bmp - biClrUsed=256, biClrImportant=256 + { + rgba8_image_t img; + + read_image( bmp_in + "g08pi256.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08pi256.bmp" ); + } + + // g08pi64.bmp - biClrUsed=256, biClrImportant=64. It's barely possible that some + // sophisticated viewers may display this image in grayscale, if there are a + // limited number of colors available. + { + rgba8_image_t img; + + read_image( bmp_in + "g08pi64.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08pi64.bmp" ); + } + + // g08rle.bmp - RLE compressed. + { + rgb8_image_t img; + + read_image( bmp_in + "g08rle.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08rle.bmp" ); + } + + // g08os2.bmp - OS/2-style bitmap. This is an obsolete variety of BMP + // that is still encountered sometimes. It has 3-byte palette + // entries (instead of 4), and 16-bit width/height fields (instead of 32). + { + rgb8_image_t img; + + read_image( bmp_in + "g08os2.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08os2.bmp" ); + } + + // g08res22.bmp - resolution 7874x7874 pixels/meter (200x200 dpi) + { + rgba8_image_t img; + + read_image( bmp_in + "g08res22.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08res22.bmp" ); + } + + // g08res11.bmp - resolution 3937x3937 pixels/meter (100x100 dpi) + { + rgba8_image_t img; + + read_image( bmp_in + "g08res11.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08res11.bmp" ); + } + + // g08res21.bmp resolution 7874x3937 pixels/meter (200x100 dpi). + // Some programs (e.g. Imaging for Windows) may display this image + // stretched vertically, which is the optimal thing to do if the + // program is primarily a viewer, rather than an editor. + { + rgba8_image_t img; + + read_image( bmp_in + "g08res21.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08res21.bmp" ); + } + + // g08s0.bmp - bits size not given (set to 0). This is legal for uncompressed bitmaps. + { + rgba8_image_t img; + + read_image( bmp_in + "g08s0.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08s0.bmp" ); + } + + // g08offs.bmp - bfOffBits in header not set to the usual value. + // There are 100 extra unused bytes between palette and bits. + { + rgba8_image_t img; + + read_image( bmp_in + "g08offs.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08offs.bmp" ); + } + + // g08w126.bmp - size 126x63 (right and bottom slightly clipped) + { + rgba8_image_t img; + + read_image( bmp_in + "g08w126.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 126u ); + BOOST_CHECK_EQUAL( view( img ).height(), 63u ); + + write( img, "g08w126.bmp" ); + } + + // g08w125.bmp - size 125x62 + { + rgba8_image_t img; + + read_image( bmp_in + "g08w125.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 125u ); + BOOST_CHECK_EQUAL( view( img ).height(), 62u ); + + write( img, "g08w125.bmp" ); + } + + // g08w124.bmp - size 124x61 + { + rgba8_image_t img; + + read_image( bmp_in + "g08w124.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 124u ); + BOOST_CHECK_EQUAL( view( img ).height(), 61u ); + + write( img, "g08w124.bmp" ); + } + + // g08p64.bmp - 64-color grayscale palette + { + rgba8_image_t img; + + read_image( bmp_in + "g08p64.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g08p64.bmp" ); + } + + // g16def555.bmp - 15-bit color (1 bit wasted), biCompression=BI_RGB (no bitfields, defaults to 5-5-5) + { + rgb8_image_t img; + + read_image( bmp_in + "g16def555.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g16def555.bmp" ); + } + + // g16bf555.bmp - 15-bit color, biCompression=BI_BITFIELDS (bitfields indicate 5-5-5) + { + rgb8_image_t img; + + read_image( bmp_in + "g16bf555.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g16bf555.bmp" ); + } + + // g16bf565.bmp - 16-bit color, biCompression=BI_BITFIELDS (bitfields indicate 5-6-5) + { + rgb8_image_t img; + + read_image( bmp_in + "g16bf565.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g16bf565.bmp" ); + } + + // g24.bmp - 24-bit color (BGR) + { + rgb8_image_t img; + + read_image( bmp_in + "g24.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g24.bmp" ); + } + + // g32def.bmp - 24-bit color (8 bits wasted), biCompression=BI_RGB (no bitfields, defaults to BGRx) + { + rgba8_image_t img; + + read_image( bmp_in + "g32def.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g32def.bmp" ); + } + + // g32bf.bmp - 24-bit color (8 bits wasted), biCompression=BI_BITFIELDS (bitfields indicate BGRx) + { + rgba8_image_t img; + + read_image( bmp_in + "g32bf.bmp", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 127u ); + BOOST_CHECK_EQUAL( view( img ).height(), 64u ); + + write( img, "g32bf.bmp" ); + } +} + + +BOOST_AUTO_TEST_CASE( read_reference_images_image_iterator_test ) +{ + // comments are taken from http://entropymine.com/jason/bmpsuite/reference/reference.html + + // g01bw.bmp - black and white palette (#000000,#FFFFFF) + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g01bw.bmp" ).c_str() ); + + // g01wb.bmp - white and black palette (#FFFFFF,#000000). + // Should look the same as g01bw, not inverted. + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g01wb.bmp" ).c_str() ); + + // g01bg.bmp - blue and green palette (#4040FF,#40FF40) + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g01bg.bmp" ).c_str() ); + + // g01p1.bmp - 1-color (blue) palette (#4040FF) + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g01p1.bmp" ).c_str() ); + + // g04.bmp - basic 4bpp (16 color) image + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g04.bmp" ).c_str() ); + + // not supported + // g04rle.bmp - RLE compressed. + //test_scanline_reader< bgra8_image_t, bmp_tag >( string( bmp_in + "g01bg.bmp" ).c_str() ); + + // g04p4.bmp - 4-color grayscale palette + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g04p4.bmp" ).c_str() ); + + // g08.bmp - basic 8bpp (256 color) image + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08.bmp" ).c_str() ); + + // g08p256.bmp - biClrUsed=256, biClrImportant=0 [=256] + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08p256.bmp" ).c_str() ); + + // g08pi256.bmp - biClrUsed=256, biClrImportant=256 + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08pi256.bmp" ).c_str() ); + + // g08pi64.bmp - biClrUsed=256, biClrImportant=64. It's barely possible that some + // sophisticated viewers may display this image in grayscale, if there are a + // limited number of colors available. + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08pi64.bmp" ).c_str() ); + + // not supported + // g08rle.bmp - RLE compressed. + + // g08os2.bmp - OS/2-style bitmap. This is an obsolete variety of BMP + // that is still encountered sometimes. It has 3-byte palette + // entries (instead of 4), and 16-bit width/height fields (instead of 32). + test_scanline_reader< rgb8_image_t, bmp_tag >( string( bmp_in + "g08os2.bmp" ).c_str() ); + + // g08res22.bmp - resolution 7874x7874 pixels/meter (200x200 dpi) + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08res22.bmp" ).c_str() ); + + // g08res11.bmp - resolution 3937x3937 pixels/meter (100x100 dpi) + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08res11.bmp" ).c_str() ); + + // g08res21.bmp resolution 7874x3937 pixels/meter (200x100 dpi). + // Some programs (e.g. Imaging for Windows) may display this image + // stretched vertically, which is the optimal thing to do if the + // program is primarily a viewer, rather than an editor. + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08res21.bmp" ).c_str() ); + + // g08s0.bmp - bits size not given (set to 0). This is legal for uncompressed bitmaps. + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08s0.bmp" ).c_str() ); + + // g08offs.bmp - bfOffBits in header not set to the usual value. + // There are 100 extra unused bytes between palette and bits. + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08offs.bmp" ).c_str() ); + + // g08w126.bmp - size 126x63 (right and bottom slightly clipped) + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08w126.bmp" ).c_str() ); + + // g08w125.bmp - size 125x62 + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08w125.bmp" ).c_str() ); + + // g08w124.bmp - size 124x61 + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08w124.bmp" ).c_str() ); + + // g08p64.bmp - 64-color grayscale palette + test_scanline_reader< rgba8_image_t, bmp_tag >( string( bmp_in + "g08p64.bmp" ).c_str() ); + + // g16def555.bmp - 15-bit color (1 bit wasted), biCompression=BI_RGB (no bitfields, defaults to 5-5-5) + test_scanline_reader< rgb8_image_t, bmp_tag >( string( bmp_in + "g16def555.bmp" ).c_str() ); + + // g16bf555.bmp - 15-bit color, biCompression=BI_BITFIELDS (bitfields indicate 5-5-5) + test_scanline_reader< rgb8_image_t, bmp_tag >( string( bmp_in + "g16bf555.bmp" ).c_str() ); + + // g16bf565.bmp - 16-bit color, biCompression=BI_BITFIELDS (bitfields indicate 5-6-5) + test_scanline_reader< rgb8_image_t, bmp_tag >( string( bmp_in + "g16bf565.bmp" ).c_str() ); + + // g24.bmp - 24-bit color (BGR) + test_scanline_reader< bgr8_image_t, bmp_tag >( string( bmp_in + "g24.bmp" ).c_str() ); + + // g32def.bmp - 24-bit color (8 bits wasted), biCompression=BI_RGB (no bitfields, defaults to BGRx) + test_scanline_reader< bgra8_image_t, bmp_tag >( string( bmp_in + "g32def.bmp" ).c_str() ); + + // g32bf.bmp - 24-bit color (8 bits wasted), biCompression=BI_BITFIELDS (bitfields indicate BGRx) + test_scanline_reader< bgra8_image_t, bmp_tag >( string( bmp_in + "g32bf.bmp" ).c_str() ); +} + +BOOST_AUTO_TEST_CASE( partial_image_test ) +{ + const std::string filename( bmp_in + "rgb.bmp" ); + + { + rgb8_image_t img; + read_image( filename + , img + , image_read_settings< bmp_tag >( point_t( 0, 0 ), point_t( 50, 50 ) ) + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( bmp_out + "rgb_partial.bmp" + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +#endif // BOOST_GIL_IO_USE_BMP_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/bmp_test.cpp b/src/boost/libs/gil/test/extension/io/bmp_test.cpp new file mode 100644 index 00000000..eb00fee6 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/bmp_test.cpp @@ -0,0 +1,351 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE bmp_test +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT +#define BOOST_FILESYSTEM_VERSION 3 +#include <boost/gil.hpp> +#include <boost/gil/extension/io/bmp.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; +namespace fs = boost::filesystem; + +using tag_t = bmp_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_bmp_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_using_string ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( bmp_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000 ); + BOOST_CHECK_EQUAL( backend._info._height, 600 ); + } + + { + ifstream in( bmp_filename.c_str(), ios::binary ); + + using backend_t = get_reader_backend<std::ifstream, tag_t>::type; + + backend_t backend = read_image_info( in + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000 ); + BOOST_CHECK_EQUAL( backend._info._height, 600 ); + } + + { + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + + using backend_t = get_reader_backend<FILE*, tag_t>::type; + + backend_t backend = read_image_info( file + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000 ); + BOOST_CHECK_EQUAL( backend._info._height, 600 ); + } + + { + fs::path my_path( bmp_filename ); + + using backend_t = get_reader_backend<fs::path, tag_t>::type; + + backend_t backend = read_image_info( my_path + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000 ); + BOOST_CHECK_EQUAL( backend._info._height, 600 ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgb8_image_t img; + read_image( bmp_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } + + { + ifstream in( bmp_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } + + { + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } + + { + fs::path my_path( bmp_filename ); + + rgb8_image_t img; + read_image( my_path, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + { + rgb8_image_t img; + read_and_convert_image( bmp_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } + + { + ifstream in( bmp_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_and_convert_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } + + { + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_and_convert_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); + } +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + { + rgb8_image_t img( 1000, 600 ); + read_view( bmp_filename, view( img ), tag_t() ); + } + + { + ifstream in( bmp_filename.c_str(), ios::binary ); + + rgb8_image_t img( 1000, 600 ); + read_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + + rgb8_image_t img( 1000, 600 ); + read_view( file, view( img ), tag_t() ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + { + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( bmp_filename, view( img ), tag_t() ); + } + + { + ifstream in( bmp_filename.c_str(), ios::binary ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( file + , view( img ) + , tag_t() + ); + } +} + +BOOST_AUTO_TEST_CASE( write_view_test ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + { + string filename( bmp_out + "write_test_string.bmp" ); + + write_view( filename + , create_mandel_view( 1000, 600 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( bmp_out + "write_test_ofstream.bmp" ); + + ofstream out( filename.c_str(), ios::binary ); + + write_view( out + , create_mandel_view( 1000, 600 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( bmp_out + "write_test_file.bmp" ); + + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 1000, 600 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( bmp_out + "write_test_info.bmp" ); + + image_write_info< tag_t > info; + + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 1000, 600 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , info + ); + } + +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test ) +{ + // 1. Read an image. + ifstream in( bmp_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + // 2. Write image to in-memory buffer. + stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary ); + write_view( out_buffer, view( img ), tag_t() ); + + // 3. Copy in-memory buffer to another. + stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary ); + in_buffer << out_buffer.rdbuf(); + + // 4. Read in-memory buffer to gil image + rgb8_image_t dst; + read_image( in_buffer, dst, tag_t() ); + + // 5. Write out image. + string filename( bmp_out + "stream_test.bmp" ); + ofstream out( filename.c_str(), ios_base::binary ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( out, view( dst ), tag_t() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test_2 ) +{ + filebuf in_buf; + if( !in_buf.open( bmp_filename.c_str(), ios::in | ios::binary ) ) + { + BOOST_CHECK( false ); + } + + istream in( &in_buf ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); +} + +BOOST_AUTO_TEST_CASE( subimage_test ) +{ + run_subimage_test< rgb8_image_t, tag_t >( bmp_filename + , point_t( 0, 0 ) + , point_t( 1000, 1 ) + ); + + run_subimage_test< rgb8_image_t, tag_t >( bmp_filename + , point_t( 39, 7 ) + , point_t( 50, 50 ) + ); +} + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + read_image( bmp_filename.c_str() + , runtime_image + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( bmp_out + "dynamic_image_test.bmp" + , view( runtime_image ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/bmp_write_test.cpp b/src/boost/libs/gil/test/extension/io/bmp_write_test.cpp new file mode 100644 index 00000000..d6c04e1f --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/bmp_write_test.cpp @@ -0,0 +1,61 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE bmp_write_test_module +#include <boost/gil.hpp> +#include <boost/gil/io/typedefs.hpp> +#include <boost/gil/extension/io/bmp.hpp> + +#include <boost/test/unit_test.hpp> + +#include "cmp_view.hpp" +#include "color_space_write_test.hpp" +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = bmp_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_bmp_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_test ) +{ + + // test writing all supported image types + { + write_view( bmp_out + "rgb8_test.bmp" + , create_mandel_view( 200, 200 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + write_view( bmp_out + "rgba8_test.bmp" + , create_mandel_view( 200, 200 + , rgba8_pixel_t( 0, 0, 255, 0 ) + , rgba8_pixel_t( 0, 255, 0, 0 ) + ) + , tag_t() + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +BOOST_AUTO_TEST_CASE( rgb_color_space_write_test ) +{ + color_space_write_test< bmp_tag >( bmp_out + "rgb_color_space_test.bmp" + , bmp_out + "bgr_color_space_test.bmp" + ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/cmp_view.hpp b/src/boost/libs/gil/test/extension/io/cmp_view.hpp new file mode 100644 index 00000000..4be0848d --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/cmp_view.hpp @@ -0,0 +1,41 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_IO_TEST_CMP_VIEW_HPP +#define BOOST_GIL_IO_TEST_CMP_VIEW_HPP + +#include <boost/gil.hpp> + +template< typename View_1, typename View_2 > +void cmp_view( const View_1& v1 + , const View_2& v2 + ) +{ + if( v1.dimensions() != v2.dimensions() ) + { + throw std::runtime_error( "Images are not equal." ); + } + + typename View_1::x_coord_t width = v1.width(); + typename View_1::y_coord_t height = v1.height(); + + for( typename View_1::y_coord_t y = 0; y < height; ++y ) + { + const typename View_1::x_iterator src_it = v1.row_begin( y ); + const typename View_2::x_iterator dst_it = v2.row_begin( y ); + + for( typename View_1::x_coord_t x = 0; x < width; ++x ) + { + if( *src_it != *dst_it ) + { + throw std::runtime_error( "Images are not equal." ); + } + } + } +} + +#endif diff --git a/src/boost/libs/gil/test/extension/io/color_space_write_test.hpp b/src/boost/libs/gil/test/extension/io/color_space_write_test.hpp new file mode 100644 index 00000000..f26673e9 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/color_space_write_test.hpp @@ -0,0 +1,54 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_IO_TEST_COLOR_SPACE_WRITE_TEST_HPP +#define BOOST_GIL_IO_TEST_COLOR_SPACE_WRITE_TEST_HPP + +#include <boost/gil.hpp> + +#ifndef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +#include <boost/core/ignore_unused.hpp> +#endif +#include <string> + +#include "cmp_view.hpp" + +template< typename Tag > +void color_space_write_test( const std::string& file_name_1 + , const std::string& file_name_2 + ) +{ + using namespace boost::gil; + + rgb8_image_t rgb( 320, 200 ); + bgr8_image_t bgr( 320, 200 ); + + fill_pixels( view(rgb), rgb8_pixel_t( 0, 0, 255 )); + fill_pixels( view(bgr), bgr8_pixel_t(255, 0, 0 )); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( file_name_1, view( rgb ), Tag() ); + write_view( file_name_2, view( bgr ), Tag() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + rgb8_image_t rgb_1; + rgb8_image_t rgb_2; + + read_image( file_name_1, rgb_1, Tag() ); + read_image( file_name_2, rgb_2, Tag() ); + + cmp_view( view( rgb_1 ), view( rgb_2 )); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifndef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + boost::ignore_unused(file_name_1); + boost::ignore_unused(file_name_2); +#endif +} + +#endif diff --git a/src/boost/libs/gil/test/extension/io/fabscript b/src/boost/libs/gil/test/extension/io/fabscript new file mode 100644 index 00000000..5370c972 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/fabscript @@ -0,0 +1,98 @@ +# -*- python -*- +# +# Copyright (c) 2017 Stefan Seefeld +# All rights reserved. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +from faber import platform +from faber.feature import set +from faber.tools.compiler import define, libs, linkpath +from faber.artefacts.binary import binary +from faber.test import test, report, fail +from os.path import join + +boost_suffix = options.get_with('boost-suffix') +boost_suffix = '-' + boost_suffix if boost_suffix else '' +boost_unit_test_framework = 'boost_unit_test_framework' + boost_suffix +boost_filesystem = 'boost_filesystem' + boost_suffix +boost_system = 'boost_system' + boost_suffix + +test_features = set(define('BOOST_TEST_DYN_LINK'), + libs(boost_unit_test_framework, + boost_system, + boost_filesystem)) + +without_jpeg = options.get_without('jpeg') +jpeg_features = test_features + set(libs('jpeg')) +jpeg_prefix = options.get_with('jpeg-prefix') +if jpeg_prefix: + jpeg_features += include(join(jpeg_prefix, 'include')) + jpeg_features += linkpath(join(jpeg_prefix, 'lib64'), join(jpeg_prefix, 'lib')) + +without_png = options.get_without('png') +png = options.get_with('png') or 'png' # on some platforms the library uses another name +png_features = test_features + set(libs(png)) +png_prefix = options.get_with('png-prefix') +if png_prefix: + png_features += include(join(png_prefix, 'include')) + png_features += linkpath(join(png_prefix, 'lib64'), join(png_prefix, 'lib')) + +without_tiff = options.get_without('tiff') +tiff_features = test_features + set(libs('tiff')) +tiff_prefix = options.get_with('tiff-prefix') +if tiff_prefix: + tiff_features += include(join(tiff_prefix, 'include')) + tiff_features += linkpath(join(tiff_prefix, 'lib64'), join(tiff_prefix, 'lib')) + + +def gil_test(name, sources, features, condition=True): + return test(name, binary(name, sources, features=features, condition=condition)) + + +tests = [gil_test('all_formats_test', ['all_formats_test.cpp'], features=test_features | png_features | jpeg_features), + gil_test('bmp', + ['bmp_test.cpp', 'bmp_old_test.cpp', 'bmp_read_test.cpp', 'bmp_write_test.cpp'], + features=test_features), + gil_test('jpeg', ['jpeg_test.cpp', 'jpeg_old_test.cpp', 'jpeg_read_test.cpp', 'jpeg_write_test.cpp'], + features=jpeg_features, + condition=not without_jpeg), + gil_test('png', ['png_test.cpp', 'png_old_test.cpp', 'png_file_format_test.cpp', 'png_read_test.cpp'], + features=png_features, + condition=not without_png), + gil_test('pnm', ['pnm_test.cpp', 'pnm_old_test.cpp', 'pnm_read_test.cpp', 'pnm_write_test.cpp'], + features=test_features), + gil_test('targa', ['targa_test.cpp', 'targa_old_test.cpp', 'targa_read_test.cpp', 'targa_write_test.cpp'], + features=test_features), + gil_test('tiff', ['tiff_test.cpp', + 'tiff_old_test.cpp', + 'tiff_file_format_test.cpp', + 'tiff_tiled_float_test.cpp', + 'tiff_tiled_minisblack_test_1-10.cpp', + 'tiff_tiled_minisblack_test_11-20.cpp', + 'tiff_tiled_minisblack_test_21-31_32-64.cpp', + 'tiff_tiled_minisblack_write_test_1-10.cpp', + 'tiff_tiled_minisblack_write_test_11-20.cpp', + 'tiff_tiled_minisblack_write_test_21-31_32-64.cpp', + 'tiff_tiled_palette_test_1-8.cpp', + 'tiff_tiled_palette_test_8-16.cpp', + 'tiff_tiled_palette_write_test_1-8.cpp', + 'tiff_tiled_palette_write_test_8-16.cpp', + 'tiff_tiled_rgb_contig_test_1-10.cpp', + 'tiff_tiled_rgb_contig_test_11-20.cpp', + 'tiff_tiled_rgb_contig_test_21-31_32_64.cpp', + 'tiff_tiled_rgb_contig_write_test_1-10.cpp', + 'tiff_tiled_rgb_contig_write_test_11-20.cpp', + 'tiff_tiled_rgb_contig_write_test_21-31_32_64.cpp', + 'tiff_tiled_rgb_planar_test_1-10.cpp', + 'tiff_tiled_rgb_planar_test_11-20.cpp', + 'tiff_tiled_rgb_planar_test_21-31_32_64.cpp', + 'tiff_tiled_test.cpp', + 'tiff_write_test.cpp'], + features=tiff_features, + condition=not without_tiff) +] + +default = report('report', tests, fail_on_failures=True) diff --git a/src/boost/libs/gil/test/extension/io/images/bmp/readme.txt b/src/boost/libs/gil/test/extension/io/images/bmp/readme.txt new file mode 100644 index 00000000..2478f5dd --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/bmp/readme.txt @@ -0,0 +1,5 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +Image were found at http://entropymine.com/jason/bmpsuite/ .
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/bmp/test.bmp b/src/boost/libs/gil/test/extension/io/images/bmp/test.bmp Binary files differnew file mode 100644 index 00000000..24d396d5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/bmp/test.bmp diff --git a/src/boost/libs/gil/test/extension/io/images/jpeg/EddDawson/36dpi.jpg b/src/boost/libs/gil/test/extension/io/images/jpeg/EddDawson/36dpi.jpg Binary files differnew file mode 100644 index 00000000..793e3178 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/jpeg/EddDawson/36dpi.jpg diff --git a/src/boost/libs/gil/test/extension/io/images/jpeg/test.jpg b/src/boost/libs/gil/test/extension/io/images/jpeg/test.jpg Binary files differnew file mode 100644 index 00000000..d221c054 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/jpeg/test.jpg diff --git a/src/boost/libs/gil/test/extension/io/images/png/EddDawson/36dpi.png b/src/boost/libs/gil/test/extension/io/images/png/EddDawson/36dpi.png Binary files differnew file mode 100644 index 00000000..bea4eb6f --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/EddDawson/36dpi.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/readme.txt b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/readme.txt new file mode 100644 index 00000000..46c5ccb7 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/readme.txt @@ -0,0 +1,7 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +test images can be found at http://www.schaik.com/pngsuite/pngsuite.html + +if not available please send me an email at chhenning ** at ** gmail.com
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn0g04.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn0g04.png Binary files differnew file mode 100644 index 00000000..39a7050d --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn0g04.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn2c16.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn2c16.png Binary files differnew file mode 100644 index 00000000..dd3168e5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn2c16.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn3p08.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn3p08.png Binary files differnew file mode 100644 index 00000000..0ede3574 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbbn3p08.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbgn2c16.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbgn2c16.png Binary files differnew file mode 100644 index 00000000..85cec395 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbgn2c16.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbgn3p08.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbgn3p08.png Binary files differnew file mode 100644 index 00000000..8cf2e6fb --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbgn3p08.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbrn2c08.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbrn2c08.png Binary files differnew file mode 100644 index 00000000..5cca0d62 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbrn2c08.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbwn0g16.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbwn0g16.png Binary files differnew file mode 100644 index 00000000..99bdeed2 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tbwn0g16.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tm3n3p02.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tm3n3p02.png Binary files differnew file mode 100644 index 00000000..fb3ef1d0 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tm3n3p02.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tp1n3p08.png b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tp1n3p08.png Binary files differnew file mode 100644 index 00000000..a6c9f35a --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/PngSuite/tp1n3p08.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/grayalpha-with-tRNS-chunk.png b/src/boost/libs/gil/test/extension/io/images/png/grayalpha-with-tRNS-chunk.png Binary files differnew file mode 100644 index 00000000..c914fb4b --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/grayalpha-with-tRNS-chunk.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/grayscale-with-tRNS-chunk.png b/src/boost/libs/gil/test/extension/io/images/png/grayscale-with-tRNS-chunk.png Binary files differnew file mode 100644 index 00000000..9fae9a15 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/grayscale-with-tRNS-chunk.png diff --git a/src/boost/libs/gil/test/extension/io/images/png/test.png b/src/boost/libs/gil/test/extension/io/images/png/test.png Binary files differnew file mode 100644 index 00000000..bd731ed8 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/png/test.png diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/p1.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/p1.pnm new file mode 100644 index 00000000..087e56b5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/p1.pnm @@ -0,0 +1,1203 @@ +P1 +# ASCII PBM file created by PBMA_WRITE. + 200 200 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 + 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/p2.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/p2.pnm new file mode 100644 index 00000000..1673f516 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/p2.pnm @@ -0,0 +1,3004 @@ +P2 +# ASCII PGM file created by PGMA_WRITE. + 200 200 + 199 + 0 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + 1 1 1 1 + 0 0 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 + 0 1 0 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 + 0 0 1 0 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 + 0 1 2 1 0 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 + 0 0 0 2 1 0 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 + 0 1 1 3 2 1 0 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 7 7 7 7 7 7 7 7 7 7 + 7 7 7 7 + 0 0 2 0 3 2 1 0 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 8 8 8 8 8 8 8 8 8 8 + 8 8 8 8 + 0 1 0 1 4 3 2 1 0 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 + 0 0 1 2 0 4 3 2 1 0 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 10 10 10 10 10 10 10 10 10 10 + 10 10 10 10 + 0 1 2 3 1 5 4 3 2 1 0 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 11 11 11 11 11 11 11 11 11 11 + 11 11 11 11 + 0 0 0 0 2 0 5 4 3 2 1 0 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + 12 12 12 12 + 0 1 1 1 3 1 6 5 4 3 2 1 0 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 13 13 13 13 13 13 13 13 13 13 + 13 13 13 13 + 0 0 2 2 4 2 0 6 5 4 3 2 1 0 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 14 14 14 14 14 14 14 14 14 14 + 14 14 14 14 + 0 1 0 3 0 3 1 7 6 5 4 3 2 1 + 0 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 15 15 15 15 15 15 15 15 15 15 + 15 15 15 15 + 0 0 1 0 1 4 2 0 7 6 5 4 3 2 + 1 0 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 16 16 16 16 16 16 16 16 16 16 + 16 16 16 16 + 0 1 2 1 2 5 3 1 8 7 6 5 4 3 + 2 1 0 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 17 17 17 17 17 17 17 17 17 17 + 17 17 17 17 + 0 0 0 2 3 0 4 2 0 8 7 6 5 4 + 3 2 1 0 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 18 18 18 18 18 18 18 18 18 18 + 18 18 18 18 + 0 1 1 3 4 1 5 3 1 9 8 7 6 5 + 4 3 2 1 0 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 19 19 19 19 19 19 19 19 19 19 + 19 19 19 19 + 0 0 2 0 0 2 6 4 2 0 9 8 7 6 + 5 4 3 2 1 0 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 20 20 20 20 20 20 20 20 20 20 + 20 20 20 20 + 0 1 0 1 1 3 0 5 3 1 10 9 8 7 + 6 5 4 3 2 1 0 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 21 21 21 21 21 21 21 21 21 21 + 21 21 21 21 + 0 0 1 2 2 4 1 6 4 2 0 10 9 8 + 7 6 5 4 3 2 1 0 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 22 22 22 22 22 22 22 22 22 22 + 22 22 22 22 + 0 1 2 3 3 5 2 7 5 3 1 11 10 9 + 8 7 6 5 4 3 2 1 0 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 23 23 23 23 23 23 23 23 23 23 + 23 23 23 23 + 0 0 0 0 4 0 3 0 6 4 2 0 11 10 + 9 8 7 6 5 4 3 2 1 0 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 24 24 24 24 24 24 24 24 24 24 + 24 24 24 24 + 0 1 1 1 0 1 4 1 7 5 3 1 12 11 + 10 9 8 7 6 5 4 3 2 1 0 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 25 25 25 25 25 25 25 25 25 25 + 25 25 25 25 + 0 0 2 2 1 2 5 2 8 6 4 2 0 12 + 11 10 9 8 7 6 5 4 3 2 1 0 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 26 26 26 26 26 26 26 26 26 26 + 26 26 26 26 + 0 1 0 3 2 3 6 3 0 7 5 3 1 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 27 27 27 27 27 27 27 27 27 27 + 27 27 27 27 + 0 0 1 0 3 4 0 4 1 8 6 4 2 0 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 28 28 28 28 28 28 28 28 28 28 + 28 28 28 28 + 0 1 2 1 4 5 1 5 2 9 7 5 3 1 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 29 29 29 29 29 29 29 29 29 29 + 29 29 29 29 + 0 0 0 2 0 0 2 6 3 0 8 6 4 2 + 0 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 30 30 30 30 30 30 30 30 30 30 + 30 30 30 30 + 0 1 1 3 1 1 3 7 4 1 9 7 5 3 + 1 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 31 31 31 31 31 31 31 31 31 31 + 31 31 31 31 + 0 0 2 0 2 2 4 0 5 2 10 8 6 4 + 2 0 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 + 0 1 0 1 3 3 5 1 6 3 0 9 7 5 + 3 1 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 + 0 0 1 2 4 4 6 2 7 4 1 10 8 6 + 4 2 0 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 + 0 1 2 3 0 5 0 3 8 5 2 11 9 7 + 5 3 1 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 + 0 0 0 0 1 0 1 4 0 6 3 0 10 8 + 6 4 2 0 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 36 36 36 36 36 36 36 36 + 36 36 36 36 + 0 1 1 1 2 1 2 5 1 7 4 1 11 9 + 7 5 3 1 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 + 0 0 2 2 3 2 3 6 2 8 5 2 12 10 + 8 6 4 2 0 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 + 0 1 0 3 4 3 4 7 3 9 6 3 0 11 + 9 7 5 3 1 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 + 0 0 1 0 0 4 5 0 4 0 7 4 1 12 + 10 8 6 4 2 0 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 + 0 1 2 1 1 5 6 1 5 1 8 5 2 13 + 11 9 7 5 3 1 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 + 41 41 41 41 + 0 0 0 2 2 0 0 2 6 2 9 6 3 0 + 12 10 8 6 4 2 0 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 42 42 42 42 42 42 42 42 42 42 + 42 42 42 42 + 0 1 1 3 3 1 1 3 7 3 10 7 4 1 + 13 11 9 7 5 3 1 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 43 43 43 43 43 43 43 43 43 43 + 43 43 43 43 + 0 0 2 0 4 2 2 4 8 4 0 8 5 2 + 14 12 10 8 6 4 2 0 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 44 44 44 44 44 44 44 44 44 44 + 44 44 44 44 + 0 1 0 1 0 3 3 5 0 5 1 9 6 3 + 0 13 11 9 7 5 3 1 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 45 45 45 45 45 45 45 45 45 45 + 45 45 45 45 + 0 0 1 2 1 4 4 6 1 6 2 10 7 4 + 1 14 12 10 8 6 4 2 0 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 46 46 46 46 46 46 46 46 46 46 + 46 46 46 46 + 0 1 2 3 2 5 5 7 2 7 3 11 8 5 + 2 15 13 11 9 7 5 3 1 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 47 47 47 47 47 47 47 47 47 47 + 47 47 47 47 + 0 0 0 0 3 0 6 0 3 8 4 0 9 6 + 3 0 14 12 10 8 6 4 2 0 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 48 48 48 48 48 48 48 48 48 48 + 48 48 48 48 + 0 1 1 1 4 1 0 1 4 9 5 1 10 7 + 4 1 15 13 11 9 7 5 3 1 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 49 49 49 49 49 49 49 49 49 49 + 49 49 49 49 + 0 0 2 2 0 2 1 2 5 0 6 2 11 8 + 5 2 16 14 12 10 8 6 4 2 0 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 + 0 1 0 3 1 3 2 3 6 1 7 3 12 9 + 6 3 0 15 13 11 9 7 5 3 1 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 51 51 51 51 51 51 51 51 51 51 + 51 51 51 51 + 0 0 1 0 2 4 3 4 7 2 8 4 0 10 + 7 4 1 16 14 12 10 8 6 4 2 0 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 52 52 52 52 52 52 52 52 52 52 + 52 52 52 52 + 0 1 2 1 3 5 4 5 8 3 9 5 1 11 + 8 5 2 17 15 13 11 9 7 5 3 1 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 53 53 53 53 53 53 53 53 53 53 + 53 53 53 53 + 0 0 0 2 4 0 5 6 0 4 10 6 2 12 + 9 6 3 0 16 14 12 10 8 6 4 2 0 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 54 54 54 54 54 54 54 54 54 54 + 54 54 54 54 + 0 1 1 3 0 1 6 7 1 5 0 7 3 13 + 10 7 4 1 17 15 13 11 9 7 5 3 1 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 55 55 55 55 55 55 55 55 55 55 + 55 55 55 55 + 0 0 2 0 1 2 0 0 2 6 1 8 4 0 + 11 8 5 2 18 16 14 12 10 8 6 4 2 0 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 56 56 56 56 56 56 56 56 56 56 + 56 56 56 56 + 0 1 0 1 2 3 1 1 3 7 2 9 5 1 + 12 9 6 3 0 17 15 13 11 9 7 5 3 1 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 57 57 57 57 57 57 57 57 57 57 + 57 57 57 57 + 0 0 1 2 3 4 2 2 4 8 3 10 6 2 + 13 10 7 4 1 18 16 14 12 10 8 6 4 2 + 0 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 58 58 58 58 58 58 58 58 58 58 + 58 58 58 58 + 0 1 2 3 4 5 3 3 5 9 4 11 7 3 + 14 11 8 5 2 19 17 15 13 11 9 7 5 3 + 1 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 59 59 59 59 59 59 59 59 59 59 + 59 59 59 59 + 0 0 0 0 0 0 4 4 6 0 5 0 8 4 + 0 12 9 6 3 0 18 16 14 12 10 8 6 4 + 2 0 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 60 60 60 60 60 60 60 60 60 60 + 60 60 60 60 + 0 1 1 1 1 1 5 5 7 1 6 1 9 5 + 1 13 10 7 4 1 19 17 15 13 11 9 7 5 + 3 1 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 61 61 61 61 61 61 61 61 61 61 + 61 61 61 61 + 0 0 2 2 2 2 6 6 8 2 7 2 10 6 + 2 14 11 8 5 2 20 18 16 14 12 10 8 6 + 4 2 0 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 62 62 62 62 62 62 62 62 62 62 + 62 62 62 62 + 0 1 0 3 3 3 0 7 0 3 8 3 11 7 + 3 15 12 9 6 3 0 19 17 15 13 11 9 7 + 5 3 1 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 63 63 63 63 63 63 63 63 63 63 + 63 63 63 63 + 0 0 1 0 4 4 1 0 1 4 9 4 12 8 + 4 0 13 10 7 4 1 20 18 16 14 12 10 8 + 6 4 2 0 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 64 64 64 64 64 64 64 64 64 64 + 64 64 64 64 + 0 1 2 1 0 5 2 1 2 5 10 5 0 9 + 5 1 14 11 8 5 2 21 19 17 15 13 11 9 + 7 5 3 1 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 65 65 65 65 65 65 65 65 65 65 + 65 65 65 65 + 0 0 0 2 1 0 3 2 3 6 0 6 1 10 + 6 2 15 12 9 6 3 0 20 18 16 14 12 10 + 8 6 4 2 0 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 66 66 66 66 66 66 66 66 66 66 + 66 66 66 66 + 0 1 1 3 2 1 4 3 4 7 1 7 2 11 + 7 3 16 13 10 7 4 1 21 19 17 15 13 11 + 9 7 5 3 1 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 67 67 67 67 67 67 67 67 67 67 + 67 67 67 67 + 0 0 2 0 3 2 5 4 5 8 2 8 3 12 + 8 4 0 14 11 8 5 2 22 20 18 16 14 12 + 10 8 6 4 2 0 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 68 68 68 68 68 68 68 68 68 68 + 68 68 68 68 + 0 1 0 1 4 3 6 5 6 9 3 9 4 13 + 9 5 1 15 12 9 6 3 0 21 19 17 15 13 + 11 9 7 5 3 1 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 69 69 69 69 69 69 69 69 69 69 + 69 69 69 69 + 0 0 1 2 0 4 0 6 7 0 4 10 5 0 + 10 6 2 16 13 10 7 4 1 22 20 18 16 14 + 12 10 8 6 4 2 0 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 70 70 70 70 70 70 70 70 70 70 + 70 70 70 70 + 0 1 2 3 1 5 1 7 8 1 5 11 6 1 + 11 7 3 17 14 11 8 5 2 23 21 19 17 15 + 13 11 9 7 5 3 1 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 71 71 71 71 71 71 71 71 71 71 + 71 71 71 71 + 0 0 0 0 2 0 2 0 0 2 6 0 7 2 + 12 8 4 0 15 12 9 6 3 0 22 20 18 16 + 14 12 10 8 6 4 2 0 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 72 72 72 72 72 72 72 72 72 72 + 72 72 72 72 + 0 1 1 1 3 1 3 1 1 3 7 1 8 3 + 13 9 5 1 16 13 10 7 4 1 23 21 19 17 + 15 13 11 9 7 5 3 1 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 73 73 73 73 73 73 73 73 73 73 + 73 73 73 73 + 0 0 2 2 4 2 4 2 2 4 8 2 9 4 + 14 10 6 2 17 14 11 8 5 2 24 22 20 18 + 16 14 12 10 8 6 4 2 0 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 74 74 74 74 74 74 74 74 74 74 + 74 74 74 74 + 0 1 0 3 0 3 5 3 3 5 9 3 10 5 + 0 11 7 3 18 15 12 9 6 3 0 23 21 19 + 17 15 13 11 9 7 5 3 1 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 75 75 75 75 75 75 75 75 75 75 + 75 75 75 75 + 0 0 1 0 1 4 6 4 4 6 10 4 11 6 + 1 12 8 4 0 16 13 10 7 4 1 24 22 20 + 18 16 14 12 10 8 6 4 2 0 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 76 76 76 76 76 76 76 76 76 76 + 76 76 76 76 + 0 1 2 1 2 5 0 5 5 7 0 5 12 7 + 2 13 9 5 1 17 14 11 8 5 2 25 23 21 + 19 17 15 13 11 9 7 5 3 1 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 77 77 77 77 77 77 77 77 77 77 + 77 77 77 77 + 0 0 0 2 3 0 1 6 6 8 1 6 0 8 + 3 14 10 6 2 18 15 12 9 6 3 0 24 22 + 20 18 16 14 12 10 8 6 4 2 0 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 78 78 78 78 78 78 78 78 78 78 + 78 78 78 78 + 0 1 1 3 4 1 2 7 7 9 2 7 1 9 + 4 15 11 7 3 19 16 13 10 7 4 1 25 23 + 21 19 17 15 13 11 9 7 5 3 1 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 79 79 79 79 79 79 79 79 79 79 + 79 79 79 79 + 0 0 2 0 0 2 3 0 8 0 3 8 2 10 + 5 0 12 8 4 0 17 14 11 8 5 2 26 24 + 22 20 18 16 14 12 10 8 6 4 2 0 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 80 80 80 80 80 80 80 80 80 80 + 80 80 80 80 + 0 1 0 1 1 3 4 1 0 1 4 9 3 11 + 6 1 13 9 5 1 18 15 12 9 6 3 0 25 + 23 21 19 17 15 13 11 9 7 5 3 1 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 81 81 81 81 81 81 81 81 81 81 + 81 81 81 81 + 0 0 1 2 2 4 5 2 1 2 5 10 4 12 + 7 2 14 10 6 2 19 16 13 10 7 4 1 26 + 24 22 20 18 16 14 12 10 8 6 4 2 0 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 82 82 82 82 82 82 82 82 82 82 + 82 82 82 82 + 0 1 2 3 3 5 6 3 2 3 6 11 5 13 + 8 3 15 11 7 3 20 17 14 11 8 5 2 27 + 25 23 21 19 17 15 13 11 9 7 5 3 1 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 83 83 83 83 83 83 83 83 83 83 + 83 83 83 83 + 0 0 0 0 4 0 0 4 3 4 7 0 6 0 + 9 4 16 12 8 4 0 18 15 12 9 6 3 0 + 26 24 22 20 18 16 14 12 10 8 6 4 2 0 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 84 84 84 84 84 84 84 84 84 84 + 84 84 84 84 + 0 1 1 1 0 1 1 5 4 5 8 1 7 1 + 10 5 0 13 9 5 1 19 16 13 10 7 4 1 + 27 25 23 21 19 17 15 13 11 9 7 5 3 1 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 85 85 85 85 85 85 85 85 85 85 + 85 85 85 85 + 0 0 2 2 1 2 2 6 5 6 9 2 8 2 + 11 6 1 14 10 6 2 20 17 14 11 8 5 2 + 28 26 24 22 20 18 16 14 12 10 8 6 4 2 + 0 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 86 86 86 86 86 86 86 86 86 86 + 86 86 86 86 + 0 1 0 3 2 3 3 7 6 7 10 3 9 3 + 12 7 2 15 11 7 3 21 18 15 12 9 6 3 + 0 27 25 23 21 19 17 15 13 11 9 7 5 3 + 1 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 87 87 87 87 87 87 87 87 87 87 + 87 87 87 87 + 0 0 1 0 3 4 4 0 7 8 0 4 10 4 + 13 8 3 16 12 8 4 0 19 16 13 10 7 4 + 1 28 26 24 22 20 18 16 14 12 10 8 6 4 + 2 0 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 88 88 88 88 88 88 88 88 88 88 + 88 88 88 88 + 0 1 2 1 4 5 5 1 8 9 1 5 11 5 + 14 9 4 17 13 9 5 1 20 17 14 11 8 5 + 2 29 27 25 23 21 19 17 15 13 11 9 7 5 + 3 1 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 89 89 89 89 89 89 89 89 89 89 + 89 89 89 89 + 0 0 0 2 0 0 6 2 0 0 2 6 12 6 + 0 10 5 0 14 10 6 2 21 18 15 12 9 6 + 3 0 28 26 24 22 20 18 16 14 12 10 8 6 + 4 2 0 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 90 90 90 90 90 90 90 90 90 90 + 90 90 90 90 + 0 1 1 3 1 1 0 3 1 1 3 7 0 7 + 1 11 6 1 15 11 7 3 22 19 16 13 10 7 + 4 1 29 27 25 23 21 19 17 15 13 11 9 7 + 5 3 1 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 91 91 91 91 91 91 91 91 91 91 + 91 91 91 91 + 0 0 2 0 2 2 1 4 2 2 4 8 1 8 + 2 12 7 2 16 12 8 4 0 20 17 14 11 8 + 5 2 30 28 26 24 22 20 18 16 14 12 10 8 + 6 4 2 0 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 92 92 92 92 92 92 92 92 92 92 + 92 92 92 92 + 0 1 0 1 3 3 2 5 3 3 5 9 2 9 + 3 13 8 3 17 13 9 5 1 21 18 15 12 9 + 6 3 0 29 27 25 23 21 19 17 15 13 11 9 + 7 5 3 1 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 93 93 93 93 93 93 93 93 93 93 + 93 93 93 93 + 0 0 1 2 4 4 3 6 4 4 6 10 3 10 + 4 14 9 4 18 14 10 6 2 22 19 16 13 10 + 7 4 1 30 28 26 24 22 20 18 16 14 12 10 + 8 6 4 2 0 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 94 94 94 94 94 94 94 94 94 94 + 94 94 94 94 + 0 1 2 3 0 5 4 7 5 5 7 11 4 11 + 5 15 10 5 0 15 11 7 3 23 20 17 14 11 + 8 5 2 31 29 27 25 23 21 19 17 15 13 11 + 9 7 5 3 1 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 95 95 95 95 95 95 95 95 95 95 + 95 95 95 95 + 0 0 0 0 1 0 5 0 6 6 8 0 5 12 + 6 0 11 6 1 16 12 8 4 0 21 18 15 12 + 9 6 3 0 30 28 26 24 22 20 18 16 14 12 + 10 8 6 4 2 0 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 96 96 96 96 96 96 96 96 96 96 + 96 96 96 96 + 0 1 1 1 2 1 6 1 7 7 9 1 6 13 + 7 1 12 7 2 17 13 9 5 1 22 19 16 13 + 10 7 4 1 31 29 27 25 23 21 19 17 15 13 + 11 9 7 5 3 1 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 97 97 97 97 97 97 97 97 97 97 + 97 97 97 97 + 0 0 2 2 3 2 0 2 8 8 10 2 7 0 + 8 2 13 8 3 18 14 10 6 2 23 20 17 14 + 11 8 5 2 32 30 28 26 24 22 20 18 16 14 + 12 10 8 6 4 2 0 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 98 98 98 98 98 98 98 98 98 98 + 98 98 98 98 + 0 1 0 3 4 3 1 3 0 9 0 3 8 1 + 9 3 14 9 4 19 15 11 7 3 24 21 18 15 + 12 9 6 3 0 31 29 27 25 23 21 19 17 15 + 13 11 9 7 5 3 1 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 99 99 99 99 99 99 99 99 99 99 + 99 99 99 99 + 0 0 1 0 0 4 2 4 1 0 1 4 9 2 + 10 4 15 10 5 0 16 12 8 4 0 22 19 16 + 13 10 7 4 1 32 30 28 26 24 22 20 18 16 + 14 12 10 8 6 4 2 0 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 100 100 100 100 100 100 100 100 100 100 + 100 100 100 100 + 0 1 2 1 1 5 3 5 2 1 2 5 10 3 + 11 5 16 11 6 1 17 13 9 5 1 23 20 17 + 14 11 8 5 2 33 31 29 27 25 23 21 19 17 + 15 13 11 9 7 5 3 1 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 101 101 101 101 101 101 101 101 101 101 + 101 101 101 101 + 0 0 0 2 2 0 4 6 3 2 3 6 11 4 + 12 6 0 12 7 2 18 14 10 6 2 24 21 18 + 15 12 9 6 3 0 32 30 28 26 24 22 20 18 + 16 14 12 10 8 6 4 2 0 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 102 102 102 102 102 102 102 102 102 102 + 102 102 102 102 + 0 1 1 3 3 1 5 7 4 3 4 7 12 5 + 13 7 1 13 8 3 19 15 11 7 3 25 22 19 + 16 13 10 7 4 1 33 31 29 27 25 23 21 19 + 17 15 13 11 9 7 5 3 1 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 103 103 103 103 103 103 103 103 103 103 + 103 103 103 103 + 0 0 2 0 4 2 6 0 5 4 5 8 0 6 + 14 8 2 14 9 4 20 16 12 8 4 0 23 20 + 17 14 11 8 5 2 34 32 30 28 26 24 22 20 + 18 16 14 12 10 8 6 4 2 0 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 104 104 104 104 104 104 104 104 + 104 104 104 104 104 104 104 104 104 104 104 104 104 104 + 104 104 104 104 104 104 104 104 104 104 104 104 104 104 + 104 104 104 104 104 104 104 104 104 104 104 104 104 104 + 104 104 104 104 104 104 104 104 104 104 104 104 104 104 + 104 104 104 104 104 104 104 104 104 104 104 104 104 104 + 104 104 104 104 104 104 104 104 104 104 104 104 104 104 + 104 104 104 104 + 0 1 0 1 0 3 0 1 6 5 6 9 1 7 + 0 9 3 15 10 5 0 17 13 9 5 1 24 21 + 18 15 12 9 6 3 0 33 31 29 27 25 23 21 + 19 17 15 13 11 9 7 5 3 1 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 105 105 105 105 105 105 105 + 105 105 105 105 105 105 105 105 105 105 105 105 105 105 + 105 105 105 105 105 105 105 105 105 105 105 105 105 105 + 105 105 105 105 105 105 105 105 105 105 105 105 105 105 + 105 105 105 105 105 105 105 105 105 105 105 105 105 105 + 105 105 105 105 105 105 105 105 105 105 105 105 105 105 + 105 105 105 105 105 105 105 105 105 105 105 105 105 105 + 105 105 105 105 + 0 0 1 2 1 4 1 2 7 6 7 10 2 8 + 1 10 4 16 11 6 1 18 14 10 6 2 25 22 + 19 16 13 10 7 4 1 34 32 30 28 26 24 22 + 20 18 16 14 12 10 8 6 4 2 0 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 106 106 106 106 106 106 + 106 106 106 106 106 106 106 106 106 106 106 106 106 106 + 106 106 106 106 106 106 106 106 106 106 106 106 106 106 + 106 106 106 106 106 106 106 106 106 106 106 106 106 106 + 106 106 106 106 106 106 106 106 106 106 106 106 106 106 + 106 106 106 106 106 106 106 106 106 106 106 106 106 106 + 106 106 106 106 106 106 106 106 106 106 106 106 106 106 + 106 106 106 106 + 0 1 2 3 2 5 2 3 8 7 8 11 3 9 + 2 11 5 17 12 7 2 19 15 11 7 3 26 23 + 20 17 14 11 8 5 2 35 33 31 29 27 25 23 + 21 19 17 15 13 11 9 7 5 3 1 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 107 107 107 107 107 + 107 107 107 107 107 107 107 107 107 107 107 107 107 107 + 107 107 107 107 107 107 107 107 107 107 107 107 107 107 + 107 107 107 107 107 107 107 107 107 107 107 107 107 107 + 107 107 107 107 107 107 107 107 107 107 107 107 107 107 + 107 107 107 107 107 107 107 107 107 107 107 107 107 107 + 107 107 107 107 107 107 107 107 107 107 107 107 107 107 + 107 107 107 107 + 0 0 0 0 3 0 3 4 0 8 9 0 4 10 + 3 12 6 0 13 8 3 20 16 12 8 4 0 24 + 21 18 15 12 9 6 3 0 34 32 30 28 26 24 + 22 20 18 16 14 12 10 8 6 4 2 0 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 108 108 108 108 + 108 108 108 108 108 108 108 108 108 108 108 108 108 108 + 108 108 108 108 108 108 108 108 108 108 108 108 108 108 + 108 108 108 108 108 108 108 108 108 108 108 108 108 108 + 108 108 108 108 108 108 108 108 108 108 108 108 108 108 + 108 108 108 108 108 108 108 108 108 108 108 108 108 108 + 108 108 108 108 108 108 108 108 108 108 108 108 108 108 + 108 108 108 108 + 0 1 1 1 4 1 4 5 1 9 10 1 5 11 + 4 13 7 1 14 9 4 21 17 13 9 5 1 25 + 22 19 16 13 10 7 4 1 35 33 31 29 27 25 + 23 21 19 17 15 13 11 9 7 5 3 1 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 109 109 109 + 109 109 109 109 109 109 109 109 109 109 109 109 109 109 + 109 109 109 109 109 109 109 109 109 109 109 109 109 109 + 109 109 109 109 109 109 109 109 109 109 109 109 109 109 + 109 109 109 109 109 109 109 109 109 109 109 109 109 109 + 109 109 109 109 109 109 109 109 109 109 109 109 109 109 + 109 109 109 109 109 109 109 109 109 109 109 109 109 109 + 109 109 109 109 + 0 0 2 2 0 2 5 6 2 0 0 2 6 12 + 5 14 8 2 15 10 5 0 18 14 10 6 2 26 + 23 20 17 14 11 8 5 2 36 34 32 30 28 26 + 24 22 20 18 16 14 12 10 8 6 4 2 0 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 110 110 + 110 110 110 110 110 110 110 110 110 110 110 110 110 110 + 110 110 110 110 110 110 110 110 110 110 110 110 110 110 + 110 110 110 110 110 110 110 110 110 110 110 110 110 110 + 110 110 110 110 110 110 110 110 110 110 110 110 110 110 + 110 110 110 110 110 110 110 110 110 110 110 110 110 110 + 110 110 110 110 110 110 110 110 110 110 110 110 110 110 + 110 110 110 110 + 0 1 0 3 1 3 6 7 3 1 1 3 7 13 + 6 15 9 3 16 11 6 1 19 15 11 7 3 27 + 24 21 18 15 12 9 6 3 0 35 33 31 29 27 + 25 23 21 19 17 15 13 11 9 7 5 3 1 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 111 + 111 111 111 111 111 111 111 111 111 111 111 111 111 111 + 111 111 111 111 111 111 111 111 111 111 111 111 111 111 + 111 111 111 111 111 111 111 111 111 111 111 111 111 111 + 111 111 111 111 111 111 111 111 111 111 111 111 111 111 + 111 111 111 111 111 111 111 111 111 111 111 111 111 111 + 111 111 111 111 111 111 111 111 111 111 111 111 111 111 + 111 111 111 111 + 0 0 1 0 2 4 0 0 4 2 2 4 8 0 + 7 0 10 4 17 12 7 2 20 16 12 8 4 0 + 25 22 19 16 13 10 7 4 1 36 34 32 30 28 + 26 24 22 20 18 16 14 12 10 8 6 4 2 0 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 112 112 112 112 112 112 112 112 112 112 112 112 112 112 + 112 112 112 112 112 112 112 112 112 112 112 112 112 112 + 112 112 112 112 112 112 112 112 112 112 112 112 112 112 + 112 112 112 112 112 112 112 112 112 112 112 112 112 112 + 112 112 112 112 112 112 112 112 112 112 112 112 112 112 + 112 112 112 112 112 112 112 112 112 112 112 112 112 112 + 112 112 112 112 + 0 1 2 1 3 5 1 1 5 3 3 5 9 1 + 8 1 11 5 18 13 8 3 21 17 13 9 5 1 + 26 23 20 17 14 11 8 5 2 37 35 33 31 29 + 27 25 23 21 19 17 15 13 11 9 7 5 3 1 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 113 113 113 113 113 113 113 113 113 113 113 113 113 + 113 113 113 113 113 113 113 113 113 113 113 113 113 113 + 113 113 113 113 113 113 113 113 113 113 113 113 113 113 + 113 113 113 113 113 113 113 113 113 113 113 113 113 113 + 113 113 113 113 113 113 113 113 113 113 113 113 113 113 + 113 113 113 113 113 113 113 113 113 113 113 113 113 113 + 113 113 113 113 + 0 0 0 2 4 0 2 2 6 4 4 6 10 2 + 9 2 12 6 0 14 9 4 22 18 14 10 6 2 + 27 24 21 18 15 12 9 6 3 0 36 34 32 30 + 28 26 24 22 20 18 16 14 12 10 8 6 4 2 + 0 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 114 114 114 114 114 114 114 114 114 114 114 114 + 114 114 114 114 114 114 114 114 114 114 114 114 114 114 + 114 114 114 114 114 114 114 114 114 114 114 114 114 114 + 114 114 114 114 114 114 114 114 114 114 114 114 114 114 + 114 114 114 114 114 114 114 114 114 114 114 114 114 114 + 114 114 114 114 114 114 114 114 114 114 114 114 114 114 + 114 114 114 114 + 0 1 1 3 0 1 3 3 7 5 5 7 11 3 + 10 3 13 7 1 15 10 5 0 19 15 11 7 3 + 28 25 22 19 16 13 10 7 4 1 37 35 33 31 + 29 27 25 23 21 19 17 15 13 11 9 7 5 3 + 1 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 115 115 115 115 115 115 115 115 115 115 115 + 115 115 115 115 115 115 115 115 115 115 115 115 115 115 + 115 115 115 115 115 115 115 115 115 115 115 115 115 115 + 115 115 115 115 115 115 115 115 115 115 115 115 115 115 + 115 115 115 115 115 115 115 115 115 115 115 115 115 115 + 115 115 115 115 115 115 115 115 115 115 115 115 115 115 + 115 115 115 115 + 0 0 2 0 1 2 4 4 8 6 6 8 12 4 + 11 4 14 8 2 16 11 6 1 20 16 12 8 4 + 0 26 23 20 17 14 11 8 5 2 38 36 34 32 + 30 28 26 24 22 20 18 16 14 12 10 8 6 4 + 2 0 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 116 116 116 116 116 116 116 116 116 116 + 116 116 116 116 116 116 116 116 116 116 116 116 116 116 + 116 116 116 116 116 116 116 116 116 116 116 116 116 116 + 116 116 116 116 116 116 116 116 116 116 116 116 116 116 + 116 116 116 116 116 116 116 116 116 116 116 116 116 116 + 116 116 116 116 116 116 116 116 116 116 116 116 116 116 + 116 116 116 116 + 0 1 0 1 2 3 5 5 0 7 7 9 0 5 + 12 5 15 9 3 17 12 7 2 21 17 13 9 5 + 1 27 24 21 18 15 12 9 6 3 0 37 35 33 + 31 29 27 25 23 21 19 17 15 13 11 9 7 5 + 3 1 58 57 56 55 54 53 52 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 117 117 117 117 117 117 117 117 117 + 117 117 117 117 117 117 117 117 117 117 117 117 117 117 + 117 117 117 117 117 117 117 117 117 117 117 117 117 117 + 117 117 117 117 117 117 117 117 117 117 117 117 117 117 + 117 117 117 117 117 117 117 117 117 117 117 117 117 117 + 117 117 117 117 117 117 117 117 117 117 117 117 117 117 + 117 117 117 117 + 0 0 1 2 3 4 6 6 1 8 8 10 1 6 + 13 6 16 10 4 18 13 8 3 22 18 14 10 6 + 2 28 25 22 19 16 13 10 7 4 1 38 36 34 + 32 30 28 26 24 22 20 18 16 14 12 10 8 6 + 4 2 0 58 57 56 55 54 53 52 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 118 118 118 118 118 118 118 118 + 118 118 118 118 118 118 118 118 118 118 118 118 118 118 + 118 118 118 118 118 118 118 118 118 118 118 118 118 118 + 118 118 118 118 118 118 118 118 118 118 118 118 118 118 + 118 118 118 118 118 118 118 118 118 118 118 118 118 118 + 118 118 118 118 118 118 118 118 118 118 118 118 118 118 + 118 118 118 118 + 0 1 2 3 4 5 0 7 2 9 9 11 2 7 + 14 7 0 11 5 19 14 9 4 23 19 15 11 7 + 3 29 26 23 20 17 14 11 8 5 2 39 37 35 + 33 31 29 27 25 23 21 19 17 15 13 11 9 7 + 5 3 1 59 58 57 56 55 54 53 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 119 119 119 119 119 119 119 + 119 119 119 119 119 119 119 119 119 119 119 119 119 119 + 119 119 119 119 119 119 119 119 119 119 119 119 119 119 + 119 119 119 119 119 119 119 119 119 119 119 119 119 119 + 119 119 119 119 119 119 119 119 119 119 119 119 119 119 + 119 119 119 119 119 119 119 119 119 119 119 119 119 119 + 119 119 119 119 + 0 0 0 0 0 0 1 0 3 0 10 0 3 8 + 0 8 1 12 6 0 15 10 5 0 20 16 12 8 + 4 0 27 24 21 18 15 12 9 6 3 0 38 36 + 34 32 30 28 26 24 22 20 18 16 14 12 10 8 + 6 4 2 0 59 58 57 56 55 54 53 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 120 120 120 120 120 120 + 120 120 120 120 120 120 120 120 120 120 120 120 120 120 + 120 120 120 120 120 120 120 120 120 120 120 120 120 120 + 120 120 120 120 120 120 120 120 120 120 120 120 120 120 + 120 120 120 120 120 120 120 120 120 120 120 120 120 120 + 120 120 120 120 120 120 120 120 120 120 120 120 120 120 + 120 120 120 120 + 0 1 1 1 1 1 2 1 4 1 0 1 4 9 + 1 9 2 13 7 1 16 11 6 1 21 17 13 9 + 5 1 28 25 22 19 16 13 10 7 4 1 39 37 + 35 33 31 29 27 25 23 21 19 17 15 13 11 9 + 7 5 3 1 60 59 58 57 56 55 54 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 121 121 121 121 121 + 121 121 121 121 121 121 121 121 121 121 121 121 121 121 + 121 121 121 121 121 121 121 121 121 121 121 121 121 121 + 121 121 121 121 121 121 121 121 121 121 121 121 121 121 + 121 121 121 121 121 121 121 121 121 121 121 121 121 121 + 121 121 121 121 121 121 121 121 121 121 121 121 121 121 + 121 121 121 121 + 0 0 2 2 2 2 3 2 5 2 1 2 5 10 + 2 10 3 14 8 2 17 12 7 2 22 18 14 10 + 6 2 29 26 23 20 17 14 11 8 5 2 40 38 + 36 34 32 30 28 26 24 22 20 18 16 14 12 10 + 8 6 4 2 0 60 59 58 57 56 55 54 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 122 122 122 122 + 122 122 122 122 122 122 122 122 122 122 122 122 122 122 + 122 122 122 122 122 122 122 122 122 122 122 122 122 122 + 122 122 122 122 122 122 122 122 122 122 122 122 122 122 + 122 122 122 122 122 122 122 122 122 122 122 122 122 122 + 122 122 122 122 122 122 122 122 122 122 122 122 122 122 + 122 122 122 122 + 0 1 0 3 3 3 4 3 6 3 2 3 6 11 + 3 11 4 15 9 3 18 13 8 3 23 19 15 11 + 7 3 30 27 24 21 18 15 12 9 6 3 0 39 + 37 35 33 31 29 27 25 23 21 19 17 15 13 11 + 9 7 5 3 1 61 60 59 58 57 56 55 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 123 123 123 + 123 123 123 123 123 123 123 123 123 123 123 123 123 123 + 123 123 123 123 123 123 123 123 123 123 123 123 123 123 + 123 123 123 123 123 123 123 123 123 123 123 123 123 123 + 123 123 123 123 123 123 123 123 123 123 123 123 123 123 + 123 123 123 123 123 123 123 123 123 123 123 123 123 123 + 123 123 123 123 + 0 0 1 0 4 4 5 4 7 4 3 4 7 12 + 4 12 5 16 10 4 19 14 9 4 24 20 16 12 + 8 4 0 28 25 22 19 16 13 10 7 4 1 40 + 38 36 34 32 30 28 26 24 22 20 18 16 14 12 + 10 8 6 4 2 0 61 60 59 58 57 56 55 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 124 124 + 124 124 124 124 124 124 124 124 124 124 124 124 124 124 + 124 124 124 124 124 124 124 124 124 124 124 124 124 124 + 124 124 124 124 124 124 124 124 124 124 124 124 124 124 + 124 124 124 124 124 124 124 124 124 124 124 124 124 124 + 124 124 124 124 124 124 124 124 124 124 124 124 124 124 + 124 124 124 124 + 0 1 2 1 0 5 6 5 8 5 4 5 8 13 + 5 13 6 17 11 5 20 15 10 5 0 21 17 13 + 9 5 1 29 26 23 20 17 14 11 8 5 2 41 + 39 37 35 33 31 29 27 25 23 21 19 17 15 13 + 11 9 7 5 3 1 62 61 60 59 58 57 56 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 + 0 0 0 2 1 0 0 6 0 6 5 6 9 0 + 6 14 7 0 12 6 0 16 11 6 1 22 18 14 + 10 6 2 30 27 24 21 18 15 12 9 6 3 0 + 40 38 36 34 32 30 28 26 24 22 20 18 16 14 + 12 10 8 6 4 2 0 62 61 60 59 58 57 56 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 126 126 126 126 126 126 126 126 126 126 126 126 126 126 + 126 126 126 126 126 126 126 126 126 126 126 126 126 126 + 126 126 126 126 126 126 126 126 126 126 126 126 126 126 + 126 126 126 126 126 126 126 126 126 126 126 126 126 126 + 126 126 126 126 126 126 126 126 126 126 126 126 126 126 + 126 126 126 126 + 0 1 1 3 2 1 1 7 1 7 6 7 10 1 + 7 15 8 1 13 7 1 17 12 7 2 23 19 15 + 11 7 3 31 28 25 22 19 16 13 10 7 4 1 + 41 39 37 35 33 31 29 27 25 23 21 19 17 15 + 13 11 9 7 5 3 1 63 62 61 60 59 58 57 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 127 127 127 127 127 127 127 127 127 127 127 127 127 + 127 127 127 127 127 127 127 127 127 127 127 127 127 127 + 127 127 127 127 127 127 127 127 127 127 127 127 127 127 + 127 127 127 127 127 127 127 127 127 127 127 127 127 127 + 127 127 127 127 127 127 127 127 127 127 127 127 127 127 + 127 127 127 127 + 0 0 2 0 3 2 2 0 2 8 7 8 11 2 + 8 0 9 2 14 8 2 18 13 8 3 24 20 16 + 12 8 4 0 29 26 23 20 17 14 11 8 5 2 + 42 40 38 36 34 32 30 28 26 24 22 20 18 16 + 14 12 10 8 6 4 2 0 63 62 61 60 59 58 + 57 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 128 128 128 128 128 128 128 128 128 128 128 128 + 128 128 128 128 128 128 128 128 128 128 128 128 128 128 + 128 128 128 128 128 128 128 128 128 128 128 128 128 128 + 128 128 128 128 128 128 128 128 128 128 128 128 128 128 + 128 128 128 128 128 128 128 128 128 128 128 128 128 128 + 128 128 128 128 + 0 1 0 1 4 3 3 1 3 9 8 9 12 3 + 9 1 10 3 15 9 3 19 14 9 4 25 21 17 + 13 9 5 1 30 27 24 21 18 15 12 9 6 3 + 0 41 39 37 35 33 31 29 27 25 23 21 19 17 + 15 13 11 9 7 5 3 1 64 63 62 61 60 59 + 58 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 129 129 129 129 129 129 129 129 129 129 129 + 129 129 129 129 129 129 129 129 129 129 129 129 129 129 + 129 129 129 129 129 129 129 129 129 129 129 129 129 129 + 129 129 129 129 129 129 129 129 129 129 129 129 129 129 + 129 129 129 129 129 129 129 129 129 129 129 129 129 129 + 129 129 129 129 + 0 0 1 2 0 4 4 2 4 0 9 10 0 4 + 10 2 11 4 16 10 4 20 15 10 5 0 22 18 + 14 10 6 2 31 28 25 22 19 16 13 10 7 4 + 1 42 40 38 36 34 32 30 28 26 24 22 20 18 + 16 14 12 10 8 6 4 2 0 64 63 62 61 60 + 59 58 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 130 130 130 130 130 130 130 130 130 130 + 130 130 130 130 130 130 130 130 130 130 130 130 130 130 + 130 130 130 130 130 130 130 130 130 130 130 130 130 130 + 130 130 130 130 130 130 130 130 130 130 130 130 130 130 + 130 130 130 130 130 130 130 130 130 130 130 130 130 130 + 130 130 130 130 + 0 1 2 3 1 5 5 3 5 1 10 11 1 5 + 11 3 12 5 17 11 5 21 16 11 6 1 23 19 + 15 11 7 3 32 29 26 23 20 17 14 11 8 5 + 2 43 41 39 37 35 33 31 29 27 25 23 21 19 + 17 15 13 11 9 7 5 3 1 65 64 63 62 61 + 60 59 58 57 56 55 54 53 52 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 131 131 131 131 131 131 131 131 131 + 131 131 131 131 131 131 131 131 131 131 131 131 131 131 + 131 131 131 131 131 131 131 131 131 131 131 131 131 131 + 131 131 131 131 131 131 131 131 131 131 131 131 131 131 + 131 131 131 131 131 131 131 131 131 131 131 131 131 131 + 131 131 131 131 + 0 0 0 0 2 0 6 4 6 2 0 0 2 6 + 12 4 13 6 18 12 6 0 17 12 7 2 24 20 + 16 12 8 4 0 30 27 24 21 18 15 12 9 6 + 3 0 42 40 38 36 34 32 30 28 26 24 22 20 + 18 16 14 12 10 8 6 4 2 0 65 64 63 62 + 61 60 59 58 57 56 55 54 53 52 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 132 132 132 132 132 132 132 132 + 132 132 132 132 132 132 132 132 132 132 132 132 132 132 + 132 132 132 132 132 132 132 132 132 132 132 132 132 132 + 132 132 132 132 132 132 132 132 132 132 132 132 132 132 + 132 132 132 132 132 132 132 132 132 132 132 132 132 132 + 132 132 132 132 + 0 1 1 1 3 1 0 5 7 3 1 1 3 7 + 13 5 14 7 0 13 7 1 18 13 8 3 25 21 + 17 13 9 5 1 31 28 25 22 19 16 13 10 7 + 4 1 43 41 39 37 35 33 31 29 27 25 23 21 + 19 17 15 13 11 9 7 5 3 1 66 65 64 63 + 62 61 60 59 58 57 56 55 54 53 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 133 133 133 133 133 133 133 + 133 133 133 133 133 133 133 133 133 133 133 133 133 133 + 133 133 133 133 133 133 133 133 133 133 133 133 133 133 + 133 133 133 133 133 133 133 133 133 133 133 133 133 133 + 133 133 133 133 133 133 133 133 133 133 133 133 133 133 + 133 133 133 133 + 0 0 2 2 4 2 1 6 8 4 2 2 4 8 + 14 6 15 8 1 14 8 2 19 14 9 4 26 22 + 18 14 10 6 2 32 29 26 23 20 17 14 11 8 + 5 2 44 42 40 38 36 34 32 30 28 26 24 22 + 20 18 16 14 12 10 8 6 4 2 0 66 65 64 + 63 62 61 60 59 58 57 56 55 54 53 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 134 134 134 134 134 134 + 134 134 134 134 134 134 134 134 134 134 134 134 134 134 + 134 134 134 134 134 134 134 134 134 134 134 134 134 134 + 134 134 134 134 134 134 134 134 134 134 134 134 134 134 + 134 134 134 134 134 134 134 134 134 134 134 134 134 134 + 134 134 134 134 + 0 1 0 3 0 3 2 7 0 5 3 3 5 9 + 0 7 16 9 2 15 9 3 20 15 10 5 0 23 + 19 15 11 7 3 33 30 27 24 21 18 15 12 9 + 6 3 0 43 41 39 37 35 33 31 29 27 25 23 + 21 19 17 15 13 11 9 7 5 3 1 67 66 65 + 64 63 62 61 60 59 58 57 56 55 54 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 135 135 135 135 135 + 135 135 135 135 135 135 135 135 135 135 135 135 135 135 + 135 135 135 135 135 135 135 135 135 135 135 135 135 135 + 135 135 135 135 135 135 135 135 135 135 135 135 135 135 + 135 135 135 135 135 135 135 135 135 135 135 135 135 135 + 135 135 135 135 + 0 0 1 0 1 4 3 0 1 6 4 4 6 10 + 1 8 0 10 3 16 10 4 21 16 11 6 1 24 + 20 16 12 8 4 0 31 28 25 22 19 16 13 10 + 7 4 1 44 42 40 38 36 34 32 30 28 26 24 + 22 20 18 16 14 12 10 8 6 4 2 0 67 66 + 65 64 63 62 61 60 59 58 57 56 55 54 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 136 136 136 136 + 136 136 136 136 136 136 136 136 136 136 136 136 136 136 + 136 136 136 136 136 136 136 136 136 136 136 136 136 136 + 136 136 136 136 136 136 136 136 136 136 136 136 136 136 + 136 136 136 136 136 136 136 136 136 136 136 136 136 136 + 136 136 136 136 + 0 1 2 1 2 5 4 1 2 7 5 5 7 11 + 2 9 1 11 4 17 11 5 22 17 12 7 2 25 + 21 17 13 9 5 1 32 29 26 23 20 17 14 11 + 8 5 2 45 43 41 39 37 35 33 31 29 27 25 + 23 21 19 17 15 13 11 9 7 5 3 1 68 67 + 66 65 64 63 62 61 60 59 58 57 56 55 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 137 137 137 + 137 137 137 137 137 137 137 137 137 137 137 137 137 137 + 137 137 137 137 137 137 137 137 137 137 137 137 137 137 + 137 137 137 137 137 137 137 137 137 137 137 137 137 137 + 137 137 137 137 137 137 137 137 137 137 137 137 137 137 + 137 137 137 137 + 0 0 0 2 3 0 5 2 3 8 6 6 8 12 + 3 10 2 12 5 18 12 6 0 18 13 8 3 26 + 22 18 14 10 6 2 33 30 27 24 21 18 15 12 + 9 6 3 0 44 42 40 38 36 34 32 30 28 26 + 24 22 20 18 16 14 12 10 8 6 4 2 0 68 + 67 66 65 64 63 62 61 60 59 58 57 56 55 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 138 138 + 138 138 138 138 138 138 138 138 138 138 138 138 138 138 + 138 138 138 138 138 138 138 138 138 138 138 138 138 138 + 138 138 138 138 138 138 138 138 138 138 138 138 138 138 + 138 138 138 138 138 138 138 138 138 138 138 138 138 138 + 138 138 138 138 + 0 1 1 3 4 1 6 3 4 9 7 7 9 13 + 4 11 3 13 6 19 13 7 1 19 14 9 4 27 + 23 19 15 11 7 3 34 31 28 25 22 19 16 13 + 10 7 4 1 45 43 41 39 37 35 33 31 29 27 + 25 23 21 19 17 15 13 11 9 7 5 3 1 69 + 68 67 66 65 64 63 62 61 60 59 58 57 56 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 139 + 139 139 139 139 139 139 139 139 139 139 139 139 139 139 + 139 139 139 139 139 139 139 139 139 139 139 139 139 139 + 139 139 139 139 139 139 139 139 139 139 139 139 139 139 + 139 139 139 139 139 139 139 139 139 139 139 139 139 139 + 139 139 139 139 + 0 0 2 0 0 2 0 4 5 0 8 8 10 0 + 5 12 4 14 7 0 14 8 2 20 15 10 5 0 + 24 20 16 12 8 4 0 32 29 26 23 20 17 14 + 11 8 5 2 46 44 42 40 38 36 34 32 30 28 + 26 24 22 20 18 16 14 12 10 8 6 4 2 0 + 69 68 67 66 65 64 63 62 61 60 59 58 57 56 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 140 140 140 140 140 140 140 140 140 140 140 140 140 140 + 140 140 140 140 140 140 140 140 140 140 140 140 140 140 + 140 140 140 140 140 140 140 140 140 140 140 140 140 140 + 140 140 140 140 140 140 140 140 140 140 140 140 140 140 + 140 140 140 140 + 0 1 0 1 1 3 1 5 6 1 9 9 11 1 + 6 13 5 15 8 1 15 9 3 21 16 11 6 1 + 25 21 17 13 9 5 1 33 30 27 24 21 18 15 + 12 9 6 3 0 45 43 41 39 37 35 33 31 29 + 27 25 23 21 19 17 15 13 11 9 7 5 3 1 + 70 69 68 67 66 65 64 63 62 61 60 59 58 57 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 141 141 141 141 141 141 141 141 141 141 141 141 141 + 141 141 141 141 141 141 141 141 141 141 141 141 141 141 + 141 141 141 141 141 141 141 141 141 141 141 141 141 141 + 141 141 141 141 141 141 141 141 141 141 141 141 141 141 + 141 141 141 141 + 0 0 1 2 2 4 2 6 7 2 10 10 12 2 + 7 14 6 16 9 2 16 10 4 22 17 12 7 2 + 26 22 18 14 10 6 2 34 31 28 25 22 19 16 + 13 10 7 4 1 46 44 42 40 38 36 34 32 30 + 28 26 24 22 20 18 16 14 12 10 8 6 4 2 + 0 70 69 68 67 66 65 64 63 62 61 60 59 58 + 57 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 142 142 142 142 142 142 142 142 142 142 142 142 + 142 142 142 142 142 142 142 142 142 142 142 142 142 142 + 142 142 142 142 142 142 142 142 142 142 142 142 142 142 + 142 142 142 142 142 142 142 142 142 142 142 142 142 142 + 142 142 142 142 + 0 1 2 3 3 5 3 7 8 3 0 11 0 3 + 8 15 7 17 10 3 17 11 5 23 18 13 8 3 + 27 23 19 15 11 7 3 35 32 29 26 23 20 17 + 14 11 8 5 2 47 45 43 41 39 37 35 33 31 + 29 27 25 23 21 19 17 15 13 11 9 7 5 3 + 1 71 70 69 68 67 66 65 64 63 62 61 60 59 + 58 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 143 143 143 143 143 143 143 143 143 143 143 + 143 143 143 143 143 143 143 143 143 143 143 143 143 143 + 143 143 143 143 143 143 143 143 143 143 143 143 143 143 + 143 143 143 143 143 143 143 143 143 143 143 143 143 143 + 143 143 143 143 + 0 0 0 0 4 0 4 0 0 4 1 0 1 4 + 9 0 8 0 11 4 18 12 6 0 19 14 9 4 + 28 24 20 16 12 8 4 0 33 30 27 24 21 18 + 15 12 9 6 3 0 46 44 42 40 38 36 34 32 + 30 28 26 24 22 20 18 16 14 12 10 8 6 4 + 2 0 71 70 69 68 67 66 65 64 63 62 61 60 + 59 58 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 144 144 144 144 144 144 144 144 144 144 + 144 144 144 144 144 144 144 144 144 144 144 144 144 144 + 144 144 144 144 144 144 144 144 144 144 144 144 144 144 + 144 144 144 144 144 144 144 144 144 144 144 144 144 144 + 144 144 144 144 + 0 1 1 1 0 1 5 1 1 5 2 1 2 5 + 10 1 9 1 12 5 19 13 7 1 20 15 10 5 + 0 25 21 17 13 9 5 1 34 31 28 25 22 19 + 16 13 10 7 4 1 47 45 43 41 39 37 35 33 + 31 29 27 25 23 21 19 17 15 13 11 9 7 5 + 3 1 72 71 70 69 68 67 66 65 64 63 62 61 + 60 59 58 57 56 55 54 53 52 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 145 145 145 145 145 145 145 145 145 + 145 145 145 145 145 145 145 145 145 145 145 145 145 145 + 145 145 145 145 145 145 145 145 145 145 145 145 145 145 + 145 145 145 145 145 145 145 145 145 145 145 145 145 145 + 145 145 145 145 + 0 0 2 2 1 2 6 2 2 6 3 2 3 6 + 11 2 10 2 13 6 20 14 8 2 21 16 11 6 + 1 26 22 18 14 10 6 2 35 32 29 26 23 20 + 17 14 11 8 5 2 48 46 44 42 40 38 36 34 + 32 30 28 26 24 22 20 18 16 14 12 10 8 6 + 4 2 0 72 71 70 69 68 67 66 65 64 63 62 + 61 60 59 58 57 56 55 54 53 52 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 146 146 146 146 146 146 146 146 + 146 146 146 146 146 146 146 146 146 146 146 146 146 146 + 146 146 146 146 146 146 146 146 146 146 146 146 146 146 + 146 146 146 146 146 146 146 146 146 146 146 146 146 146 + 146 146 146 146 + 0 1 0 3 2 3 0 3 3 7 4 3 4 7 + 12 3 11 3 14 7 0 15 9 3 22 17 12 7 + 2 27 23 19 15 11 7 3 36 33 30 27 24 21 + 18 15 12 9 6 3 0 47 45 43 41 39 37 35 + 33 31 29 27 25 23 21 19 17 15 13 11 9 7 + 5 3 1 73 72 71 70 69 68 67 66 65 64 63 + 62 61 60 59 58 57 56 55 54 53 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 147 147 147 147 147 147 147 + 147 147 147 147 147 147 147 147 147 147 147 147 147 147 + 147 147 147 147 147 147 147 147 147 147 147 147 147 147 + 147 147 147 147 147 147 147 147 147 147 147 147 147 147 + 147 147 147 147 + 0 0 1 0 3 4 1 4 4 8 5 4 5 8 + 13 4 12 4 15 8 1 16 10 4 23 18 13 8 + 3 28 24 20 16 12 8 4 0 34 31 28 25 22 + 19 16 13 10 7 4 1 48 46 44 42 40 38 36 + 34 32 30 28 26 24 22 20 18 16 14 12 10 8 + 6 4 2 0 73 72 71 70 69 68 67 66 65 64 + 63 62 61 60 59 58 57 56 55 54 53 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 148 148 148 148 148 148 + 148 148 148 148 148 148 148 148 148 148 148 148 148 148 + 148 148 148 148 148 148 148 148 148 148 148 148 148 148 + 148 148 148 148 148 148 148 148 148 148 148 148 148 148 + 148 148 148 148 + 0 1 2 1 4 5 2 5 5 9 6 5 6 9 + 14 5 13 5 16 9 2 17 11 5 24 19 14 9 + 4 29 25 21 17 13 9 5 1 35 32 29 26 23 + 20 17 14 11 8 5 2 49 47 45 43 41 39 37 + 35 33 31 29 27 25 23 21 19 17 15 13 11 9 + 7 5 3 1 74 73 72 71 70 69 68 67 66 65 + 64 63 62 61 60 59 58 57 56 55 54 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 149 149 149 149 149 + 149 149 149 149 149 149 149 149 149 149 149 149 149 149 + 149 149 149 149 149 149 149 149 149 149 149 149 149 149 + 149 149 149 149 149 149 149 149 149 149 149 149 149 149 + 149 149 149 149 + 0 0 0 2 0 0 3 6 6 0 7 6 7 10 + 0 6 14 6 17 10 3 18 12 6 0 20 15 10 + 5 0 26 22 18 14 10 6 2 36 33 30 27 24 + 21 18 15 12 9 6 3 0 48 46 44 42 40 38 + 36 34 32 30 28 26 24 22 20 18 16 14 12 10 + 8 6 4 2 0 74 73 72 71 70 69 68 67 66 + 65 64 63 62 61 60 59 58 57 56 55 54 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 150 150 150 150 + 150 150 150 150 150 150 150 150 150 150 150 150 150 150 + 150 150 150 150 150 150 150 150 150 150 150 150 150 150 + 150 150 150 150 150 150 150 150 150 150 150 150 150 150 + 150 150 150 150 + 0 1 1 3 1 1 4 7 7 1 8 7 8 11 + 1 7 15 7 18 11 4 19 13 7 1 21 16 11 + 6 1 27 23 19 15 11 7 3 37 34 31 28 25 + 22 19 16 13 10 7 4 1 49 47 45 43 41 39 + 37 35 33 31 29 27 25 23 21 19 17 15 13 11 + 9 7 5 3 1 75 74 73 72 71 70 69 68 67 + 66 65 64 63 62 61 60 59 58 57 56 55 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 151 151 151 + 151 151 151 151 151 151 151 151 151 151 151 151 151 151 + 151 151 151 151 151 151 151 151 151 151 151 151 151 151 + 151 151 151 151 151 151 151 151 151 151 151 151 151 151 + 151 151 151 151 + 0 0 2 0 2 2 5 0 8 2 9 8 9 12 + 2 8 16 8 0 12 5 20 14 8 2 22 17 12 + 7 2 28 24 20 16 12 8 4 0 35 32 29 26 + 23 20 17 14 11 8 5 2 50 48 46 44 42 40 + 38 36 34 32 30 28 26 24 22 20 18 16 14 12 + 10 8 6 4 2 0 75 74 73 72 71 70 69 68 + 67 66 65 64 63 62 61 60 59 58 57 56 55 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 152 152 + 152 152 152 152 152 152 152 152 152 152 152 152 152 152 + 152 152 152 152 152 152 152 152 152 152 152 152 152 152 + 152 152 152 152 152 152 152 152 152 152 152 152 152 152 + 152 152 152 152 + 0 1 0 1 3 3 6 1 0 3 10 9 10 13 + 3 9 0 9 1 13 6 21 15 9 3 23 18 13 + 8 3 29 25 21 17 13 9 5 1 36 33 30 27 + 24 21 18 15 12 9 6 3 0 49 47 45 43 41 + 39 37 35 33 31 29 27 25 23 21 19 17 15 13 + 11 9 7 5 3 1 76 75 74 73 72 71 70 69 + 68 67 66 65 64 63 62 61 60 59 58 57 56 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 153 + 153 153 153 153 153 153 153 153 153 153 153 153 153 153 + 153 153 153 153 153 153 153 153 153 153 153 153 153 153 + 153 153 153 153 153 153 153 153 153 153 153 153 153 153 + 153 153 153 153 + 0 0 1 2 4 4 0 2 1 4 0 10 11 0 + 4 10 1 10 2 14 7 0 16 10 4 24 19 14 + 9 4 30 26 22 18 14 10 6 2 37 34 31 28 + 25 22 19 16 13 10 7 4 1 50 48 46 44 42 + 40 38 36 34 32 30 28 26 24 22 20 18 16 14 + 12 10 8 6 4 2 0 76 75 74 73 72 71 70 + 69 68 67 66 65 64 63 62 61 60 59 58 57 56 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 154 154 154 154 154 154 154 154 154 154 154 154 154 154 + 154 154 154 154 154 154 154 154 154 154 154 154 154 154 + 154 154 154 154 154 154 154 154 154 154 154 154 154 154 + 154 154 154 154 + 0 1 2 3 0 5 1 3 2 5 1 11 12 1 + 5 11 2 11 3 15 8 1 17 11 5 25 20 15 + 10 5 0 27 23 19 15 11 7 3 38 35 32 29 + 26 23 20 17 14 11 8 5 2 51 49 47 45 43 + 41 39 37 35 33 31 29 27 25 23 21 19 17 15 + 13 11 9 7 5 3 1 77 76 75 74 73 72 71 + 70 69 68 67 66 65 64 63 62 61 60 59 58 57 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 155 155 155 155 155 155 155 155 155 155 155 155 155 + 155 155 155 155 155 155 155 155 155 155 155 155 155 155 + 155 155 155 155 155 155 155 155 155 155 155 155 155 155 + 155 155 155 155 + 0 0 0 0 1 0 2 4 3 6 2 0 0 2 + 6 12 3 12 4 16 9 2 18 12 6 0 21 16 + 11 6 1 28 24 20 16 12 8 4 0 36 33 30 + 27 24 21 18 15 12 9 6 3 0 50 48 46 44 + 42 40 38 36 34 32 30 28 26 24 22 20 18 16 + 14 12 10 8 6 4 2 0 77 76 75 74 73 72 + 71 70 69 68 67 66 65 64 63 62 61 60 59 58 + 57 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 156 156 156 156 156 156 156 156 156 156 156 156 + 156 156 156 156 156 156 156 156 156 156 156 156 156 156 + 156 156 156 156 156 156 156 156 156 156 156 156 156 156 + 156 156 156 156 + 0 1 1 1 2 1 3 5 4 7 3 1 1 3 + 7 13 4 13 5 17 10 3 19 13 7 1 22 17 + 12 7 2 29 25 21 17 13 9 5 1 37 34 31 + 28 25 22 19 16 13 10 7 4 1 51 49 47 45 + 43 41 39 37 35 33 31 29 27 25 23 21 19 17 + 15 13 11 9 7 5 3 1 78 77 76 75 74 73 + 72 71 70 69 68 67 66 65 64 63 62 61 60 59 + 58 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 157 157 157 157 157 157 157 157 157 157 157 + 157 157 157 157 157 157 157 157 157 157 157 157 157 157 + 157 157 157 157 157 157 157 157 157 157 157 157 157 157 + 157 157 157 157 + 0 0 2 2 3 2 4 6 5 8 4 2 2 4 + 8 14 5 14 6 18 11 4 20 14 8 2 23 18 + 13 8 3 30 26 22 18 14 10 6 2 38 35 32 + 29 26 23 20 17 14 11 8 5 2 52 50 48 46 + 44 42 40 38 36 34 32 30 28 26 24 22 20 18 + 16 14 12 10 8 6 4 2 0 78 77 76 75 74 + 73 72 71 70 69 68 67 66 65 64 63 62 61 60 + 59 58 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 158 158 158 158 158 158 158 158 158 158 + 158 158 158 158 158 158 158 158 158 158 158 158 158 158 + 158 158 158 158 158 158 158 158 158 158 158 158 158 158 + 158 158 158 158 + 0 1 0 3 4 3 5 7 6 9 5 3 3 5 + 9 15 6 15 7 19 12 5 21 15 9 3 24 19 + 14 9 4 31 27 23 19 15 11 7 3 39 36 33 + 30 27 24 21 18 15 12 9 6 3 0 51 49 47 + 45 43 41 39 37 35 33 31 29 27 25 23 21 19 + 17 15 13 11 9 7 5 3 1 79 78 77 76 75 + 74 73 72 71 70 69 68 67 66 65 64 63 62 61 + 60 59 58 57 56 55 54 53 52 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 159 159 159 159 159 159 159 159 159 + 159 159 159 159 159 159 159 159 159 159 159 159 159 159 + 159 159 159 159 159 159 159 159 159 159 159 159 159 159 + 159 159 159 159 + 0 0 1 0 0 4 6 0 7 0 6 4 4 6 + 10 0 7 16 8 0 13 6 22 16 10 4 25 20 + 15 10 5 0 28 24 20 16 12 8 4 0 37 34 + 31 28 25 22 19 16 13 10 7 4 1 52 50 48 + 46 44 42 40 38 36 34 32 30 28 26 24 22 20 + 18 16 14 12 10 8 6 4 2 0 79 78 77 76 + 75 74 73 72 71 70 69 68 67 66 65 64 63 62 + 61 60 59 58 57 56 55 54 53 52 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 160 160 160 160 160 160 160 160 + 160 160 160 160 160 160 160 160 160 160 160 160 160 160 + 160 160 160 160 160 160 160 160 160 160 160 160 160 160 + 160 160 160 160 + 0 1 2 1 1 5 0 1 8 1 7 5 5 7 + 11 1 8 17 9 1 14 7 0 17 11 5 26 21 + 16 11 6 1 29 25 21 17 13 9 5 1 38 35 + 32 29 26 23 20 17 14 11 8 5 2 53 51 49 + 47 45 43 41 39 37 35 33 31 29 27 25 23 21 + 19 17 15 13 11 9 7 5 3 1 80 79 78 77 + 76 75 74 73 72 71 70 69 68 67 66 65 64 63 + 62 61 60 59 58 57 56 55 54 53 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 161 161 161 161 161 161 161 + 161 161 161 161 161 161 161 161 161 161 161 161 161 161 + 161 161 161 161 161 161 161 161 161 161 161 161 161 161 + 161 161 161 161 + 0 0 0 2 2 0 1 2 0 2 8 6 6 8 + 12 2 9 0 10 2 15 8 1 18 12 6 0 22 + 17 12 7 2 30 26 22 18 14 10 6 2 39 36 + 33 30 27 24 21 18 15 12 9 6 3 0 52 50 + 48 46 44 42 40 38 36 34 32 30 28 26 24 22 + 20 18 16 14 12 10 8 6 4 2 0 80 79 78 + 77 76 75 74 73 72 71 70 69 68 67 66 65 64 + 63 62 61 60 59 58 57 56 55 54 53 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 162 162 162 162 162 162 + 162 162 162 162 162 162 162 162 162 162 162 162 162 162 + 162 162 162 162 162 162 162 162 162 162 162 162 162 162 + 162 162 162 162 + 0 1 1 3 3 1 2 3 1 3 9 7 7 9 + 13 3 10 1 11 3 16 9 2 19 13 7 1 23 + 18 13 8 3 31 27 23 19 15 11 7 3 40 37 + 34 31 28 25 22 19 16 13 10 7 4 1 53 51 + 49 47 45 43 41 39 37 35 33 31 29 27 25 23 + 21 19 17 15 13 11 9 7 5 3 1 81 80 79 + 78 77 76 75 74 73 72 71 70 69 68 67 66 65 + 64 63 62 61 60 59 58 57 56 55 54 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 163 163 163 163 163 + 163 163 163 163 163 163 163 163 163 163 163 163 163 163 + 163 163 163 163 163 163 163 163 163 163 163 163 163 163 + 163 163 163 163 + 0 0 2 0 4 2 3 4 2 4 10 8 8 10 + 14 4 11 2 12 4 17 10 3 20 14 8 2 24 + 19 14 9 4 32 28 24 20 16 12 8 4 0 38 + 35 32 29 26 23 20 17 14 11 8 5 2 54 52 + 50 48 46 44 42 40 38 36 34 32 30 28 26 24 + 22 20 18 16 14 12 10 8 6 4 2 0 81 80 + 79 78 77 76 75 74 73 72 71 70 69 68 67 66 + 65 64 63 62 61 60 59 58 57 56 55 54 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 164 164 164 164 + 164 164 164 164 164 164 164 164 164 164 164 164 164 164 + 164 164 164 164 164 164 164 164 164 164 164 164 164 164 + 164 164 164 164 + 0 1 0 1 0 3 4 5 3 5 0 9 9 11 + 0 5 12 3 13 5 18 11 4 21 15 9 3 25 + 20 15 10 5 0 29 25 21 17 13 9 5 1 39 + 36 33 30 27 24 21 18 15 12 9 6 3 0 53 + 51 49 47 45 43 41 39 37 35 33 31 29 27 25 + 23 21 19 17 15 13 11 9 7 5 3 1 82 81 + 80 79 78 77 76 75 74 73 72 71 70 69 68 67 + 66 65 64 63 62 61 60 59 58 57 56 55 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 165 165 165 + 165 165 165 165 165 165 165 165 165 165 165 165 165 165 + 165 165 165 165 165 165 165 165 165 165 165 165 165 165 + 165 165 165 165 + 0 0 1 2 1 4 5 6 4 6 1 10 10 12 + 1 6 13 4 14 6 19 12 5 22 16 10 4 26 + 21 16 11 6 1 30 26 22 18 14 10 6 2 40 + 37 34 31 28 25 22 19 16 13 10 7 4 1 54 + 52 50 48 46 44 42 40 38 36 34 32 30 28 26 + 24 22 20 18 16 14 12 10 8 6 4 2 0 82 + 81 80 79 78 77 76 75 74 73 72 71 70 69 68 + 67 66 65 64 63 62 61 60 59 58 57 56 55 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 166 166 + 166 166 166 166 166 166 166 166 166 166 166 166 166 166 + 166 166 166 166 166 166 166 166 166 166 166 166 166 166 + 166 166 166 166 + 0 1 2 3 2 5 6 7 5 7 2 11 11 13 + 2 7 14 5 15 7 20 13 6 23 17 11 5 27 + 22 17 12 7 2 31 27 23 19 15 11 7 3 41 + 38 35 32 29 26 23 20 17 14 11 8 5 2 55 + 53 51 49 47 45 43 41 39 37 35 33 31 29 27 + 25 23 21 19 17 15 13 11 9 7 5 3 1 83 + 82 81 80 79 78 77 76 75 74 73 72 71 70 69 + 68 67 66 65 64 63 62 61 60 59 58 57 56 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 167 + 167 167 167 167 167 167 167 167 167 167 167 167 167 167 + 167 167 167 167 167 167 167 167 167 167 167 167 167 167 + 167 167 167 167 + 0 0 0 0 3 0 0 0 6 8 3 0 12 0 + 3 8 15 6 16 8 0 14 7 0 18 12 6 0 + 23 18 13 8 3 32 28 24 20 16 12 8 4 0 + 39 36 33 30 27 24 21 18 15 12 9 6 3 0 + 54 52 50 48 46 44 42 40 38 36 34 32 30 28 + 26 24 22 20 18 16 14 12 10 8 6 4 2 0 + 83 82 81 80 79 78 77 76 75 74 73 72 71 70 + 69 68 67 66 65 64 63 62 61 60 59 58 57 56 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 168 168 168 168 168 168 168 168 168 168 168 168 168 168 + 168 168 168 168 168 168 168 168 168 168 168 168 168 168 + 168 168 168 168 + 0 1 1 1 4 1 1 1 7 9 4 1 0 1 + 4 9 16 7 17 9 1 15 8 1 19 13 7 1 + 24 19 14 9 4 33 29 25 21 17 13 9 5 1 + 40 37 34 31 28 25 22 19 16 13 10 7 4 1 + 55 53 51 49 47 45 43 41 39 37 35 33 31 29 + 27 25 23 21 19 17 15 13 11 9 7 5 3 1 + 84 83 82 81 80 79 78 77 76 75 74 73 72 71 + 70 69 68 67 66 65 64 63 62 61 60 59 58 57 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 169 169 169 169 169 169 169 169 169 169 169 169 169 + 169 169 169 169 169 169 169 169 169 169 169 169 169 169 + 169 169 169 169 + 0 0 2 2 0 2 2 2 8 0 5 2 1 2 + 5 10 0 8 18 10 2 16 9 2 20 14 8 2 + 25 20 15 10 5 0 30 26 22 18 14 10 6 2 + 41 38 35 32 29 26 23 20 17 14 11 8 5 2 + 56 54 52 50 48 46 44 42 40 38 36 34 32 30 + 28 26 24 22 20 18 16 14 12 10 8 6 4 2 + 0 84 83 82 81 80 79 78 77 76 75 74 73 72 + 71 70 69 68 67 66 65 64 63 62 61 60 59 58 + 57 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 170 170 170 170 170 170 170 170 170 170 170 170 + 170 170 170 170 170 170 170 170 170 170 170 170 170 170 + 170 170 170 170 + 0 1 0 3 1 3 3 3 0 1 6 3 2 3 + 6 11 1 9 0 11 3 17 10 3 21 15 9 3 + 26 21 16 11 6 1 31 27 23 19 15 11 7 3 + 42 39 36 33 30 27 24 21 18 15 12 9 6 3 + 0 55 53 51 49 47 45 43 41 39 37 35 33 31 + 29 27 25 23 21 19 17 15 13 11 9 7 5 3 + 1 85 84 83 82 81 80 79 78 77 76 75 74 73 + 72 71 70 69 68 67 66 65 64 63 62 61 60 59 + 58 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 171 171 171 171 171 171 171 171 171 171 171 + 171 171 171 171 171 171 171 171 171 171 171 171 171 171 + 171 171 171 171 + 0 0 1 0 2 4 4 4 1 2 7 4 3 4 + 7 12 2 10 1 12 4 18 11 4 22 16 10 4 + 27 22 17 12 7 2 32 28 24 20 16 12 8 4 + 0 40 37 34 31 28 25 22 19 16 13 10 7 4 + 1 56 54 52 50 48 46 44 42 40 38 36 34 32 + 30 28 26 24 22 20 18 16 14 12 10 8 6 4 + 2 0 85 84 83 82 81 80 79 78 77 76 75 74 + 73 72 71 70 69 68 67 66 65 64 63 62 61 60 + 59 58 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 172 172 172 172 172 172 172 172 172 172 + 172 172 172 172 172 172 172 172 172 172 172 172 172 172 + 172 172 172 172 + 0 1 2 1 3 5 5 5 2 3 8 5 4 5 + 8 13 3 11 2 13 5 19 12 5 23 17 11 5 + 28 23 18 13 8 3 33 29 25 21 17 13 9 5 + 1 41 38 35 32 29 26 23 20 17 14 11 8 5 + 2 57 55 53 51 49 47 45 43 41 39 37 35 33 + 31 29 27 25 23 21 19 17 15 13 11 9 7 5 + 3 1 86 85 84 83 82 81 80 79 78 77 76 75 + 74 73 72 71 70 69 68 67 66 65 64 63 62 61 + 60 59 58 57 56 55 54 53 52 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 173 173 173 173 173 173 173 173 173 + 173 173 173 173 173 173 173 173 173 173 173 173 173 173 + 173 173 173 173 + 0 0 0 2 4 0 6 6 3 4 9 6 5 6 + 9 14 4 12 3 14 6 20 13 6 24 18 12 6 + 0 24 19 14 9 4 34 30 26 22 18 14 10 6 + 2 42 39 36 33 30 27 24 21 18 15 12 9 6 + 3 0 56 54 52 50 48 46 44 42 40 38 36 34 + 32 30 28 26 24 22 20 18 16 14 12 10 8 6 + 4 2 0 86 85 84 83 82 81 80 79 78 77 76 + 75 74 73 72 71 70 69 68 67 66 65 64 63 62 + 61 60 59 58 57 56 55 54 53 52 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 174 174 174 174 174 174 174 174 + 174 174 174 174 174 174 174 174 174 174 174 174 174 174 + 174 174 174 174 + 0 1 1 3 0 1 0 7 4 5 10 7 6 7 + 10 15 5 13 4 15 7 21 14 7 0 19 13 7 + 1 25 20 15 10 5 0 31 27 23 19 15 11 7 + 3 43 40 37 34 31 28 25 22 19 16 13 10 7 + 4 1 57 55 53 51 49 47 45 43 41 39 37 35 + 33 31 29 27 25 23 21 19 17 15 13 11 9 7 + 5 3 1 87 86 85 84 83 82 81 80 79 78 77 + 76 75 74 73 72 71 70 69 68 67 66 65 64 63 + 62 61 60 59 58 57 56 55 54 53 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 175 175 175 175 175 175 175 + 175 175 175 175 175 175 175 175 175 175 175 175 175 175 + 175 175 175 175 + 0 0 2 0 1 2 1 0 5 6 0 8 7 8 + 11 0 6 14 5 16 8 0 15 8 1 20 14 8 + 2 26 21 16 11 6 1 32 28 24 20 16 12 8 + 4 0 41 38 35 32 29 26 23 20 17 14 11 8 + 5 2 58 56 54 52 50 48 46 44 42 40 38 36 + 34 32 30 28 26 24 22 20 18 16 14 12 10 8 + 6 4 2 0 87 86 85 84 83 82 81 80 79 78 + 77 76 75 74 73 72 71 70 69 68 67 66 65 64 + 63 62 61 60 59 58 57 56 55 54 53 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 176 176 176 176 176 176 + 176 176 176 176 176 176 176 176 176 176 176 176 176 176 + 176 176 176 176 + 0 1 0 1 2 3 2 1 6 7 1 9 8 9 + 12 1 7 15 6 17 9 1 16 9 2 21 15 9 + 3 27 22 17 12 7 2 33 29 25 21 17 13 9 + 5 1 42 39 36 33 30 27 24 21 18 15 12 9 + 6 3 0 57 55 53 51 49 47 45 43 41 39 37 + 35 33 31 29 27 25 23 21 19 17 15 13 11 9 + 7 5 3 1 88 87 86 85 84 83 82 81 80 79 + 78 77 76 75 74 73 72 71 70 69 68 67 66 65 + 64 63 62 61 60 59 58 57 56 55 54 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 177 177 177 177 177 + 177 177 177 177 177 177 177 177 177 177 177 177 177 177 + 177 177 177 177 + 0 0 1 2 3 4 3 2 7 8 2 10 9 10 + 13 2 8 16 7 18 10 2 17 10 3 22 16 10 + 4 28 23 18 13 8 3 34 30 26 22 18 14 10 + 6 2 43 40 37 34 31 28 25 22 19 16 13 10 + 7 4 1 58 56 54 52 50 48 46 44 42 40 38 + 36 34 32 30 28 26 24 22 20 18 16 14 12 10 + 8 6 4 2 0 88 87 86 85 84 83 82 81 80 + 79 78 77 76 75 74 73 72 71 70 69 68 67 66 + 65 64 63 62 61 60 59 58 57 56 55 54 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 178 178 178 178 + 178 178 178 178 178 178 178 178 178 178 178 178 178 178 + 178 178 178 178 + 0 1 2 3 4 5 4 3 8 9 3 11 10 11 + 14 3 9 17 8 19 11 3 18 11 4 23 17 11 + 5 29 24 19 14 9 4 35 31 27 23 19 15 11 + 7 3 44 41 38 35 32 29 26 23 20 17 14 11 + 8 5 2 59 57 55 53 51 49 47 45 43 41 39 + 37 35 33 31 29 27 25 23 21 19 17 15 13 11 + 9 7 5 3 1 89 88 87 86 85 84 83 82 81 + 80 79 78 77 76 75 74 73 72 71 70 69 68 67 + 66 65 64 63 62 61 60 59 58 57 56 55 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 179 179 179 + 179 179 179 179 179 179 179 179 179 179 179 179 179 179 + 179 179 179 179 + 0 0 0 0 0 0 5 4 0 0 4 0 11 12 + 0 4 10 0 9 0 12 4 19 12 5 24 18 12 + 6 0 25 20 15 10 5 0 32 28 24 20 16 12 + 8 4 0 42 39 36 33 30 27 24 21 18 15 12 + 9 6 3 0 58 56 54 52 50 48 46 44 42 40 + 38 36 34 32 30 28 26 24 22 20 18 16 14 12 + 10 8 6 4 2 0 89 88 87 86 85 84 83 82 + 81 80 79 78 77 76 75 74 73 72 71 70 69 68 + 67 66 65 64 63 62 61 60 59 58 57 56 55 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 180 180 + 180 180 180 180 180 180 180 180 180 180 180 180 180 180 + 180 180 180 180 + 0 1 1 1 1 1 6 5 1 1 5 1 12 13 + 1 5 11 1 10 1 13 5 20 13 6 25 19 13 + 7 1 26 21 16 11 6 1 33 29 25 21 17 13 + 9 5 1 43 40 37 34 31 28 25 22 19 16 13 + 10 7 4 1 59 57 55 53 51 49 47 45 43 41 + 39 37 35 33 31 29 27 25 23 21 19 17 15 13 + 11 9 7 5 3 1 90 89 88 87 86 85 84 83 + 82 81 80 79 78 77 76 75 74 73 72 71 70 69 + 68 67 66 65 64 63 62 61 60 59 58 57 56 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 181 + 181 181 181 181 181 181 181 181 181 181 181 181 181 181 + 181 181 181 181 + 0 0 2 2 2 2 0 6 2 2 6 2 0 0 + 2 6 12 2 11 2 14 6 21 14 7 0 20 14 + 8 2 27 22 17 12 7 2 34 30 26 22 18 14 + 10 6 2 44 41 38 35 32 29 26 23 20 17 14 + 11 8 5 2 60 58 56 54 52 50 48 46 44 42 + 40 38 36 34 32 30 28 26 24 22 20 18 16 14 + 12 10 8 6 4 2 0 90 89 88 87 86 85 84 + 83 82 81 80 79 78 77 76 75 74 73 72 71 70 + 69 68 67 66 65 64 63 62 61 60 59 58 57 56 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 182 182 182 182 182 182 182 182 182 182 182 182 182 182 + 182 182 182 182 + 0 1 0 3 3 3 1 7 3 3 7 3 1 1 + 3 7 13 3 12 3 15 7 22 15 8 1 21 15 + 9 3 28 23 18 13 8 3 35 31 27 23 19 15 + 11 7 3 45 42 39 36 33 30 27 24 21 18 15 + 12 9 6 3 0 59 57 55 53 51 49 47 45 43 + 41 39 37 35 33 31 29 27 25 23 21 19 17 15 + 13 11 9 7 5 3 1 91 90 89 88 87 86 85 + 84 83 82 81 80 79 78 77 76 75 74 73 72 71 + 70 69 68 67 66 65 64 63 62 61 60 59 58 57 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 183 183 183 183 183 183 183 183 183 183 183 183 183 + 183 183 183 183 + 0 0 1 0 4 4 2 0 4 4 8 4 2 2 + 4 8 14 4 13 4 16 8 0 16 9 2 22 16 + 10 4 29 24 19 14 9 4 36 32 28 24 20 16 + 12 8 4 0 43 40 37 34 31 28 25 22 19 16 + 13 10 7 4 1 60 58 56 54 52 50 48 46 44 + 42 40 38 36 34 32 30 28 26 24 22 20 18 16 + 14 12 10 8 6 4 2 0 91 90 89 88 87 86 + 85 84 83 82 81 80 79 78 77 76 75 74 73 72 + 71 70 69 68 67 66 65 64 63 62 61 60 59 58 + 57 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 184 184 184 184 184 184 184 184 184 184 184 184 + 184 184 184 184 + 0 1 2 1 0 5 3 1 5 5 9 5 3 3 + 5 9 15 5 14 5 17 9 1 17 10 3 23 17 + 11 5 30 25 20 15 10 5 0 33 29 25 21 17 + 13 9 5 1 44 41 38 35 32 29 26 23 20 17 + 14 11 8 5 2 61 59 57 55 53 51 49 47 45 + 43 41 39 37 35 33 31 29 27 25 23 21 19 17 + 15 13 11 9 7 5 3 1 92 91 90 89 88 87 + 86 85 84 83 82 81 80 79 78 77 76 75 74 73 + 72 71 70 69 68 67 66 65 64 63 62 61 60 59 + 58 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 185 185 185 185 185 185 185 185 185 185 185 + 185 185 185 185 + 0 0 0 2 1 0 4 2 6 6 10 6 4 4 + 6 10 16 6 15 6 18 10 2 18 11 4 24 18 + 12 6 0 26 21 16 11 6 1 34 30 26 22 18 + 14 10 6 2 45 42 39 36 33 30 27 24 21 18 + 15 12 9 6 3 0 60 58 56 54 52 50 48 46 + 44 42 40 38 36 34 32 30 28 26 24 22 20 18 + 16 14 12 10 8 6 4 2 0 92 91 90 89 88 + 87 86 85 84 83 82 81 80 79 78 77 76 75 74 + 73 72 71 70 69 68 67 66 65 64 63 62 61 60 + 59 58 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 186 186 186 186 186 186 186 186 186 186 + 186 186 186 186 + 0 1 1 3 2 1 5 3 7 7 0 7 5 5 + 7 11 0 7 16 7 19 11 3 19 12 5 25 19 + 13 7 1 27 22 17 12 7 2 35 31 27 23 19 + 15 11 7 3 46 43 40 37 34 31 28 25 22 19 + 16 13 10 7 4 1 61 59 57 55 53 51 49 47 + 45 43 41 39 37 35 33 31 29 27 25 23 21 19 + 17 15 13 11 9 7 5 3 1 93 92 91 90 89 + 88 87 86 85 84 83 82 81 80 79 78 77 76 75 + 74 73 72 71 70 69 68 67 66 65 64 63 62 61 + 60 59 58 57 56 55 54 53 52 51 50 49 48 47 + 46 45 44 43 42 41 40 39 38 37 36 35 34 33 + 32 31 30 29 28 27 26 25 24 23 22 21 20 19 + 18 17 16 15 14 13 12 11 10 9 8 7 6 5 + 4 3 2 1 0 187 187 187 187 187 187 187 187 187 + 187 187 187 187 + 0 0 2 0 3 2 6 4 8 8 1 8 6 6 + 8 12 1 8 17 8 20 12 4 20 13 6 26 20 + 14 8 2 28 23 18 13 8 3 36 32 28 24 20 + 16 12 8 4 0 44 41 38 35 32 29 26 23 20 + 17 14 11 8 5 2 62 60 58 56 54 52 50 48 + 46 44 42 40 38 36 34 32 30 28 26 24 22 20 + 18 16 14 12 10 8 6 4 2 0 93 92 91 90 + 89 88 87 86 85 84 83 82 81 80 79 78 77 76 + 75 74 73 72 71 70 69 68 67 66 65 64 63 62 + 61 60 59 58 57 56 55 54 53 52 51 50 49 48 + 47 46 45 44 43 42 41 40 39 38 37 36 35 34 + 33 32 31 30 29 28 27 26 25 24 23 22 21 20 + 19 18 17 16 15 14 13 12 11 10 9 8 7 6 + 5 4 3 2 1 0 188 188 188 188 188 188 188 188 + 188 188 188 188 + 0 1 0 1 4 3 0 5 0 9 2 9 7 7 + 9 13 2 9 18 9 0 13 5 21 14 7 0 21 + 15 9 3 29 24 19 14 9 4 37 33 29 25 21 + 17 13 9 5 1 45 42 39 36 33 30 27 24 21 + 18 15 12 9 6 3 0 61 59 57 55 53 51 49 + 47 45 43 41 39 37 35 33 31 29 27 25 23 21 + 19 17 15 13 11 9 7 5 3 1 94 93 92 91 + 90 89 88 87 86 85 84 83 82 81 80 79 78 77 + 76 75 74 73 72 71 70 69 68 67 66 65 64 63 + 62 61 60 59 58 57 56 55 54 53 52 51 50 49 + 48 47 46 45 44 43 42 41 40 39 38 37 36 35 + 34 33 32 31 30 29 28 27 26 25 24 23 22 21 + 20 19 18 17 16 15 14 13 12 11 10 9 8 7 + 6 5 4 3 2 1 0 189 189 189 189 189 189 189 + 189 189 189 189 + 0 0 1 2 0 4 1 6 1 0 3 10 8 8 + 10 14 3 10 0 10 1 14 6 22 15 8 1 22 + 16 10 4 30 25 20 15 10 5 0 34 30 26 22 + 18 14 10 6 2 46 43 40 37 34 31 28 25 22 + 19 16 13 10 7 4 1 62 60 58 56 54 52 50 + 48 46 44 42 40 38 36 34 32 30 28 26 24 22 + 20 18 16 14 12 10 8 6 4 2 0 94 93 92 + 91 90 89 88 87 86 85 84 83 82 81 80 79 78 + 77 76 75 74 73 72 71 70 69 68 67 66 65 64 + 63 62 61 60 59 58 57 56 55 54 53 52 51 50 + 49 48 47 46 45 44 43 42 41 40 39 38 37 36 + 35 34 33 32 31 30 29 28 27 26 25 24 23 22 + 21 20 19 18 17 16 15 14 13 12 11 10 9 8 + 7 6 5 4 3 2 1 0 190 190 190 190 190 190 + 190 190 190 190 + 0 1 2 3 1 5 2 7 2 1 4 11 9 9 + 11 15 4 11 1 11 2 15 7 23 16 9 2 23 + 17 11 5 31 26 21 16 11 6 1 35 31 27 23 + 19 15 11 7 3 47 44 41 38 35 32 29 26 23 + 20 17 14 11 8 5 2 63 61 59 57 55 53 51 + 49 47 45 43 41 39 37 35 33 31 29 27 25 23 + 21 19 17 15 13 11 9 7 5 3 1 95 94 93 + 92 91 90 89 88 87 86 85 84 83 82 81 80 79 + 78 77 76 75 74 73 72 71 70 69 68 67 66 65 + 64 63 62 61 60 59 58 57 56 55 54 53 52 51 + 50 49 48 47 46 45 44 43 42 41 40 39 38 37 + 36 35 34 33 32 31 30 29 28 27 26 25 24 23 + 22 21 20 19 18 17 16 15 14 13 12 11 10 9 + 8 7 6 5 4 3 2 1 0 191 191 191 191 191 + 191 191 191 191 + 0 0 0 0 2 0 3 0 3 2 5 0 10 10 + 12 0 5 12 2 12 3 16 8 0 17 10 3 24 + 18 12 6 0 27 22 17 12 7 2 36 32 28 24 + 20 16 12 8 4 0 45 42 39 36 33 30 27 24 + 21 18 15 12 9 6 3 0 62 60 58 56 54 52 + 50 48 46 44 42 40 38 36 34 32 30 28 26 24 + 22 20 18 16 14 12 10 8 6 4 2 0 95 94 + 93 92 91 90 89 88 87 86 85 84 83 82 81 80 + 79 78 77 76 75 74 73 72 71 70 69 68 67 66 + 65 64 63 62 61 60 59 58 57 56 55 54 53 52 + 51 50 49 48 47 46 45 44 43 42 41 40 39 38 + 37 36 35 34 33 32 31 30 29 28 27 26 25 24 + 23 22 21 20 19 18 17 16 15 14 13 12 11 10 + 9 8 7 6 5 4 3 2 1 0 192 192 192 192 + 192 192 192 192 + 0 1 1 1 3 1 4 1 4 3 6 1 11 11 + 13 1 6 13 3 13 4 17 9 1 18 11 4 25 + 19 13 7 1 28 23 18 13 8 3 37 33 29 25 + 21 17 13 9 5 1 46 43 40 37 34 31 28 25 + 22 19 16 13 10 7 4 1 63 61 59 57 55 53 + 51 49 47 45 43 41 39 37 35 33 31 29 27 25 + 23 21 19 17 15 13 11 9 7 5 3 1 96 95 + 94 93 92 91 90 89 88 87 86 85 84 83 82 81 + 80 79 78 77 76 75 74 73 72 71 70 69 68 67 + 66 65 64 63 62 61 60 59 58 57 56 55 54 53 + 52 51 50 49 48 47 46 45 44 43 42 41 40 39 + 38 37 36 35 34 33 32 31 30 29 28 27 26 25 + 24 23 22 21 20 19 18 17 16 15 14 13 12 11 + 10 9 8 7 6 5 4 3 2 1 0 193 193 193 + 193 193 193 193 + 0 0 2 2 4 2 5 2 5 4 7 2 12 12 + 14 2 7 14 4 14 5 18 10 2 19 12 5 26 + 20 14 8 2 29 24 19 14 9 4 38 34 30 26 + 22 18 14 10 6 2 47 44 41 38 35 32 29 26 + 23 20 17 14 11 8 5 2 64 62 60 58 56 54 + 52 50 48 46 44 42 40 38 36 34 32 30 28 26 + 24 22 20 18 16 14 12 10 8 6 4 2 0 96 + 95 94 93 92 91 90 89 88 87 86 85 84 83 82 + 81 80 79 78 77 76 75 74 73 72 71 70 69 68 + 67 66 65 64 63 62 61 60 59 58 57 56 55 54 + 53 52 51 50 49 48 47 46 45 44 43 42 41 40 + 39 38 37 36 35 34 33 32 31 30 29 28 27 26 + 25 24 23 22 21 20 19 18 17 16 15 14 13 12 + 11 10 9 8 7 6 5 4 3 2 1 0 194 194 + 194 194 194 194 + 0 1 0 3 0 3 6 3 6 5 8 3 0 13 + 0 3 8 15 5 15 6 19 11 3 20 13 6 27 + 21 15 9 3 30 25 20 15 10 5 0 35 31 27 + 23 19 15 11 7 3 48 45 42 39 36 33 30 27 + 24 21 18 15 12 9 6 3 0 63 61 59 57 55 + 53 51 49 47 45 43 41 39 37 35 33 31 29 27 + 25 23 21 19 17 15 13 11 9 7 5 3 1 97 + 96 95 94 93 92 91 90 89 88 87 86 85 84 83 + 82 81 80 79 78 77 76 75 74 73 72 71 70 69 + 68 67 66 65 64 63 62 61 60 59 58 57 56 55 + 54 53 52 51 50 49 48 47 46 45 44 43 42 41 + 40 39 38 37 36 35 34 33 32 31 30 29 28 27 + 26 25 24 23 22 21 20 19 18 17 16 15 14 13 + 12 11 10 9 8 7 6 5 4 3 2 1 0 195 + 195 195 195 195 + 0 0 1 0 1 4 0 4 7 6 9 4 1 0 + 1 4 9 16 6 16 7 20 12 4 21 14 7 0 + 22 16 10 4 31 26 21 16 11 6 1 36 32 28 + 24 20 16 12 8 4 0 46 43 40 37 34 31 28 + 25 22 19 16 13 10 7 4 1 64 62 60 58 56 + 54 52 50 48 46 44 42 40 38 36 34 32 30 28 + 26 24 22 20 18 16 14 12 10 8 6 4 2 0 + 97 96 95 94 93 92 91 90 89 88 87 86 85 84 + 83 82 81 80 79 78 77 76 75 74 73 72 71 70 + 69 68 67 66 65 64 63 62 61 60 59 58 57 56 + 55 54 53 52 51 50 49 48 47 46 45 44 43 42 + 41 40 39 38 37 36 35 34 33 32 31 30 29 28 + 27 26 25 24 23 22 21 20 19 18 17 16 15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + 196 196 196 196 + 0 1 2 1 2 5 1 5 8 7 10 5 2 1 + 2 5 10 17 7 17 8 21 13 5 22 15 8 1 + 23 17 11 5 32 27 22 17 12 7 2 37 33 29 + 25 21 17 13 9 5 1 47 44 41 38 35 32 29 + 26 23 20 17 14 11 8 5 2 65 63 61 59 57 + 55 53 51 49 47 45 43 41 39 37 35 33 31 29 + 27 25 23 21 19 17 15 13 11 9 7 5 3 1 + 98 97 96 95 94 93 92 91 90 89 88 87 86 85 + 84 83 82 81 80 79 78 77 76 75 74 73 72 71 + 70 69 68 67 66 65 64 63 62 61 60 59 58 57 + 56 55 54 53 52 51 50 49 48 47 46 45 44 43 + 42 41 40 39 38 37 36 35 34 33 32 31 30 29 + 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + 14 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 197 197 197 + 0 0 0 2 3 0 2 6 0 8 0 6 3 2 + 3 6 11 0 8 18 9 0 14 6 23 16 9 2 + 24 18 12 6 0 28 23 18 13 8 3 38 34 30 + 26 22 18 14 10 6 2 48 45 42 39 36 33 30 + 27 24 21 18 15 12 9 6 3 0 64 62 60 58 + 56 54 52 50 48 46 44 42 40 38 36 34 32 30 + 28 26 24 22 20 18 16 14 12 10 8 6 4 2 + 0 98 97 96 95 94 93 92 91 90 89 88 87 86 + 85 84 83 82 81 80 79 78 77 76 75 74 73 72 + 71 70 69 68 67 66 65 64 63 62 61 60 59 58 + 57 56 55 54 53 52 51 50 49 48 47 46 45 44 + 43 42 41 40 39 38 37 36 35 34 33 32 31 30 + 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 + 1 0 198 198 + 0 1 1 3 4 1 3 7 1 9 1 7 4 3 + 4 7 12 1 9 19 10 1 15 7 24 17 10 3 + 25 19 13 7 1 29 24 19 14 9 4 39 35 31 + 27 23 19 15 11 7 3 49 46 43 40 37 34 31 + 28 25 22 19 16 13 10 7 4 1 65 63 61 59 + 57 55 53 51 49 47 45 43 41 39 37 35 33 31 + 29 27 25 23 21 19 17 15 13 11 9 7 5 3 + 1 99 98 97 96 95 94 93 92 91 90 89 88 87 + 86 85 84 83 82 81 80 79 78 77 76 75 74 73 + 72 71 70 69 68 67 66 65 64 63 62 61 60 59 + 58 57 56 55 54 53 52 51 50 49 48 47 46 45 + 44 43 42 41 40 39 38 37 36 35 34 33 32 31 + 30 29 28 27 26 25 24 23 22 21 20 19 18 17 + 16 15 14 13 12 11 10 9 8 7 6 5 4 3 + 2 1 0 199 + 0 0 2 0 0 2 4 0 2 0 2 8 5 4 + 5 8 13 2 10 0 11 2 16 8 0 18 11 4 + 26 20 14 8 2 30 25 20 15 10 5 0 36 32 + 28 24 20 16 12 8 4 0 47 44 41 38 35 32 + 29 26 23 20 17 14 11 8 5 2 66 64 62 60 + 58 56 54 52 50 48 46 44 42 40 38 36 34 32 + 30 28 26 24 22 20 18 16 14 12 10 8 6 4 + 2 0 99 98 97 96 95 94 93 92 91 90 89 88 + 87 86 85 84 83 82 81 80 79 78 77 76 75 74 + 73 72 71 70 69 68 67 66 65 64 63 62 61 60 + 59 58 57 56 55 54 53 52 51 50 49 48 47 46 + 45 44 43 42 41 40 39 38 37 36 35 34 33 32 + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 + 17 16 15 14 13 12 11 10 9 8 7 6 5 4 + 3 2 1 0 diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/p3.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/p3.pnm new file mode 100644 index 00000000..5c2320cd --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/p3.pnm @@ -0,0 +1,16388 @@ +P3 +# snail.ppm +256 256 +255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 246 234 +255 248 232 255 244 232 255 249 232 255 246 235 +251 244 228 252 244 233 253 245 233 255 249 239 +255 251 239 248 239 232 221 202 179 211 191 167 +220 206 157 254 246 225 255 250 243 254 243 241 +237 223 214 233 208 164 238 218 179 247 241 211 +255 250 236 253 249 238 255 250 245 248 242 233 +240 224 215 252 247 232 250 246 232 253 244 234 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 245 233 255 255 255 255 255 255 +255 248 236 255 252 244 253 243 234 240 229 220 +206 190 156 223 201 165 249 233 191 255 252 228 +255 253 244 251 245 235 236 221 189 230 212 162 +250 237 194 255 252 236 255 251 240 255 251 242 +255 250 244 255 244 241 227 210 195 237 217 171 +249 229 188 255 248 240 255 247 234 255 245 234 +249 243 229 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 252 244 +248 238 228 223 201 175 217 208 160 227 208 176 +255 247 214 255 251 241 255 247 238 255 245 233 +250 241 221 253 237 190 255 250 235 255 250 234 +255 250 242 255 249 242 255 248 239 245 225 216 +227 212 170 232 212 176 249 236 186 255 252 239 +255 251 238 255 248 232 255 246 232 255 247 234 +255 245 232 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 252 236 227 230 213 191 220 194 161 +228 208 173 253 237 204 250 245 216 234 219 201 +243 222 193 255 248 236 255 247 234 255 247 231 +255 247 231 255 246 237 255 247 233 255 245 239 +253 248 229 231 209 187 236 214 169 250 235 189 +255 252 230 255 252 236 255 249 241 255 248 233 +255 236 224 255 249 235 255 246 232 255 246 227 +255 246 234 255 246 229 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 253 243 236 228 226 237 218 205 +212 196 181 219 194 144 247 232 200 254 247 221 +236 224 203 230 209 177 239 215 168 246 238 204 +255 244 224 255 247 238 255 255 255 255 255 255 +255 255 255 255 255 246 255 245 233 255 245 235 +255 246 225 255 247 216 255 248 226 255 249 242 +255 244 238 255 246 236 255 246 236 255 246 231 +255 247 236 255 250 234 255 247 233 255 246 234 +255 248 235 255 246 234 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 249 236 255 253 243 255 246 238 +233 220 197 226 208 190 227 204 154 234 214 173 +242 229 199 245 241 222 231 219 196 220 200 166 +242 225 182 255 244 217 255 251 234 254 245 238 +253 239 232 255 255 255 156 152 178 87 63 0 +127 102 95 197 189 192 255 255 255 255 246 235 +255 247 234 255 245 234 255 247 235 255 246 232 +255 250 233 255 246 236 255 244 229 255 249 232 +255 244 236 255 246 225 255 248 235 255 246 232 +255 250 234 255 246 232 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 239 219 197 206 182 151 +225 204 156 248 224 192 249 238 220 252 239 233 +249 241 237 239 228 187 255 248 222 255 247 219 +255 251 241 252 246 233 249 242 229 252 238 230 +255 248 232 172 188 225 198 115 0 137 153 0 +94 72 0 65 63 0 255 239 247 255 248 236 +255 246 231 255 245 233 255 244 228 255 246 235 +255 246 232 255 246 231 255 247 232 255 246 232 +255 244 233 255 246 231 255 246 232 255 242 230 +255 246 230 255 246 232 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 245 236 224 241 220 201 +212 196 165 225 198 160 226 210 157 255 243 220 +255 245 236 249 238 226 244 224 181 245 235 209 +248 239 230 250 241 234 255 248 236 255 245 233 +252 245 231 253 245 233 248 244 225 255 243 235 +255 255 255 86 129 65 242 191 44 240 229 229 +249 195 0 174 165 0 149 112 105 255 255 255 +255 246 232 255 245 233 255 247 233 255 246 232 +255 247 233 255 245 234 255 245 236 255 247 232 +255 247 236 255 248 232 255 246 232 255 245 232 +255 247 234 255 247 234 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 247 233 255 255 255 255 251 240 253 241 226 +245 228 217 210 193 153 218 188 158 211 194 164 +238 228 186 255 245 232 251 243 229 236 218 182 +244 233 202 249 240 217 254 245 236 255 245 237 +246 243 229 249 241 227 253 245 230 251 244 231 +246 238 227 250 240 229 247 242 224 254 241 237 +255 255 255 65 0 0 58 0 0 204 199 0 +212 182 0 0 43 0 218 158 143 255 254 246 +255 247 229 255 245 231 255 245 228 255 246 236 +248 242 227 248 245 230 252 244 229 249 240 225 +255 244 233 255 245 229 255 247 232 255 245 232 +255 244 233 250 243 227 251 241 230 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 244 232 +255 250 239 255 253 238 255 243 234 217 194 167 +208 185 147 230 220 176 254 246 223 255 250 242 +238 230 215 230 213 177 243 228 190 255 251 229 +253 247 237 250 242 232 253 244 235 251 244 230 +251 241 229 247 237 227 252 244 231 250 242 231 +244 239 227 253 244 232 252 246 229 255 255 255 +37 66 93 168 65 0 197 194 0 54 0 0 +0 0 0 97 2 0 255 255 255 246 239 235 +253 246 230 255 246 233 253 244 231 249 241 229 +246 239 230 250 241 229 252 245 234 249 242 228 +251 241 234 248 244 229 255 247 234 255 245 234 +248 243 229 247 242 231 246 239 228 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 247 235 255 250 242 255 250 244 +242 228 212 229 205 171 208 179 152 237 220 175 +255 255 128 248 243 242 240 223 198 230 214 192 +240 227 179 252 242 232 251 245 236 255 247 232 +255 245 234 255 246 236 248 243 232 251 244 231 +250 240 230 246 238 228 250 244 227 252 246 231 +250 241 228 252 239 229 255 250 238 204 234 255 +129 22 0 233 191 0 181 134 0 0 0 0 +180 154 0 255 255 209 254 247 249 248 240 231 +248 242 230 255 244 231 252 245 231 250 241 232 +250 245 229 252 246 233 255 246 235 249 241 227 +248 240 230 249 240 226 255 247 233 255 246 232 +248 241 230 247 243 230 251 244 231 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 251 237 225 240 223 207 211 191 150 +216 190 163 228 216 166 255 248 240 249 238 235 +243 226 205 246 227 188 247 237 200 255 247 236 +252 248 238 249 240 229 249 241 228 255 249 237 +253 243 233 243 233 221 239 223 210 247 238 230 +243 237 224 244 236 224 254 247 230 253 243 231 +253 243 228 255 244 234 255 255 255 85 0 0 +249 198 0 178 158 0 25 0 0 255 239 131 +255 255 255 255 250 246 254 243 232 249 239 230 +246 239 228 255 247 232 252 245 230 247 239 228 +249 245 230 255 243 232 255 246 232 251 246 232 +250 240 232 252 245 229 255 247 234 255 246 232 +247 241 229 250 243 232 254 246 232 255 247 233 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 247 233 +255 255 255 255 255 255 255 255 255 255 255 255 +222 200 186 200 180 154 216 189 155 239 213 180 +255 252 244 255 244 237 241 220 189 237 219 172 +255 241 216 255 250 235 255 248 239 255 245 238 +250 243 229 249 243 235 246 239 233 240 225 197 +242 222 189 238 222 181 246 239 216 252 243 235 +248 238 228 248 240 229 252 243 228 251 244 230 +255 241 236 255 255 255 77 73 81 236 174 109 +162 129 0 53 24 0 224 190 105 255 255 255 +255 245 236 255 247 235 253 246 232 250 238 230 +249 246 230 255 244 233 252 245 232 253 241 231 +249 245 230 255 246 234 255 246 234 251 241 229 +249 240 231 254 247 233 255 247 233 255 245 236 +251 245 233 247 242 229 255 246 233 255 247 234 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 244 232 255 250 239 +255 253 238 255 243 234 212 194 160 199 182 153 +222 201 157 252 242 220 254 246 240 252 243 235 +240 221 190 242 226 188 248 232 215 255 246 239 +252 244 234 250 241 225 255 246 235 251 243 232 +244 237 231 239 220 183 243 235 205 251 241 218 +248 242 231 253 242 236 251 241 230 251 244 230 +248 240 226 247 241 229 250 241 226 254 240 230 +255 255 255 59 42 28 194 119 0 228 190 0 +0 0 0 162 82 0 255 255 255 255 245 232 +252 245 231 253 246 230 248 240 226 246 238 229 +248 245 226 255 243 232 251 243 231 244 235 225 +248 242 226 255 246 234 255 246 233 249 242 228 +248 239 230 248 243 227 255 247 233 255 246 232 +249 241 229 246 243 228 254 244 229 255 246 231 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 247 235 255 250 242 255 250 244 242 228 212 +229 205 171 202 180 150 236 217 174 245 231 211 +255 252 243 254 243 233 253 242 237 247 232 196 +246 236 221 254 243 234 252 244 235 251 240 231 +252 245 230 246 239 226 247 238 227 248 239 229 +251 244 229 253 242 226 253 242 233 250 242 229 +246 238 227 248 238 228 252 240 230 248 240 227 +247 236 227 249 238 225 253 239 233 255 255 255 +86 97 140 199 126 0 231 190 0 96 112 0 +186 140 15 255 255 255 255 242 235 249 242 231 +249 239 230 245 237 228 249 242 230 252 241 233 +255 246 233 254 242 231 254 243 232 236 228 216 +236 231 209 252 246 232 253 244 231 248 243 229 +249 238 234 250 241 229 255 246 233 253 244 233 +248 241 231 250 241 228 252 245 232 249 240 227 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +251 237 225 240 223 207 211 191 150 216 190 163 +228 216 166 255 253 237 249 238 235 252 242 233 +230 214 191 252 242 233 252 241 231 252 239 232 +252 241 230 251 242 230 252 240 231 248 237 228 +249 237 226 251 241 227 253 244 231 251 242 231 +251 242 230 250 240 229 253 244 228 250 241 228 +253 245 230 253 243 230 251 239 229 251 243 232 +252 245 228 253 241 231 255 255 255 137 161 194 +140 14 0 255 233 0 161 170 0 87 11 0 +255 255 255 255 248 241 255 245 230 255 248 232 +255 246 233 251 244 229 255 246 231 255 246 232 +255 247 232 255 246 233 252 244 231 255 246 232 +253 245 232 253 246 233 255 245 235 255 246 231 +255 244 233 253 248 230 252 243 229 254 243 229 +255 246 233 251 246 229 255 245 231 255 248 236 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 222 200 186 +200 180 154 216 189 155 239 213 180 255 252 244 +255 244 237 244 232 220 230 202 166 227 207 162 +253 233 216 254 242 233 249 240 228 253 241 232 +251 241 228 249 240 227 251 242 231 253 243 232 +249 230 193 255 246 233 255 245 231 255 246 231 +251 241 226 255 244 228 250 245 228 255 245 228 +255 243 228 255 244 228 251 242 229 252 244 230 +255 243 231 255 255 255 111 129 163 150 49 0 +226 208 0 172 152 0 41 0 0 255 255 255 +255 249 242 253 242 229 255 245 235 255 245 229 +255 245 233 255 247 233 255 247 232 255 245 234 +255 245 230 255 245 232 255 245 230 255 245 233 +255 247 232 255 245 234 255 247 232 255 247 231 +255 245 235 255 246 228 255 249 234 255 246 229 +255 247 233 255 247 231 255 245 231 255 245 231 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 244 234 255 249 233 255 248 239 +255 255 255 212 194 160 199 182 153 222 201 157 +252 242 220 254 246 240 252 243 235 240 221 190 +242 226 188 248 232 215 255 246 239 254 239 234 +247 242 228 253 243 234 255 247 238 250 240 230 +237 222 186 232 211 181 248 232 196 254 244 230 +255 240 233 255 244 226 254 245 229 255 239 231 +253 244 226 255 241 230 255 245 231 255 247 229 +254 241 230 254 242 227 255 244 230 254 239 228 +255 255 255 157 190 197 119 0 0 215 178 0 +248 241 0 0 0 0 230 208 135 255 255 255 +250 242 229 251 243 227 251 239 228 255 247 230 +255 243 233 253 245 229 255 247 230 255 247 234 +255 245 230 255 245 234 255 247 232 255 247 232 +255 245 232 255 247 234 241 227 217 255 249 231 +255 245 232 255 244 233 255 246 233 255 247 231 +255 244 231 255 247 229 255 245 232 253 243 227 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +254 242 230 255 249 243 253 242 230 238 219 200 +202 180 150 236 217 174 245 231 211 255 252 243 +254 243 233 253 242 237 247 232 196 246 236 221 +254 243 234 252 244 235 251 240 231 254 241 232 +253 244 234 242 228 218 231 214 183 236 222 183 +250 238 215 254 243 231 254 242 233 252 239 229 +255 243 228 251 242 228 255 243 231 252 242 231 +254 246 228 252 242 228 250 243 230 251 245 227 +255 245 229 255 243 234 255 243 231 255 254 245 +214 241 251 91 0 0 249 237 0 232 202 168 +44 22 0 243 215 155 255 255 244 255 239 234 +250 239 226 250 243 230 253 240 229 254 244 226 +255 244 232 255 243 229 255 245 233 255 245 234 +255 247 232 255 245 232 255 244 230 255 247 233 +255 245 230 255 247 232 255 247 237 255 247 227 +255 245 233 255 247 233 255 245 228 255 243 232 +255 246 232 253 245 230 253 243 227 255 245 232 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 228 204 187 171 151 121 205 186 127 +255 253 237 255 255 255 252 242 233 230 214 191 +252 242 233 252 241 231 252 239 232 252 241 230 +251 242 230 252 240 231 248 237 228 246 235 226 +241 229 203 241 231 200 254 240 219 252 242 234 +250 242 232 251 240 231 251 241 228 250 243 230 +252 240 230 252 242 226 255 245 227 255 242 231 +252 242 228 251 240 228 249 242 228 253 242 230 +253 245 230 254 239 229 255 255 255 156 192 192 +79 0 0 218 164 0 207 169 0 142 126 0 +142 76 0 255 255 255 250 240 230 246 239 227 +249 243 226 254 244 231 255 241 234 255 246 230 +253 244 232 255 246 230 255 245 233 255 245 232 +255 245 233 255 245 233 255 247 231 255 246 234 +255 246 236 255 247 232 255 245 233 255 243 226 +255 245 234 255 248 230 255 248 237 255 247 233 +252 242 232 255 245 234 255 247 233 255 247 232 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 212 193 174 +197 175 146 225 199 152 255 251 233 255 247 237 +244 232 220 230 202 166 227 207 162 253 233 216 +254 242 233 249 240 228 253 241 232 251 241 228 +249 240 227 251 242 231 253 243 232 247 235 212 +250 241 226 252 240 233 250 239 231 249 240 226 +253 238 228 252 239 228 253 243 228 252 241 228 +254 241 228 250 240 228 255 246 230 253 238 229 +250 239 228 253 241 228 252 243 228 249 242 224 +254 240 229 255 253 234 206 230 254 80 0 0 +219 188 0 255 231 0 163 168 0 32 0 0 +255 255 246 255 247 241 250 244 226 252 239 229 +252 244 227 255 245 230 255 244 229 255 246 230 +253 244 230 255 243 228 255 246 229 255 243 231 +255 246 229 255 246 233 255 248 237 255 236 227 +253 237 219 255 246 234 255 245 231 255 246 226 +255 246 238 250 233 224 254 242 212 254 237 206 +252 242 210 255 248 237 255 247 229 255 246 234 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 202 181 144 225 207 174 +250 235 211 252 243 245 234 221 199 228 208 170 +239 220 180 255 245 230 255 245 236 253 244 230 +253 242 232 252 242 233 253 241 233 252 238 230 +251 241 228 251 240 229 247 238 226 250 239 230 +250 238 228 252 242 231 253 243 231 252 245 232 +254 243 227 252 243 230 250 240 228 255 241 230 +251 243 228 251 238 228 250 244 229 253 245 231 +251 243 230 252 241 228 250 242 230 252 241 231 +255 251 244 255 255 255 67 0 0 223 188 0 +255 206 140 186 167 0 38 0 0 235 220 134 +255 255 255 253 242 232 249 245 228 251 241 230 +252 241 231 253 245 232 255 244 234 255 245 229 +255 246 234 255 245 231 255 245 233 255 246 235 +255 247 237 246 231 217 240 224 199 246 225 177 +255 249 233 255 247 238 255 245 233 255 246 229 +255 241 216 250 237 205 255 250 233 255 247 236 +254 242 236 240 230 194 255 244 232 255 247 235 +255 246 231 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 210 199 170 +197 175 132 223 199 172 255 247 227 251 246 244 +239 229 222 229 205 170 241 224 198 252 242 230 +252 248 238 253 242 230 253 243 231 255 244 234 +253 243 233 248 239 230 232 212 187 249 232 201 +251 241 230 252 242 232 251 238 227 253 240 230 +251 244 229 248 241 231 252 243 227 254 242 227 +251 243 230 252 238 228 252 243 228 251 243 228 +255 240 230 252 243 228 251 244 230 249 239 229 +250 240 228 246 239 229 251 241 230 255 255 246 +189 219 226 42 0 0 217 148 0 255 231 134 +251 212 0 70 77 0 249 212 148 255 255 255 +252 242 230 253 241 230 251 242 228 251 239 228 +253 245 229 249 239 228 255 246 232 255 247 231 +255 245 232 255 248 234 255 245 233 255 244 237 +245 237 201 255 239 200 255 249 231 255 254 245 +249 236 222 248 237 214 255 246 234 255 245 229 +255 246 232 255 248 236 251 237 216 255 244 226 +255 246 218 255 248 228 255 248 234 255 246 232 +255 247 234 255 244 231 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 211 189 168 207 182 144 241 221 197 +255 247 241 255 252 245 234 223 212 229 215 170 +241 224 185 251 243 233 253 244 234 249 241 230 +252 244 233 255 242 236 250 242 237 236 222 206 +229 203 165 236 216 177 255 242 230 255 244 234 +255 243 230 255 243 231 252 243 231 254 242 229 +252 241 229 254 239 229 255 241 232 251 243 228 +255 243 228 252 241 228 252 243 228 254 242 228 +253 245 230 252 242 226 254 243 228 251 236 228 +250 242 227 251 240 229 255 251 246 222 244 242 +87 0 0 209 158 0 227 189 0 250 215 0 +136 141 0 112 27 0 255 255 255 255 241 232 +253 242 229 251 241 228 251 245 228 251 239 228 +251 241 228 253 240 232 254 240 234 254 243 229 +245 234 220 243 224 196 255 248 234 255 246 235 +255 249 236 255 242 239 243 228 216 238 220 182 +254 243 209 255 249 230 255 248 235 255 245 228 +254 242 230 250 238 203 255 245 222 255 247 237 +255 248 237 255 246 234 255 248 233 255 246 230 +255 244 232 255 247 233 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +208 183 120 239 222 196 254 242 222 255 255 255 +234 221 208 218 199 176 225 204 173 254 245 234 +253 243 234 253 238 231 255 242 231 255 245 236 +242 236 225 229 211 187 221 204 167 237 222 185 +255 245 236 251 245 233 252 241 230 255 239 228 +255 245 228 251 241 229 252 242 229 252 235 228 +252 242 228 252 240 228 254 240 228 252 239 224 +253 242 231 252 239 226 251 241 229 253 243 229 +254 241 229 252 241 227 255 243 227 252 241 229 +253 240 230 255 252 234 245 255 255 62 0 0 +196 150 0 245 200 154 221 193 0 203 201 12 +26 0 0 255 255 237 255 249 240 252 241 230 +250 242 226 252 241 231 250 243 228 251 239 230 +253 245 231 253 240 235 235 220 189 239 224 183 +249 235 195 255 247 229 255 246 235 251 241 228 +251 235 217 246 233 179 253 240 204 255 250 242 +249 237 230 241 223 204 255 246 234 255 246 232 +255 244 235 255 246 236 254 249 237 245 232 198 +255 240 224 255 249 235 255 246 236 255 247 233 +255 245 233 255 249 230 255 249 235 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 245 230 255 255 255 +255 255 255 255 255 255 209 181 134 233 211 182 +255 248 233 255 249 244 254 244 237 217 194 157 +234 219 185 249 238 210 254 244 237 248 243 227 +249 240 226 254 243 237 241 231 216 217 198 177 +222 198 154 250 235 210 255 242 233 254 244 233 +253 241 228 252 240 229 254 240 229 253 240 227 +253 239 227 252 240 228 252 242 228 254 240 229 +252 242 226 252 240 227 252 240 227 252 242 227 +254 240 229 253 243 229 248 240 227 249 238 225 +250 239 226 247 239 224 255 241 228 253 241 228 +255 255 255 168 180 152 67 0 0 199 127 0 +232 216 0 224 189 0 238 230 0 39 0 0 +237 194 138 255 255 255 250 237 225 248 237 228 +246 237 225 252 242 230 250 245 232 245 235 228 +239 224 200 251 237 214 251 242 212 255 247 239 +253 244 239 252 243 231 252 237 213 249 237 205 +255 247 229 255 246 241 242 228 209 241 223 188 +247 231 194 255 245 221 255 247 236 255 246 232 +253 241 229 255 244 227 255 245 224 255 248 223 +250 236 222 251 239 221 248 231 195 255 252 240 +255 252 241 243 231 226 255 242 222 255 247 238 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 220 202 170 +198 177 132 234 208 179 255 250 235 255 251 244 +255 244 233 234 212 182 234 219 178 248 237 214 +254 241 237 250 240 230 252 241 230 253 242 236 +244 237 219 222 198 189 216 200 150 245 227 199 +255 246 238 253 243 234 251 243 230 253 240 228 +252 239 225 252 238 229 254 241 227 252 238 225 +251 241 225 252 239 229 252 240 229 252 241 227 +252 240 229 252 240 224 252 240 230 253 243 226 +249 235 226 251 236 224 246 238 227 247 238 227 +248 238 225 246 238 223 254 242 231 255 255 255 +198 223 214 90 0 0 218 157 0 203 147 0 +244 218 134 232 208 0 19 0 0 228 191 128 +255 255 236 253 241 229 252 245 227 250 241 227 +253 241 231 243 235 220 236 219 196 227 214 170 +255 244 218 255 246 234 255 242 237 237 225 206 +239 226 198 253 242 234 255 245 231 254 245 238 +249 238 221 238 215 168 251 239 207 255 248 235 +255 247 243 249 236 225 244 229 202 251 235 199 +255 244 222 255 248 234 255 247 234 255 247 231 +255 241 199 255 250 239 255 251 244 232 219 205 +233 207 169 255 233 196 255 253 241 244 227 220 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 253 243 235 254 248 237 255 246 237 +255 247 242 255 251 240 255 252 241 255 254 242 +255 254 246 255 255 237 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 245 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 229 218 192 207 174 150 226 204 161 +246 231 203 255 255 255 249 237 228 228 215 192 +221 198 153 255 243 222 255 246 234 250 242 231 +248 241 232 255 244 235 243 235 225 213 196 169 +217 193 150 233 211 189 255 249 239 254 243 232 +250 241 228 252 240 227 249 238 229 251 241 225 +251 239 230 253 241 229 252 237 229 252 241 229 +255 241 227 250 237 227 253 240 228 250 237 225 +251 241 228 253 240 230 253 239 228 250 237 222 +249 237 227 248 237 227 247 237 223 245 237 223 +249 240 228 248 242 232 255 255 241 223 242 220 +51 0 0 163 90 0 215 182 19 250 217 137 +217 178 0 142 130 0 147 66 0 255 255 255 +252 243 233 254 239 227 252 241 227 251 238 231 +245 236 226 232 220 180 248 239 213 255 245 237 +253 242 235 247 238 226 234 213 175 255 240 210 +255 246 231 252 242 237 234 221 210 248 239 227 +252 243 232 255 250 240 254 242 235 250 235 222 +246 231 186 250 239 206 255 244 238 244 232 201 +247 231 206 255 248 228 255 250 237 255 246 238 +250 235 232 237 221 204 232 215 172 254 245 212 +249 237 225 238 225 219 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 251 243 229 +251 239 227 251 243 231 255 251 242 255 250 245 +255 255 246 255 255 255 255 255 255 255 245 243 +251 227 237 247 217 203 255 229 216 255 223 197 +243 222 184 233 207 181 220 184 180 185 151 163 +176 152 161 144 103 95 85 49 39 77 1 0 +48 0 0 89 25 0 90 16 0 145 96 37 +171 148 107 213 174 152 255 247 221 255 255 255 +255 255 246 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +192 172 149 208 173 132 248 243 212 255 250 244 +255 248 241 231 214 186 225 196 148 242 221 193 +255 245 234 253 242 231 251 239 231 253 242 232 +239 229 217 219 206 186 213 190 139 248 237 206 +250 244 234 255 242 235 249 238 227 250 238 228 +251 241 229 252 241 227 252 241 227 253 241 226 +251 239 226 251 241 225 251 238 228 253 237 225 +252 241 227 251 240 229 251 236 223 253 238 227 +249 237 222 251 242 226 253 235 226 248 238 223 +247 235 225 248 235 223 247 238 224 246 233 224 +252 238 230 255 255 255 121 149 128 46 0 0 +223 129 0 192 179 0 251 213 217 239 209 67 +153 174 0 30 0 0 255 255 245 255 247 238 +252 239 225 254 243 232 245 236 221 249 239 227 +248 239 225 251 241 235 250 244 233 240 227 219 +248 237 202 250 239 221 255 246 243 243 237 226 +230 217 210 223 205 154 249 237 210 254 241 233 +245 237 227 250 234 217 241 232 186 255 248 232 +245 235 228 235 213 197 243 227 188 255 246 217 +255 247 240 255 243 235 230 217 196 235 214 184 +255 243 204 253 248 227 242 234 223 207 197 180 +219 194 163 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 241 231 255 246 238 255 251 247 255 255 255 +255 255 255 255 255 240 253 237 166 238 214 152 +225 168 111 210 172 16 217 128 0 224 176 0 +187 111 0 199 134 0 205 162 0 186 147 0 +227 166 0 194 147 0 236 197 0 237 198 0 +225 216 0 167 175 0 137 122 0 122 103 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 133 34 0 +176 154 125 255 255 227 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 209 185 161 209 179 131 +252 231 206 254 246 223 255 243 233 238 223 197 +229 210 163 243 218 193 255 245 235 255 245 230 +253 242 226 252 240 232 243 235 221 219 195 169 +215 190 154 233 216 179 253 241 232 250 239 234 +251 239 226 249 239 226 249 239 227 250 236 226 +245 238 226 249 236 224 249 237 226 250 238 225 +250 238 226 252 242 230 252 238 225 248 237 226 +253 239 225 249 237 229 251 238 225 251 238 226 +250 238 225 249 239 226 253 242 226 252 242 227 +251 239 227 248 237 226 246 240 222 255 241 236 +255 255 255 89 136 127 111 0 0 189 117 0 +218 168 0 222 173 54 224 196 55 218 181 0 +12 0 0 191 149 24 255 255 255 255 243 235 +254 244 235 225 206 176 246 225 202 254 241 231 +253 240 232 246 236 222 233 227 187 245 229 195 +255 248 237 252 242 236 228 215 205 226 206 159 +235 223 188 255 248 237 249 242 234 241 227 214 +245 228 190 255 248 240 244 231 217 219 198 158 +251 236 187 255 248 224 255 250 244 243 233 218 +224 209 177 250 235 190 255 249 225 255 252 244 +225 216 209 205 182 163 213 196 150 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 246 239 255 255 255 +255 255 255 252 243 187 235 216 148 197 169 110 +141 47 0 173 0 0 15 0 0 124 0 0 +31 0 0 2 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 22 0 0 +27 0 0 168 39 0 251 207 0 255 233 0 +255 255 0 193 178 0 118 90 0 0 0 0 +27 0 0 0 0 0 1 0 0 0 0 0 +1 0 0 0 0 0 152 130 19 255 249 231 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 243 228 255 249 237 255 255 255 255 255 255 +210 177 146 203 178 139 237 219 189 255 251 236 +255 245 237 254 243 231 254 242 228 251 239 209 +255 242 226 255 247 233 255 243 230 252 240 227 +255 245 233 222 218 197 212 182 147 236 223 184 +253 243 236 250 240 231 249 238 228 248 239 225 +246 237 223 248 237 227 248 237 223 248 239 227 +249 238 226 249 238 227 248 243 227 250 238 223 +249 236 227 247 238 226 250 238 226 254 242 226 +252 241 225 253 239 229 251 240 229 249 236 226 +252 238 226 250 240 226 250 236 225 247 237 223 +248 238 228 251 239 227 255 255 255 250 254 235 +57 86 56 131 0 0 197 121 0 202 176 0 +245 217 2 207 193 80 235 184 0 66 55 0 +161 100 0 255 255 255 255 247 243 225 211 183 +216 193 152 247 226 188 255 247 239 250 237 229 +242 228 202 252 239 209 255 246 228 252 240 239 +228 216 193 222 206 158 249 235 212 255 249 238 +255 245 243 237 224 209 243 224 182 255 244 218 +253 240 242 240 219 180 244 234 191 255 254 242 +244 239 231 237 213 198 255 252 239 255 245 218 +255 254 228 249 237 240 226 209 189 212 197 173 +230 213 163 250 244 215 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 253 247 243 +255 255 255 255 255 246 255 229 175 239 220 97 +133 48 0 40 0 0 49 0 0 31 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +131 0 0 249 202 0 255 246 0 255 247 0 +130 133 0 58 0 0 0 0 0 197 0 0 +94 0 0 127 0 0 38 0 0 0 0 0 +153 91 0 255 255 255 255 253 246 255 254 242 +255 254 245 255 255 255 255 255 255 255 255 255 +255 255 255 249 249 239 203 198 177 215 196 165 +231 223 196 247 244 227 251 245 253 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 241 255 252 243 255 255 244 +255 247 239 253 245 216 253 242 228 255 249 238 +250 241 231 249 241 228 246 238 225 250 240 227 +249 238 224 249 236 228 246 237 223 249 239 227 +246 239 227 244 235 225 244 235 223 247 235 224 +249 237 227 248 239 227 253 239 226 249 238 226 +253 240 228 253 238 229 253 240 227 252 238 226 +253 238 227 247 239 227 252 238 226 251 239 227 +255 246 238 255 255 255 198 228 198 0 0 0 +103 0 0 241 212 0 191 143 0 208 173 0 +203 173 156 231 201 104 144 122 0 0 0 0 +255 255 233 244 232 224 231 204 173 248 225 183 +255 248 231 255 243 239 238 223 189 235 217 185 +255 255 255 253 250 255 255 255 255 245 235 199 +244 235 204 255 246 235 250 243 242 233 222 194 +239 227 190 255 244 214 255 250 239 255 251 241 +243 233 184 255 245 241 251 238 233 231 216 189 +247 232 195 255 247 206 255 242 241 232 218 204 +214 198 189 214 191 151 227 225 176 245 236 206 +253 249 237 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +247 240 234 255 248 246 255 255 255 255 242 192 +217 196 134 81 8 0 0 0 0 0 0 0 +0 0 0 99 0 0 0 0 0 0 0 0 +2 14 0 0 0 0 160 33 0 146 101 0 +146 75 0 169 104 0 205 143 0 229 140 0 +225 160 0 235 150 0 232 154 0 231 130 0 +231 130 0 223 116 0 219 119 0 190 101 0 +193 85 0 150 29 0 40 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 221 172 0 +255 222 0 255 247 0 206 208 0 0 0 0 +16 0 0 41 0 0 147 0 0 83 4 0 +0 0 0 0 0 0 231 187 136 222 202 168 +185 159 153 169 144 122 116 95 0 132 111 60 +101 38 0 123 45 0 92 53 0 110 41 0 +95 2 0 113 75 0 137 108 0 97 53 0 +158 148 103 142 130 113 119 91 36 158 145 142 +169 159 119 214 189 168 198 197 180 161 155 147 +237 239 217 236 237 217 255 255 255 220 229 214 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 250 244 255 251 238 255 251 241 +255 249 237 253 242 232 249 241 230 251 239 228 +247 238 225 246 235 225 249 237 226 249 238 226 +250 238 224 252 237 228 254 241 228 250 239 227 +252 242 228 255 245 235 255 247 238 255 255 255 +214 221 196 113 130 111 10 0 0 118 0 0 +180 111 0 146 88 0 234 202 0 251 231 227 +204 161 0 187 152 0 127 164 0 191 148 9 +255 255 255 238 221 161 255 245 234 253 244 235 +233 218 197 242 221 184 255 249 235 255 255 255 +95 61 55 81 37 0 35 21 0 255 255 255 +254 244 239 232 219 208 233 210 183 245 237 213 +239 228 224 233 217 183 255 248 234 255 244 238 +238 227 217 239 219 185 241 229 197 255 253 231 +238 224 223 223 203 194 199 180 146 232 215 172 +237 225 172 255 250 234 255 247 239 251 242 236 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 251 244 233 255 255 255 +255 255 224 253 240 176 132 70 0 0 0 0 +0 0 0 34 0 0 0 0 0 16 0 0 +107 65 0 72 0 0 158 97 0 182 108 0 +233 177 0 227 145 0 240 186 0 245 189 0 +255 202 0 248 207 0 230 196 0 228 182 0 +239 213 0 246 216 0 236 217 0 237 205 0 +252 225 0 242 211 0 245 211 0 244 215 0 +240 206 0 249 218 0 255 213 0 253 203 0 +230 149 0 196 140 0 128 71 0 169 1 0 +242 215 0 236 191 0 249 204 0 234 225 0 +138 150 0 76 0 0 0 0 0 128 0 0 +62 0 0 155 24 0 0 0 0 0 0 0 +203 67 0 175 117 0 188 136 0 0 0 0 +205 169 0 107 17 0 94 20 0 114 16 0 +35 0 0 133 68 0 125 59 0 118 53 0 +93 0 0 92 25 0 158 75 0 99 45 0 +0 0 0 0 0 0 112 16 0 166 112 0 +42 0 0 0 0 0 95 23 0 90 6 0 +50 33 0 31 0 0 93 90 14 85 66 4 +142 138 112 193 187 169 214 226 208 182 193 171 +204 207 197 245 243 233 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 224 232 214 213 219 205 0 26 0 +81 0 0 74 0 0 177 69 0 138 2 0 +162 87 0 173 143 0 204 193 166 187 155 30 +255 236 15 38 0 0 0 0 0 255 255 255 +254 240 232 248 240 238 241 228 217 234 220 178 +245 233 200 255 248 245 209 221 239 64 19 0 +255 246 194 255 246 214 168 191 0 188 154 172 +253 251 238 237 219 178 229 221 202 230 206 163 +245 233 198 253 245 240 228 215 201 219 201 170 +244 233 197 247 239 236 238 219 213 202 192 165 +216 195 155 218 210 170 255 243 209 255 251 238 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 239 214 194 110 +23 0 0 0 0 0 0 0 0 63 0 0 +0 0 0 146 164 0 106 0 0 126 0 0 +219 144 0 237 187 0 245 191 0 244 205 0 +226 183 0 238 214 0 239 220 97 246 229 0 +238 212 0 222 189 0 249 231 0 239 229 0 +232 198 0 239 201 0 241 219 0 233 208 0 +248 206 0 247 227 0 236 205 0 242 217 0 +239 216 0 235 193 0 243 216 0 251 216 0 +238 211 0 245 203 0 255 223 0 216 187 0 +241 199 0 245 202 0 243 205 0 246 197 0 +249 215 0 230 242 0 0 0 0 0 0 0 +113 0 0 196 206 0 101 0 0 0 0 0 +45 0 0 239 141 0 101 38 0 178 25 0 +195 105 0 173 69 0 137 14 0 99 0 0 +139 12 0 107 0 0 113 0 0 76 0 0 +96 0 0 116 0 0 59 0 0 122 0 0 +154 0 0 61 0 0 88 0 0 0 0 0 +75 0 0 40 0 0 73 0 0 79 0 0 +21 0 0 41 0 0 44 0 0 130 34 0 +113 37 0 42 0 0 79 0 0 39 0 0 +72 24 0 35 0 0 0 0 0 62 0 0 +95 67 0 119 105 42 96 78 38 141 128 116 +121 112 85 88 68 0 111 103 89 76 65 0 +0 0 0 39 0 0 128 0 0 81 0 0 +148 0 0 165 90 0 184 114 0 186 139 0 +222 179 0 182 147 0 216 186 0 216 155 0 +176 97 0 0 0 0 216 177 116 255 255 255 +245 238 221 231 211 178 236 224 191 255 247 240 +255 255 255 185 199 236 127 62 0 255 248 136 +207 190 102 140 84 0 11 9 0 244 192 194 +242 232 217 234 217 185 249 234 199 242 234 228 +230 214 194 215 198 160 244 227 187 243 234 220 +227 214 204 203 179 133 204 188 157 245 229 186 +253 247 235 247 239 229 255 246 235 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 154 140 0 14 0 0 0 0 0 +0 0 0 79 0 0 37 35 0 135 0 0 +174 146 0 200 92 0 251 218 0 244 208 0 +233 211 0 235 215 137 251 233 187 249 237 130 +236 223 36 220 199 0 248 213 47 245 232 0 +247 228 33 239 223 26 249 228 0 245 227 41 +243 230 0 244 214 0 241 223 0 249 228 0 +249 221 0 251 228 0 242 224 0 244 218 0 +249 223 0 243 220 0 243 218 0 246 218 0 +241 215 0 243 210 0 238 205 0 238 207 0 +227 189 0 242 193 0 247 211 0 237 190 0 +238 194 0 255 203 0 248 234 0 114 139 0 +0 0 0 134 0 0 191 120 0 190 54 0 +0 0 0 0 0 0 238 183 0 130 102 0 +138 22 0 142 53 0 183 121 0 138 44 0 +188 149 0 162 43 0 101 0 0 192 149 0 +128 0 0 156 86 0 160 60 0 150 7 0 +182 155 0 160 64 0 132 0 0 174 35 0 +143 41 0 73 0 0 124 0 0 164 64 0 +179 101 0 116 41 0 166 59 0 137 55 0 +81 0 0 169 78 0 147 39 0 144 48 0 +112 0 0 128 0 0 204 106 0 31 0 0 +140 40 0 108 0 0 85 10 0 60 0 0 +30 0 0 20 0 0 121 0 0 76 0 0 +165 75 0 154 36 0 182 85 0 138 28 0 +218 171 0 189 130 0 201 138 0 190 151 0 +199 164 0 185 147 0 219 204 73 225 147 23 +59 13 0 131 43 0 255 255 255 250 241 229 +248 237 219 252 241 228 255 255 255 218 221 239 +127 103 130 175 126 0 201 201 184 134 101 0 +6 0 0 86 0 0 164 125 0 240 241 223 +244 235 209 255 248 242 225 214 198 228 203 173 +233 221 183 248 229 219 208 198 178 204 182 136 +220 212 175 243 237 207 251 244 228 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 247 244 216 131 +0 0 0 0 0 0 0 0 0 93 0 0 +47 0 0 146 0 0 205 129 0 243 198 0 +247 209 0 241 210 19 233 206 0 229 204 90 +243 226 139 239 219 100 247 224 139 251 238 110 +249 233 132 249 232 3 242 222 0 255 243 82 +254 239 44 255 248 124 255 244 0 255 255 56 +255 253 51 255 244 0 255 237 0 255 231 0 +255 214 0 236 202 0 255 219 0 255 227 0 +255 226 0 255 232 0 255 250 0 255 252 0 +255 246 0 255 241 0 255 243 0 239 206 0 +248 215 0 240 209 0 238 201 0 245 206 0 +240 196 0 237 199 0 241 196 0 255 223 0 +184 196 0 0 0 0 88 0 0 255 255 127 +134 41 0 153 97 0 0 0 0 239 193 0 +240 157 0 230 189 0 132 79 0 194 106 0 +205 128 0 217 193 0 105 0 0 224 172 0 +226 184 0 90 9 0 187 126 0 222 166 0 +203 134 0 187 146 0 144 52 0 190 159 0 +201 139 0 206 164 0 193 164 0 129 0 0 +213 153 0 204 152 0 189 137 0 164 70 0 +110 9 0 163 81 0 151 105 0 172 69 0 +174 95 0 147 59 0 136 37 0 91 0 0 +131 27 0 111 0 0 183 86 0 170 96 0 +166 39 0 165 38 0 190 111 0 190 98 0 +172 99 0 201 139 0 137 75 0 168 76 0 +206 158 0 178 104 0 181 157 0 220 161 0 +213 195 0 219 189 47 229 196 136 242 206 57 +57 0 0 217 211 206 255 255 255 255 253 246 +255 255 255 236 235 252 129 106 115 167 104 0 +222 223 74 95 10 0 56 0 0 178 145 12 +251 249 177 255 251 199 255 255 255 251 239 231 +216 204 181 212 192 163 241 226 196 232 220 209 +212 195 170 209 186 148 229 215 176 243 233 201 +247 241 228 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 246 236 208 67 0 0 0 0 0 +0 0 0 35 0 0 91 0 0 147 22 0 +255 179 0 244 207 0 234 206 0 236 209 0 +238 216 0 253 232 93 249 240 128 247 231 129 +252 238 157 250 242 156 253 241 164 253 234 136 +255 245 130 255 239 146 255 226 0 253 188 14 +218 197 0 176 139 0 125 110 0 71 0 0 +156 13 0 0 0 0 0 0 0 6 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 42 0 0 15 0 0 104 0 0 +114 0 0 171 67 0 185 48 0 227 143 0 +247 171 0 255 197 0 247 220 0 244 205 0 +247 208 0 244 209 0 235 192 0 230 191 0 +255 221 0 149 181 0 0 0 0 250 186 52 +255 238 227 218 176 31 55 50 0 160 137 0 +154 148 0 100 0 0 189 142 0 171 130 0 +131 37 0 160 119 0 196 149 0 97 0 0 +193 172 0 194 150 0 153 108 0 193 120 0 +170 101 0 200 137 0 187 133 0 171 101 0 +145 54 0 188 113 0 178 130 0 211 167 0 +82 0 0 149 79 0 149 79 0 166 87 0 +173 112 0 154 81 0 186 109 0 177 117 0 +196 133 0 186 141 0 103 0 0 222 172 0 +172 115 0 195 145 0 92 0 0 170 139 0 +197 127 0 165 139 0 130 20 0 179 99 0 +203 159 0 204 161 0 214 164 0 131 13 0 +231 183 0 197 147 0 255 251 255 173 116 0 +180 135 0 188 140 0 232 191 47 214 193 184 +124 91 0 139 46 0 152 142 154 140 119 130 +113 65 0 127 92 0 255 241 163 139 94 17 +36 0 0 176 148 0 255 255 255 246 237 246 +229 209 189 246 237 232 231 218 211 215 194 156 +244 227 201 243 231 215 206 188 166 213 198 158 +236 218 185 243 237 209 254 245 236 249 241 236 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +185 151 121 0 0 0 0 0 0 0 0 0 +94 0 0 215 132 0 253 206 0 247 216 0 +235 210 0 246 220 34 250 234 75 246 228 67 +241 219 37 246 224 130 252 242 163 254 244 156 +255 238 132 255 241 107 255 218 194 232 221 0 +147 76 0 139 67 0 169 139 0 0 0 0 +101 0 0 8 0 0 115 0 0 69 0 0 +0 0 0 169 80 0 0 0 0 29 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +24 0 0 70 0 0 182 0 0 221 126 0 +242 146 0 246 209 0 244 219 0 237 209 0 +235 190 0 255 219 0 220 241 0 71 0 0 +255 240 161 226 189 143 255 238 161 32 0 0 +76 0 0 222 153 0 228 157 0 199 161 0 +130 0 0 158 66 0 152 87 0 141 17 0 +224 159 0 227 185 0 137 104 0 161 73 0 +169 102 0 222 167 0 205 153 0 95 48 0 +254 203 0 149 87 0 160 64 0 207 162 0 +118 8 0 209 177 0 196 154 0 116 49 0 +213 159 0 174 127 0 167 65 0 178 110 0 +159 86 0 196 139 0 63 0 0 143 68 0 +151 67 0 86 0 0 123 10 0 197 127 0 +144 45 0 138 70 0 179 115 0 205 151 0 +192 142 0 192 140 0 194 126 0 150 58 0 +180 127 0 201 162 0 182 103 0 155 70 0 +189 127 0 148 68 0 214 189 0 139 53 0 +105 0 0 25 0 0 135 61 0 233 229 74 +254 234 210 165 125 6 98 68 0 46 0 0 +237 216 136 254 241 249 225 211 183 241 218 179 +230 224 197 212 184 147 235 219 176 245 237 235 +212 195 171 201 187 162 236 222 185 252 245 232 +252 242 235 249 244 233 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 29 0 0 +0 0 0 0 0 0 45 0 0 201 80 0 +249 195 0 241 204 0 243 217 53 244 217 0 +241 223 45 242 217 0 249 226 94 247 239 152 +251 246 147 255 248 208 255 237 114 255 226 109 +237 209 0 89 0 0 80 82 0 103 3 0 +60 103 0 0 0 0 111 0 0 180 205 0 +44 0 0 143 0 0 50 0 0 78 0 0 +30 0 0 0 0 0 177 26 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 37 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +48 0 0 181 0 0 210 0 0 226 133 0 +235 179 0 244 210 0 255 208 0 208 219 0 +90 0 0 255 229 181 243 208 174 169 131 0 +93 0 0 169 52 0 138 48 0 163 100 0 +209 174 0 195 132 0 198 164 0 204 158 0 +153 83 0 213 149 0 169 88 0 198 186 0 +154 98 0 184 123 0 138 92 0 219 180 0 +139 84 0 209 138 0 197 169 0 197 142 0 +200 149 0 177 109 0 188 154 0 214 150 0 +207 148 0 159 96 0 197 127 0 156 105 0 +207 113 0 161 129 0 209 181 0 146 102 0 +206 151 0 189 157 0 175 109 0 165 92 0 +197 157 0 146 39 0 167 112 0 157 82 0 +204 137 0 154 101 0 162 57 0 220 183 0 +200 176 112 136 109 0 244 202 222 174 174 0 +219 174 0 192 166 0 217 143 0 138 130 0 +160 97 0 111 70 0 138 67 0 117 13 0 +157 138 0 95 0 0 39 0 0 255 255 214 +240 229 215 235 217 181 240 233 219 214 190 169 +235 213 182 246 237 220 226 217 201 211 184 150 +232 226 183 249 238 216 255 243 239 247 241 228 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 0 0 0 0 0 +0 0 0 126 0 0 255 220 0 250 220 0 +241 231 68 240 216 0 242 222 30 248 223 23 +247 232 55 252 233 57 254 244 153 255 244 146 +255 241 0 191 157 0 146 65 0 82 0 0 +68 0 0 0 0 0 87 0 0 76 0 0 +173 24 0 118 118 0 111 0 0 97 0 0 +147 134 0 40 0 0 134 0 0 86 0 0 +145 1 0 100 0 0 33 0 0 135 41 0 +118 4 0 113 64 0 123 0 0 134 39 0 +140 74 0 91 0 0 73 0 0 93 0 0 +0 0 0 67 0 0 5 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 152 0 0 +213 0 0 239 176 0 244 203 0 255 212 0 +120 162 0 71 0 0 255 255 255 230 202 125 +255 210 61 0 0 0 198 160 0 156 99 0 +198 159 0 160 124 0 152 109 0 217 182 3 +235 206 145 227 183 0 191 159 0 255 225 255 +230 214 0 228 191 0 187 124 0 255 237 255 +216 183 0 211 191 0 159 68 0 232 207 174 +212 185 0 192 178 0 134 30 0 237 220 137 +217 176 0 162 121 0 147 97 0 186 101 0 +191 147 0 166 105 0 181 116 0 135 79 0 +140 80 0 167 90 0 144 92 0 176 128 0 +198 129 0 147 117 0 224 169 0 163 134 0 +133 40 0 204 137 0 161 140 0 197 139 0 +192 128 0 164 76 0 189 150 0 126 0 0 +203 160 0 103 0 0 212 185 0 144 110 0 +153 44 0 213 183 0 137 60 0 189 87 0 +89 0 0 164 54 0 22 0 0 255 255 246 +243 235 206 220 198 190 222 200 160 244 226 192 +222 206 201 210 187 147 225 211 158 254 243 233 +255 246 238 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 248 235 226 255 255 255 +196 186 159 14 0 0 0 0 0 54 0 0 +198 100 0 249 205 0 239 212 0 238 207 0 +251 230 71 247 231 35 248 231 67 252 237 62 +252 239 154 255 247 168 255 215 0 140 108 0 +27 0 0 150 0 0 0 0 0 28 0 0 +130 4 0 125 0 0 142 4 0 182 162 0 +102 0 0 117 0 0 125 131 0 154 61 0 +174 128 0 190 166 23 226 218 120 243 230 39 +248 232 54 255 240 81 255 255 62 255 249 10 +255 246 0 255 233 0 255 245 0 255 251 0 +255 236 0 253 236 0 255 219 0 249 214 0 +255 220 0 229 179 0 226 165 0 180 42 0 +156 0 0 145 0 0 82 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 220 0 0 238 96 0 246 221 0 +255 220 0 123 156 0 211 159 182 252 228 176 +246 208 141 158 134 0 117 46 0 142 81 0 +177 100 0 255 221 0 225 204 0 149 67 0 +244 228 219 220 178 0 175 172 0 100 0 0 +194 145 80 222 185 0 94 0 0 198 139 80 +219 184 0 183 156 0 158 85 0 125 35 0 +203 174 220 229 195 0 190 132 0 132 107 121 +214 177 0 225 182 0 208 192 0 154 63 0 +210 180 250 226 207 0 242 195 0 224 190 0 +209 140 0 255 255 255 223 185 0 232 186 0 +192 158 0 217 164 90 215 181 0 223 190 0 +213 170 0 203 141 0 186 99 0 139 90 0 +181 136 0 175 128 0 204 162 0 200 150 0 +161 127 0 180 112 0 173 116 0 122 0 0 +143 149 0 152 82 0 140 34 0 100 0 0 +65 0 0 166 61 0 0 0 0 255 255 245 +244 230 217 235 219 182 227 208 193 205 184 161 +230 210 157 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 252 240 227 255 255 255 204 206 181 +10 0 0 0 0 0 119 0 0 255 191 0 +246 223 0 236 222 0 236 215 0 230 199 0 +231 214 6 244 231 19 244 232 107 255 249 91 +255 210 0 209 165 0 0 0 0 148 38 0 +56 108 0 0 0 0 151 0 0 56 0 0 +108 0 0 86 0 0 131 10 0 137 48 0 +188 189 41 240 228 158 255 255 212 255 255 216 +255 254 221 255 248 197 252 240 204 253 244 164 +255 243 113 255 250 165 255 246 129 255 245 157 +255 248 59 255 252 73 255 244 1 255 243 0 +255 246 12 255 230 0 252 223 0 255 225 0 +249 228 0 255 231 0 248 227 0 255 240 0 +247 231 0 255 226 0 255 212 0 245 176 0 +238 152 0 178 79 0 124 0 0 15 0 0 +0 0 0 0 0 0 74 0 0 244 6 0 +251 226 0 255 236 0 32 41 0 255 255 255 +243 213 164 233 220 105 52 0 0 152 159 0 +175 142 0 138 99 0 208 166 0 186 138 0 +151 132 0 139 4 0 255 255 131 221 184 0 +249 221 0 170 78 0 255 255 230 254 229 0 +106 30 0 255 255 255 241 231 0 255 241 0 +126 97 0 208 154 202 255 240 0 232 201 0 +172 158 0 212 177 80 189 165 0 180 142 0 +201 154 0 178 129 0 197 177 0 192 161 0 +96 6 0 107 48 0 247 204 0 206 171 0 +144 74 0 172 103 78 187 149 154 181 122 0 +239 217 0 172 90 0 172 83 0 250 242 168 +203 166 0 225 174 0 176 109 0 151 78 0 +169 94 0 164 104 0 173 124 0 170 86 0 +122 3 0 125 24 0 170 72 0 136 56 0 +98 0 0 40 0 0 119 0 0 127 106 0 +255 245 255 209 191 166 219 204 163 248 236 208 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 240 227 255 255 255 226 221 193 10 0 0 +0 0 0 144 0 0 255 227 0 251 227 47 +249 236 83 243 231 66 249 230 81 246 228 0 +246 235 151 251 239 94 255 242 24 171 114 0 +0 0 0 0 0 0 44 0 0 0 0 0 +62 0 0 173 103 0 68 0 0 97 0 0 +169 124 0 223 203 121 246 229 153 255 255 224 +255 252 209 255 244 196 248 239 193 254 244 191 +255 249 207 255 250 200 255 255 230 255 255 174 +251 224 57 216 193 83 212 192 16 212 168 51 +160 132 0 182 104 0 169 123 0 175 123 0 +178 137 0 160 133 0 184 151 0 193 158 0 +215 177 0 245 191 0 249 210 0 255 230 0 +255 249 0 255 236 0 255 232 0 254 227 0 +250 225 0 255 229 0 241 206 0 246 148 0 +228 129 0 129 0 0 46 0 0 0 0 0 +255 152 0 251 207 0 210 210 0 174 118 141 +255 255 255 254 223 197 168 154 0 36 0 0 +144 0 0 81 0 0 205 163 0 255 251 202 +228 185 0 123 77 0 204 157 188 201 180 145 +191 165 0 168 152 0 117 22 0 142 66 0 +219 213 0 95 0 0 131 67 0 154 92 0 +133 116 0 143 43 0 123 104 0 187 146 0 +172 167 0 135 2 0 194 195 26 192 145 0 +235 216 0 102 0 0 177 166 154 207 211 0 +132 27 0 255 255 255 221 203 0 168 141 0 +164 65 0 227 222 0 206 151 0 230 193 0 +159 125 0 186 142 0 146 103 0 195 128 0 +222 190 0 197 157 0 181 105 72 214 211 101 +223 188 0 228 176 0 135 111 0 166 108 0 +142 78 0 138 0 0 171 139 0 132 52 0 +154 29 0 102 5 0 120 0 0 0 0 0 +188 149 57 255 250 228 251 246 237 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 156 137 97 0 0 0 0 0 0 +194 27 0 242 205 0 244 221 0 238 213 0 +245 218 0 243 226 5 247 229 29 245 229 2 +255 231 77 224 156 0 82 0 0 0 0 0 +167 118 0 0 0 0 8 0 0 206 80 0 +39 0 0 107 0 0 208 204 120 255 255 171 +255 252 208 254 250 220 253 241 196 244 236 200 +255 248 201 255 255 214 255 255 222 255 236 187 +220 192 160 183 198 100 82 0 0 126 66 0 +0 0 0 70 7 0 18 0 0 0 0 0 +110 0 0 0 0 0 78 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +87 0 0 147 52 0 181 148 0 248 193 0 +255 230 0 255 242 0 249 210 0 235 208 0 +255 222 0 235 180 0 255 198 0 204 100 0 +193 54 0 226 127 0 255 250 0 55 73 0 +255 216 240 255 255 255 227 206 43 93 7 0 +218 146 0 144 118 0 94 0 0 154 116 0 +121 59 0 172 124 0 193 169 0 110 0 0 +90 0 0 172 91 0 52 0 0 132 9 0 +145 73 0 131 87 0 15 0 0 221 208 5 +152 64 0 99 61 0 151 36 0 139 73 0 +140 23 0 63 0 0 128 52 0 200 188 0 +156 105 0 29 0 0 159 58 0 144 53 0 +45 0 0 131 15 0 173 114 0 122 85 0 +102 0 0 194 180 26 171 107 0 180 180 0 +166 41 0 249 255 184 228 196 0 157 143 0 +226 190 0 248 213 0 228 202 0 134 102 0 +205 133 0 199 175 0 183 165 0 179 93 0 +227 220 0 187 192 0 117 0 0 126 77 0 +130 74 0 121 0 0 141 0 0 75 0 0 +0 0 0 255 255 255 251 242 232 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +181 177 140 16 0 0 0 0 0 137 0 0 +255 244 0 243 221 0 249 234 49 250 230 57 +245 228 86 242 226 0 253 234 89 255 227 0 +191 146 0 12 0 0 0 0 0 12 0 0 +53 0 0 98 0 0 102 3 0 141 69 0 +217 210 162 255 255 228 255 250 211 249 243 202 +250 241 192 252 243 208 255 248 209 255 255 230 +218 216 173 163 164 101 84 21 0 0 0 0 +0 0 0 116 0 0 46 81 0 0 0 0 +165 118 0 111 0 0 0 0 0 0 0 0 +2 0 0 22 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 50 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 156 86 0 228 181 0 255 229 0 +251 221 0 240 208 0 241 190 0 250 220 0 +237 207 0 246 194 0 220 180 0 238 228 0 +101 49 0 255 241 255 255 245 254 156 112 0 +130 0 0 13 0 0 121 0 0 217 183 0 +167 122 0 208 149 0 0 0 0 255 255 255 +171 136 0 186 110 0 0 0 0 223 221 184 +186 193 0 96 0 0 0 0 0 205 221 165 +125 29 0 71 0 0 193 185 168 146 121 0 +141 0 0 0 0 0 178 134 79 100 84 0 +129 0 0 0 0 0 234 233 220 116 6 0 +62 0 0 36 0 0 152 103 104 86 0 0 +169 80 0 0 0 0 255 255 206 105 0 0 +180 140 0 94 0 0 172 160 0 100 0 0 +84 0 0 161 135 86 214 153 0 66 0 0 +225 179 104 213 236 0 198 144 0 242 224 0 +185 140 0 208 204 0 154 99 0 248 229 140 +147 113 0 119 0 0 107 0 0 76 0 0 +7 0 0 193 186 154 255 255 244 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 231 246 194 +40 0 0 0 0 0 145 0 0 247 211 0 +242 221 0 239 215 0 243 213 0 248 228 35 +249 230 72 252 243 98 255 201 0 152 111 0 +0 0 0 141 0 0 77 37 0 16 0 0 +50 0 0 55 0 0 241 227 159 255 255 216 +255 251 203 254 239 184 248 237 192 255 243 202 +255 255 224 226 214 176 189 206 119 60 0 0 +40 0 0 119 14 0 75 0 0 170 0 0 +75 0 0 0 0 0 196 120 0 0 0 0 +90 0 0 0 0 0 97 0 0 0 0 0 +0 0 0 53 0 0 0 0 0 84 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 33 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +163 1 0 255 204 0 252 224 0 240 203 0 +250 205 0 255 204 0 144 122 0 255 229 0 +100 129 0 232 193 149 252 229 223 238 211 50 +0 0 0 130 0 0 126 42 0 128 34 0 +179 191 0 138 10 0 13 0 0 160 106 0 +10 0 0 63 0 0 120 0 0 100 0 0 +127 0 0 69 0 0 175 0 0 23 0 0 +166 110 0 125 0 0 40 0 0 100 0 0 +157 137 0 50 0 0 0 0 0 227 194 37 +133 0 0 0 0 0 143 21 0 144 99 0 +148 28 0 0 0 0 184 123 0 118 0 0 +160 0 0 0 0 0 155 76 0 143 12 0 +5 0 0 117 0 0 120 80 0 97 0 0 +195 223 140 114 32 0 200 163 0 70 0 0 +92 0 0 85 0 0 129 27 0 206 185 96 +214 158 0 110 60 0 247 213 0 226 195 0 +180 163 0 203 123 0 206 145 0 82 0 0 +115 0 0 68 7 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 212 211 120 5 0 0 +0 0 0 193 0 0 244 190 0 255 250 49 +249 230 0 250 229 39 252 232 79 248 231 0 +255 242 24 233 189 0 0 0 0 68 0 0 +97 0 0 25 0 0 134 83 0 81 0 0 +203 178 87 255 255 194 255 249 203 250 238 160 +251 238 181 255 247 197 255 254 194 215 220 170 +110 56 0 0 0 0 135 0 0 144 0 0 +64 0 0 146 0 0 15 47 0 37 0 0 +141 63 0 39 0 0 64 0 0 198 109 0 +132 0 0 150 137 0 109 90 0 220 183 0 +184 167 0 208 199 82 238 185 0 225 197 0 +237 174 0 233 204 0 200 139 0 209 139 0 +191 145 0 188 113 0 156 117 0 107 11 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 30 0 0 153 0 0 250 207 0 +250 209 0 241 202 0 250 205 0 245 201 0 +220 208 0 189 137 17 241 188 200 255 243 170 +93 0 0 123 61 0 0 0 0 139 0 0 +0 0 0 132 0 0 197 182 0 103 0 0 +120 12 0 215 197 104 168 114 0 186 66 0 +0 0 0 255 255 232 163 132 0 65 0 0 +181 157 60 151 129 0 177 97 0 39 0 0 +170 184 96 80 0 0 0 0 0 129 63 0 +115 28 0 87 0 0 98 0 0 16 0 0 +237 251 140 84 0 0 207 234 232 82 0 0 +155 0 0 0 0 0 144 106 4 120 41 0 +0 0 0 229 203 80 125 69 0 18 0 0 +101 0 0 166 178 0 127 5 0 25 0 0 +98 0 0 253 251 222 128 59 0 72 0 0 +142 120 0 121 0 0 66 0 0 195 145 0 +114 0 0 246 253 38 157 109 0 222 169 0 +130 0 0 0 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 0 0 0 0 0 +81 0 0 255 236 0 240 220 0 245 216 0 +242 212 0 250 228 25 247 233 116 255 236 0 +233 179 0 160 127 0 110 0 0 0 0 0 +19 0 0 25 0 0 73 3 0 255 247 186 +255 255 202 254 242 179 251 240 195 255 244 190 +255 255 217 204 215 134 0 0 0 96 0 0 +99 0 0 191 40 0 129 89 0 125 0 0 +111 0 0 49 0 0 161 124 0 85 0 0 +167 41 0 208 143 0 248 219 80 241 210 124 +255 245 130 255 250 177 255 255 185 255 251 149 +255 254 207 255 250 169 255 247 0 255 250 95 +255 244 0 255 227 0 255 239 0 255 243 0 +255 232 0 255 242 0 255 230 0 255 245 0 +255 237 0 255 216 0 232 207 0 140 115 0 +99 9 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 163 0 0 +254 196 0 246 191 0 241 202 0 239 201 0 +255 213 0 83 53 0 204 152 58 251 222 184 +175 147 0 118 16 0 64 28 0 173 0 0 +101 105 0 120 0 0 147 127 0 209 237 0 +52 0 0 147 40 0 41 0 0 85 0 0 +173 100 0 79 0 0 0 0 0 172 123 0 +91 0 0 102 0 0 0 0 0 193 189 0 +119 0 0 208 93 0 0 0 0 143 0 0 +170 177 0 177 91 0 0 0 0 99 0 0 +195 187 0 86 0 0 119 0 0 197 125 0 +173 127 0 97 0 0 170 55 0 188 79 0 +34 0 0 118 0 0 113 0 0 21 0 0 +70 0 0 152 54 0 57 0 0 118 0 0 +214 191 0 114 40 0 186 116 0 130 71 0 +107 51 0 92 3 0 124 56 0 125 62 0 +175 100 0 85 0 0 114 0 0 170 195 0 +87 0 0 0 0 0 255 255 244 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 143 130 0 0 0 0 0 0 0 +252 149 0 253 237 0 250 234 43 248 231 9 +250 233 83 249 229 0 255 255 20 146 92 0 +0 0 0 20 0 0 72 0 0 33 0 0 +118 0 0 214 197 56 255 255 196 255 247 161 +249 240 186 253 242 178 255 255 239 197 203 124 +82 8 0 98 0 0 148 104 0 124 0 0 +163 0 0 97 116 0 145 0 0 82 1 0 +111 0 0 179 165 84 216 193 149 255 255 181 +255 255 218 255 251 210 255 251 193 255 249 187 +255 247 187 255 252 155 255 253 187 255 255 150 +255 228 112 255 241 98 254 234 0 250 214 25 +226 194 0 234 205 0 221 172 0 215 174 0 +237 192 0 242 193 0 255 232 0 253 201 0 +255 244 0 255 242 0 255 249 0 255 237 0 +255 255 0 255 246 0 183 170 0 136 111 0 +0 0 0 0 0 0 0 0 0 0 0 0 +146 0 0 246 171 0 244 200 0 244 202 0 +255 218 0 109 139 0 211 170 46 220 161 137 +202 149 0 13 0 0 192 106 0 69 0 0 +126 0 0 104 44 0 209 125 0 56 0 0 +97 0 0 183 164 0 157 28 0 104 10 0 +188 164 0 218 153 0 0 0 0 178 159 89 +237 209 105 177 179 0 19 0 0 111 40 0 +207 155 0 106 14 0 44 0 0 113 0 0 +84 0 0 144 151 0 120 0 0 49 0 0 +78 0 0 114 0 0 77 0 0 136 138 70 +121 0 0 0 0 0 185 191 0 108 7 0 +0 0 0 155 0 0 255 255 198 0 0 0 +181 0 0 150 87 0 150 0 0 33 0 0 +173 132 61 0 0 0 129 0 0 204 200 0 +0 0 0 252 255 38 84 0 0 127 0 0 +143 33 0 103 0 0 205 116 0 34 0 0 +123 0 0 0 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 186 0 0 0 0 0 0 207 48 0 +238 203 0 249 228 18 245 218 0 247 230 60 +249 232 27 255 254 0 221 165 0 0 0 0 +100 0 0 0 0 0 25 0 0 0 0 0 +235 216 66 255 254 168 251 234 167 249 238 160 +255 248 198 253 255 204 112 66 0 66 8 0 +167 101 0 121 0 0 158 0 0 204 134 0 +59 0 0 135 1 0 93 34 0 217 213 136 +255 255 213 255 255 209 255 245 188 255 244 192 +255 246 192 255 252 202 255 255 193 249 250 180 +215 200 131 194 159 0 127 116 0 103 0 0 +106 75 0 0 0 0 32 0 0 0 0 0 +0 0 0 20 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +31 0 0 87 0 0 135 52 0 208 153 0 +226 137 0 255 237 0 255 241 0 255 255 0 +254 234 0 142 137 0 69 24 0 0 0 0 +0 0 0 26 0 0 255 224 0 245 204 0 +246 207 0 211 204 0 188 149 65 203 139 0 +222 116 0 2 0 0 40 0 0 229 163 0 +0 0 0 97 0 0 242 248 134 162 99 0 +0 0 0 179 134 70 192 188 0 103 23 0 +13 0 0 169 101 0 221 148 0 131 88 0 +58 0 0 166 129 0 220 156 0 115 11 0 +0 0 0 248 198 0 222 199 0 54 14 0 +194 167 0 173 85 0 114 59 0 98 0 0 +202 182 0 193 131 0 78 0 0 173 131 0 +173 98 0 110 0 0 196 170 0 166 90 0 +212 112 0 96 0 0 135 32 0 125 0 0 +159 82 0 155 68 0 28 0 0 19 0 0 +209 194 61 171 100 0 56 0 0 152 18 0 +92 0 0 114 0 0 0 0 0 165 16 0 +160 42 0 179 171 0 193 184 0 146 0 0 +72 0 0 0 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 251 241 188 +103 0 0 0 0 0 202 29 0 235 199 0 +249 230 0 244 226 19 244 228 85 247 232 51 +255 240 61 226 184 0 0 0 0 0 0 0 +0 0 0 70 0 0 47 0 0 252 212 51 +255 255 173 244 228 128 245 228 132 255 246 150 +176 192 116 94 0 0 145 138 0 179 57 0 +164 143 0 162 56 0 151 75 0 25 0 0 +158 71 0 246 247 185 255 255 223 255 251 198 +249 237 184 251 241 193 255 255 194 255 252 211 +225 222 135 168 195 75 80 0 0 129 0 0 +39 0 0 0 0 0 168 69 0 0 0 0 +44 0 0 98 12 0 0 0 0 140 12 0 +0 0 0 0 0 0 0 0 0 0 0 0 +60 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 151 39 0 187 135 0 +255 241 0 255 227 0 255 255 0 208 196 0 +0 0 0 0 0 0 184 53 0 253 218 0 +239 192 0 255 238 0 86 0 0 255 219 203 +184 169 0 116 16 0 87 0 0 97 0 0 +233 183 0 141 71 0 170 146 0 224 168 0 +0 0 0 210 178 0 208 132 0 251 181 0 +0 0 0 211 126 0 140 71 0 237 192 0 +10 0 0 149 95 0 128 27 0 163 96 0 +151 73 0 107 0 0 181 106 0 186 156 0 +85 0 0 176 135 0 130 60 0 52 0 0 +170 140 0 184 106 0 63 0 0 216 201 138 +139 61 0 87 0 0 139 90 0 108 0 0 +122 74 0 106 0 0 219 240 4 203 172 0 +101 5 0 186 158 0 185 65 0 61 0 0 +117 0 0 125 0 0 98 0 0 199 217 0 +170 121 0 134 0 0 196 172 0 141 0 0 +89 0 0 167 33 0 91 0 0 186 198 0 +75 0 0 7 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 105 113 0 +0 0 0 76 0 0 255 212 0 240 216 0 +236 217 0 241 225 56 245 229 123 255 249 36 +190 183 0 0 0 0 23 0 0 0 0 0 +29 0 0 37 0 0 255 255 182 251 242 155 +247 234 159 246 234 140 255 255 223 190 172 0 +55 26 0 36 0 0 87 0 0 139 0 0 +157 0 0 92 0 0 111 0 0 209 190 2 +255 255 228 252 246 174 248 235 184 255 244 188 +255 255 210 240 234 207 167 138 58 94 86 0 +82 0 0 159 21 0 124 0 0 74 0 0 +173 12 0 11 0 0 0 0 0 217 112 0 +0 0 0 5 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 71 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +73 0 0 232 117 0 250 183 0 255 221 0 +255 237 0 192 200 0 33 0 0 255 232 0 +238 194 0 255 235 0 0 0 0 211 128 0 +215 163 0 85 0 0 83 0 0 35 0 0 +134 99 0 0 0 0 153 73 0 185 105 0 +174 195 0 116 0 0 167 111 0 132 75 0 +224 178 0 168 112 0 198 139 0 177 135 0 +227 172 0 222 183 0 180 121 0 197 167 0 +233 179 4 155 134 0 205 152 0 210 166 0 +63 0 0 204 140 0 164 135 0 151 2 0 +186 129 0 201 141 0 105 44 0 244 237 183 +206 163 0 162 124 0 207 152 0 197 172 0 +193 126 0 173 151 0 107 2 0 211 179 0 +69 0 0 190 106 0 177 196 0 115 0 0 +172 123 0 182 170 0 160 86 0 136 33 0 +168 49 0 128 35 0 239 229 216 0 0 0 +186 71 0 172 175 0 98 0 0 74 60 0 +24 0 0 214 195 169 255 255 240 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 193 52 0 0 +0 0 0 231 88 0 255 239 0 247 230 46 +246 230 78 242 228 47 252 233 77 255 243 0 +3 0 0 31 0 0 0 0 0 65 0 0 +3 0 0 255 223 136 246 233 103 238 216 87 +242 224 118 255 248 140 155 144 0 0 0 0 +155 0 0 131 0 0 170 38 0 142 0 0 +89 0 0 212 175 64 255 255 215 255 251 175 +243 231 176 253 243 178 255 254 196 229 218 197 +114 59 0 125 100 0 96 0 0 172 0 0 +193 140 0 57 0 0 174 70 0 113 0 0 +0 0 0 79 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 81 0 0 94 0 0 +95 0 0 147 0 0 70 0 0 116 0 0 +50 0 0 85 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 90 0 0 227 140 0 +255 214 0 244 202 0 255 225 0 240 202 0 +239 192 0 255 226 0 97 143 0 99 0 0 +209 121 0 96 0 0 0 0 0 41 0 0 +95 0 0 49 0 0 234 192 0 166 151 0 +210 137 0 207 151 0 201 216 38 207 146 0 +182 143 0 231 186 80 172 138 0 176 148 0 +216 171 49 145 136 79 175 89 0 208 154 0 +149 97 0 176 124 0 192 136 0 126 92 0 +191 120 0 167 162 26 179 106 0 185 133 0 +162 77 0 206 134 0 175 123 0 221 199 242 +152 109 0 148 77 0 139 68 0 159 106 0 +178 116 0 162 107 0 141 99 0 135 89 0 +151 111 0 131 60 0 128 83 0 193 160 0 +177 102 0 89 0 0 170 107 0 194 137 0 +127 39 0 169 69 0 131 10 0 105 0 0 +85 0 0 105 13 0 106 0 0 123 29 0 +0 0 0 255 255 255 248 244 231 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 96 98 0 0 0 0 +0 0 0 255 227 0 249 226 0 244 217 0 +243 224 78 245 230 36 255 255 37 89 0 0 +3 0 0 0 0 0 90 0 0 58 0 0 +224 162 0 255 255 198 249 236 173 252 237 145 +255 255 240 60 62 0 21 0 0 116 0 0 +110 0 0 112 0 0 100 0 0 174 120 0 +242 232 154 255 255 171 253 239 175 250 239 148 +255 254 217 228 222 163 145 120 30 127 139 0 +101 0 0 67 0 0 153 4 0 93 0 0 +97 0 0 80 0 0 0 0 0 39 0 0 +23 0 0 132 69 0 210 168 0 217 179 0 +244 232 0 245 220 0 252 227 0 255 255 0 +255 245 0 255 245 0 255 247 0 249 236 0 +255 228 0 253 212 0 250 219 0 246 226 0 +200 146 0 192 182 0 73 11 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +224 33 0 229 177 0 235 197 0 243 192 0 +238 189 0 255 213 0 143 171 0 99 0 0 +178 49 0 93 0 0 0 0 0 70 0 0 +96 0 0 116 44 0 186 139 0 191 141 0 +229 180 0 209 185 0 77 0 0 203 152 0 +203 163 0 201 162 114 188 147 0 140 69 0 +210 148 0 204 159 0 155 112 0 200 150 0 +205 167 0 153 89 0 209 154 0 221 170 0 +189 142 0 201 148 0 223 184 0 186 144 0 +199 147 0 212 165 0 165 125 0 148 69 0 +220 160 0 173 119 0 174 124 0 124 56 0 +224 180 0 148 105 0 148 75 0 205 177 0 +131 66 0 127 66 0 91 0 0 210 165 0 +163 136 0 170 115 0 172 131 0 154 99 0 +176 137 0 94 0 0 96 0 0 183 142 0 +143 8 0 93 0 0 213 193 0 204 144 0 +0 0 0 255 255 255 247 240 228 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 236 234 255 255 208 0 0 0 0 0 0 +217 68 0 251 224 0 245 229 0 243 225 0 +246 232 104 255 236 0 191 164 0 35 0 0 +0 0 0 48 0 0 45 0 0 255 215 0 +251 223 88 235 218 1 238 215 84 255 239 33 +122 115 0 61 0 0 103 0 0 124 0 0 +96 0 0 77 0 0 187 132 0 255 255 201 +255 249 175 250 231 154 255 242 188 255 255 196 +163 141 0 0 0 0 85 0 0 153 13 0 +175 97 12 180 142 0 125 0 0 139 8 0 +28 0 0 134 42 0 182 174 14 223 213 46 +255 255 116 255 255 147 255 243 0 250 227 0 +248 221 0 246 218 0 241 222 0 241 196 0 +245 220 0 218 196 0 245 217 0 241 218 0 +238 200 0 229 196 0 246 218 0 227 183 0 +240 212 0 255 214 0 255 246 0 255 234 0 +247 235 0 218 179 0 108 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 161 0 0 251 200 0 222 175 0 +243 193 0 251 199 0 197 214 0 71 0 0 +157 3 0 73 0 0 56 0 0 70 0 0 +29 0 0 168 62 0 181 121 0 169 118 0 +110 23 0 154 83 0 219 190 0 57 0 0 +176 185 0 114 57 0 240 191 0 105 0 0 +130 68 0 199 144 0 123 31 0 194 160 0 +103 16 0 171 94 0 172 108 0 107 38 0 +213 214 0 143 54 0 116 15 0 166 85 0 +130 76 0 236 212 0 43 0 0 212 170 0 +172 115 0 165 145 0 110 0 0 198 153 0 +128 112 0 186 118 0 233 184 0 137 14 0 +212 217 0 85 0 0 112 0 0 58 0 0 +96 0 0 128 44 0 165 103 0 154 82 0 +159 113 0 141 0 0 200 211 0 113 0 0 +86 0 0 95 0 0 170 132 0 206 177 33 +200 191 0 185 164 190 255 255 246 248 238 225 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 251 241 201 197 0 0 0 0 155 0 0 +245 210 0 253 245 76 249 232 68 249 225 0 +255 240 94 228 210 0 1 0 0 14 0 0 +37 0 0 87 0 0 168 82 0 255 255 194 +250 235 147 250 230 102 255 252 162 202 198 0 +0 0 0 133 0 0 107 0 0 140 0 0 +76 0 0 211 171 0 255 243 138 248 230 117 +247 227 145 255 241 145 223 234 153 48 0 0 +75 0 0 120 83 0 119 0 0 184 0 0 +197 130 0 80 0 0 11 0 0 157 138 0 +238 212 107 255 255 125 255 245 121 255 240 142 +249 230 0 237 200 0 250 222 0 230 197 0 +246 217 0 231 193 0 248 229 0 231 205 0 +248 206 0 241 221 0 246 195 0 252 229 0 +224 186 0 239 214 0 233 197 0 216 189 0 +252 221 0 238 203 0 245 200 0 241 211 0 +255 222 0 246 211 0 255 222 0 255 249 0 +242 215 0 46 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 220 30 0 252 221 0 +242 206 0 250 198 0 237 224 0 0 0 0 +66 0 0 67 0 0 43 0 0 189 212 0 +104 0 0 44 0 0 40 0 0 171 124 0 +160 97 0 55 0 0 214 200 0 113 0 0 +217 166 0 19 0 0 2 0 0 0 0 0 +123 0 0 44 0 0 25 0 0 9 0 0 +102 0 0 117 0 0 38 0 0 160 9 0 +44 0 0 81 0 0 57 0 0 92 0 0 +14 0 0 137 0 0 40 0 0 29 0 0 +76 0 0 81 0 0 79 0 0 45 0 0 +77 0 0 29 0 0 128 37 0 61 0 0 +149 60 0 120 65 0 128 27 0 82 0 0 +76 0 0 125 26 0 132 32 0 188 146 0 +210 178 0 120 12 0 106 0 0 71 0 0 +86 0 0 160 31 0 189 128 0 162 129 0 +255 255 255 30 37 0 255 255 255 250 242 236 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 244 239 +255 254 187 67 0 0 0 0 0 253 153 0 +242 223 0 244 221 0 243 215 0 246 220 0 +255 255 0 0 0 0 46 0 0 80 0 0 +35 0 0 53 0 0 255 240 4 247 226 75 +245 224 121 255 242 49 179 163 0 0 0 0 +95 0 0 90 0 0 121 0 0 67 0 0 +255 241 67 255 248 172 250 238 158 251 233 131 +255 255 208 188 182 0 82 0 0 97 0 0 +98 26 0 201 1 0 197 77 0 119 0 0 +69 0 0 152 136 0 255 255 169 255 255 116 +255 240 107 248 224 113 248 235 50 237 212 62 +255 235 58 248 226 35 231 194 0 254 240 0 +235 195 0 221 193 0 255 220 0 238 209 0 +235 189 0 255 240 0 205 155 0 255 221 0 +219 187 0 253 228 0 217 173 0 215 199 0 +248 203 0 233 204 0 232 196 0 233 209 0 +237 185 0 229 192 0 215 172 0 249 223 0 +245 189 0 235 217 0 255 226 0 151 130 0 +0 0 0 0 0 0 0 0 0 255 120 0 +246 203 0 247 194 0 254 234 0 0 0 0 +24 0 0 170 12 0 17 0 0 76 0 0 +49 0 0 134 0 0 16 0 0 40 0 0 +137 0 0 79 6 0 103 0 0 55 0 0 +0 0 0 45 0 0 35 0 0 42 0 0 +31 0 0 28 0 0 19 0 0 32 0 0 +12 0 0 0 0 0 110 0 0 39 0 0 +104 0 0 4 0 0 136 2 0 167 114 0 +105 14 0 42 0 0 165 54 0 185 121 0 +79 0 0 173 85 0 120 0 0 174 55 0 +33 0 0 173 40 0 119 0 0 78 9 0 +123 0 0 75 0 0 30 0 0 3 0 0 +78 0 0 89 0 0 112 16 0 151 94 0 +220 163 0 212 200 0 109 2 0 47 0 0 +127 19 0 105 42 0 71 0 0 124 38 0 +213 171 0 251 235 56 117 69 78 255 247 255 +255 247 238 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 252 241 228 255 255 255 +187 164 0 0 0 0 90 0 0 255 232 0 +242 213 0 247 229 0 249 233 69 255 251 3 +177 171 0 41 0 0 34 0 0 77 0 0 +86 0 0 194 113 0 255 252 172 248 228 101 +255 235 147 255 255 72 0 0 0 3 0 0 +130 0 0 123 0 0 66 0 0 255 223 35 +243 236 90 240 221 67 250 216 94 233 242 104 +143 110 0 0 0 0 137 0 0 112 0 0 +212 65 0 155 0 0 75 0 0 111 68 0 +255 255 174 255 253 137 250 236 129 252 231 76 +251 235 59 234 215 0 251 215 0 249 240 94 +230 188 0 255 241 101 252 231 20 253 219 0 +255 247 168 255 250 0 255 211 12 248 237 0 +211 189 0 232 218 0 174 174 0 198 182 0 +207 198 0 224 194 0 180 159 0 229 234 0 +255 236 0 255 245 0 235 201 0 247 230 0 +242 193 0 222 197 0 211 169 0 239 202 0 +221 167 0 249 212 0 244 203 0 255 231 0 +207 137 0 206 181 0 0 0 0 35 0 0 +255 190 0 243 195 0 255 237 0 0 0 0 +98 0 0 120 0 0 0 0 0 85 0 0 +0 0 0 0 0 0 0 0 0 48 0 0 +0 0 0 2 0 0 0 0 0 114 0 0 +103 0 0 147 0 0 0 0 0 149 0 0 +179 103 0 139 57 0 100 69 0 178 66 0 +222 171 0 166 137 0 146 95 0 255 240 0 +246 216 0 139 110 0 134 103 0 255 225 0 +255 224 0 224 230 0 118 97 0 255 250 131 +255 255 205 43 20 0 252 252 77 247 228 59 +205 220 0 190 126 0 243 196 0 249 245 0 +29 0 0 218 183 0 200 145 0 0 0 0 +10 0 0 26 0 0 121 0 0 91 4 0 +217 173 0 253 222 26 193 217 0 21 0 0 +255 255 255 255 255 255 225 245 141 41 0 0 +82 0 0 210 162 0 170 191 0 65 12 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 245 237 255 255 229 +0 0 0 0 0 0 231 107 0 255 254 0 +249 235 50 246 222 0 242 210 0 255 245 0 +16 0 0 15 0 0 72 0 0 19 0 0 +214 104 0 246 227 0 235 208 44 240 208 0 +255 247 0 123 0 0 5 0 0 118 0 0 +160 0 0 105 0 0 226 175 0 255 255 200 +252 239 151 253 242 131 255 255 206 48 0 0 +0 0 0 98 0 0 145 0 0 173 0 0 +128 0 0 61 0 0 202 171 25 255 255 161 +254 242 159 247 231 116 250 234 114 231 200 0 +248 209 0 250 237 16 223 188 0 252 213 31 +255 255 106 253 217 5 209 192 17 129 93 0 +84 33 0 55 0 0 0 0 0 74 0 0 +49 0 0 47 0 0 42 0 0 74 0 0 +114 0 0 85 0 0 86 0 0 68 0 0 +73 0 0 83 0 0 108 61 0 144 125 0 +169 150 0 255 244 0 215 192 0 255 233 0 +225 185 0 240 209 0 249 210 0 228 190 0 +224 195 0 255 210 0 234 190 0 9 0 0 +238 167 0 250 204 0 255 223 0 0 8 0 +37 0 0 132 0 0 0 0 0 68 0 0 +0 0 0 0 0 0 146 0 0 0 0 0 +100 0 0 153 0 0 112 22 0 68 0 0 +210 139 0 203 123 0 165 139 0 93 0 0 +222 217 0 250 223 40 255 243 151 36 19 0 +185 152 0 234 218 220 0 0 0 135 76 0 +180 172 170 170 132 0 98 104 0 142 110 57 +148 129 126 159 113 0 41 0 0 100 49 0 +123 61 0 98 61 0 116 83 0 118 65 0 +120 87 0 84 30 0 98 48 0 151 107 0 +95 62 0 57 0 0 162 140 0 32 0 0 +0 0 0 0 0 0 32 0 0 74 0 0 +105 31 0 234 199 0 255 250 215 14 17 0 +255 255 255 250 243 236 255 244 255 247 253 229 +161 164 0 53 0 0 239 194 0 222 208 0 +235 217 185 0 0 0 253 250 255 255 255 255 +245 235 199 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 254 241 226 255 248 252 255 239 142 +0 0 0 0 0 0 255 226 0 240 218 0 +235 197 0 234 200 0 255 222 0 206 212 0 +12 0 0 4 0 0 72 0 0 75 0 0 +255 255 0 250 237 71 251 237 149 255 242 60 +222 217 0 12 0 0 100 0 0 111 0 0 +106 0 0 201 160 0 236 210 0 240 210 0 +245 216 73 255 255 174 0 0 0 71 0 0 +124 0 0 131 0 0 172 0 0 114 0 0 +86 0 0 255 255 167 255 248 141 249 238 98 +246 215 101 236 223 23 236 196 0 254 239 108 +226 203 0 255 255 223 233 225 9 169 164 0 +82 10 0 11 0 0 3 0 0 57 0 0 +152 14 0 114 0 0 146 0 0 157 0 0 +180 24 0 156 0 0 167 187 0 180 0 0 +202 140 0 184 69 0 155 57 0 187 1 0 +165 0 0 189 8 0 171 38 0 162 0 0 +128 0 0 6 0 0 91 23 0 157 136 0 +211 164 0 255 238 0 244 209 0 208 153 0 +240 213 0 235 177 0 206 155 0 255 230 0 +233 183 0 243 201 0 255 228 0 19 42 0 +70 0 0 0 0 0 9 0 0 161 101 0 +80 60 0 139 0 0 200 138 0 161 89 0 +0 0 0 183 82 0 204 134 0 172 145 0 +136 66 0 235 223 163 223 175 0 99 114 0 +118 72 13 110 83 0 133 103 29 142 124 20 +145 130 56 204 163 147 228 211 146 227 202 189 +154 133 85 214 188 161 228 204 168 206 183 135 +177 154 121 223 198 161 255 255 239 255 241 207 +253 245 233 255 251 248 255 241 208 245 230 186 +252 237 216 255 255 237 254 241 228 237 234 193 +255 240 224 255 255 232 253 246 247 255 255 199 +255 253 197 66 18 0 0 0 0 19 0 0 +106 0 0 193 160 0 224 174 27 201 216 154 +205 150 164 255 255 255 247 239 229 253 242 240 +255 255 255 165 183 52 63 0 0 0 0 0 +255 255 0 95 61 55 81 37 0 35 21 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 250 238 227 255 255 255 152 135 0 +0 0 0 117 0 0 255 255 0 235 203 0 +248 223 0 253 241 3 244 247 0 13 0 0 +61 0 0 75 0 0 43 0 0 187 73 0 +255 255 89 242 229 49 255 239 115 231 245 0 +49 0 0 17 0 0 93 0 0 125 0 0 +97 0 0 255 255 81 249 234 12 246 231 41 +246 234 34 70 14 0 59 0 0 149 0 0 +146 0 0 175 0 0 56 0 0 96 0 0 +255 255 175 250 236 112 241 222 38 248 229 0 +235 215 33 232 200 0 242 209 0 255 249 211 +252 248 159 83 54 0 25 0 0 90 0 0 +108 0 0 188 94 0 165 63 0 180 88 0 +222 195 38 218 206 0 255 244 102 245 236 29 +248 241 43 252 238 68 255 232 181 246 242 33 +255 239 184 255 248 133 255 252 155 245 238 74 +244 236 0 245 233 17 205 150 0 197 113 0 +188 80 0 181 0 0 143 0 0 121 0 0 +41 0 0 69 0 0 138 138 0 255 247 0 +237 191 0 238 193 0 217 175 0 232 196 0 +242 191 0 243 196 0 255 228 0 95 84 0 +13 0 0 19 0 0 0 0 0 160 0 0 +145 8 0 0 0 0 217 160 0 223 187 93 +142 110 0 104 15 0 191 170 29 168 144 152 +92 79 0 141 100 0 195 170 164 222 200 150 +221 199 179 252 246 225 204 195 184 244 217 209 +230 223 208 230 207 196 202 187 152 208 190 173 +245 230 213 211 205 184 225 197 192 219 210 172 +255 248 243 255 249 243 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 125 125 0 0 0 0 +122 0 0 93 30 0 185 142 0 255 255 255 +0 19 0 214 191 201 255 253 246 248 238 231 +251 240 231 255 255 255 202 219 135 0 0 0 +64 19 0 255 246 194 255 246 214 168 191 0 +188 154 172 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 250 241 229 255 255 223 0 0 0 +0 0 0 184 104 0 255 251 0 246 234 0 +244 227 11 255 252 10 62 40 0 113 0 0 +61 0 0 107 0 0 77 0 0 255 238 0 +233 209 0 228 202 0 255 233 40 80 22 0 +70 0 0 72 0 0 108 0 0 103 0 0 +255 245 0 244 229 0 241 226 28 255 255 119 +0 0 0 33 0 0 146 0 0 129 0 0 +195 0 0 1 0 0 189 131 0 255 255 128 +246 236 91 233 216 0 241 214 38 228 203 0 +251 217 28 255 240 204 236 238 182 66 0 0 +0 0 0 140 0 0 165 0 0 198 115 0 +216 162 0 244 205 36 255 242 135 249 230 101 +254 248 145 255 253 195 255 254 185 255 250 219 +255 255 235 255 255 255 248 236 216 251 252 222 +254 251 229 245 246 209 254 255 223 255 255 255 +255 255 216 255 255 209 255 251 104 255 239 23 +255 230 5 243 221 0 200 161 0 193 116 0 +155 0 0 119 0 0 84 0 0 0 0 0 +206 164 0 255 241 0 229 185 0 247 199 0 +240 189 0 245 207 0 255 237 0 0 0 0 +59 0 0 0 0 0 0 0 0 239 137 0 +226 176 0 118 97 0 47 0 0 127 120 0 +177 142 137 199 178 133 229 215 200 231 212 187 +240 225 212 226 207 209 235 206 195 209 201 166 +204 181 165 194 182 152 206 171 147 193 179 155 +228 203 174 211 188 174 216 194 155 242 220 193 +187 176 154 227 200 164 238 221 196 254 248 235 +250 238 230 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 212 231 104 +0 0 0 104 0 0 157 107 0 202 154 42 +234 242 214 0 0 0 255 255 255 246 238 227 +246 238 224 249 238 230 255 249 255 236 245 190 +255 248 136 207 190 102 140 84 0 11 9 0 +244 192 194 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +254 242 230 252 243 236 255 250 165 0 0 0 +69 0 0 255 227 0 234 207 0 242 214 0 +234 203 0 255 248 0 1 0 0 116 0 0 +38 0 0 77 0 0 126 0 0 255 255 0 +245 230 66 255 235 40 233 243 0 50 0 0 +52 0 0 66 0 0 110 0 0 153 24 0 +246 237 0 228 207 0 255 220 0 136 148 0 +33 0 0 110 0 0 140 0 0 174 0 0 +0 0 0 184 60 0 255 235 85 240 225 63 +237 215 41 235 204 0 237 209 0 246 223 38 +255 246 209 167 169 0 0 0 0 152 0 0 +147 0 0 221 186 0 224 181 0 245 227 62 +255 251 198 249 241 146 251 244 164 255 250 215 +247 255 200 235 229 199 193 161 118 185 146 72 +160 108 0 165 55 0 156 80 0 168 0 0 +137 87 0 140 0 0 159 34 0 173 72 0 +161 102 1 213 168 97 231 211 86 254 249 116 +255 249 142 255 255 182 253 239 93 255 244 100 +233 207 0 194 151 0 193 45 0 172 0 0 +0 0 0 62 0 0 252 206 0 249 211 0 +242 195 0 245 193 0 255 245 0 0 0 0 +0 0 0 0 0 0 0 0 0 79 0 0 +79 45 0 178 164 113 219 218 177 212 203 197 +216 199 160 242 215 206 229 215 179 221 197 173 +227 222 182 216 187 150 234 221 203 220 190 173 +201 186 166 231 215 191 229 225 199 205 183 154 +214 196 156 253 238 235 212 203 175 206 185 147 +241 230 206 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 0 0 0 61 0 0 198 154 0 +255 244 255 152 173 78 206 173 177 255 255 255 +246 237 227 248 239 226 246 240 228 255 248 245 +134 101 0 6 0 0 86 0 0 164 125 0 +240 241 223 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 246 231 255 244 229 224 202 41 0 0 0 +190 84 0 235 204 0 239 219 4 245 229 0 +255 240 36 183 195 0 31 0 0 49 0 0 +70 0 0 45 0 0 255 218 0 247 238 0 +248 232 81 255 255 50 124 73 0 56 0 0 +5 0 0 88 0 0 86 0 0 255 233 0 +246 236 0 252 230 0 243 255 0 9 0 0 +121 0 0 152 0 0 187 0 0 0 0 0 +148 35 0 255 255 33 238 221 75 238 219 5 +235 211 28 228 208 0 248 208 164 255 255 188 +0 0 0 60 0 0 162 0 0 224 215 46 +205 159 0 254 226 106 249 242 191 247 240 146 +253 245 198 253 249 220 230 228 192 192 186 118 +141 0 0 148 0 0 165 75 0 127 0 0 +167 13 0 165 0 0 165 46 0 158 92 0 +154 8 0 132 0 0 183 51 0 139 0 0 +165 30 0 164 0 0 149 0 0 138 0 0 +155 20 0 231 222 78 243 233 70 255 255 200 +255 243 168 255 234 143 252 224 0 205 161 0 +141 0 0 115 0 0 0 0 0 255 228 0 +255 217 0 253 198 0 232 224 0 0 0 0 +0 0 0 0 0 0 0 0 0 253 249 187 +238 234 203 240 211 188 221 201 160 241 223 211 +213 200 166 219 182 160 229 227 202 201 179 152 +233 204 193 198 179 138 233 207 190 215 205 168 +247 227 222 230 226 201 222 189 154 239 236 223 +235 227 215 207 187 163 233 218 184 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 0 0 0 114 10 0 +220 168 0 255 255 255 0 0 0 255 255 255 +250 240 229 245 234 226 249 242 229 249 237 230 +250 242 235 249 241 232 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 250 237 226 +255 244 237 255 245 206 117 115 0 0 0 0 +241 176 0 246 224 0 240 222 51 244 229 28 +255 255 3 0 0 0 45 0 0 13 0 0 +71 0 0 202 146 0 245 223 0 232 205 0 +239 207 13 255 240 0 8 0 0 66 0 0 +37 0 0 71 0 0 228 185 0 247 227 0 +243 224 0 254 255 0 61 0 0 0 0 0 +175 0 0 148 0 0 64 0 0 170 17 0 +255 241 0 253 237 100 235 217 0 241 212 0 +247 226 4 255 233 170 237 226 101 0 0 0 +157 0 0 209 219 167 189 91 0 248 226 106 +249 239 205 247 236 144 252 240 181 255 255 247 +209 224 169 115 0 0 164 64 0 128 0 0 +153 101 0 110 0 0 140 35 0 201 200 39 +204 185 116 239 232 164 240 226 153 255 244 203 +244 241 147 247 241 150 234 228 137 219 237 139 +228 202 156 188 173 0 187 112 0 181 21 0 +157 0 0 162 0 0 134 0 0 177 152 0 +255 246 70 255 249 152 255 249 220 255 240 176 +211 203 0 170 49 0 139 0 0 0 0 0 +197 155 0 255 237 0 202 203 0 0 0 0 +0 0 0 0 0 0 197 143 82 246 228 201 +223 205 191 225 201 170 249 231 210 207 187 158 +237 220 190 186 167 150 238 214 181 238 225 209 +239 225 192 218 201 164 234 210 198 244 240 220 +213 193 164 229 217 200 250 241 229 215 196 183 +209 193 148 248 236 227 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 241 255 158 0 0 0 +149 112 0 237 188 77 191 202 56 157 127 126 +255 255 255 252 243 231 248 240 228 248 241 228 +248 238 229 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 253 241 229 +255 243 238 255 250 168 29 0 0 0 0 0 +255 230 0 247 231 0 249 234 18 245 225 0 +255 255 0 0 0 0 62 0 0 66 0 0 +0 0 0 255 233 0 249 228 0 248 231 0 +255 230 0 173 181 0 75 0 0 39 0 0 +78 0 0 80 0 0 255 254 0 236 206 0 +255 224 0 88 98 0 0 0 0 171 0 0 +157 0 0 154 0 0 36 0 0 255 255 0 +248 229 125 245 219 0 253 237 112 246 231 0 +255 235 131 188 191 77 0 0 0 169 0 0 +162 0 0 227 162 0 255 251 168 250 240 148 +247 235 200 255 253 224 235 240 185 116 86 0 +153 0 0 180 148 0 149 0 0 171 101 0 +224 191 183 252 252 198 255 255 244 255 252 216 +255 254 214 255 251 209 255 253 210 255 252 217 +255 252 206 255 254 224 255 253 213 255 254 216 +255 255 220 255 255 233 255 255 246 248 255 175 +236 229 112 198 151 0 179 86 0 161 0 0 +143 0 0 184 170 0 255 234 136 255 248 130 +255 246 230 253 244 0 177 90 0 114 0 0 +0 0 0 252 184 0 40 89 0 0 0 0 +0 0 0 0 0 0 248 186 176 228 210 179 +215 199 169 235 217 205 187 172 128 246 217 214 +232 221 197 236 207 175 241 220 210 221 201 157 +244 225 195 248 240 226 228 210 176 233 214 187 +254 247 242 237 231 218 212 188 143 245 231 214 +255 246 232 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 191 219 110 +0 0 0 144 47 0 255 255 255 0 0 0 +246 216 227 255 252 242 248 241 229 248 238 231 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 254 241 229 +255 255 255 233 217 93 0 0 0 92 0 0 +255 255 0 247 229 0 239 205 0 250 219 0 +207 216 0 31 0 0 55 0 0 6 0 0 +78 0 0 255 255 0 249 232 0 252 233 0 +255 249 0 21 0 0 91 0 0 60 0 0 +49 0 0 247 165 0 255 248 0 255 228 0 +255 255 4 0 0 0 69 0 0 125 0 0 +179 0 0 20 0 0 254 167 0 254 244 109 +249 236 163 247 224 19 243 218 36 255 241 165 +215 220 173 0 0 0 137 0 0 127 0 0 +255 253 0 254 247 156 251 242 196 251 242 218 +255 255 255 140 143 0 104 0 0 166 29 0 +150 0 0 183 122 80 243 238 207 255 255 230 +255 250 220 255 248 203 255 250 223 255 254 211 +255 255 232 255 255 219 255 248 180 251 227 150 +250 217 121 248 211 111 254 214 139 250 223 109 +249 219 118 254 223 134 255 240 173 255 251 220 +255 255 222 255 255 255 244 236 122 240 231 29 +153 90 0 157 0 0 120 0 0 196 170 0 +255 255 190 255 251 208 252 239 0 191 121 0 +164 0 0 43 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 253 230 193 255 240 227 +207 187 161 234 207 182 238 231 202 212 185 158 +235 219 184 238 222 193 237 213 181 251 236 202 +245 222 204 244 220 179 255 245 226 252 242 229 +213 195 161 217 194 160 253 246 227 253 243 235 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +88 104 0 0 0 0 212 175 0 250 248 195 +0 0 0 255 255 255 250 245 226 249 242 228 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 250 239 228 +255 255 255 185 165 0 0 0 0 140 0 0 +255 242 0 236 206 0 242 224 0 255 246 122 +95 108 0 63 0 0 39 0 0 47 0 0 +146 0 0 255 239 0 234 206 0 250 214 0 +173 165 0 14 0 0 130 0 0 65 0 0 +56 0 0 255 217 0 236 203 0 255 222 0 +154 180 0 44 0 0 132 0 0 194 0 0 +59 0 0 118 0 0 255 255 0 238 220 0 +236 204 0 248 231 0 255 234 178 255 255 192 +0 0 0 128 0 0 155 90 0 251 226 60 +254 253 151 249 235 150 255 251 226 249 236 151 +148 101 0 176 119 0 134 37 0 130 2 0 +245 241 198 255 255 225 255 247 209 255 246 209 +255 249 226 255 255 222 245 218 176 203 174 50 +197 124 0 135 28 0 155 0 0 136 59 0 +188 27 0 133 0 0 178 61 0 182 0 0 +164 0 0 186 48 0 186 45 0 213 118 0 +202 129 0 255 234 168 255 245 170 255 252 243 +255 255 199 208 199 0 138 30 0 137 0 0 +182 131 0 252 238 139 255 255 195 245 215 0 +201 162 0 200 0 0 66 0 0 0 0 0 +0 0 0 189 69 0 247 235 221 229 203 181 +232 214 176 226 202 176 236 221 185 226 194 168 +242 223 197 240 222 180 246 223 217 240 226 195 +255 241 227 255 247 238 235 222 196 210 187 155 +246 237 213 255 244 233 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 136 150 0 2 0 0 255 255 208 +181 207 0 160 99 126 255 255 255 253 241 232 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 246 239 231 +255 249 241 173 159 0 0 0 0 208 121 0 +251 230 0 247 228 0 248 225 0 255 253 69 +1 0 0 66 0 0 49 0 0 23 0 0 +234 142 0 248 241 66 241 224 10 255 254 0 +45 0 0 65 0 0 114 0 0 35 0 0 +116 0 0 255 255 0 247 231 0 255 255 0 +0 0 0 99 0 0 132 0 0 130 0 0 +71 0 0 252 217 0 244 219 53 250 230 5 +246 230 72 254 230 36 255 255 255 32 0 0 +65 0 0 155 102 0 231 156 0 255 255 203 +251 236 148 253 242 166 255 255 177 118 0 0 +179 23 0 106 0 0 209 154 58 255 254 232 +255 251 210 253 240 209 255 249 214 255 253 229 +217 207 118 203 115 0 187 122 0 173 0 0 +160 0 0 206 70 0 144 0 0 181 118 0 +181 18 0 169 91 0 166 72 0 198 112 0 +168 62 0 166 0 0 179 51 0 174 0 0 +132 0 0 164 0 0 196 103 0 217 146 0 +255 231 180 253 245 193 255 255 170 192 177 0 +134 0 0 144 0 0 255 244 8 255 248 234 +255 236 0 162 118 0 140 0 0 68 0 0 +0 0 0 255 202 209 228 215 170 239 216 200 +212 185 157 223 208 183 243 222 205 240 220 187 +255 246 231 235 224 192 249 223 199 255 247 232 +244 236 217 210 182 151 227 203 161 255 246 234 +253 240 234 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 33 29 0 118 42 0 +255 203 229 32 58 0 255 245 255 250 245 235 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 246 235 223 246 237 228 +255 255 222 31 0 0 0 0 0 254 187 0 +248 228 0 246 226 0 250 219 0 187 192 0 +7 0 0 85 0 0 49 0 0 0 0 0 +255 225 0 252 243 69 251 231 36 255 250 0 +0 0 0 101 0 0 118 0 0 62 0 0 +204 103 0 246 226 0 240 201 0 232 223 0 +21 0 0 87 0 0 120 0 0 123 0 0 +208 146 0 237 221 0 239 208 60 247 222 29 +247 228 45 255 255 255 64 5 0 21 0 0 +132 0 0 205 139 0 255 243 93 250 238 134 +253 238 174 255 255 210 128 11 0 154 0 0 +151 0 0 212 191 91 255 255 234 255 246 210 +254 243 200 255 250 218 255 236 185 190 148 0 +165 0 0 167 4 0 151 0 0 166 80 0 +194 156 0 232 199 160 252 247 169 255 255 220 +255 255 216 255 255 203 255 255 230 255 255 215 +254 250 191 245 249 190 228 214 128 208 195 81 +187 154 0 127 59 0 160 0 0 151 0 0 +196 0 0 247 212 6 255 239 188 255 250 157 +183 187 0 162 0 0 146 7 0 255 255 141 +250 234 156 252 247 0 169 15 0 146 0 0 +0 0 0 255 255 235 221 193 155 219 193 172 +248 236 211 250 231 207 223 207 171 252 242 225 +234 211 182 254 236 208 249 240 229 229 217 186 +207 185 137 251 237 212 255 247 242 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 0 0 +188 147 0 240 219 141 98 35 0 255 255 255 +251 246 233 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 252 240 227 249 240 235 +255 255 203 0 0 0 10 0 0 255 192 0 +231 206 0 233 200 0 255 229 0 136 160 0 +55 0 0 10 0 0 49 0 0 61 0 0 +255 237 0 228 193 0 235 205 0 206 202 0 +23 0 0 97 0 0 108 0 0 70 0 0 +255 226 0 252 232 0 255 230 0 148 171 0 +0 0 0 152 0 0 156 0 0 0 0 0 +255 240 0 235 218 0 237 219 54 233 211 0 +235 206 0 241 255 255 16 0 0 147 0 0 +118 0 0 255 255 119 245 231 127 247 236 120 +255 238 209 173 137 0 160 76 0 157 0 0 +174 96 0 255 255 255 247 241 192 251 244 213 +255 255 236 191 138 0 140 103 0 157 0 0 +146 0 0 180 120 27 239 250 200 255 255 245 +255 255 223 252 247 207 250 240 177 252 240 172 +254 241 212 239 223 93 249 236 200 247 237 166 +255 242 189 255 244 204 254 247 180 255 248 219 +255 254 230 255 255 226 204 204 114 148 133 0 +138 0 0 188 0 0 226 91 0 254 229 137 +255 253 180 239 254 0 121 0 0 153 63 0 +250 227 17 255 255 219 219 230 0 207 83 0 +17 0 0 255 255 228 242 233 199 225 197 176 +239 224 193 253 242 224 238 222 198 237 220 186 +255 243 234 237 226 206 217 185 150 222 200 168 +251 237 231 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 150 178 0 +0 0 0 255 228 190 137 164 0 75 4 0 +255 255 255 249 242 231 250 241 228 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 251 242 240 +255 255 196 0 0 0 0 0 0 255 234 0 +240 213 0 245 225 0 255 255 0 32 0 0 +11 0 0 50 0 0 115 0 0 163 0 0 +255 255 12 247 229 0 255 239 0 123 117 0 +39 0 0 59 0 0 59 0 0 164 0 0 +244 231 0 234 203 0 255 243 0 0 0 0 +110 0 0 122 0 0 141 0 0 153 0 0 +237 244 0 234 196 0 241 213 84 248 232 40 +255 255 223 15 0 0 172 0 0 88 0 0 +250 197 0 250 247 161 241 228 130 255 255 189 +169 146 0 160 0 0 169 90 0 182 94 58 +255 255 228 251 245 210 244 234 196 253 228 183 +197 183 2 147 59 0 176 0 0 169 53 0 +249 234 192 255 255 236 244 237 174 244 228 173 +247 240 198 238 223 132 248 241 206 243 233 148 +248 239 220 246 232 139 243 222 156 242 231 190 +243 218 141 255 242 206 238 206 75 246 235 166 +248 225 144 255 248 199 255 251 221 255 255 191 +211 230 0 127 0 0 139 0 0 208 0 0 +255 233 0 255 254 195 206 247 0 157 0 0 +102 0 0 255 255 39 255 226 114 209 220 0 +182 0 0 102 48 0 243 250 238 239 217 193 +251 248 233 227 212 178 248 236 215 254 239 231 +212 201 179 205 179 137 251 236 213 255 253 240 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +126 158 0 88 0 0 255 238 100 100 121 0 +231 194 231 255 253 244 248 247 229 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 249 238 240 +255 250 138 0 0 0 30 0 0 255 255 0 +239 221 0 243 223 0 255 255 0 61 0 0 +27 0 0 104 0 0 8 0 0 216 80 0 +251 236 0 231 203 0 255 244 0 0 0 0 +144 0 0 10 0 0 22 0 0 212 164 0 +249 235 0 255 245 0 202 208 0 0 0 0 +128 0 0 160 0 0 87 0 0 239 171 0 +242 237 0 238 222 0 243 220 31 247 221 84 +234 241 189 16 0 0 154 0 0 154 0 0 +255 254 66 245 236 130 245 227 130 255 255 167 +139 1 0 170 75 0 130 15 0 255 255 255 +250 241 200 251 244 218 242 206 114 233 204 0 +141 0 0 176 0 0 169 107 0 255 255 255 +255 253 215 253 241 204 247 240 199 241 227 148 +253 233 184 246 233 165 245 231 192 251 241 198 +233 210 113 248 239 175 236 206 59 246 235 215 +247 221 151 253 235 215 241 216 83 245 226 144 +248 220 138 245 234 136 248 222 159 248 238 119 +255 237 156 229 247 49 151 147 0 136 0 0 +158 0 0 244 188 0 255 255 163 179 183 0 +159 0 0 197 111 0 255 249 99 255 247 50 +186 67 0 16 0 0 182 170 110 255 251 243 +219 197 170 247 236 222 243 232 215 194 171 136 +223 199 163 254 246 232 255 243 235 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 12 0 0 230 200 48 255 255 255 +54 31 0 255 255 255 255 250 239 248 239 229 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 245 247 +255 245 112 0 0 0 44 0 0 255 255 0 +241 227 0 239 213 0 255 238 0 0 0 0 +30 0 0 75 0 0 33 0 0 229 181 0 +253 233 45 248 228 31 255 255 0 0 0 0 +122 0 0 42 0 0 59 0 0 240 190 0 +240 217 0 255 216 0 117 133 0 0 0 0 +139 0 0 168 0 0 0 0 0 255 235 0 +229 199 0 234 210 0 249 228 29 255 255 255 +76 120 0 96 0 0 83 0 0 219 128 0 +250 251 112 243 230 109 255 246 161 117 96 0 +181 49 0 150 0 0 222 191 148 250 248 219 +245 238 206 254 239 227 222 181 0 121 0 0 +210 170 0 176 102 0 255 245 238 255 251 211 +251 236 171 244 228 154 246 233 182 252 242 207 +242 233 146 248 218 180 238 225 136 253 235 116 +221 215 79 255 235 162 250 229 4 242 215 68 +242 220 0 254 220 92 233 200 0 244 219 41 +242 204 94 236 222 68 249 234 142 241 223 99 +251 227 108 248 233 138 255 255 144 137 125 0 +169 0 0 165 0 0 250 229 127 255 255 127 +189 208 0 128 0 0 255 245 0 252 235 91 +198 214 0 138 0 0 59 0 0 255 255 239 +238 228 214 224 206 178 202 184 153 245 229 207 +253 246 234 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 67 0 0 190 147 5 +239 246 197 57 14 0 255 249 255 255 249 242 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 253 245 247 +251 234 97 0 0 0 0 0 0 255 255 0 +228 192 0 238 204 0 238 245 0 105 0 0 +39 0 0 29 0 0 75 0 0 255 219 31 +255 247 119 247 227 55 241 239 0 7 0 0 +116 0 0 64 0 0 1 0 0 255 240 0 +233 210 0 255 255 0 0 0 0 13 0 0 +136 0 0 114 0 0 38 0 0 255 255 0 +241 223 0 246 230 33 248 231 75 235 240 208 +0 0 0 186 0 0 128 0 0 255 245 0 +247 238 155 246 230 123 253 255 174 142 8 0 +173 62 0 154 0 0 255 255 210 247 238 208 +250 242 217 243 203 0 152 65 0 205 86 0 +118 5 0 255 255 255 244 241 191 249 228 156 +254 231 189 251 241 194 231 220 127 244 217 131 +255 241 173 227 214 0 212 180 82 182 141 0 +152 110 0 129 87 0 120 62 0 103 93 0 +149 107 0 139 96 0 182 142 0 244 206 4 +241 207 51 227 192 0 254 233 161 240 210 13 +252 242 161 232 199 0 255 232 133 255 255 177 +185 164 0 181 20 0 149 0 0 255 242 0 +255 255 85 147 27 0 154 53 0 255 238 69 +255 255 0 176 58 0 101 34 0 237 235 237 +207 185 164 209 188 142 253 241 223 255 245 234 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 19 0 0 80 24 0 +255 213 238 203 204 0 0 2 0 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 247 244 +227 234 128 0 0 0 73 0 0 255 238 0 +253 221 0 251 225 0 204 203 0 39 0 0 +22 0 0 50 0 0 88 0 0 255 224 64 +243 221 39 246 207 0 196 213 0 37 0 0 +88 0 0 67 0 0 32 0 0 255 255 0 +251 227 0 255 255 0 8 0 0 54 0 0 +154 0 0 30 0 0 143 9 0 255 240 0 +238 204 0 243 211 0 251 218 6 149 167 9 +0 0 0 131 0 0 215 129 0 253 249 44 +251 235 146 255 243 148 186 201 0 144 0 0 +180 0 0 203 151 19 255 255 216 254 239 167 +255 243 200 196 147 0 180 27 0 113 0 0 +255 255 227 255 246 187 248 233 185 255 242 222 +246 223 77 245 220 80 255 247 137 252 230 57 +152 127 0 125 79 0 152 129 59 212 186 165 +250 245 188 255 255 255 255 253 229 255 255 255 +252 244 221 229 216 133 163 159 121 109 65 0 +129 112 0 220 191 175 228 195 0 255 233 133 +248 232 44 248 220 136 251 233 148 244 210 4 +250 237 96 186 172 0 145 0 0 234 130 0 +255 228 1 217 231 0 130 0 0 204 172 0 +255 255 123 166 130 0 201 28 0 122 98 0 +255 237 238 255 248 228 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 55 0 0 +164 136 0 251 202 187 255 255 186 22 18 0 +255 255 255 255 246 236 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 246 247 +245 242 117 0 0 0 121 0 0 255 255 0 +233 197 0 241 199 0 194 204 0 63 0 0 +45 0 0 53 0 0 183 37 0 250 217 0 +250 226 3 242 206 0 148 153 0 54 0 0 +83 0 0 121 0 0 48 0 0 255 255 0 +241 206 0 255 233 0 0 0 0 103 0 0 +153 0 0 0 0 0 234 173 0 255 250 0 +247 233 1 247 231 0 255 255 204 0 0 0 +52 0 0 160 0 0 255 242 52 251 237 26 +253 233 138 255 253 62 29 11 0 202 0 0 +109 0 0 255 248 221 255 246 195 253 235 181 +251 226 0 166 0 0 166 71 0 208 151 63 +255 255 168 252 233 141 246 232 128 243 219 118 +251 234 100 255 244 109 189 191 85 92 28 0 +210 174 172 255 255 255 255 255 244 252 220 201 +228 180 140 208 125 0 230 172 105 223 144 87 +223 143 76 248 187 155 255 231 216 255 255 255 +255 250 209 125 128 0 119 81 0 239 217 201 +251 231 0 243 218 29 242 215 39 246 236 112 +249 217 68 255 255 74 149 0 0 162 0 0 +236 161 0 255 255 151 133 13 0 150 0 0 +255 255 40 242 241 0 164 0 0 64 0 0 +255 255 255 249 238 224 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 0 0 0 +167 131 0 255 227 181 255 255 255 187 201 0 +131 102 112 255 255 244 250 237 229 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 243 230 255 255 255 +229 233 137 0 0 0 96 0 0 255 251 0 +246 216 0 255 246 0 139 158 0 33 0 0 +100 0 0 32 0 0 221 70 0 246 219 0 +242 209 0 255 237 0 77 101 0 69 0 0 +94 0 0 13 0 0 173 122 0 255 249 0 +255 235 0 211 222 0 0 0 0 103 0 0 +148 0 0 0 0 0 255 197 0 245 221 0 +245 219 0 251 222 0 255 255 200 0 0 0 +140 0 0 141 0 0 255 255 120 249 236 81 +255 239 140 177 206 0 117 0 0 179 0 0 +160 77 0 255 255 231 253 242 177 253 224 30 +191 152 0 151 0 0 221 129 0 255 255 204 +244 230 105 249 229 126 251 233 148 247 226 77 +255 236 108 191 186 37 136 84 56 255 252 0 +255 255 200 212 159 36 208 104 0 212 167 0 +234 176 34 239 211 100 247 207 167 244 231 194 +246 215 173 244 217 97 233 162 0 223 124 0 +241 178 168 255 255 255 211 217 125 63 36 0 +220 182 99 248 221 47 238 210 35 246 225 25 +255 239 180 255 233 100 184 230 0 173 0 0 +187 0 0 255 255 113 194 214 0 67 0 0 +249 229 12 255 235 28 173 151 0 34 0 0 +255 255 255 246 236 223 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 83 120 0 +106 29 0 213 199 0 0 0 0 221 216 0 +83 71 31 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 248 243 233 246 232 210 216 189 169 +235 206 87 0 0 0 53 0 0 255 253 0 +245 216 0 255 223 0 86 97 0 71 0 0 +44 0 0 24 0 0 222 126 0 245 223 0 +246 211 0 255 227 0 0 19 0 130 0 0 +76 0 0 20 0 0 199 103 0 253 234 0 +250 212 0 188 199 0 0 0 0 151 0 0 +104 0 0 128 0 0 249 213 0 242 220 0 +242 217 0 250 220 0 228 233 129 17 0 0 +128 0 0 193 0 0 255 255 142 251 232 110 +255 255 155 81 100 0 167 0 0 165 0 0 +240 214 188 249 244 160 255 247 177 234 191 0 +186 77 0 155 0 0 255 251 145 245 230 107 +244 224 62 255 236 199 247 233 119 255 245 102 +81 96 0 141 73 14 255 255 0 227 198 0 +182 66 0 235 157 0 251 229 0 255 255 255 +253 253 173 255 252 202 255 255 217 255 244 225 +255 255 255 255 253 224 252 247 174 251 216 0 +239 185 0 229 140 0 255 206 205 255 255 236 +49 65 0 254 212 169 255 244 163 236 211 5 +243 208 0 247 220 67 255 255 154 107 0 0 +135 0 0 237 151 0 255 255 131 115 102 0 +193 97 0 255 255 122 203 217 0 102 0 0 +255 239 228 251 243 230 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 235 248 198 +27 0 0 155 111 0 167 153 0 0 0 0 +247 215 211 255 249 238 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +252 247 239 233 221 187 186 163 132 223 194 170 +255 254 143 0 0 0 94 0 0 255 250 0 +233 198 0 252 217 0 141 137 0 11 0 0 +58 0 0 73 0 0 241 159 0 238 209 0 +251 228 0 255 244 0 0 0 0 125 0 0 +52 0 0 18 0 0 206 149 0 237 210 0 +254 217 0 179 191 0 0 0 0 153 0 0 +88 0 0 120 0 0 254 243 0 242 222 0 +243 225 0 255 234 0 169 197 86 44 0 0 +115 0 0 228 131 0 254 252 120 244 225 85 +255 255 55 0 0 0 172 0 0 146 0 0 +255 253 135 245 225 109 255 245 80 185 125 0 +152 0 0 166 0 0 255 255 143 247 236 140 +244 232 95 247 227 103 255 239 134 190 209 96 +184 88 0 255 250 0 215 190 0 226 132 104 +242 218 0 253 235 73 253 242 68 245 226 0 +216 155 6 219 148 0 225 163 44 236 169 104 +217 143 14 225 161 52 242 186 121 255 244 255 +255 251 223 251 223 114 217 134 0 237 173 175 +255 255 172 4 10 0 238 194 150 253 230 24 +245 220 2 247 218 140 254 233 3 164 190 0 +145 0 0 195 0 0 255 255 150 189 208 0 +135 0 0 255 255 113 244 249 77 123 0 0 +210 201 180 255 251 240 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +180 203 99 110 62 0 46 16 0 203 169 117 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 245 236 220 +227 205 180 184 165 145 246 230 219 255 244 247 +255 247 124 0 0 0 113 0 0 254 233 0 +238 200 0 255 242 0 20 64 0 29 0 0 +57 0 0 34 0 0 227 144 0 236 209 0 +239 203 0 233 241 0 0 0 0 168 0 0 +95 0 0 37 0 0 216 128 0 248 235 0 +255 240 0 121 146 0 0 0 0 123 0 0 +124 0 0 178 44 0 250 232 0 235 219 0 +243 223 0 255 235 0 130 174 24 111 0 0 +122 0 0 218 120 0 244 228 16 242 225 87 +255 255 69 112 0 0 183 0 0 152 0 0 +255 255 153 247 237 108 255 233 0 148 0 0 +174 0 0 221 174 0 245 232 42 236 216 67 +249 231 161 248 231 137 255 255 164 51 0 0 +255 255 0 241 215 0 218 114 0 245 226 0 +252 241 60 251 241 137 205 148 0 211 129 0 +230 187 130 246 227 162 247 234 218 245 231 187 +251 238 204 237 207 115 227 192 0 233 155 0 +245 190 167 255 245 255 247 224 29 208 124 0 +255 194 212 246 252 19 20 0 0 255 255 176 +241 203 0 241 218 3 254 233 87 222 235 8 +100 0 0 159 0 0 255 254 95 255 255 0 +56 0 0 255 240 71 255 254 66 128 0 0 +153 135 76 255 254 246 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 240 255 255 240 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 245 234 204 192 170 144 +199 180 158 255 246 243 255 246 234 250 243 247 +255 243 105 0 0 0 58 0 0 255 250 0 +243 205 0 255 217 0 104 98 0 46 0 0 +34 0 0 56 0 0 242 174 0 243 214 0 +243 221 0 204 213 0 43 0 0 142 0 0 +38 0 0 56 0 0 193 149 0 251 234 0 +255 235 0 58 115 0 56 0 0 113 0 0 +39 0 0 163 95 0 246 237 0 242 215 0 +243 223 0 255 240 16 86 146 0 84 0 0 +121 0 0 247 209 17 245 243 155 245 228 144 +238 250 29 99 0 0 171 0 0 175 8 0 +255 255 77 245 223 14 223 226 0 171 0 0 +144 0 0 246 219 94 246 242 110 247 232 114 +239 229 170 255 236 144 161 181 71 208 139 0 +250 218 0 216 142 0 242 193 0 244 234 50 +241 222 0 207 105 0 237 208 170 240 218 185 +231 225 163 236 199 122 237 210 113 215 189 48 +236 198 135 225 177 97 252 225 206 232 205 63 +226 175 0 221 143 0 255 247 255 255 255 196 +207 92 0 255 239 255 196 204 5 208 137 144 +250 221 0 244 217 0 244 221 0 255 243 129 +165 207 0 128 0 0 226 151 0 255 255 83 +85 0 0 245 197 54 255 255 131 164 20 0 +119 83 3 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 253 243 240 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +247 240 221 230 215 192 198 166 112 246 230 234 +255 244 234 239 222 191 246 236 223 253 245 247 +255 255 170 0 0 0 0 0 0 255 252 0 +234 194 0 255 250 0 23 38 0 69 0 0 +60 0 0 23 0 0 255 182 0 234 210 0 +235 198 0 211 217 0 5 0 0 162 0 0 +118 0 0 1 0 0 212 161 0 247 221 0 +255 232 0 100 121 0 0 0 0 126 0 0 +4 0 0 209 119 0 247 225 0 240 216 0 +248 227 0 255 245 76 81 127 0 104 0 0 +109 0 0 255 240 91 250 238 86 253 233 95 +204 236 0 120 0 0 178 0 0 198 90 0 +253 249 45 244 225 0 206 198 0 172 0 0 +142 0 0 251 249 33 236 215 12 240 218 99 +250 236 176 255 246 185 10 0 0 255 246 0 +219 166 0 223 140 0 255 248 168 236 230 0 +191 103 0 233 204 160 250 236 204 246 234 187 +197 151 0 168 98 0 172 119 0 185 147 118 +152 116 0 201 143 0 170 101 0 235 165 11 +246 225 171 235 208 0 203 124 0 255 233 202 +236 212 25 225 98 0 255 255 255 0 0 0 +255 255 171 244 210 0 249 234 0 250 220 19 +231 252 92 113 0 0 196 59 0 255 255 92 +77 18 0 234 138 0 255 255 157 172 51 0 +112 53 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 248 238 235 248 239 222 +206 186 146 200 179 148 253 243 240 242 235 211 +223 206 169 239 238 226 253 242 232 255 255 255 +101 35 0 52 0 0 0 0 0 255 243 0 +243 214 0 255 242 0 65 18 0 72 0 0 +55 0 0 10 0 0 253 186 0 235 208 0 +244 220 0 205 219 0 6 0 0 150 0 0 +71 0 0 0 0 0 242 164 0 227 213 0 +255 225 0 45 112 0 93 0 0 127 0 0 +38 0 0 207 137 0 247 235 0 241 223 0 +239 223 0 255 252 0 16 81 0 121 0 0 +76 0 0 255 233 31 244 223 0 255 231 113 +164 205 0 128 0 0 179 0 0 217 160 0 +243 231 0 242 220 0 181 174 0 193 0 0 +98 0 0 255 255 118 236 224 39 237 224 128 +248 230 158 169 200 0 135 0 0 255 252 0 +208 98 0 232 187 0 253 248 0 190 96 0 +233 190 146 246 229 209 239 225 158 159 121 0 +206 168 203 255 255 246 255 255 255 255 252 245 +255 255 255 255 255 255 253 249 243 184 146 3 +162 86 0 255 246 246 220 179 0 191 89 0 +255 255 255 179 71 0 255 213 218 143 181 15 +236 177 141 244 218 4 239 207 0 238 206 0 +255 255 13 83 0 0 193 0 0 255 234 0 +113 114 0 212 117 0 255 255 154 143 70 0 +102 40 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 246 245 241 238 202 207 177 156 +227 211 181 255 243 245 241 233 204 235 215 182 +254 243 232 255 255 255 232 243 213 60 15 0 +251 155 0 0 0 0 30 0 0 255 240 0 +224 189 0 255 226 0 79 69 0 53 0 0 +36 0 0 54 0 0 252 176 0 244 225 0 +245 214 0 206 214 0 62 0 0 118 0 0 +73 0 0 5 0 0 237 179 0 250 235 0 +250 217 0 115 166 0 114 0 0 161 0 0 +49 0 0 207 154 0 248 225 0 239 210 0 +245 215 0 255 245 0 18 50 0 122 0 0 +81 0 0 255 255 139 244 230 0 252 223 51 +145 171 0 124 0 0 179 0 0 236 199 0 +247 242 112 250 234 0 184 148 0 183 0 0 +152 0 0 254 255 127 236 221 92 245 237 193 +255 246 164 75 81 0 239 178 0 249 227 0 +224 113 0 247 221 0 236 225 0 196 77 0 +242 219 145 241 228 178 138 84 0 238 198 188 +255 252 192 241 219 0 248 218 0 246 221 0 +251 230 0 254 235 137 255 252 226 255 255 255 +243 245 176 125 36 0 255 246 219 187 170 0 +240 180 151 220 191 0 218 98 0 255 255 255 +126 43 0 255 247 51 254 241 17 254 235 84 +255 255 160 79 0 0 157 0 0 255 213 47 +152 171 0 161 0 0 255 248 132 206 136 0 +89 54 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 249 234 +255 249 230 217 197 171 207 177 144 243 228 220 +255 251 232 239 219 181 243 221 195 255 247 239 +255 246 236 255 255 255 66 0 0 193 118 0 +223 145 0 106 110 0 0 0 0 255 233 0 +226 178 0 255 232 0 98 88 0 36 0 0 +0 0 0 29 0 0 250 159 0 242 213 0 +241 199 0 231 226 0 31 0 0 116 0 0 +33 0 0 0 0 0 190 68 0 249 228 0 +255 219 0 129 155 0 115 0 0 128 0 0 +46 0 0 190 140 0 246 215 0 240 205 0 +243 215 0 255 253 46 5 74 0 108 0 0 +102 0 0 254 229 0 245 218 0 255 243 109 +155 190 0 119 0 0 159 0 0 244 181 0 +253 245 79 255 244 37 159 110 0 179 0 0 +161 82 0 255 255 134 248 235 115 246 234 171 +255 255 171 0 0 0 252 172 0 234 222 0 +229 132 0 248 221 0 213 125 0 234 211 32 +246 214 148 196 184 0 242 187 116 255 246 0 +247 218 0 243 200 0 225 178 0 238 202 0 +233 182 0 237 201 0 247 219 0 252 243 172 +255 251 255 139 158 0 236 183 162 249 229 130 +234 129 0 232 234 53 204 58 0 255 255 255 +38 0 0 250 211 0 241 207 0 233 202 0 +255 247 56 116 0 0 178 0 0 255 223 76 +153 170 0 168 0 0 255 237 120 175 105 0 +133 62 19 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 244 237 255 246 232 +211 184 141 230 202 188 255 244 233 255 250 237 +215 195 152 246 222 209 255 247 233 255 241 228 +255 255 255 21 0 0 194 69 0 211 162 0 +192 108 0 151 155 0 0 0 0 227 172 0 +242 209 0 255 208 0 97 112 0 66 0 0 +0 0 0 27 0 0 251 159 0 235 208 0 +250 209 0 214 221 0 6 0 0 74 0 0 +52 0 0 10 0 0 169 41 0 251 234 0 +254 216 0 151 195 0 102 0 0 157 0 0 +38 0 0 156 77 0 255 249 0 248 224 0 +247 225 0 255 247 105 82 117 0 107 0 0 +94 0 0 255 241 0 249 236 0 255 244 80 +128 178 0 120 0 0 113 0 0 236 146 0 +250 234 8 251 227 0 170 109 0 183 0 0 +211 82 0 249 248 54 245 222 98 248 234 169 +255 255 186 40 0 0 251 205 0 219 177 0 +226 156 0 252 229 0 190 86 0 246 214 52 +251 225 115 123 62 0 255 246 94 248 232 0 +240 209 0 233 190 0 239 199 0 188 155 0 +192 136 0 229 187 0 226 177 0 252 226 0 +255 245 232 255 248 202 128 55 0 255 252 171 +183 106 0 246 227 102 177 79 0 255 255 255 +36 57 0 238 187 4 255 233 0 247 223 0 +255 241 0 113 59 0 135 0 0 255 209 138 +158 175 0 189 26 0 255 247 162 184 133 0 +91 53 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 243 231 255 248 238 235 222 192 205 181 145 +231 210 189 255 245 235 255 248 238 229 214 172 +252 237 228 255 246 233 255 248 234 255 253 242 +156 205 136 73 0 0 211 160 0 184 124 0 +210 151 0 205 147 0 0 0 0 211 158 0 +243 204 0 255 215 0 146 153 0 28 0 0 +24 0 0 0 0 0 239 122 0 238 203 0 +232 198 0 255 225 0 41 90 0 113 0 0 +18 0 0 60 0 0 91 0 0 255 255 0 +244 205 0 223 230 0 0 0 0 143 0 0 +56 0 0 92 0 0 249 224 0 242 214 0 +240 210 0 255 230 0 14 101 0 123 0 0 +79 0 0 255 219 0 251 238 75 255 240 65 +149 192 0 134 0 0 107 0 0 203 134 0 +254 242 26 255 234 62 134 139 0 186 0 0 +167 18 0 255 255 31 242 232 165 246 235 160 +255 255 201 0 0 0 255 203 0 223 180 0 +228 166 0 245 223 0 202 81 0 237 220 0 +254 223 133 130 75 0 255 229 0 247 216 0 +241 211 0 229 175 0 123 114 0 186 138 161 +176 174 173 78 74 0 219 173 9 239 194 0 +248 231 0 255 254 235 133 87 0 247 178 155 +212 176 0 255 224 161 203 142 0 255 214 195 +75 109 3 212 156 0 235 206 0 248 214 0 +255 234 0 124 127 0 105 0 0 234 185 110 +170 168 0 173 0 0 255 244 162 144 129 0 +118 74 41 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 247 242 238 225 192 202 176 142 242 223 213 +254 245 237 253 243 230 255 243 229 255 245 231 +255 246 230 255 243 229 255 255 246 184 214 140 +106 0 0 167 142 0 213 129 0 223 191 0 +176 113 0 255 247 0 62 0 0 190 125 0 +242 221 0 242 201 0 196 186 0 0 0 0 +27 0 0 6 0 0 210 76 0 244 202 0 +242 209 0 250 218 0 129 160 0 84 0 0 +68 0 0 47 0 0 102 0 0 255 243 0 +245 218 0 255 254 0 3 0 0 170 0 0 +105 0 0 0 0 0 255 223 0 244 218 0 +233 199 0 255 229 0 121 166 0 82 0 0 +79 0 0 255 228 0 241 218 25 249 219 7 +211 215 0 107 0 0 134 0 0 195 145 0 +248 237 0 255 230 17 182 169 0 178 0 0 +148 0 0 255 255 68 242 229 186 243 227 170 +255 255 192 42 0 0 244 201 0 214 165 0 +212 120 0 241 232 0 171 17 0 245 233 0 +247 221 31 169 83 0 255 231 0 249 230 0 +255 217 0 122 145 5 217 141 174 255 255 255 +255 233 226 255 255 255 21 1 0 255 221 0 +239 199 0 255 246 168 169 154 0 219 157 187 +229 204 0 241 195 57 212 152 0 255 206 173 +137 156 112 188 97 0 248 228 0 234 198 0 +255 213 0 126 168 0 133 0 0 238 199 9 +177 166 0 190 41 0 255 255 170 125 43 0 +173 143 144 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 253 241 227 +226 206 174 202 177 148 255 246 239 255 245 233 +250 242 226 253 240 229 252 240 230 253 241 233 +252 238 217 255 251 244 228 255 228 14 0 0 +205 80 0 147 95 0 227 183 0 154 87 0 +235 205 0 178 110 0 132 131 0 79 0 0 +255 242 0 229 183 0 209 222 0 3 0 0 +17 0 0 0 0 0 182 0 0 245 208 0 +241 214 0 234 194 0 202 210 0 0 0 0 +86 0 0 99 0 0 0 0 0 255 242 0 +244 204 0 250 243 0 33 0 0 146 0 0 +92 0 0 0 0 0 255 193 0 241 213 0 +224 190 0 246 199 0 180 211 38 107 0 0 +73 0 0 223 158 0 250 240 51 248 234 90 +236 231 0 97 0 0 128 0 0 173 30 0 +248 244 0 230 199 0 206 207 0 150 0 0 +157 0 0 247 249 0 243 227 172 241 234 170 +255 243 158 32 56 0 234 152 0 219 184 0 +226 150 0 233 208 0 200 104 0 255 251 102 +255 247 146 116 51 0 253 220 0 234 185 0 +255 248 74 75 64 0 254 212 190 255 254 243 +212 194 100 255 247 246 110 123 0 198 147 0 +246 205 0 249 224 0 162 118 0 198 123 35 +237 218 0 245 190 114 208 182 0 255 197 154 +126 158 108 201 122 15 255 239 0 253 227 0 +255 234 0 76 130 0 118 0 0 247 191 0 +190 139 0 194 64 0 255 255 176 95 0 0 +221 201 184 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 239 218 188 178 141 +207 175 152 246 240 237 251 240 227 253 239 225 +244 237 226 252 241 234 254 243 233 237 220 183 +246 237 223 255 255 255 30 0 0 227 153 0 +182 126 0 221 180 0 164 102 0 227 185 0 +142 83 0 191 170 0 204 167 0 0 0 0 +255 238 0 228 187 0 232 233 0 31 0 0 +98 0 0 0 0 0 99 0 0 248 203 0 +234 200 0 237 210 0 244 243 0 6 0 0 +79 0 0 0 0 0 22 0 0 255 199 0 +227 198 0 255 254 0 29 0 0 104 0 0 +89 0 0 0 0 0 173 93 0 233 202 0 +222 185 0 238 206 0 203 231 153 23 0 0 +119 0 0 207 146 0 239 224 0 236 211 0 +254 255 118 68 0 0 174 0 0 70 0 0 +254 254 0 237 216 0 220 224 0 145 0 0 +152 0 0 249 254 33 228 199 0 232 210 65 +251 224 140 92 138 47 172 55 0 235 207 0 +201 116 0 249 218 0 173 76 0 254 244 150 +255 255 255 84 46 0 225 165 0 228 182 0 +255 244 56 183 208 177 26 0 0 113 81 0 +182 115 141 255 233 0 98 113 0 201 123 0 +250 230 0 202 186 0 143 87 0 235 165 51 +232 197 0 234 183 0 221 158 0 255 226 213 +109 119 11 170 85 0 249 228 0 236 201 0 +255 236 0 55 112 0 134 0 0 253 190 0 +137 94 0 224 94 0 255 255 163 16 0 0 +249 242 221 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 246 234 209 195 169 133 238 219 206 +255 244 245 246 239 207 224 207 182 252 241 233 +250 241 232 245 235 207 234 215 188 243 238 228 +255 249 233 195 229 199 132 0 0 237 176 0 +141 104 0 224 157 0 107 65 0 208 168 0 +212 145 0 215 172 0 255 225 0 0 0 0 +255 233 0 224 188 0 255 248 0 0 0 0 +0 0 0 0 0 0 54 0 0 244 162 0 +243 215 0 228 199 0 255 221 0 15 0 0 +26 0 0 25 0 0 85 0 0 191 123 0 +245 216 0 254 219 0 115 136 0 27 0 0 +132 0 0 8 0 0 122 0 0 255 248 0 +226 200 0 232 199 0 255 244 118 52 0 0 +120 0 0 158 4 0 251 250 0 238 219 26 +253 234 0 8 0 0 173 0 0 48 0 0 +255 255 0 233 212 0 231 221 0 176 23 0 +141 0 0 216 183 0 235 220 25 233 213 83 +239 218 119 207 235 207 16 0 0 241 225 0 +196 65 0 238 193 0 183 158 0 250 209 136 +255 248 245 150 177 0 170 77 0 236 187 0 +234 213 0 255 249 255 237 245 200 207 202 197 +255 238 168 255 229 0 53 23 0 248 204 0 +250 222 0 225 221 0 0 0 0 242 212 0 +191 178 0 252 200 50 187 131 0 255 228 200 +54 108 0 223 141 107 246 224 0 249 222 0 +255 241 0 9 79 0 170 0 0 255 229 0 +147 34 0 238 165 0 255 255 173 40 0 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +223 202 162 201 176 143 244 223 208 255 250 237 +240 227 202 225 205 182 248 246 238 253 240 231 +240 233 212 240 225 203 248 240 232 254 246 238 +254 250 241 74 16 0 221 148 0 174 123 0 +223 159 0 151 144 0 243 204 0 160 124 0 +199 128 0 215 186 0 255 193 0 0 0 0 +239 199 0 237 197 0 255 221 0 23 0 0 +0 0 0 0 0 0 0 0 0 226 118 0 +243 218 0 221 184 0 255 236 0 0 10 0 +84 0 0 5 0 0 91 0 0 110 0 0 +247 242 0 237 197 0 208 223 0 0 0 0 +142 0 0 63 0 0 0 0 0 255 251 0 +227 193 0 222 185 0 255 243 0 0 0 0 +128 0 0 120 0 0 255 255 0 230 208 0 +248 220 4 119 156 0 143 0 0 84 0 0 +238 193 0 238 227 0 255 238 12 130 96 0 +149 0 0 181 69 0 244 246 75 233 209 52 +229 209 0 255 229 246 12 112 0 172 60 0 +227 201 0 197 89 0 228 232 0 215 89 0 +255 241 184 255 250 135 33 0 0 136 37 0 +233 196 0 246 224 0 251 230 172 255 244 185 +242 202 0 186 196 0 43 0 0 255 255 0 +219 191 0 208 161 0 72 0 0 255 234 0 +141 140 0 255 232 0 181 115 0 255 246 197 +19 0 0 231 188 172 239 210 0 237 205 0 +255 245 0 0 8 0 171 0 0 255 245 0 +100 0 0 250 216 91 237 255 144 42 0 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 217 198 164 +209 181 166 255 240 236 253 244 224 226 201 167 +241 218 206 246 244 234 253 241 232 241 229 192 +238 223 204 255 240 233 250 241 230 255 255 255 +46 17 0 185 86 0 165 101 0 220 158 0 +194 168 0 176 83 0 173 140 0 221 171 0 +147 136 0 169 86 0 216 161 0 122 136 0 +149 20 0 235 224 0 245 183 0 132 169 0 +14 0 0 0 0 0 0 0 0 189 0 0 +251 237 0 227 200 0 231 179 0 138 200 0 +82 0 0 18 0 0 83 0 0 22 0 0 +240 196 0 246 221 0 253 242 0 19 31 0 +163 0 0 0 0 0 0 0 0 255 201 0 +233 204 0 227 191 0 251 203 0 87 143 0 +66 0 0 71 0 0 255 216 0 231 214 0 +234 204 0 187 184 0 40 0 0 118 0 0 +168 122 0 252 233 0 222 196 0 212 208 0 +146 0 0 117 0 0 247 244 0 231 210 26 +221 196 0 242 216 191 226 238 209 0 0 0 +248 208 0 153 64 0 233 194 0 188 114 0 +213 107 0 248 238 196 239 241 193 155 172 0 +55 0 0 198 139 0 182 131 0 176 146 0 +118 72 0 65 0 0 252 241 0 230 194 0 +229 203 0 58 0 0 209 173 3 255 251 0 +106 58 0 255 255 12 92 0 0 255 255 221 +36 0 0 253 222 79 244 217 0 250 219 0 +255 255 79 0 0 0 216 0 0 251 255 0 +103 0 0 255 255 127 164 181 42 90 33 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 223 199 170 204 184 156 +255 251 245 242 227 211 229 204 159 255 239 234 +255 246 237 255 249 239 240 220 185 247 227 198 +255 247 234 250 239 230 255 249 236 247 255 255 +146 0 0 199 144 0 215 154 0 158 127 0 +198 123 0 170 158 0 231 175 0 223 188 0 +181 92 0 177 152 0 220 159 0 242 222 0 +0 0 0 255 232 0 237 200 0 255 253 0 +0 0 0 0 0 0 54 0 0 64 0 0 +255 217 0 230 193 0 239 209 0 218 222 0 +13 0 0 19 0 0 54 0 0 0 0 0 +180 61 0 243 221 0 238 186 0 153 193 0 +25 0 0 79 0 0 0 0 0 196 62 0 +238 213 0 229 203 0 243 203 0 197 212 65 +0 0 0 95 0 0 255 159 0 230 211 0 +188 142 0 254 233 0 89 82 0 75 0 0 +0 0 0 255 213 0 247 236 0 236 207 0 +157 142 0 59 0 0 249 214 0 247 224 43 +250 242 181 223 200 0 255 232 206 20 107 0 +180 44 0 223 199 0 212 103 0 205 167 0 +196 107 0 212 147 0 255 233 153 255 242 208 +208 216 157 163 153 99 143 117 50 136 94 0 +229 199 148 255 233 0 240 207 0 219 202 0 +96 39 0 34 0 0 255 255 69 253 237 0 +126 0 0 225 243 0 163 11 0 228 253 47 +106 0 0 244 237 0 234 206 0 233 197 0 +255 248 36 41 0 0 240 141 0 200 218 0 +168 0 0 255 255 189 144 127 0 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 210 186 151 255 242 245 +224 211 160 228 201 170 255 246 240 255 248 237 +253 243 229 234 205 161 252 239 232 255 246 232 +255 243 228 254 241 229 255 255 255 27 0 0 +201 102 0 150 35 0 240 212 0 176 91 0 +228 201 0 146 103 0 209 147 0 195 171 0 +221 168 0 227 204 0 126 64 0 230 177 0 +0 0 0 200 106 0 254 219 0 255 204 0 +100 132 0 0 0 0 3 0 0 0 0 0 +254 180 0 230 205 0 212 171 0 255 255 0 +30 0 0 13 0 0 46 0 0 82 0 0 +73 0 0 255 233 0 245 219 0 228 232 0 +0 0 0 162 0 0 0 0 0 43 0 0 +255 247 0 215 172 0 210 177 0 255 247 255 +0 62 0 90 0 0 149 0 0 231 221 0 +230 205 0 228 169 0 219 199 0 0 0 0 +61 0 0 78 0 0 252 243 0 236 212 70 +226 243 0 90 0 0 149 0 0 253 235 81 +233 204 0 245 218 60 218 196 0 255 255 186 +0 0 0 94 0 0 221 172 0 210 129 0 +185 158 0 179 96 0 180 92 0 227 156 0 +238 217 139 247 209 120 238 207 48 249 229 0 +228 200 0 231 181 0 171 179 0 122 0 0 +0 0 0 252 240 173 237 201 0 206 206 0 +209 119 0 167 163 0 153 69 0 222 221 0 +179 108 0 243 224 0 223 196 0 236 196 0 +251 254 97 65 0 0 248 154 0 145 123 0 +166 70 0 243 255 52 63 0 0 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +194 170 132 233 211 196 255 248 237 216 188 147 +243 221 202 255 244 234 255 248 237 238 223 181 +233 209 180 253 242 227 253 241 233 255 243 227 +255 244 229 255 242 238 247 255 205 107 0 0 +155 112 0 135 95 0 197 157 0 173 81 0 +199 167 0 227 182 0 197 138 0 181 125 0 +184 114 0 172 133 0 198 151 0 237 197 0 +179 169 0 0 0 0 253 231 0 251 205 0 +207 222 0 0 0 0 36 0 0 15 0 0 +239 146 0 225 200 0 234 208 0 237 188 0 +94 152 0 21 0 0 67 0 0 50 0 0 +0 0 0 255 246 0 225 198 0 255 243 0 +0 0 0 101 0 0 110 0 0 0 0 0 +255 229 0 239 219 0 242 223 0 233 203 173 +198 212 74 56 0 0 108 0 0 249 194 0 +199 179 0 220 191 0 253 241 0 105 0 0 +124 0 0 0 0 0 255 208 0 230 205 0 +243 197 0 153 185 0 134 0 0 166 49 0 +255 255 179 235 205 0 247 227 190 233 195 62 +251 246 171 0 50 0 70 0 0 218 128 0 +158 71 0 211 124 0 203 173 0 210 143 0 +210 151 0 203 184 0 199 135 0 184 152 0 +210 149 0 166 151 0 77 0 0 0 0 0 +171 111 52 255 232 51 255 231 0 79 72 0 +255 243 0 31 0 0 255 252 55 67 94 0 +255 205 0 238 211 0 243 217 0 252 209 0 +157 196 0 108 0 0 254 255 26 109 0 0 +255 221 0 202 168 0 5 0 0 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +237 218 204 253 242 231 215 194 148 245 222 214 +255 249 240 255 249 241 241 222 187 244 226 208 +255 245 241 255 250 235 252 240 227 255 243 226 +255 246 232 255 255 255 83 116 0 121 0 0 +251 181 0 173 155 0 202 145 0 142 118 0 +216 138 0 215 181 0 168 103 0 228 174 0 +167 164 0 235 159 0 136 132 0 202 145 0 +234 158 0 0 0 0 251 194 0 224 204 0 +255 230 0 0 0 0 0 0 0 28 0 0 +136 0 0 243 227 0 220 180 0 242 213 0 +217 221 0 23 0 0 46 0 0 36 0 0 +22 0 0 191 95 0 255 232 0 248 206 0 +194 216 0 0 0 0 91 0 0 0 0 0 +178 0 0 255 242 0 212 179 0 212 167 0 +255 255 255 0 0 0 113 0 0 164 0 0 +232 230 0 205 171 0 236 193 0 199 211 0 +116 0 0 44 0 0 47 0 0 255 253 0 +239 203 0 255 244 0 92 0 0 114 0 0 +217 166 0 255 253 126 234 205 29 243 234 177 +238 196 107 255 255 255 151 177 0 0 0 0 +95 0 0 131 38 0 154 51 0 163 104 0 +159 109 0 199 164 0 98 0 0 116 0 0 +25 0 0 12 0 0 27 0 0 255 240 233 +255 240 217 254 226 0 144 148 0 109 0 0 +251 255 0 107 0 0 255 255 31 33 0 0 +255 255 0 228 196 0 216 179 0 255 212 0 +21 64 0 200 0 0 207 230 0 97 0 0 +255 255 0 126 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 254 231 211 182 147 237 218 202 255 251 241 +254 244 231 237 223 187 245 216 202 255 251 239 +254 240 232 247 236 206 250 234 217 253 242 229 +255 255 255 171 190 115 84 0 0 175 137 0 +187 117 0 138 81 0 231 204 0 189 127 0 +169 150 0 174 94 0 156 74 0 223 201 0 +142 73 0 221 168 0 189 166 0 154 79 0 +196 118 0 193 170 0 140 0 0 225 208 0 +254 200 0 104 155 0 0 0 0 28 0 0 +72 0 0 251 190 0 242 214 0 217 186 0 +248 195 0 157 199 0 0 0 0 122 0 0 +0 0 0 11 0 0 253 227 0 223 183 0 +255 240 0 0 0 0 49 0 0 0 0 0 +0 0 0 221 136 0 241 211 0 218 192 0 +255 217 96 79 152 0 112 0 0 65 0 0 +188 136 0 237 220 0 168 150 0 247 203 0 +119 97 0 120 0 0 0 0 0 251 188 0 +239 214 0 222 194 0 216 220 0 85 0 0 +68 0 0 245 212 0 255 245 118 229 201 0 +239 232 154 226 210 51 247 224 167 227 229 97 +137 154 0 0 0 0 0 0 0 0 0 0 +28 0 0 0 0 0 0 0 0 0 0 0 +131 30 0 186 163 44 255 255 177 243 219 35 +234 201 0 238 229 0 82 0 0 255 233 0 +88 84 0 234 182 0 187 184 0 176 89 0 +247 222 0 225 196 0 240 197 0 238 231 0 +0 0 0 255 167 0 129 67 0 112 0 0 +255 255 0 0 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +211 184 131 247 235 232 253 242 236 255 247 235 +216 198 154 236 213 189 255 246 238 255 244 237 +236 222 191 241 220 198 250 241 232 254 241 230 +255 255 255 0 0 0 175 33 0 192 128 0 +209 169 0 172 143 0 110 27 0 244 215 0 +135 92 0 236 189 0 137 104 0 166 94 0 +212 186 0 144 65 0 192 111 0 192 115 0 +153 111 0 198 31 0 0 0 0 255 221 0 +227 186 0 255 242 0 0 0 0 0 0 0 +0 0 0 241 132 0 223 177 0 223 200 0 +227 192 0 255 222 0 0 0 0 25 0 0 +22 0 0 70 0 0 205 125 0 244 224 0 +244 195 0 187 224 0 0 0 0 117 0 0 +0 0 0 68 0 0 241 221 0 232 205 0 +224 206 0 251 219 205 0 0 0 118 0 0 +224 110 0 170 163 0 195 115 0 179 156 0 +247 242 0 157 67 0 94 0 0 0 0 0 +197 118 0 237 192 0 231 214 80 216 202 0 +79 0 0 77 0 0 197 119 0 255 246 84 +243 235 72 224 197 0 227 210 0 232 212 54 +255 222 151 255 242 63 226 230 181 230 214 132 +187 181 0 204 175 62 190 178 0 255 238 180 +255 255 167 250 216 75 242 227 44 234 202 0 +250 227 0 11 0 0 226 171 0 249 234 0 +0 0 0 255 253 0 0 0 0 255 229 0 +210 168 0 226 177 0 248 207 0 102 126 0 +59 0 0 255 248 0 0 0 0 236 201 0 +124 127 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +240 229 217 252 246 236 252 245 239 226 206 167 +241 226 212 251 245 240 251 242 233 236 221 185 +234 227 207 253 248 238 244 236 228 255 244 233 +238 255 251 108 0 0 102 17 0 234 200 0 +182 118 0 197 186 0 181 155 0 158 79 0 +154 93 0 182 143 0 186 144 0 176 76 0 +208 178 0 206 143 0 187 151 0 178 63 0 +164 69 0 210 140 0 140 93 0 158 84 0 +227 201 0 255 246 0 0 0 0 0 0 0 +0 0 0 132 0 0 235 184 0 220 203 0 +216 165 0 255 237 0 39 48 0 0 0 0 +62 0 0 73 0 0 15 0 0 241 194 0 +230 207 0 241 206 0 125 184 0 1 0 0 +108 0 0 0 0 0 255 206 0 219 194 0 +208 171 0 237 200 0 113 158 0 0 0 0 +136 0 0 214 141 0 189 180 0 189 108 0 +180 119 0 243 231 0 144 0 0 15 0 0 +0 0 0 211 140 0 221 181 0 227 211 0 +237 241 0 67 0 0 30 0 0 139 6 0 +255 238 0 246 238 0 229 208 38 227 192 0 +233 209 97 245 220 81 234 202 17 242 237 172 +247 213 103 241 216 162 252 243 186 235 210 107 +240 214 125 244 221 0 241 211 0 187 208 0 +74 0 0 185 86 0 255 255 0 0 0 0 +222 233 0 99 73 0 162 36 0 255 247 0 +204 166 0 221 167 0 255 224 0 0 0 0 +192 0 0 204 249 0 62 0 0 255 255 0 +0 0 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 249 241 246 235 221 220 203 170 248 229 218 +251 244 237 249 239 229 234 215 174 249 240 235 +249 238 230 253 244 228 247 238 228 255 255 255 +52 74 0 178 81 0 216 197 0 105 17 0 +243 201 0 158 121 0 232 189 0 211 176 0 +190 175 0 169 104 0 218 181 0 120 111 0 +151 45 0 186 150 0 131 0 0 184 128 0 +181 141 0 123 19 0 233 141 0 0 0 0 +228 132 0 241 201 0 203 193 0 0 0 0 +0 0 0 0 0 0 190 0 0 205 205 0 +230 203 0 218 170 0 234 246 0 0 0 0 +0 0 0 81 0 0 0 0 0 172 26 0 +251 238 0 230 207 0 255 249 0 0 0 0 +76 0 0 61 0 0 59 0 0 250 220 0 +218 192 0 208 167 0 255 239 238 63 90 0 +79 0 0 116 0 0 240 224 0 148 94 0 +237 202 0 213 181 0 255 248 0 46 0 0 +0 0 0 0 0 0 202 61 0 194 160 0 +236 226 0 219 232 148 191 140 0 96 0 0 +73 0 0 114 0 0 224 224 0 241 217 0 +227 223 40 243 214 70 228 198 0 248 234 171 +243 221 0 198 162 0 245 204 55 250 230 0 +219 217 0 204 190 0 103 14 0 154 0 0 +250 190 0 255 255 0 0 0 0 139 0 0 +178 145 0 81 0 0 250 220 0 233 211 0 +198 155 0 223 180 0 203 182 0 26 0 0 +253 153 0 0 0 0 239 159 0 210 187 0 +0 0 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +250 245 229 220 198 161 244 229 218 255 246 240 +233 224 195 223 202 161 252 241 238 246 238 226 +244 237 228 249 239 225 242 233 230 255 255 255 +98 15 0 120 0 0 226 207 0 179 147 0 +97 6 0 164 60 0 175 133 0 147 101 0 +177 134 0 140 85 0 95 44 0 197 124 0 +142 104 0 148 28 0 129 31 0 201 148 0 +137 0 0 161 62 0 190 122 0 242 194 0 +0 0 0 255 242 0 231 211 0 168 171 0 +0 0 0 44 0 0 0 0 0 242 173 0 +211 173 0 238 208 0 255 206 0 0 0 0 +0 0 0 79 0 0 58 0 0 0 0 0 +255 210 0 223 188 0 240 185 0 173 225 0 +0 0 0 112 0 0 0 0 0 184 86 0 +229 197 0 199 168 0 198 151 0 255 255 134 +0 0 0 148 0 0 68 0 0 220 202 0 +195 141 0 183 138 0 233 206 0 240 199 0 +165 124 0 0 0 0 0 0 0 84 0 0 +181 98 0 163 132 0 231 224 0 238 239 0 +194 178 0 118 34 0 65 0 0 121 0 0 +120 0 0 172 137 0 180 139 0 201 169 34 +206 165 0 165 125 0 150 111 0 109 40 0 +99 0 0 110 0 0 243 152 0 199 196 0 +222 163 0 0 0 0 154 81 0 174 161 0 +0 0 0 255 255 0 238 210 0 215 185 0 +227 179 0 244 213 0 0 0 0 184 37 0 +255 255 0 0 0 0 255 255 60 0 0 0 +233 201 185 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +222 203 167 251 238 232 255 248 239 239 229 204 +232 217 197 249 241 236 250 240 231 245 239 229 +247 237 226 245 238 225 251 243 233 205 215 208 +134 31 0 186 172 0 150 85 0 210 182 0 +215 172 0 153 143 0 195 122 0 146 90 0 +223 207 0 111 0 0 169 119 0 189 122 0 +189 103 0 68 0 0 186 69 0 154 73 0 +164 68 0 180 84 0 197 80 0 20 0 0 +60 50 0 118 0 0 215 188 0 255 248 0 +0 0 0 27 0 0 53 0 0 221 75 0 +246 220 0 186 166 0 228 196 0 249 250 0 +74 39 0 0 0 0 15 0 0 0 0 0 +73 0 0 252 248 0 228 179 0 255 205 0 +34 66 0 0 0 0 96 0 0 0 0 0 +220 103 0 208 175 0 222 186 0 246 213 0 +218 232 0 0 0 0 39 0 0 86 0 0 +191 217 0 192 127 0 158 105 0 218 175 0 +232 212 0 252 216 0 38 0 0 0 0 0 +0 0 0 155 17 0 122 7 0 255 213 0 +215 199 0 255 244 12 206 174 0 200 157 0 +182 102 0 157 89 0 104 0 0 132 4 0 +126 34 0 139 30 0 157 63 0 208 135 0 +229 210 0 246 226 0 220 200 0 109 0 0 +0 0 0 154 113 0 203 197 0 129 89 0 +191 101 0 240 221 0 227 187 0 213 165 0 +243 196 0 218 205 0 0 0 0 255 231 0 +24 38 0 217 127 0 82 126 0 0 0 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 239 227 255 248 239 244 231 206 234 220 195 +248 237 232 248 240 229 247 237 225 250 237 229 +245 237 226 250 240 227 255 249 255 88 117 0 +181 72 0 225 183 0 148 100 0 143 89 0 +182 97 0 141 101 0 195 183 0 159 120 0 +181 133 0 188 157 0 121 17 0 148 58 0 +152 29 0 179 55 0 183 119 0 202 98 0 +110 0 0 63 0 0 123 135 110 214 218 190 +255 228 221 17 76 0 238 179 0 228 187 0 +187 223 0 0 0 0 0 0 0 0 0 0 +231 167 0 235 195 0 217 191 0 236 181 0 +239 227 0 0 0 0 84 0 0 39 0 0 +0 0 0 228 116 0 229 214 0 226 192 0 +251 234 0 0 0 0 0 0 0 0 0 0 +0 0 0 255 204 0 244 215 0 215 175 0 +255 233 134 191 222 0 0 0 0 75 0 0 +119 0 0 183 141 0 156 114 0 192 159 0 +175 113 0 168 127 0 238 173 0 177 163 0 +42 0 0 0 0 0 0 0 0 0 0 0 +73 0 0 211 163 0 230 185 0 255 237 0 +255 245 0 255 231 0 230 214 0 229 208 0 +249 237 0 237 203 0 255 220 0 219 149 0 +159 121 0 98 0 0 0 0 0 78 0 0 +203 170 0 242 176 0 0 0 0 79 0 0 +255 255 0 214 170 0 236 197 0 213 169 0 +249 213 0 0 0 0 157 6 0 170 177 0 +0 0 0 255 255 0 0 0 0 250 208 187 +255 255 241 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 246 244 227 210 169 233 212 202 248 240 234 +244 238 226 248 239 227 247 237 227 246 238 228 +252 239 230 254 246 237 251 254 224 0 0 0 +187 125 0 134 61 0 249 224 0 168 92 0 +104 61 0 245 200 0 167 109 0 169 84 0 +212 190 0 144 0 0 207 167 0 146 68 0 +121 0 0 182 113 0 165 17 0 0 0 0 +204 226 224 203 214 193 251 234 211 191 179 154 +194 172 152 255 229 235 44 11 0 237 191 0 +255 211 0 24 67 0 0 0 0 0 0 0 +130 0 0 245 189 0 218 195 0 213 178 0 +255 211 0 98 150 0 0 0 0 53 0 0 +53 0 0 0 0 0 227 94 0 242 220 0 +203 166 0 255 210 0 0 0 0 9 0 0 +0 0 0 107 0 0 225 208 0 225 174 0 +218 174 0 255 230 125 248 255 53 0 0 0 +23 0 0 121 0 0 166 104 0 163 109 0 +190 189 0 194 128 0 226 185 0 143 103 0 +238 221 0 168 119 0 152 0 0 0 0 0 +28 0 0 0 0 0 0 0 0 23 0 0 +102 0 0 100 0 0 159 114 0 135 28 0 +120 111 0 21 0 0 7 0 0 0 0 0 +44 0 0 96 0 0 199 204 0 130 133 0 +246 202 0 0 0 0 201 175 0 253 236 0 +235 208 0 218 176 0 212 159 0 255 255 0 +0 0 0 50 0 0 255 255 0 0 0 0 +237 150 0 24 66 0 179 127 130 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +226 204 174 246 231 223 250 248 234 245 236 225 +248 238 227 246 238 229 249 236 227 250 243 229 +244 237 228 255 250 247 161 192 134 110 0 0 +238 222 0 163 27 0 158 136 0 215 168 0 +203 170 0 200 152 0 162 87 0 144 132 0 +81 0 0 206 176 0 116 0 0 192 108 0 +150 37 0 69 0 0 112 99 89 244 255 231 +210 181 150 224 205 172 186 156 144 204 192 154 +202 182 162 220 205 178 239 216 223 36 72 0 +211 150 0 255 233 0 94 90 0 0 0 0 +29 0 0 40 0 0 255 249 0 216 189 0 +209 169 0 255 247 0 0 0 0 0 0 0 +138 0 0 0 0 0 0 0 0 255 229 0 +193 142 0 234 193 0 184 158 0 0 0 0 +0 0 0 0 0 0 171 34 0 255 255 0 +232 197 0 221 182 0 236 176 0 255 255 38 +2 9 0 0 0 0 43 0 0 202 81 0 +201 118 0 151 134 0 182 212 0 156 41 0 +123 78 0 161 145 0 210 175 0 213 198 0 +209 182 0 149 14 0 60 48 0 130 0 0 +68 6 0 20 0 0 4 0 0 40 0 0 +76 0 0 147 132 0 78 0 0 202 172 0 +255 236 0 163 181 0 130 37 0 131 3 0 +0 0 0 216 171 0 255 229 0 234 213 0 +217 181 0 210 155 0 255 218 0 120 86 0 +0 0 0 235 124 0 11 0 0 187 89 0 +254 255 0 0 0 0 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +246 236 229 250 241 229 247 241 229 248 239 229 +248 241 229 251 242 227 244 236 225 245 238 225 +250 239 231 255 255 255 79 29 0 108 7 0 +163 54 0 106 132 0 172 128 0 164 85 0 +104 3 0 178 121 0 187 153 0 191 59 0 +116 74 0 203 95 0 128 23 0 70 0 0 +136 159 153 223 212 210 215 187 158 231 219 192 +191 162 140 205 173 148 222 218 198 222 194 159 +202 187 164 203 194 165 217 183 166 255 231 236 +71 86 0 237 142 0 255 255 0 54 0 0 +0 0 0 60 0 0 140 0 0 216 208 0 +224 185 0 216 176 0 252 245 0 54 80 0 +0 0 0 12 0 0 0 0 0 16 0 0 +255 255 0 213 195 0 255 212 0 139 136 0 +0 0 0 21 0 0 0 0 0 94 0 0 +255 229 0 229 200 0 233 197 0 234 191 0 +255 233 0 194 197 0 0 0 0 0 0 0 +60 0 0 192 0 0 93 0 0 197 108 0 +179 99 0 96 57 0 191 159 0 143 126 0 +144 124 0 175 123 0 168 151 0 199 184 0 +203 172 0 175 150 0 211 176 0 180 174 0 +207 188 0 203 178 0 144 124 0 197 208 0 +114 0 0 140 49 0 0 0 0 113 0 0 +228 166 0 255 225 0 206 180 0 211 166 0 +213 166 0 252 211 0 228 180 0 0 0 0 +255 211 0 180 168 0 0 0 0 255 255 0 +0 0 0 255 254 242 255 252 240 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +246 240 231 248 239 228 245 238 226 252 237 228 +250 241 228 250 239 228 253 240 233 249 238 229 +249 241 232 255 255 255 49 0 0 188 75 0 +172 147 0 180 124 0 222 172 0 135 122 0 +225 192 0 101 69 0 120 0 0 225 182 0 +87 0 0 69 0 0 151 174 148 201 215 200 +241 209 175 209 190 166 192 179 150 210 193 157 +205 199 175 217 189 151 231 223 219 218 184 163 +239 235 220 217 196 170 239 218 199 208 204 175 +255 249 255 8 53 0 189 81 0 219 222 0 +0 0 0 10 0 0 0 0 0 211 66 0 +237 234 0 210 154 0 213 185 0 255 239 0 +0 0 0 0 0 0 0 0 0 0 0 0 +159 34 0 237 214 0 199 145 0 240 227 0 +206 167 0 0 0 0 0 0 0 0 0 0 +76 0 0 255 226 0 233 207 0 211 167 0 +234 205 0 240 192 0 252 234 0 193 193 0 +0 0 0 0 0 0 0 0 0 94 0 0 +126 0 0 160 46 0 202 179 0 135 58 0 +149 160 0 186 119 0 129 105 0 116 22 0 +149 118 0 143 126 0 170 88 0 160 104 0 +132 74 0 170 142 0 199 151 0 135 15 0 +0 0 0 0 0 0 232 184 0 255 243 0 +243 232 0 204 167 0 228 189 0 183 151 0 +245 210 0 205 158 0 0 0 0 255 175 0 +112 82 0 0 0 0 255 236 0 0 0 0 +221 188 164 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 243 230 255 244 232 253 245 230 248 237 228 +245 242 229 245 238 224 245 236 227 246 237 225 +255 255 255 190 213 182 116 0 0 176 123 0 +102 0 0 202 202 0 140 48 0 155 111 0 +150 92 0 238 178 0 88 0 0 148 10 0 +25 0 0 199 213 220 255 221 201 217 214 196 +220 197 173 214 189 170 250 230 220 186 173 132 +222 187 176 224 226 199 218 185 170 192 168 139 +201 188 152 203 179 153 199 183 143 201 169 146 +239 226 202 255 240 251 126 162 125 210 123 0 +229 234 0 0 0 0 39 0 0 0 0 0 +141 0 0 245 255 0 201 171 0 218 177 0 +255 241 0 0 0 0 0 0 0 0 0 0 +0 0 0 26 0 0 255 255 0 189 125 0 +241 217 0 206 185 0 0 0 0 0 0 0 +0 0 0 56 0 0 226 111 0 255 251 0 +217 184 0 232 204 0 225 192 0 230 173 0 +255 247 0 204 194 0 83 57 0 0 5 0 +0 0 0 0 0 0 0 0 0 159 0 0 +143 0 0 108 0 0 118 0 0 194 148 0 +137 53 0 160 0 0 0 0 0 83 0 0 +0 0 0 0 0 0 0 0 0 105 42 0 +238 225 0 255 220 0 223 203 0 215 193 0 +212 147 0 202 172 0 189 121 0 255 235 0 +156 62 0 0 0 0 175 0 0 163 114 0 +0 0 0 255 9 0 0 0 0 224 176 167 +255 255 255 251 242 229 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 237 228 249 237 224 248 237 229 245 238 226 +248 238 228 245 238 229 249 236 225 245 237 227 +255 255 255 107 128 0 107 0 0 215 171 0 +156 164 0 120 0 0 194 122 0 216 150 0 +28 0 0 209 104 0 0 0 0 91 89 30 +255 255 255 181 167 142 231 210 183 194 177 160 +210 190 163 215 196 187 230 225 200 244 233 226 +228 221 204 209 192 153 218 186 178 229 222 190 +224 205 179 223 204 189 231 211 194 180 184 158 +233 203 182 195 178 154 243 202 194 119 158 117 +206 106 0 236 215 0 0 6 0 0 0 0 +0 0 0 198 58 0 227 229 0 185 133 0 +212 184 0 232 219 0 79 83 0 0 0 0 +0 0 0 0 0 0 59 0 0 255 251 0 +188 127 0 169 105 0 225 215 0 87 24 0 +0 0 0 0 0 0 0 0 0 168 0 0 +233 198 0 235 199 0 192 159 0 234 193 0 +238 201 0 214 182 0 242 201 0 255 231 0 +242 208 0 151 140 0 111 98 0 60 65 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 27 0 0 111 73 0 118 119 0 +174 152 0 208 191 0 255 248 0 229 205 0 +241 199 0 192 154 0 231 209 0 209 136 0 +169 156 0 240 185 0 198 166 0 144 43 0 +0 0 0 255 159 0 231 235 0 0 0 0 +255 75 0 88 15 0 127 107 104 255 255 255 +251 239 226 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 241 230 247 236 226 248 241 228 247 237 227 +243 238 228 249 239 230 252 242 229 254 242 229 +255 255 255 7 0 0 147 90 0 204 145 0 +190 131 0 170 136 0 54 0 0 211 107 0 +38 0 0 0 0 0 224 223 169 213 195 171 +216 192 165 224 210 189 215 199 171 232 216 202 +207 190 156 234 219 197 217 198 174 219 189 168 +210 196 167 221 192 186 216 216 178 197 181 152 +224 195 170 226 218 183 223 217 194 194 167 145 +196 193 168 243 208 190 203 193 171 255 215 215 +161 192 98 106 52 0 250 225 0 69 38 0 +0 0 0 0 0 0 222 123 0 240 208 0 +200 166 0 217 157 0 255 237 0 36 45 0 +0 0 0 0 0 0 0 0 0 29 0 0 +216 150 0 221 210 0 201 153 0 216 174 0 +134 133 0 0 0 0 0 0 0 0 0 0 +44 0 0 208 69 0 224 186 0 235 202 0 +208 191 0 215 169 0 194 161 0 238 184 0 +239 203 0 244 203 0 246 199 0 244 213 0 +255 250 0 248 227 0 255 253 0 255 225 0 +255 240 0 255 252 0 242 185 0 255 235 0 +241 194 0 202 152 0 213 173 0 213 178 0 +196 143 0 204 188 0 224 152 0 183 136 0 +255 244 0 191 126 0 0 0 0 0 0 0 +212 172 0 185 172 0 0 0 0 255 12 0 +0 0 0 109 91 27 255 255 255 255 245 230 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 241 228 252 241 227 250 243 230 250 241 226 +245 237 229 249 240 228 248 240 229 249 241 231 +255 255 255 89 0 0 222 152 0 143 74 0 +115 0 0 229 174 0 137 42 0 82 0 0 +96 123 80 255 252 211 204 184 157 218 211 192 +190 169 139 240 223 215 229 203 187 247 242 224 +223 196 180 229 231 210 240 227 222 239 231 208 +223 221 203 234 219 205 245 241 229 247 240 234 +221 218 190 254 246 242 209 192 163 223 209 197 +218 203 185 203 189 154 214 192 169 214 190 167 +228 224 198 254 232 232 76 101 0 205 161 0 +214 178 0 0 0 0 0 0 0 65 0 0 +242 192 0 236 205 0 207 177 0 230 168 0 +131 98 0 0 0 0 0 0 0 0 0 0 +0 0 0 130 0 0 183 166 0 240 186 0 +162 99 0 218 212 0 88 0 0 0 0 0 +0 0 0 0 0 0 86 0 0 219 129 0 +248 179 0 212 185 0 218 192 0 190 150 0 +217 177 0 175 134 0 214 177 0 205 140 0 +211 180 0 187 142 0 201 153 0 202 149 0 +206 157 0 226 165 0 197 151 0 234 202 0 +204 143 0 146 140 0 218 174 0 222 188 0 +193 130 0 240 203 0 218 163 0 186 168 0 +94 0 0 0 0 0 118 0 0 229 182 0 +168 74 0 0 0 0 207 0 0 0 0 0 +247 222 204 255 255 255 255 244 231 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +250 241 230 253 243 231 253 247 231 252 239 228 +248 238 226 246 238 228 246 236 226 250 240 235 +255 255 225 95 0 0 152 75 0 173 55 0 +197 132 0 116 0 0 12 0 0 220 227 217 +221 204 178 206 181 159 224 202 181 220 209 189 +192 183 151 248 235 230 201 178 141 250 234 232 +251 245 235 249 242 230 248 238 229 248 240 231 +251 239 231 248 243 232 249 239 227 248 236 228 +250 241 231 249 244 229 239 218 204 222 210 184 +198 170 152 236 216 191 192 178 159 217 190 163 +210 194 161 202 177 158 250 216 213 164 183 153 +134 87 0 220 154 0 0 0 0 0 0 0 +0 0 0 255 214 0 207 204 0 213 177 0 +250 214 0 208 198 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 166 133 0 +250 215 0 126 103 0 236 176 0 135 37 0 +49 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 172 24 0 161 94 0 248 159 0 +221 183 0 188 150 0 188 156 0 200 157 0 +148 105 0 178 148 0 216 176 0 168 138 0 +219 175 0 185 145 0 230 161 0 209 188 0 +212 151 0 225 223 0 208 165 0 255 184 0 +202 157 0 204 95 0 0 0 0 0 0 0 +0 0 0 231 68 0 227 213 0 0 0 0 +0 0 0 10 0 0 0 0 0 255 234 204 +255 255 255 255 244 230 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +250 243 235 250 239 226 250 241 229 255 244 232 +245 236 227 252 242 232 249 237 228 248 240 229 +255 255 255 53 0 0 139 23 0 145 0 0 +75 0 0 121 120 62 228 244 234 237 208 171 +231 219 213 225 218 201 242 216 196 254 249 240 +254 242 229 248 242 235 253 245 233 247 240 231 +248 240 229 251 237 227 248 239 225 249 238 227 +245 237 229 249 238 229 249 242 229 245 238 225 +246 238 226 249 239 227 248 242 233 229 228 211 +243 228 209 215 196 166 211 195 164 184 164 158 +213 195 167 234 219 214 202 185 144 233 212 202 +213 203 197 165 171 106 151 65 0 157 59 0 +0 0 0 0 0 0 171 11 0 255 247 0 +183 133 0 162 160 0 185 174 0 115 77 0 +0 0 0 0 0 0 0 0 0 0 0 0 +150 8 0 197 117 0 223 203 0 163 123 0 +134 121 0 255 168 0 25 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +71 0 0 135 18 0 154 75 0 230 150 0 +181 111 0 210 157 0 234 164 0 224 174 0 +242 162 0 225 169 0 255 197 0 237 207 0 +174 115 0 128 83 0 147 0 0 0 0 0 +0 0 0 0 0 0 7 0 0 182 140 0 +251 97 0 52 31 0 0 0 0 0 0 0 +0 0 0 93 52 0 255 226 229 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +251 243 229 248 239 229 247 239 231 247 239 227 +246 240 227 246 240 227 254 240 231 253 245 231 +255 251 250 164 196 160 65 90 0 152 163 142 +200 192 171 253 239 225 220 214 188 238 214 206 +253 252 237 242 234 215 244 235 225 250 241 232 +243 238 229 247 239 227 252 241 231 247 240 227 +250 240 228 247 241 229 248 237 228 248 242 228 +247 238 229 248 238 226 248 241 228 247 241 229 +247 241 227 246 238 230 248 240 228 240 231 204 +250 233 226 195 184 140 198 165 142 246 216 205 +195 196 162 209 176 157 210 187 164 227 218 191 +192 168 154 235 194 179 237 240 219 150 169 91 +149 113 0 48 0 0 0 0 0 76 0 0 +255 188 0 247 222 0 129 89 0 214 195 0 +247 160 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 55 0 0 213 134 0 +199 141 0 210 201 0 206 152 0 184 97 0 +186 76 0 43 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 11 0 0 +127 0 0 210 206 0 255 214 0 167 93 0 +0 0 0 0 0 0 0 0 0 0 0 0 +220 188 166 255 255 255 255 250 241 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +253 242 234 250 243 228 246 242 230 253 243 230 +250 243 233 250 243 231 253 243 230 253 247 232 +254 242 233 251 246 225 239 215 209 247 231 211 +237 222 214 255 248 245 255 247 237 250 246 237 +248 236 226 254 242 235 248 243 230 250 240 231 +248 238 228 250 242 231 251 243 230 252 244 233 +247 240 228 250 240 225 248 241 232 249 241 228 +245 236 224 249 237 229 248 241 228 249 241 227 +251 243 231 248 243 229 233 217 191 247 232 226 +241 235 212 224 198 177 238 230 210 208 188 159 +196 179 150 212 192 169 198 184 160 221 193 171 +203 185 166 223 192 159 194 172 161 255 228 230 +224 207 172 202 209 64 165 123 0 0 0 0 +0 0 0 85 0 0 238 201 0 198 182 0 +243 191 0 176 111 0 165 180 4 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +55 0 0 24 0 0 254 201 0 206 167 0 +214 167 0 92 26 0 246 185 0 180 132 0 +122 0 0 48 0 0 132 0 0 10 0 0 +29 0 0 79 0 0 0 0 0 12 0 0 +0 0 0 49 0 0 24 0 0 95 0 0 +122 0 0 165 162 0 255 215 0 255 234 0 +115 91 0 157 31 0 0 0 0 0 0 0 +0 0 0 0 0 0 209 164 160 255 255 232 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +250 242 229 250 242 230 252 244 230 252 242 230 +251 243 230 248 239 228 250 239 230 249 243 229 +252 239 232 251 246 233 255 248 241 253 244 235 +254 248 234 253 243 231 254 243 234 249 239 228 +250 242 230 246 241 229 251 243 229 252 240 233 +248 240 232 247 243 230 249 243 230 247 239 228 +250 240 227 248 241 230 248 239 229 248 239 228 +247 237 229 244 241 228 249 241 229 251 242 234 +244 234 212 224 204 168 255 249 250 241 231 211 +222 197 174 255 250 253 243 237 219 233 209 188 +227 223 200 200 174 143 198 172 150 218 187 160 +212 190 168 199 180 154 210 181 146 231 208 205 +207 171 137 223 202 203 221 202 183 232 214 162 +138 142 0 0 0 0 0 0 0 142 0 0 +194 157 0 255 188 0 220 193 0 234 197 0 +213 180 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +90 0 0 134 44 0 200 181 0 182 104 0 +159 36 0 198 186 0 220 213 0 178 155 0 +250 119 0 181 182 0 235 158 0 212 144 0 +233 195 0 247 225 0 214 181 0 207 186 0 +92 78 0 131 83 0 54 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 243 232 252 243 230 251 240 230 255 243 233 +253 241 231 251 242 231 248 240 230 251 241 234 +250 241 234 250 245 228 253 241 231 249 241 228 +246 235 227 252 244 234 250 243 231 247 243 231 +249 242 227 251 242 231 252 243 230 243 236 226 +249 240 230 250 243 232 251 243 230 250 241 231 +250 245 230 245 237 227 247 237 230 248 241 228 +248 240 227 251 244 232 251 243 236 230 219 179 +224 201 181 255 249 245 226 211 183 227 208 189 +255 254 241 220 202 172 239 210 192 234 228 200 +220 189 149 233 215 200 244 224 211 196 184 144 +208 184 166 248 233 211 207 199 171 204 174 152 +232 218 191 204 191 163 207 193 155 212 193 169 +253 209 210 219 216 136 212 204 89 71 67 0 +0 0 0 0 0 0 82 0 0 133 50 0 +255 199 0 251 197 0 210 172 0 198 182 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 1 0 0 0 0 0 +24 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +243 236 227 252 241 228 249 240 228 250 242 228 +250 241 226 246 239 226 252 238 228 247 240 229 +249 240 230 251 243 227 247 239 231 247 240 227 +252 241 229 250 240 232 250 239 230 250 241 229 +252 242 227 250 242 231 247 241 225 248 239 230 +245 241 229 249 240 231 249 236 227 244 239 229 +247 238 227 245 237 228 249 239 230 248 241 228 +248 241 231 247 240 228 247 243 227 239 226 217 +253 249 240 226 213 173 243 226 225 255 248 244 +221 208 158 246 229 221 227 213 185 223 198 169 +255 246 247 246 246 226 203 178 147 242 232 215 +226 210 184 200 180 158 204 181 152 205 189 175 +209 206 173 202 163 148 224 194 171 202 190 151 +200 176 154 236 217 188 255 250 255 255 255 239 +255 255 164 223 217 188 87 124 0 71 55 0 +0 0 0 0 0 0 110 0 0 112 62 0 +186 99 0 208 197 0 234 179 0 128 25 0 +164 51 0 3 0 0 35 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 145 112 27 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 239 228 242 235 224 247 241 228 249 240 229 +243 233 225 243 237 225 252 241 228 248 239 227 +251 238 231 251 244 229 246 240 229 249 243 228 +247 240 228 246 240 228 252 243 230 250 243 231 +250 243 227 251 243 231 249 242 228 243 237 227 +246 239 230 248 243 229 245 237 228 249 241 232 +251 241 230 245 242 230 247 239 228 249 240 229 +250 240 228 245 237 229 247 241 231 252 247 237 +221 213 176 251 237 222 250 245 235 248 241 230 +252 235 223 206 193 161 222 192 175 255 255 255 +224 214 193 206 181 129 253 236 228 246 241 228 +221 202 166 217 192 171 229 215 206 248 229 207 +191 177 157 212 190 158 218 204 186 212 191 156 +254 240 230 250 244 234 255 245 235 250 244 237 +253 245 242 255 246 245 255 255 255 255 255 255 +250 250 197 215 211 159 173 193 165 121 113 0 +88 29 0 59 0 0 0 0 0 0 0 0 +20 0 0 0 0 0 139 56 0 51 0 0 +63 0 0 0 0 0 74 10 0 0 0 0 +0 0 0 42 0 0 0 0 0 41 0 0 +0 0 0 158 121 70 180 177 129 196 180 120 +255 251 226 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +252 241 232 248 237 226 248 243 232 244 235 224 +250 242 229 249 241 228 252 241 230 241 237 227 +253 239 232 250 240 227 243 237 228 246 237 225 +252 241 228 251 240 231 252 243 230 248 239 229 +247 240 228 250 240 229 246 240 228 250 237 230 +243 237 227 246 237 228 244 234 222 247 238 228 +247 238 224 244 236 229 247 237 232 245 240 221 +238 217 198 248 242 235 247 242 236 218 201 167 +252 239 234 253 241 228 250 241 233 249 241 236 +217 196 158 243 224 222 255 255 255 219 215 163 +222 194 180 251 238 233 238 231 215 200 174 141 +225 200 174 254 250 251 223 201 166 224 201 181 +255 247 232 202 186 155 226 197 178 255 252 240 +250 243 231 246 239 229 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 227 255 248 200 255 255 211 255 255 240 +255 255 219 252 229 192 217 217 179 232 235 189 +215 229 205 255 242 209 222 234 216 217 213 187 +240 233 183 251 237 189 246 239 202 255 255 255 +255 255 246 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +245 238 227 249 241 227 252 240 232 248 237 224 +244 238 228 246 241 230 250 238 229 248 240 230 +244 237 227 249 241 228 244 238 230 248 239 224 +247 239 228 249 236 232 253 245 232 251 243 231 +246 239 225 246 238 230 249 243 227 248 239 232 +247 241 229 249 243 232 245 237 226 249 240 233 +247 238 227 249 242 234 248 241 226 231 212 184 +250 242 236 251 246 238 222 205 168 249 233 212 +235 226 192 250 233 224 253 245 235 247 242 224 +252 240 217 243 238 222 222 201 177 230 211 190 +255 248 243 224 219 197 200 175 145 249 233 222 +255 252 244 214 190 161 247 232 220 246 234 211 +194 170 144 246 232 213 255 249 238 255 248 237 +251 246 227 246 238 227 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 254 245 241 254 250 239 255 251 240 +255 249 240 255 249 243 255 251 240 255 250 239 +255 251 236 255 245 239 255 251 239 255 248 238 +255 247 241 255 250 242 255 249 239 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 242 229 251 242 231 246 240 229 252 238 228 +252 245 228 253 240 229 250 242 232 242 234 222 +247 240 232 248 240 226 251 244 233 253 240 228 +247 241 228 248 236 230 247 244 232 251 239 231 +249 243 227 252 242 232 247 239 228 248 237 227 +247 236 227 248 242 231 251 243 230 247 237 228 +253 245 239 232 221 179 220 204 180 255 242 240 +247 238 223 215 202 161 255 242 240 231 224 161 +245 216 195 248 246 227 240 213 192 255 247 246 +250 245 220 200 175 133 224 197 190 255 255 243 +205 191 159 206 178 150 255 247 243 249 244 226 +233 218 178 248 235 224 215 193 164 204 177 144 +252 231 232 254 253 237 255 247 229 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 240 231 251 242 229 249 239 231 247 241 228 +245 236 224 249 239 228 247 236 227 248 243 231 +248 238 230 247 242 231 251 241 230 250 240 228 +250 241 226 247 238 231 250 242 230 247 239 229 +252 246 228 248 238 229 249 246 228 252 240 231 +246 240 231 248 241 231 249 241 229 251 243 239 +224 213 179 242 229 218 252 243 242 253 247 234 +235 226 204 255 240 228 226 214 174 255 244 241 +253 249 220 232 203 177 255 251 246 253 244 219 +209 177 151 251 232 228 255 254 241 208 187 143 +243 219 203 255 250 242 244 235 202 255 244 236 +255 251 236 208 183 147 230 203 190 255 247 236 +255 250 237 253 244 231 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 244 230 250 238 226 250 244 231 251 240 230 +248 241 229 249 241 228 251 240 231 253 241 232 +251 240 230 249 244 227 247 240 232 252 241 228 +247 236 225 249 241 232 249 240 230 246 238 227 +247 239 226 252 244 232 247 239 225 251 240 231 +250 242 230 250 246 234 251 241 235 229 217 181 +242 225 207 254 246 242 253 246 232 255 250 237 +252 242 215 236 213 179 255 247 250 232 223 185 +230 203 170 255 253 245 250 241 226 234 218 182 +255 245 238 245 233 205 210 185 154 253 233 219 +255 255 242 244 229 203 248 229 219 242 231 202 +211 185 144 235 211 198 255 255 255 255 248 232 +255 245 231 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 242 232 251 241 227 248 240 228 246 237 226 +248 239 229 251 241 228 250 238 227 251 240 231 +249 240 231 248 244 227 247 238 227 254 241 232 +247 240 227 247 240 230 251 239 230 247 242 231 +252 241 227 251 243 235 249 246 229 254 243 237 +251 246 232 212 190 157 255 248 242 253 248 245 +230 211 181 248 226 204 246 227 206 231 206 179 +255 255 255 234 224 194 230 197 172 255 251 247 +239 219 185 255 245 234 254 246 232 236 229 199 +241 219 198 255 255 255 255 249 236 243 241 215 +255 248 238 233 218 183 199 173 144 255 249 243 +255 249 239 255 244 228 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +251 241 231 252 243 231 251 242 231 249 237 228 +248 237 224 247 237 227 251 240 227 248 244 230 +251 237 231 249 242 228 248 239 228 247 236 225 +249 245 232 253 241 234 253 244 232 248 239 229 +248 242 228 247 237 229 247 241 227 251 242 233 +252 242 233 244 240 227 225 207 175 235 218 202 +255 251 248 233 223 184 252 229 224 243 236 206 +237 207 183 255 248 241 239 229 187 243 213 208 +255 255 245 255 246 232 255 246 233 255 255 255 +246 233 200 226 204 173 255 240 232 255 249 235 +250 236 214 247 240 220 239 226 193 204 172 148 +236 212 202 255 255 244 255 246 234 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 239 227 250 243 228 246 241 229 248 240 229 +248 243 230 249 240 228 249 238 230 247 243 231 +251 238 230 248 240 229 248 240 232 249 240 227 +246 238 227 248 238 235 248 240 230 248 240 231 +248 240 226 252 242 232 250 243 236 239 228 195 +219 193 168 250 237 235 252 246 234 226 218 184 +245 226 219 226 214 180 222 194 177 255 255 255 +215 200 151 235 210 198 255 255 244 225 201 166 +241 228 215 255 249 236 241 232 207 240 219 193 +255 255 255 248 229 203 255 245 237 253 248 237 +208 185 145 205 172 148 255 240 235 255 250 237 +254 245 229 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +246 243 231 246 243 227 248 241 231 252 244 232 +248 237 225 247 242 228 247 238 227 248 238 227 +252 240 231 246 240 227 248 241 227 250 240 228 +248 240 228 249 241 231 249 241 231 249 242 231 +245 240 225 251 243 236 235 229 189 228 209 198 +250 247 241 255 250 238 228 211 177 239 224 207 +232 228 190 236 215 209 255 255 255 219 207 171 +233 208 205 252 245 239 221 191 162 255 250 243 +253 248 237 252 242 221 250 239 233 255 255 255 +228 218 169 240 223 211 242 239 234 198 183 145 +235 213 199 255 249 243 252 246 234 251 243 230 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +250 243 230 252 242 232 246 240 227 248 238 228 +247 240 230 251 244 231 252 240 231 246 240 231 +250 242 230 245 238 227 246 236 229 248 239 228 +249 241 229 245 236 224 245 235 226 249 241 231 +251 244 234 234 227 196 230 204 189 253 248 243 +255 248 241 222 201 159 254 233 232 225 213 180 +255 231 225 241 237 217 216 200 153 240 223 220 +244 237 215 225 199 156 249 238 239 249 243 224 +227 206 186 255 248 239 252 242 218 226 211 180 +246 226 220 228 220 197 206 180 144 236 216 206 +255 253 240 254 247 232 245 241 230 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 241 230 248 237 223 245 239 229 245 235 224 +252 241 230 250 241 231 248 238 229 244 240 226 +252 240 233 246 240 227 253 245 236 246 236 227 +247 241 228 244 236 228 244 238 229 252 248 239 +236 222 187 237 220 205 254 254 245 235 230 205 +217 193 162 254 242 231 225 211 172 239 219 209 +247 248 221 217 192 174 249 237 233 240 233 207 +223 203 168 255 245 242 249 246 229 222 205 162 +250 234 229 251 246 233 213 187 156 240 228 219 +227 218 180 198 168 141 240 216 207 255 255 240 +253 244 235 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 241 232 246 234 227 247 243 232 244 237 226 +251 240 227 252 244 232 247 238 227 250 242 231 +249 240 233 246 240 223 248 238 229 248 240 227 +250 244 229 248 239 233 251 246 239 228 215 178 +242 230 219 252 246 241 242 236 211 225 202 168 +255 242 236 228 217 178 254 239 237 244 238 229 +228 207 161 253 244 245 233 229 207 223 191 169 +255 249 249 247 240 215 227 202 183 255 255 255 +237 239 211 218 195 165 240 232 216 219 206 181 +215 184 156 253 247 243 255 247 236 251 244 232 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 239 228 251 244 231 252 241 230 248 240 231 +250 241 229 252 244 227 247 234 226 248 243 229 +250 240 231 249 241 228 248 241 231 252 240 231 +250 245 230 249 240 234 230 219 188 238 216 209 +253 248 237 246 233 220 228 207 187 248 244 222 +226 206 177 255 242 243 238 231 193 220 193 168 +255 254 246 234 221 186 235 214 185 255 255 255 +232 219 193 221 199 161 255 255 255 221 207 182 +232 207 170 249 240 230 205 182 137 214 187 165 +255 255 242 255 248 237 255 244 229 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +247 239 230 251 241 229 247 239 229 247 239 228 +252 243 231 252 244 230 247 234 223 248 241 230 +248 237 227 244 237 228 244 237 229 248 238 227 +248 240 232 232 219 193 242 228 213 255 255 255 +232 221 190 228 209 177 255 247 244 229 213 165 +253 238 236 242 232 201 251 226 213 255 255 255 +228 215 178 245 221 207 255 255 255 228 218 169 +237 210 205 255 255 244 222 207 172 246 229 213 +247 236 207 200 176 144 240 220 209 255 248 242 +255 248 231 255 243 230 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +247 243 230 249 242 228 249 243 231 251 243 231 +251 242 230 251 240 230 251 245 233 249 242 230 +247 236 231 250 245 227 249 240 234 251 243 231 +250 242 232 252 246 239 255 251 245 229 218 178 +239 218 203 255 248 238 255 250 230 255 245 238 +239 227 189 248 229 216 255 249 228 240 220 183 +244 218 195 255 254 243 227 206 173 236 212 181 +255 248 234 232 220 180 255 235 226 217 209 176 +198 171 114 244 227 215 255 255 243 255 245 233 +255 245 235 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +249 243 230 251 242 230 246 241 231 250 238 226 +253 246 232 252 243 234 248 237 230 251 240 228 +249 238 231 250 246 233 252 241 225 250 242 228 +255 246 233 255 248 234 227 215 187 246 222 208 +255 252 238 250 234 207 255 249 241 251 239 222 +250 236 218 255 253 246 228 206 155 245 227 226 +255 255 246 225 202 155 229 212 197 255 255 255 +235 225 191 255 236 230 218 207 163 223 190 172 +247 229 219 255 253 239 255 245 236 255 247 231 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +246 238 230 251 242 230 250 242 230 253 242 230 +253 244 231 249 242 231 250 240 228 251 243 232 +250 243 237 247 236 207 237 212 188 255 247 234 +255 253 243 222 202 164 238 216 198 255 251 241 +255 249 236 255 249 240 242 225 184 255 249 237 +255 251 242 234 212 178 255 244 241 255 251 237 +228 208 172 255 242 237 255 252 242 255 250 236 +254 242 226 224 207 177 219 190 164 255 252 246 +255 253 237 255 247 234 255 245 235 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +250 242 229 249 243 230 251 243 229 251 244 229 +251 241 231 250 243 231 251 241 232 253 244 238 +239 227 197 229 204 175 255 254 246 255 245 232 +255 245 230 254 236 234 255 251 240 255 248 235 +252 243 218 230 209 172 255 248 238 249 241 228 +236 212 187 255 254 243 255 245 227 224 208 165 +255 249 249 244 237 193 255 237 230 251 247 223 +208 183 139 222 196 175 255 253 247 255 248 234 +255 245 231 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +248 241 230 255 245 233 254 247 235 253 241 233 +250 245 234 251 243 232 250 241 236 222 207 169 +227 201 172 255 255 246 255 247 240 255 242 227 +255 246 231 255 246 238 255 251 240 245 236 216 +232 205 167 254 239 230 255 249 234 255 241 225 +255 250 238 245 237 210 217 188 163 252 235 222 +231 210 173 254 235 223 252 239 210 207 179 148 +236 211 198 255 251 240 255 250 234 255 247 235 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 252 243 228 251 241 229 250 243 230 +246 238 226 248 241 231 251 242 228 242 226 210 +255 251 245 255 251 233 242 221 189 255 247 235 +255 247 235 255 248 240 248 238 220 225 200 168 +255 252 246 255 248 231 255 247 234 255 247 237 +255 248 236 222 197 174 253 240 220 227 203 164 +255 249 246 238 228 200 199 182 140 243 221 211 +255 249 240 255 248 231 255 243 233 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 245 243 229 250 236 228 +250 242 231 252 245 231 255 245 234 255 250 237 +255 244 240 233 219 172 254 242 238 255 248 234 +255 253 245 229 208 168 228 203 171 255 251 251 +249 237 195 249 232 219 255 254 242 255 244 230 +255 247 236 249 242 211 231 201 186 255 255 255 +238 231 197 200 172 141 236 200 179 255 255 246 +254 245 230 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 251 242 230 +252 245 229 255 246 233 255 243 228 255 248 238 +238 226 193 253 237 228 255 250 242 255 251 242 +231 211 165 246 226 213 255 249 247 228 207 169 +255 237 232 255 251 240 227 207 172 255 255 255 +252 243 225 226 205 169 255 255 247 232 224 196 +207 178 134 247 232 217 255 248 245 255 249 234 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 246 235 255 247 236 255 245 232 255 246 234 +255 246 239 255 251 235 255 244 229 222 205 159 +244 220 213 247 237 228 225 200 150 244 224 222 +255 248 220 225 205 165 255 252 245 229 215 166 +220 192 165 255 255 255 212 189 156 201 178 149 +248 228 215 255 255 242 255 246 235 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 245 232 255 245 231 255 246 232 255 243 229 +255 246 234 255 249 236 237 216 184 248 231 214 +252 244 222 213 185 152 236 215 200 255 246 228 +234 212 180 255 246 247 226 216 180 235 213 191 +255 247 243 223 199 163 214 191 160 255 237 228 +255 254 239 255 245 233 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 243 232 255 246 234 +255 245 236 255 246 230 255 247 245 253 248 224 +210 179 128 255 243 244 255 248 237 223 205 176 +255 251 246 241 226 190 248 229 217 253 243 224 +205 196 158 222 188 167 255 255 255 255 248 238 +255 245 229 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 246 233 255 245 232 +255 243 230 255 252 240 241 226 193 213 180 153 +255 248 240 255 250 239 252 241 223 255 253 242 +224 205 168 253 228 220 254 246 226 206 176 134 +225 194 171 255 254 245 255 248 236 255 245 232 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 246 235 254 240 221 220 192 161 255 238 230 +254 246 233 255 248 242 255 250 237 218 190 151 +255 251 249 254 248 228 203 178 140 246 223 216 +255 255 246 255 247 234 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 243 234 249 243 223 254 249 237 255 249 237 +255 247 238 245 232 198 211 187 160 255 243 236 +246 238 215 211 189 148 226 200 177 255 250 243 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 249 242 226 253 242 235 255 243 234 +242 235 216 214 186 164 255 245 242 251 248 228 +201 174 137 237 217 205 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 248 241 230 253 244 235 +247 241 220 255 255 255 251 249 236 195 176 133 +240 214 201 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 252 243 229 +255 249 240 230 222 197 206 178 144 218 195 171 +255 255 244 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +234 226 212 200 174 136 225 203 188 255 255 255 +250 242 230 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 246 232 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 +255 255 255 255 255 255 255 255 255 255 255 255 diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/p4.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/p4.pnm Binary files differnew file mode 100644 index 00000000..468b839a --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/p4.pnm diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/p5.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/p5.pnm Binary files differnew file mode 100644 index 00000000..c07b78a8 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/p5.pnm diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/p6.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/p6.pnm Binary files differnew file mode 100644 index 00000000..bf4a9471 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/p6.pnm diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/readme.txt b/src/boost/libs/gil/test/extension/io/images/pnm/readme.txt new file mode 100644 index 00000000..7a9ab2cb --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/readme.txt @@ -0,0 +1,5 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +Please send me an email to retrieve the test files at chhenning **at** gmail.com.
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/pnm/rgb.pnm b/src/boost/libs/gil/test/extension/io/images/pnm/rgb.pnm Binary files differnew file mode 100644 index 00000000..9299261a --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/pnm/rgb.pnm diff --git a/src/boost/libs/gil/test/extension/io/images/raw/RAW_CANON_D30_SRGB.CRW b/src/boost/libs/gil/test/extension/io/images/raw/RAW_CANON_D30_SRGB.CRW Binary files differnew file mode 100644 index 00000000..433d9c31 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/raw/RAW_CANON_D30_SRGB.CRW diff --git a/src/boost/libs/gil/test/extension/io/images/raw/readme.txt b/src/boost/libs/gil/test/extension/io/images/raw/readme.txt new file mode 100644 index 00000000..7436b549 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/raw/readme.txt @@ -0,0 +1,5 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +Images are taken from http://www.rawsamples.ch/index_en.php
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/readme.md b/src/boost/libs/gil/test/extension/io/images/readme.md new file mode 100644 index 00000000..cefddf5b --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/readme.md @@ -0,0 +1,3 @@ +For copyright reasons the complete is available here: + +https://github.com/chhenning/gil_io_images
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/targa/24BPP_compressed.tga b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_compressed.tga Binary files differnew file mode 100644 index 00000000..e957723c --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_compressed.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/24BPP_compressed_ul_origin.tga b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_compressed_ul_origin.tga Binary files differnew file mode 100644 index 00000000..98988a75 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_compressed_ul_origin.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/24BPP_uncompressed.tga b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_uncompressed.tga Binary files differnew file mode 100644 index 00000000..410043fa --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_uncompressed.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/24BPP_uncompressed_ul_origin.tga b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_uncompressed_ul_origin.tga Binary files differnew file mode 100644 index 00000000..e5cab05c --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/24BPP_uncompressed_ul_origin.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/32BPP_compressed.tga b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_compressed.tga Binary files differnew file mode 100644 index 00000000..a5464554 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_compressed.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/32BPP_compressed_ul_origin.tga b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_compressed_ul_origin.tga Binary files differnew file mode 100644 index 00000000..1fa4c636 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_compressed_ul_origin.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/32BPP_uncompressed.tga b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_uncompressed.tga Binary files differnew file mode 100644 index 00000000..fb38dc48 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_uncompressed.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/32BPP_uncompressed_ul_origin.tga b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_uncompressed_ul_origin.tga Binary files differnew file mode 100644 index 00000000..65e80740 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/32BPP_uncompressed_ul_origin.tga diff --git a/src/boost/libs/gil/test/extension/io/images/targa/fileformat_info/readme.txt b/src/boost/libs/gil/test/extension/io/images/targa/fileformat_info/readme.txt new file mode 100644 index 00000000..b4ec88cb --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/targa/fileformat_info/readme.txt @@ -0,0 +1,5 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +taken from http://www.fileformat.info/format/tga/sample/index.htm diff --git a/src/boost/libs/gil/test/extension/io/images/tiff/graphicmagick/readme.txt b/src/boost/libs/gil/test/extension/io/images/tiff/graphicmagick/readme.txt new file mode 100644 index 00000000..9d49c13c --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/tiff/graphicmagick/readme.txt @@ -0,0 +1,7 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +files can be found at ftp://ftp.graphicsmagick.org/pub/tiff-samples/ + +if not available please ask me at chhenning **at** gmail.com
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/tiff/libtiffpic/readme.txt b/src/boost/libs/gil/test/extension/io/images/tiff/libtiffpic/readme.txt new file mode 100644 index 00000000..9bc367e6 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/tiff/libtiffpic/readme.txt @@ -0,0 +1,7 @@ +# Copyright (C) 2013 Christian Henning +# Distributed under the Boost Software License, Version 1.0. +# See www.boost.org/LICENSE_1_0.txt + +taken from http://www.remotesensing.org/libtiff/images.html + +if not available please ask me at chhenning **at** gmail.com
\ No newline at end of file diff --git a/src/boost/libs/gil/test/extension/io/images/tiff/test.tif b/src/boost/libs/gil/test/extension/io/images/tiff/test.tif Binary files differnew file mode 100644 index 00000000..78ae4d3e --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/images/tiff/test.tif diff --git a/src/boost/libs/gil/test/extension/io/jpeg_old_test.cpp b/src/boost/libs/gil/test/extension/io/jpeg_old_test.cpp new file mode 100644 index 00000000..02f1d78d --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/jpeg_old_test.cpp @@ -0,0 +1,100 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE jpeg_old_test_module +#include <boost/gil.hpp> +#include <boost/gil/extension/io/jpeg/old.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( gil_io_jpeg_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( old_read_dimensions_test ) +{ + boost::gil::point_t dim = jpeg_read_dimensions(jpeg_filename); + BOOST_CHECK_EQUAL( dim.x, 1000 ); + BOOST_CHECK_EQUAL( dim.y, 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_image_test ) +{ + rgb8_image_t img; + jpeg_read_image( jpeg_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_image_test ) +{ + rgb8_image_t img; + jpeg_read_and_convert_image( jpeg_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_view_test ) +{ + rgb8_image_t img( 1000, 600 ); + jpeg_read_view( jpeg_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_view_test ) +{ + rgb8_image_t img( 1000, 600 ); + jpeg_read_and_convert_view( jpeg_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_write_view_test ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + jpeg_write_view( jpeg_out + "old_write_test.jpg" + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( old_dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + jpeg_read_image( jpeg_filename.c_str() + , runtime_image + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + jpeg_write_view( jpeg_out + "old_dynamic_image_test.jpg" + , view( runtime_image ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/jpeg_read_test.cpp b/src/boost/libs/gil/test/extension/io/jpeg_read_test.cpp new file mode 100644 index 00000000..1bd35139 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/jpeg_read_test.cpp @@ -0,0 +1,127 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE jpeg_read_test_module +#include <boost/gil.hpp> +#include <boost/gil/extension/io/jpeg.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" +#include "scanline_read_test.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = jpeg_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_jpeg_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_header_test ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( jpeg_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height , 600u ); + + BOOST_CHECK_EQUAL( backend._info._num_components, 3 ); + BOOST_CHECK_EQUAL( backend._info._color_space , JCS_YCbCr ); + + BOOST_CHECK_EQUAL( backend._info._data_precision, 8 ); + } +} + +BOOST_AUTO_TEST_CASE( read_pixel_density_test ) +{ + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( jpeg_in + "EddDawson/36dpi.jpg" + , tag_t() + ); + + rgb8_image_t img; + read_image( jpeg_in + "EddDawson/36dpi.jpg", img, jpeg_tag() ); + + image_write_info< jpeg_tag > write_settings; + write_settings.set_pixel_dimensions( backend._info._width + , backend._info._height + , backend._info._pixel_width_mm + , backend._info._pixel_height_mm + ); + + stringstream in_memory( ios_base::in | ios_base::out | ios_base::binary ); + write_view( in_memory, view( img ), write_settings ); + + using backend2_t = get_reader_backend<stringstream, tag_t>::type; + + backend2_t backend2 = read_image_info( in_memory + , tag_t() + ); + + // Because of rounding the two results differ slightly. + if( std::abs( backend._info._pixel_width_mm - backend2._info._pixel_width_mm ) > 10.0 + || std::abs( backend._info._pixel_height_mm - backend2._info._pixel_height_mm ) > 10.0 + ) + { + BOOST_CHECK_EQUAL( 0, 1 ); + } +} + +BOOST_AUTO_TEST_CASE( read_reference_images_test ) +{ + using image_t = rgb8_image_t; + image_t img; + + read_image( jpeg_filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( jpeg_out + "rgb8_test.jpg" + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( dct_method_read_test ) +{ + using image_t = rgb8_image_t; + image_t img; + + image_read_settings< jpeg_tag > settings; + settings._dct_method = jpeg_dct_method::fast; + + read_image( jpeg_filename + , img + , settings + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( jpeg_out + "fast_dct_read_test.jpg" + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( read_reference_images_image_iterator_test ) +{ + test_scanline_reader< rgb8_image_t, jpeg_tag >( jpeg_filename.c_str() ); +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/jpeg_test.cpp b/src/boost/libs/gil/test/extension/io/jpeg_test.cpp new file mode 100644 index 00000000..d3b98dee --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/jpeg_test.cpp @@ -0,0 +1,337 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE jpeg_test +#define BOOST_FILESYSTEM_VERSION 3 +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/jpeg.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace boost; +using namespace gil; + +using tag_t = jpeg_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_jpeg_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_test ) +{ + + { + using backend_t = get_reader_backend + < + std::string const, + tag_t + >::type; + + backend_t backend = read_image_info( jpeg_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + std::ifstream in( jpeg_filename.c_str(), ios::binary ); + + using backend_t = get_reader_backend<std::ifstream, tag_t>::type; + + backend_t backend = read_image_info( in + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + FILE* file = fopen( jpeg_filename.c_str(), "rb" ); + + using backend_t = get_reader_backend<FILE*, tag_t>::type; + + backend_t backend = boost::gil::read_image_info( file + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + using backend_t = get_reader_backend<boost::filesystem::path, tag_t>::type; + + backend_t backend = + boost::gil::read_image_info( + boost::filesystem::path(jpeg_filename), + tag_t()); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgb8_image_t img; + read_image( jpeg_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + std::ifstream in( jpeg_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + FILE* file = fopen( jpeg_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + rgb8_image_t img; + + image_read_settings< jpeg_tag > settings( point_t( 0, 0 ) + , point_t( 10, 10 ) + , jpeg_dct_method::slow + ); + + read_image( jpeg_filename, img, settings ); + + BOOST_CHECK_EQUAL( img.width() , 10u ); + BOOST_CHECK_EQUAL( img.height(), 10u ); + } + +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + { + rgb8_image_t img; + read_and_convert_image( jpeg_filename, img, tag_t() ); + } + + { + std::ifstream in( jpeg_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_and_convert_image( in, img, tag_t() ); + } +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + { + rgb8_image_t img( 1000, 600 ); + read_view( jpeg_filename, view( img ), tag_t() ); + } + + { + std::ifstream in( jpeg_filename.c_str(), ios::binary ); + + rgb8_image_t img( 1000, 600 ); + read_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( jpeg_filename.c_str(), "rb" ); + + rgb8_image_t img( 1000, 600 ); + read_view( file, view( img ), tag_t() ); + } +} +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + { + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( jpeg_filename, view( img ), tag_t() ); + } + + { + std::ifstream in( jpeg_filename.c_str(), ios::binary ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( jpeg_filename.c_str(), "rb" ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( file + , view( img ) + , tag_t() + ); + } +} + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_view_test ) +{ + { + std::string filename( jpeg_out + "write_test_string.jpg" ); + + write_view( filename + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + std::string filename( jpeg_out + "write_test_ofstream.jpg" ); + std::ofstream out( filename.c_str(), ios::binary ); + + write_view( out + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + std::string filename( jpeg_out + "write_test_file.jpg" ); + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + std::string filename( jpeg_out + "write_test_info.jpg" ); + FILE* file = fopen( filename.c_str(), "wb" ); + + image_write_info< jpeg_tag > info; + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , info + ); + } +} +#endif //BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +BOOST_AUTO_TEST_CASE( stream_test ) +{ + // 1. Read an image. + std::ifstream in( jpeg_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + // 2. Write image to in-memory buffer. + std::stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary ); + write_view( out_buffer, view( img ), tag_t() ); + + // 3. Copy in-memory buffer to another. + std::stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary ); + in_buffer << out_buffer.rdbuf(); + + // 4. Read in-memory buffer to gil image + rgb8_image_t dst; + read_image( in_buffer, dst, tag_t() ); + + // 5. Write out image. + std::string filename( jpeg_out + "stream_test.jpg" ); + std::ofstream out( filename.c_str(), ios_base::binary ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( out, view( dst ), tag_t() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test_2 ) +{ + std::filebuf in_buf; + if( !in_buf.open( jpeg_filename.c_str(), ios::in | ios::binary ) ) + { + BOOST_CHECK( false ); + } + + std::istream in( &in_buf ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); +} + +BOOST_AUTO_TEST_CASE( subimage_test ) +{ + run_subimage_test< rgb8_image_t, tag_t >( jpeg_filename + , point_t( 0, 0 ) + , point_t( 50, 50 ) + ); + + run_subimage_test< rgb8_image_t, tag_t >( jpeg_filename + , point_t( 43, 24 ) + , point_t( 50, 50 ) + ); +} + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + + any_image< my_img_types > runtime_image; + + read_image( jpeg_filename.c_str() + , runtime_image + , jpeg_tag() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( jpeg_out + "old_dynamic_image_test.jpg" + , view( runtime_image ) + , jpeg_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/jpeg_write_test.cpp b/src/boost/libs/gil/test/extension/io/jpeg_write_test.cpp new file mode 100644 index 00000000..64b612b5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/jpeg_write_test.cpp @@ -0,0 +1,97 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE jpeg_write_test_module +#include <boost/gil.hpp> +#include <boost/gil/extension/io/jpeg.hpp> + +#include <boost/test/unit_test.hpp> + +#include "color_space_write_test.hpp" +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = jpeg_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_jpeg_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_test ) +{ + // test writing all supported image types + + { + write_view( jpeg_out + "gray8_test.jpg" + , create_mandel_view( 200, 200 + , gray8_pixel_t( 0 ) + , gray8_pixel_t( 255 ) + ) + , tag_t() + ); + } + + { + write_view( jpeg_out + "rgb8_test.jpg" + , create_mandel_view( 200, 200 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + write_view( jpeg_out + "cmyk8_test.jpg" + , create_mandel_view( 200, 200 + , cmyk8_pixel_t( 0, 0, 255, 127 ) + , cmyk8_pixel_t( 0, 255, 0, 127 ) + ) + , tag_t() + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( dct_method_write_test ) +{ + { + using image_t = rgb8_image_t; + image_t img; + + read_image( jpeg_filename + , img + , tag_t() + ); + + image_write_info< jpeg_tag > info; + info._dct_method = jpeg_dct_method::fast; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( jpeg_out + "fast_dct_write_test.jpg" + , view( img ) + , info + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( rgb_color_space_write_test ) +{ + color_space_write_test< jpeg_tag >( jpeg_out + "rgb_color_space_test.jpg" + , jpeg_out + "bgr_color_space_test.jpg" + ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/make.cpp b/src/boost/libs/gil/test/extension/io/make.cpp new file mode 100644 index 00000000..0240a873 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/make.cpp @@ -0,0 +1,207 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT +#define BOOST_FILESYSTEM_VERSION 3 + +#include <boost/gil/extension/io/bmp.hpp> + +#include <boost/gil.hpp> +#include <boost/gil/detail/mp11.hpp> + +#include <boost/test/unit_test.hpp> + +#include <fstream> +#include <type_traits> + +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; +namespace fs = boost::filesystem; + +BOOST_AUTO_TEST_SUITE( gil_io_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( make_reader_backend_test ) +{ + { + static_assert(std::is_same<gil::detail::is_supported_path_spec<char*>::type, std::true_type>::value, ""); + + get_reader_backend< const char*, bmp_tag >::type backend_char = make_reader_backend( bmp_filename.c_str(), bmp_tag() ); + get_reader_backend< std::string, bmp_tag >::type backend_string = make_reader_backend( bmp_filename, bmp_tag() ); + + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + get_reader_backend< FILE*, bmp_tag >::type backend_file = make_reader_backend( file, bmp_tag() ); + + ifstream in( bmp_filename.c_str(), ios::binary ); + get_reader_backend< std::ifstream, bmp_tag >::type backend_ifstream = make_reader_backend( in, bmp_tag() ); + + fs::path my_path( bmp_filename ); + get_reader_backend< std::wstring, bmp_tag >::type backend_wstring = make_reader_backend( my_path.wstring(), bmp_tag() ); + get_reader_backend< fs::path , bmp_tag >::type backend_path = make_reader_backend( my_path , bmp_tag() ); + } + + { + get_reader_backend< const char*, bmp_tag >::type backend_char = make_reader_backend( bmp_filename.c_str(), image_read_settings<bmp_tag>() ); + get_reader_backend< std::string, bmp_tag >::type backend_string = make_reader_backend( bmp_filename, image_read_settings<bmp_tag>() ); + + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + get_reader_backend< FILE*, bmp_tag >::type backend_file = make_reader_backend( file, image_read_settings<bmp_tag>() ); + + ifstream in( bmp_filename.c_str(), ios::binary ); + get_reader_backend< std::ifstream, bmp_tag >::type backend_ifstream = make_reader_backend( in, image_read_settings<bmp_tag>() ); + + fs::path my_path( bmp_filename ); + get_reader_backend< std::wstring, bmp_tag >::type backend_wstring = make_reader_backend( my_path.wstring(), image_read_settings<bmp_tag>() ); + get_reader_backend< fs::path, bmp_tag >::type backend_path = make_reader_backend( my_path , image_read_settings<bmp_tag>() ); + } +} + +BOOST_AUTO_TEST_CASE( make_reader_test ) +{ + { + get_reader_backend< const char*, bmp_tag >::type reader_char = make_reader( bmp_filename.c_str(), bmp_tag(), gil::detail::read_and_no_convert() ); + get_reader_backend< std::string, bmp_tag >::type reader_string = make_reader( bmp_filename, bmp_tag(), gil::detail::read_and_no_convert() ); + + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + get_reader_backend< FILE*, bmp_tag >::type reader_file = make_reader( file, bmp_tag(), gil::detail::read_and_no_convert() ); + + ifstream in( bmp_filename.c_str(), ios::binary ); + get_reader_backend< std::ifstream, bmp_tag >::type reader_ifstream = make_reader( in, bmp_tag(), gil::detail::read_and_no_convert() ); + + fs::path my_path( bmp_filename ); + get_reader_backend< std::wstring, bmp_tag >::type reader_wstring = make_reader( my_path.wstring(), bmp_tag(), gil::detail::read_and_no_convert() ); + get_reader_backend< fs::path , bmp_tag >::type reader_path = make_reader( my_path , bmp_tag(), gil::detail::read_and_no_convert() ); + } + + { + get_reader_backend< const char*, bmp_tag >::type reader_char = make_reader( bmp_filename.c_str(), image_read_settings< bmp_tag >(), gil::detail::read_and_no_convert() ); + get_reader_backend< std::string, bmp_tag >::type reader_string = make_reader( bmp_filename, image_read_settings< bmp_tag >(), gil::detail::read_and_no_convert() ); + + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + get_reader_backend< FILE*, bmp_tag >::type reader_file = make_reader( file, image_read_settings< bmp_tag >(), gil::detail::read_and_no_convert() ); + + ifstream in( bmp_filename.c_str(), ios::binary ); + get_reader_backend< std::ifstream, bmp_tag >::type reader_ifstream = make_reader( in, image_read_settings< bmp_tag >(), gil::detail::read_and_no_convert() ); + + fs::path my_path( bmp_filename ); + get_reader_backend< std::wstring, bmp_tag >::type reader_wstring = make_reader( my_path.wstring(), image_read_settings< bmp_tag >(), gil::detail::read_and_no_convert() ); + get_reader_backend< fs::path, bmp_tag >::type reader_path = make_reader( my_path , image_read_settings< bmp_tag >(), gil::detail::read_and_no_convert() ); + } +} + +BOOST_AUTO_TEST_CASE( make_dynamic_image_reader_test ) +{ + { + get_dynamic_image_reader< const char*, bmp_tag >::type reader_char = make_dynamic_image_reader( bmp_filename.c_str(), bmp_tag() ); + get_dynamic_image_reader< std::string, bmp_tag >::type reader_string = make_dynamic_image_reader( bmp_filename, bmp_tag() ); + + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + get_dynamic_image_reader< FILE*, bmp_tag >::type reader_file = make_dynamic_image_reader( file, bmp_tag() ); + + ifstream in( bmp_filename.c_str(), ios::binary ); + get_dynamic_image_reader< std::ifstream, bmp_tag >::type reader_ifstream = make_dynamic_image_reader( in, bmp_tag() ); + + fs::path my_path( bmp_filename ); + get_dynamic_image_reader< std::wstring, bmp_tag >::type reader_wstring = make_dynamic_image_reader( my_path.wstring(), bmp_tag() ); + get_dynamic_image_reader< fs::path , bmp_tag >::type reader_path = make_dynamic_image_reader( my_path , bmp_tag() ); + } + + { + get_dynamic_image_reader< const char*, bmp_tag >::type reader_char = make_dynamic_image_reader( bmp_filename.c_str(), image_read_settings< bmp_tag >() ); + get_dynamic_image_reader< std::string, bmp_tag >::type reader_string = make_dynamic_image_reader( bmp_filename, image_read_settings< bmp_tag >() ); + + FILE* file = fopen( bmp_filename.c_str(), "rb" ); + get_dynamic_image_reader< FILE*, bmp_tag >::type reader_file = make_dynamic_image_reader( file, image_read_settings< bmp_tag >() ); + + ifstream in( bmp_filename.c_str(), ios::binary ); + get_dynamic_image_reader< std::ifstream, bmp_tag >::type reader_ifstream = make_dynamic_image_reader( in, image_read_settings< bmp_tag >() ); + + fs::path my_path( bmp_filename ); + get_dynamic_image_reader< std::wstring, bmp_tag >::type reader_wstring = make_dynamic_image_reader( my_path.wstring(), image_read_settings< bmp_tag >() ); + get_dynamic_image_reader< fs::path , bmp_tag >::type reader_path = make_dynamic_image_reader( my_path , image_read_settings< bmp_tag >() ); + } +} + +BOOST_AUTO_TEST_CASE( make_writer_test ) +{ + { + using writer_t = get_writer<char const*, bmp_tag>::type; + + static_assert(std::is_same<gil::detail::is_writer<writer_t>::type, std::true_type>::value, ""); + } + + { + get_writer< const char*, bmp_tag >::type writer_char = make_writer(( bmp_out + "make_test.bmp" ).c_str(), bmp_tag() ); + get_writer< std::string, bmp_tag >::type writer_string = make_writer(( bmp_out + "make_test.bmp" ), bmp_tag() ); + + FILE* file = fopen(( bmp_out + "make_test.bmp" ).c_str(), "wb" ); + get_writer< FILE*, bmp_tag >::type writer_file = make_writer( file, bmp_tag() ); + + ofstream out(( bmp_out + "make_test.bmp" ).c_str(), ios::binary ); + get_writer< std::ofstream, bmp_tag >::type writer_ofstream = make_writer( out, bmp_tag() ); + + fs::path my_path( ( bmp_out + "make_test.bmp" ).c_str() ); + get_writer< std::wstring, bmp_tag >::type writer_wstring = make_writer( my_path.wstring(), bmp_tag() ); + get_writer< fs::path , bmp_tag >::type writer_path = make_writer( my_path , bmp_tag() ); + } + + { + get_writer< const char*, bmp_tag >::type writer_char = make_writer(( bmp_out + "make_test.bmp" ).c_str(), image_write_info< bmp_tag >() ); + get_writer< std::string, bmp_tag >::type writer_string = make_writer(( bmp_out + "make_test.bmp" ) , image_write_info< bmp_tag >() ); + + FILE* file = fopen( (bmp_out + string( "make_test.bmp")).c_str(), "wb" ); + get_writer< FILE*, bmp_tag >::type writer_file = make_writer( file, image_write_info< bmp_tag >() ); + + ofstream out( ( bmp_out + "make_test.bmp" ).c_str(), ios::binary ); + get_writer< std::ofstream, bmp_tag >::type writer_ofstream = make_writer( out, image_write_info< bmp_tag >() ); + + fs::path my_path( bmp_out + "make_test.bmp" ); + get_writer< std::wstring, bmp_tag >::type writer_wstring = make_writer( my_path.wstring(), image_write_info< bmp_tag >() ); + get_writer< fs::path , bmp_tag >::type writer_path = make_writer( my_path , image_write_info< bmp_tag >() ); + } +} + +BOOST_AUTO_TEST_CASE( make_dynamic_image_writer_test ) +{ + { + get_dynamic_image_writer< const char*, bmp_tag >::type writer_char = make_dynamic_image_writer( (bmp_out + string( "make_test.bmp")).c_str(), bmp_tag() ); + get_dynamic_image_writer< std::string, bmp_tag >::type writer_string = make_dynamic_image_writer( bmp_out + "make_test.bmp", bmp_tag() ); + + FILE* file = fopen( (bmp_out + string( "make_test.bmp")).c_str(), "wb" ); + get_dynamic_image_writer< FILE*, bmp_tag >::type writer_file = make_dynamic_image_writer( file, bmp_tag() ); + + ofstream out(( bmp_out + "make_test.bmp" ).c_str(), ios::binary ); + get_dynamic_image_writer< std::ofstream, bmp_tag >::type writer_ofstream = make_dynamic_image_writer( out, bmp_tag() ); + + fs::path my_path( bmp_out + "make_test.bmp" ); + get_dynamic_image_writer< std::wstring, bmp_tag >::type writer_wstring = make_dynamic_image_writer( my_path.wstring(), bmp_tag() ); + get_dynamic_image_writer< fs::path , bmp_tag >::type writer_path = make_dynamic_image_writer( my_path , bmp_tag() ); + } + + { + get_dynamic_image_writer< const char*, bmp_tag >::type writer_char = make_dynamic_image_writer( (bmp_out + string( "make_test.bmp")).c_str(), image_write_info< bmp_tag >() ); + get_dynamic_image_writer< std::string, bmp_tag >::type writer_string = make_dynamic_image_writer( bmp_out + "make_test.bmp", image_write_info< bmp_tag >() ); + + FILE* file = fopen( (bmp_out + string( "make_test.bmp")).c_str(), "wb" ); + get_dynamic_image_writer< FILE*, bmp_tag >::type writer_file = make_dynamic_image_writer( file, image_write_info< bmp_tag >() ); + + ofstream out(( bmp_out + "make_test.bmp" ).c_str(), ios::binary ); + get_dynamic_image_writer< std::ofstream, bmp_tag >::type writer_ofstream = make_dynamic_image_writer( out, image_write_info< bmp_tag >() ); + + fs::path my_path( bmp_out + "make_test.bmp" ); + get_dynamic_image_writer< std::wstring, bmp_tag >::type writer_wstring = make_dynamic_image_writer( my_path.wstring(), image_write_info< bmp_tag >() ); + get_dynamic_image_writer< fs::path , bmp_tag >::type writer_path = make_dynamic_image_writer( my_path , image_write_info< bmp_tag >() ); + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/mandel_view.hpp b/src/boost/libs/gil/test/extension/io/mandel_view.hpp new file mode 100644 index 00000000..4c7b8921 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/mandel_view.hpp @@ -0,0 +1,96 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_IO_TEST_MANDEL_HPP +#define BOOST_GIL_IO_TEST_MANDEL_HPP + +#include <boost/gil.hpp> + +using namespace std; +using namespace boost; +using namespace gil; + +// Models a Unary Function +template <typename P> // Models PixelValueConcept +struct mandelbrot_fn +{ + using point_t = boost::gil::point_t; + using const_t = mandelbrot_fn; + using value_type = P; + using reference = value_type; + using const_reference = value_type; + using argument_type = point_t; + using result_type = reference; + static constexpr bool is_mutable = false; + + value_type _in_color,_out_color; + point_t _img_size; + static const int MAX_ITER=100; // max number of iterations + + mandelbrot_fn() {} + mandelbrot_fn(const point_t& sz, const value_type& in_color, const value_type& out_color) : _in_color(in_color), _out_color(out_color), _img_size(sz) {} + + std::ptrdiff_t width() { return _img_size.x; } + std::ptrdiff_t height() { return _img_size.y; } + + result_type operator()(const point_t& p) const { + // normalize the coords to (-2..1, -1.5..1.5) + // (actually make y -1.0..2 so it is asymmetric, so we can verify some view factory methods) + double t=get_num_iter(point<double>(p.x/(double)_img_size.x*3-2, p.y/(double)_img_size.y*3-1.0f));//1.5f)); + t=pow(t,0.2); + + value_type ret; + for (int k=0; k<num_channels<P>::value; ++k) + ret[k]=(typename channel_type<P>::type)(_in_color[k]*t + _out_color[k]*(1-t)); + return ret; + } + +private: + double get_num_iter(const point<double>& p) const { + point<double> Z(0,0); + for (int i=0; i<MAX_ITER; ++i) { + Z = point<double>(Z.x*Z.x - Z.y*Z.y + p.x, 2*Z.x*Z.y + p.y); + if (Z.x*Z.x + Z.y*Z.y > 4) + return i/(double)MAX_ITER; + } + return 0; + } +}; + +template< typename Pixel > +struct mandel_view +{ + using deref_t = mandelbrot_fn<Pixel>; + using locator_t= virtual_2d_locator<deref_t, false>; + using my_virt_view_t = image_view<locator_t>; + using type = my_virt_view_t; +}; + +template< typename Pixel > +typename mandel_view< Pixel >::type create_mandel_view( unsigned int width + , unsigned int height + , const Pixel& in + , const Pixel& out + ) +{ + using view_t = typename mandel_view<Pixel>::type; + using deref_t = typename mandel_view<Pixel>::deref_t; + using locator_t = typename mandel_view<Pixel>::locator_t; + + point_t dims( width, height ); + return view_t( dims + , locator_t( point_t( 0, 0 ) + , point_t( 1, 1 ) + , deref_t( dims + , in + , out + ) + ) + ); +} + +#endif // BOOST_GIL_IO_TEST_MANDEL_HPP diff --git a/src/boost/libs/gil/test/extension/io/paths.hpp b/src/boost/libs/gil/test/extension/io/paths.hpp new file mode 100644 index 00000000..9dd336de --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/paths.hpp @@ -0,0 +1,66 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_IO_TEST_PATHS_HPP +#define BOOST_GIL_IO_TEST_PATHS_HPP + +// Disable warning: conversion to 'std::atomic<int>::__integral_type {aka int}' from 'long int' may alter its value +#if defined(BOOST_CLANG) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wshorten-64-to-32" +#endif + +#if defined(BOOST_GCC) && (BOOST_GCC >= 40900) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + +#define BOOST_FILESYSTEM_VERSION 3 +#include <boost/filesystem.hpp> + +#if defined(BOOST_CLANG) +#pragma clang diagnostic pop +#endif + +#if defined(BOOST_GCC) && (BOOST_GCC >= 40900) +#pragma GCC diagnostic pop +#endif + +// `base` holds the path to ../.., i.e. the directory containing `images` +static const std::string base = (boost::filesystem::absolute(boost::filesystem::path(__FILE__)).parent_path().string()) + "/"; + +static const std::string bmp_in = base + "images/bmp/"; +static const std::string bmp_out = base + "output/"; + +static const std::string jpeg_in = base + "images/jpeg/"; +static const std::string jpeg_out = base + "output/"; + +static const std::string png_base_in = base + "images/png/"; +static const std::string png_in = png_base_in + "PngSuite/"; +static const std::string png_out = base + "output/"; + +static const std::string pnm_in = base + "images/pnm/"; +static const std::string pnm_out = base + "output/"; + +static const std::string raw_in = base + "images/raw/"; + +static const std::string targa_in = base + "images/targa/"; +static const std::string targa_out = base + "output/"; + +static const std::string tiff_in = base + "images/tiff/"; +static const std::string tiff_out = base + "output/"; +static const std::string tiff_in_GM = tiff_in + "graphicmagick/"; + +static const std::string bmp_filename ( bmp_in + "test.bmp" ); +static const std::string jpeg_filename ( jpeg_in + "test.jpg" ); +static const std::string png_filename ( png_base_in + "test.png" ); +static const std::string pnm_filename ( pnm_in + "rgb.pnm" ); +static const std::string raw_filename ( raw_in + "RAW_CANON_D30_SRGB.CRW" ); +static const std::string targa_filename( targa_in + "24BPP_compressed.tga" ); +static const std::string tiff_filename ( tiff_in + "test.tif" ); + +#endif // BOOST_GIL_IO_TEST_PATHS_HPP diff --git a/src/boost/libs/gil/test/extension/io/png_file_format_test.cpp b/src/boost/libs/gil/test/extension/io/png_file_format_test.cpp new file mode 100644 index 00000000..dcc22bb6 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/png_file_format_test.cpp @@ -0,0 +1,77 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE png_file_format_test_module +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT +#define BOOST_GIL_IO_ENABLE_GRAY_ALPHA +#define BOOST_FILESYSTEM_VERSION 3 + +#include <boost/gil/extension/io/png.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" + +using namespace std; +using namespace boost::gil; +namespace fs = boost::filesystem; + +using tag_t = png_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_png_tests ) + +#ifdef BOOST_GIL_IO_USE_PNG_TEST_SUITE_IMAGES + +// Test will loop through the "in" folder to read and convert +// the png's to rgb8_image_t's. Which then will be written in +// the "out" folder. +// +// The file name structure is as followed: +// +// g04i2c08.png +// || |||+---- bit-depth +// || ||+----- color-type (descriptive) +// || |+------ color-type (numerical) +// || +------- interlaced or non-interlaced +// |+--------- parameter of test (in this case gamma-value) +// +---------- test feature (in this case gamma) + +BOOST_AUTO_TEST_CASE( file_format_test ) +{ + string in ( png_in + "PngSuite\\" ); + + fs::path in_path = fs::system_complete( fs::path( in )); + + if ( fs::is_directory( in_path ) ) + { + fs::directory_iterator end_iter; + for( fs::directory_iterator dir_itr( in_path ) + ; dir_itr != end_iter + ; ++dir_itr + ) + { + if ( fs::is_regular( dir_itr->status() ) + && ( fs::extension( dir_itr->path() ) == ".PNG" )) + { + rgb8_image_t img; + string filename = in + dir_itr->path().leaf().string(); + read_and_convert_image( filename, img, tag_t() ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( png_out + fs::basename( dir_itr->path() ) + ".png" + , view( img ) + , png_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } + } + } +} + +#endif // BOOST_GIL_IO_USE_PNG_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/png_old_test.cpp b/src/boost/libs/gil/test/extension/io/png_old_test.cpp new file mode 100644 index 00000000..aca9f7d2 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/png_old_test.cpp @@ -0,0 +1,100 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE png_old_test_module +#include <boost/gil.hpp> +#include <boost/gil/extension/io/png/old.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( gil_io_png_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( old_read_dimensions_test ) +{ + boost::gil::point_t dim = png_read_dimensions(png_filename); + BOOST_CHECK_EQUAL( dim.x, 1000 ); + BOOST_CHECK_EQUAL( dim.y, 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_image_test ) +{ + rgba8_image_t img; + png_read_image( png_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_image_test ) +{ + rgb8_image_t img; + png_read_and_convert_image( png_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_view_test ) +{ + rgba8_image_t img( 1000, 600 ); + png_read_view( png_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_view_test ) +{ + rgb8_image_t img( 1000, 600 ); + png_read_and_convert_view( png_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_write_view_test ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + png_write_view( png_out + "old_write_view_test.png" + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( old_dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + png_read_image( png_filename.c_str() + , runtime_image + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + png_write_view( png_out + "old_dynamic_image_test.png" + , view( runtime_image ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/png_read_test.cpp b/src/boost/libs/gil/test/extension/io/png_read_test.cpp new file mode 100644 index 00000000..211cb5d2 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/png_read_test.cpp @@ -0,0 +1,731 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE png_read_test_module +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT +#define BOOST_GIL_IO_ENABLE_GRAY_ALPHA +#define BOOST_FILESYSTEM_VERSION 3 + +#include <boost/gil/extension/io/png.hpp> + +#include <boost/test/unit_test.hpp> + +#include <cstdint> +#include <iostream> + +#include "paths.hpp" +#include "scanline_read_test.hpp" +#include "unit_test_utility.hpp" + +using namespace std; +using namespace boost; +using namespace gil; +using namespace boost::gil::detail; +namespace fs = boost::filesystem; + +using tag_t = png_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_png_tests ) + +using gray_alpha8_pixel_t = pixel<uint8_t, gray_alpha_layout_t>; +using gray_alpha8_image_t= image<gray_alpha8_pixel_t, false>; + +using gray_alpha16_pixel_t = pixel<uint16_t, gray_alpha_layout_t>; +using gray_alpha16_image_t = image<gray_alpha16_pixel_t, false>; + +template< typename Image > +void test_file( string filename ) +{ + Image src, dst; + + image_read_settings< png_tag > settings; + settings._read_file_gamma = true; + settings._read_transparency_data = true; + + + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( png_in + filename + , settings + ); + + read_image( png_in + filename + , src + , settings + ); + + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + image_write_info< png_tag > write_info; + write_info._file_gamma = backend._info._file_gamma; + + write_view( png_out + filename + , view( src ) + , write_info + ); + + read_image( png_out + filename + , dst + , settings + ); + + + BOOST_CHECK( equal_pixels( const_view( src ) + , const_view( dst ) + ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +template< typename Image > +void test_png_scanline_reader( string filename ) +{ + test_scanline_reader<Image, png_tag>( string( png_in + filename ).c_str() ); +} + +BOOST_AUTO_TEST_CASE( read_header_test ) +{ + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( png_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + + BOOST_CHECK_EQUAL( backend._info._num_channels, 4 ); + BOOST_CHECK_EQUAL( backend._info._bit_depth , 8 ); + BOOST_CHECK_EQUAL( backend._info._color_type , PNG_COLOR_TYPE_RGBA ); + + BOOST_CHECK_EQUAL( backend._info._interlace_method , PNG_INTERLACE_NONE ); + BOOST_CHECK_EQUAL( backend._info._compression_method, PNG_COMPRESSION_TYPE_BASE ); + BOOST_CHECK_EQUAL( backend._info._filter_method , PNG_FILTER_TYPE_BASE ); + + + BOOST_CHECK_EQUAL( backend._info._file_gamma, 1 ); +} + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_pixel_per_meter ) +{ + image_read_settings< png_tag > settings; + settings.set_read_members_true(); + + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( png_base_in + "EddDawson/36dpi.png" + , settings + ); + + BOOST_CHECK_EQUAL( backend._info._pixels_per_meter, png_uint_32( 1417 )); +} + +BOOST_AUTO_TEST_CASE(read_with_trns_chunk_color_type_0) +{ + // PNG 1.2: For color type 0 (grayscale), the tRNS chunk contains a single gray level value, + // stored in the format: + // + // Gray: 2 bytes, range 0 .. (2^bitdepth)-1 + { + auto const png_path = png_in + "tbbn0g04.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 4); + BOOST_CHECK_EQUAL(backend._info._num_channels, 1u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_GRAY); + + gray_alpha8_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == gray_alpha8c_pixel_t(255, 0)); + BOOST_TEST(const_view(img)[78] == gray_alpha8c_pixel_t(221, 255)); + BOOST_TEST(const_view(img)[79] == gray_alpha8c_pixel_t(204, 255)); + BOOST_TEST(const_view(img)[975] == gray_alpha8c_pixel_t(238, 255)); + BOOST_TEST(const_view(img)[976] == gray_alpha8c_pixel_t(221, 255)); + BOOST_TEST(const_view(img).back() == gray_alpha8c_pixel_t(255, 0)); + } + { + auto const png_path = png_in + "tbwn0g16.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 16); + BOOST_CHECK_EQUAL(backend._info._num_channels, 1u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_GRAY); + + gray_alpha16_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == gray_alpha16c_pixel_t(65535, 0)); + BOOST_TEST(const_view(img)[78] == gray_alpha16c_pixel_t(58339, 65535)); + BOOST_TEST(const_view(img)[79] == gray_alpha16c_pixel_t(51657, 65535)); + BOOST_TEST(const_view(img)[975] == gray_alpha16c_pixel_t(62965, 65535)); + BOOST_TEST(const_view(img)[976] == gray_alpha16c_pixel_t(58339, 65535)); + BOOST_TEST(const_view(img).back() == gray_alpha16c_pixel_t(65535, 0)); + } +} + +BOOST_AUTO_TEST_CASE(read_with_trns_chunk_color_type_2) +{ + // PNG 1.2: For color type 2 (truecolor), the tRNS chunk contains a single RGB color value, + // stored in the format: + // + // Red: 2 bytes, range 0 .. (2^bitdepth)-1 + // Green: 2 bytes, range 0 .. (2^bitdepth)-1 + // Blue: 2 bytes, range 0 .. (2^bitdepth)-1 + { + auto const png_path = png_in + "tbbn2c16.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 16); + BOOST_CHECK_EQUAL(backend._info._num_channels, 3u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_RGB); + + rgba16_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba16c_pixel_t(65535, 65535, 65535, 0)); + BOOST_TEST(const_view(img)[78] == rgba16c_pixel_t(58339, 58339, 58339, 65535)); + BOOST_TEST(const_view(img)[79] == rgba16c_pixel_t(51657, 51657, 51657, 65535)); + BOOST_TEST(const_view(img)[975] == rgba16c_pixel_t(62965, 62965, 62965, 65535)); + BOOST_TEST(const_view(img)[976] == rgba16c_pixel_t(58339, 58339, 58339, 65535)); + BOOST_TEST(const_view(img).back() == rgba16c_pixel_t(65535, 65535, 65535, 0)); + } + { + auto const png_path = png_in + "tbgn2c16.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 16); + BOOST_CHECK_EQUAL(backend._info._num_channels, 3u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_RGB); + + rgba16_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba16c_pixel_t(65535, 65535, 65535, 0)); + BOOST_TEST(const_view(img)[78] == rgba16c_pixel_t(58339, 58339, 58339, 65535)); + BOOST_TEST(const_view(img)[79] == rgba16c_pixel_t(51657, 51657, 51657, 65535)); + BOOST_TEST(const_view(img)[975] == rgba16c_pixel_t(62965, 62965, 62965, 65535)); + BOOST_TEST(const_view(img)[976] == rgba16c_pixel_t(58339, 58339, 58339, 65535)); + BOOST_TEST(const_view(img).back() == rgba16c_pixel_t(65535, 65535, 65535, 0)); + } + { + auto const png_path = png_in + "tbrn2c08.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 8); + BOOST_CHECK_EQUAL(backend._info._num_channels, 3u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_RGB); + + rgba8_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba8c_pixel_t(255, 255, 255, 0)); + BOOST_TEST(const_view(img)[78] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img)[79] == rgba8c_pixel_t(201, 201, 201, 255)); + BOOST_TEST(const_view(img)[975] == rgba8c_pixel_t(245, 245, 245, 255)); + BOOST_TEST(const_view(img)[976] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img).back() == rgba8c_pixel_t(255, 255, 255, 0)); + } +} + +BOOST_AUTO_TEST_CASE(read_with_trns_chunk_color_type_3) +{ + // PNG 1.2: For color type 3 (indexed color), the tRNS chunk contains a series of one-byte + // alpha values, corresponding to entries in the PLTE chunk: + // + // Alpha for palette index 0: 1 byte + // Alpha for palette index 1: 1 byte + // ...etc... + { + auto const png_path = png_in + "tbbn3p08.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 8); + BOOST_CHECK_EQUAL(backend._info._num_channels, 1u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_PALETTE); + + rgba8_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba8c_pixel_t(255, 255, 255, 0)); + BOOST_TEST(const_view(img)[78] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img)[79] == rgba8c_pixel_t(201, 201, 201, 255)); + BOOST_TEST(const_view(img)[975] == rgba8c_pixel_t(246, 246, 246, 255)); + BOOST_TEST(const_view(img)[976] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img).back() == rgba8c_pixel_t(255, 255, 255, 0)); + } + { + auto const png_path = png_in + "tbgn3p08.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 8); + BOOST_CHECK_EQUAL(backend._info._num_channels, 1u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_PALETTE); + + rgba8_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba8c_pixel_t(255, 255, 255, 0)); + BOOST_TEST(const_view(img)[78] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img)[79] == rgba8c_pixel_t(201, 201, 201, 255)); + BOOST_TEST(const_view(img)[975] == rgba8c_pixel_t(246, 246, 246, 255)); + BOOST_TEST(const_view(img)[976] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img).back() == rgba8c_pixel_t(255, 255, 255, 0)); + } + { + auto const png_path = png_in + "tp1n3p08.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 8); + BOOST_CHECK_EQUAL(backend._info._num_channels, 1u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_PALETTE); + + rgba8_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba8c_pixel_t(255, 255, 255, 0)); + BOOST_TEST(const_view(img)[78] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img)[79] == rgba8c_pixel_t(201, 201, 201, 255)); + BOOST_TEST(const_view(img)[975] == rgba8c_pixel_t(246, 246, 246, 255)); + BOOST_TEST(const_view(img)[976] == rgba8c_pixel_t(227, 227, 227, 255)); + BOOST_TEST(const_view(img).back() == rgba8c_pixel_t(255, 255, 255, 0)); + } + { + auto const png_path = png_in + "tm3n3p02.png"; + image_read_settings<png_tag> settings; + settings.set_read_members_true(); + auto backend = read_image_info(png_path, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_CHECK_EQUAL(backend._info._bit_depth, 2); + BOOST_CHECK_EQUAL(backend._info._num_channels, 1u); + BOOST_CHECK_EQUAL(backend._info._color_type, PNG_COLOR_TYPE_PALETTE); + + rgba8_image_t img; + read_image(png_path, img, settings); + BOOST_CHECK_EQUAL(backend._info._width, 32u); + BOOST_CHECK_EQUAL(backend._info._height, 32u); + BOOST_TEST(const_view(img).front() == rgba8c_pixel_t(0, 0, 255, 0)); + BOOST_TEST(const_view(img)[16] == rgba8c_pixel_t(0, 0, 255, 85)); + BOOST_TEST(const_view(img)[511] == rgba8c_pixel_t(0, 0, 255, 85)); + BOOST_TEST(const_view(img)[1007] == rgba8c_pixel_t(0, 0, 255, 170)); + BOOST_TEST(const_view(img).back() == rgba8c_pixel_t(0, 0, 255, 255)); + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +#ifdef BOOST_GIL_IO_USE_PNG_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_CASE( BASIc_format_test ) +{ + // Basic format test files (non-interlaced) + + // BASN0g01 - black & white + test_file< gray1_image_t >( "BASN0G01.PNG" ); + test_png_scanline_reader< gray1_image_t >( "BASN0G01.PNG" ); + + // BASN0g02 - 2 bit (4 level) grayscale + test_file< gray2_image_t >( "BASN0G02.PNG" ); + test_png_scanline_reader< gray2_image_t >( "BASN0G02.PNG" ); + + // BASN0g04 - 4 bit (16 level) grayscale + test_file< gray4_image_t >( "BASN0G04.PNG" ); + test_png_scanline_reader< gray4_image_t >( "BASN0G04.PNG" ); + + // BASN0g08 - 8 bit (256 level) grayscale + test_file< gray8_image_t >( "BASN0G08.PNG" ); + test_png_scanline_reader< gray8_image_t >( "BASN0G08.PNG" ); + + // BASN0g16 - 16 bit (64k level) grayscale + test_file< gray16_image_t >( "BASN0G16.PNG" ); + test_png_scanline_reader< gray16_image_t >( "BASN0G16.PNG" ); + + // BASN2c08 - 3x8 bits rgb color + test_file< rgb8_image_t >( "BASN2C08.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "BASN2C08.PNG" ); + + // BASN2c16 - 3x16 bits rgb color + test_file< rgb16_image_t >( "BASN2C16.PNG" ); + test_png_scanline_reader< rgb16_image_t >( "BASN2C16.PNG" ); + + // BASN3p01 - 1 bit (2 color) paletted + test_file< rgb8_image_t >( "BASN3P01.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "BASN3P01.PNG" ); + + // BASN3p02 - 2 bit (4 color) paletted + test_file< rgb8_image_t >( "BASN3P02.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "BASN3P02.PNG" ); + + // BASN3p04 - 4 bit (16 color) paletted + test_file< rgb8_image_t >( "BASN3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "BASN3P04.PNG" ); + + // BASN3p08 - 8 bit (256 color) paletted + test_file< rgb8_image_t >( "BASN3P08.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "BASN3P08.PNG" ); + + // BASN4a08 - 8 bit grayscale + 8 bit alpha-channel + test_file< gray_alpha8_image_t >( "BASN4A08.PNG" ); + test_png_scanline_reader< gray_alpha8_image_t >( "BASN4A08.PNG" ); + + // BASN4a16 - 16 bit grayscale + 16 bit alpha-channel + test_file< gray_alpha16_image_t >( "BASN4A16.PNG" ); + test_png_scanline_reader< gray_alpha16_image_t >( "BASN4A16.PNG" ); + + // BASN6a08 - 3x8 bits rgb color + 8 bit alpha-channel + test_file< rgba8_image_t >( "BASN6A08.PNG" ); + test_png_scanline_reader< rgba8_image_t >( "BASN6A08.PNG" ); + + // BASN6a16 - 3x16 bits rgb color + 16 bit alpha-channel + test_file< rgba16_image_t >( "BASN6A16.PNG" ); + test_png_scanline_reader< rgba16_image_t >( "BASN6A16.PNG" ); +} + +BOOST_AUTO_TEST_CASE( BASIc_format_interlaced_test ) +{ + // Basic format test files (Adam-7 interlaced) + + // BASI0g01 - black & white + test_file< gray1_image_t >( "BASI0G01.PNG" ); + + // BASI0g02 - 2 bit (4 level) grayscale + test_file< gray2_image_t >( "BASI0G02.PNG" ); + + // BASI0g04 - 4 bit (16 level) grayscale + test_file< gray4_image_t >( "BASI0G04.PNG" ); + + // BASI0g08 - 8 bit (256 level) grayscale + test_file< gray8_image_t >( "BASI0G08.PNG" ); + + // BASI0g16 - 16 bit (64k level) grayscale + test_file< gray16_image_t >( "BASI0G16.PNG" ); + + // BASI2c08 - 3x8 bits rgb color + test_file< rgb8_image_t >( "BASI2C08.PNG" ); + + // BASI2c16 - 3x16 bits rgb color + test_file< rgb16_image_t >( "BASI2C16.PNG" ); + + // BASI3p01 - 1 bit (2 color) paletted + test_file< rgb8_image_t >( "BASI3P01.PNG" ); + + // BASI3p02 - 2 bit (4 color) paletted + test_file< rgb8_image_t >( "BASI3P02.PNG" ); + + // BASI3p04 - 4 bit (16 color) paletted + test_file< rgb8_image_t >( "BASI3P04.PNG" ); + + // BASI3p08 - 8 bit (256 color) paletted + test_file< rgb8_image_t >( "BASI3P08.PNG" ); + + // BASI4a08 - 8 bit grayscale + 8 bit alpha-channel + test_file< gray_alpha8_image_t >( "BASI4A08.PNG" ); + + // BASI4a16 - 16 bit grayscale + 16 bit alpha-channel + test_file< gray_alpha16_image_t >( "BASI4A16.PNG" ); + + // BASI6a08 - 3x8 bits rgb color + 8 bit alpha-channel + test_file< rgba8_image_t >( "BASI6A08.PNG" ); + + // BASI6a16 - 3x16 bits rgb color + 16 bit alpha-channel + test_file< rgba16_image_t >( "BASI6A16.PNG" ); +} + +BOOST_AUTO_TEST_CASE( odd_sizes_test ) +{ + // S01I3P01 - 1x1 paletted file, interlaced + test_file< rgb8_image_t >( "S01I3P01.PNG" ); + + // S01N3P01 - 1x1 paletted file, no interlacing + test_file< rgb8_image_t >( "S01N3P01.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S01N3P01.PNG" ); + + // S02I3P01 - 2x2 paletted file, interlaced + test_file< rgb8_image_t >( "S02I3P01.PNG" ); + + // S02N3P01 - 2x2 paletted file, no interlacing + test_file< rgb8_image_t >( "S02N3P01.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S02N3P01.PNG" ); + + // S03I3P01 - 3x3 paletted file, interlaced + test_file< rgb8_image_t >( "S03I3P01.PNG" ); + + // S03N3P01 - 3x3 paletted file, no interlacing + test_file< rgb8_image_t >( "S03N3P01.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S03N3P01.PNG" ); + + // S04I3P01 - 4x4 paletted file, interlaced + test_file< rgb8_image_t >( "S04I3P01.PNG" ); + + // S04N3P01 - 4x4 paletted file, no interlacing + test_file< rgb8_image_t >( "S04N3P01.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S04N3P01.PNG" ); + + // S05I3P02 - 5x5 paletted file, interlaced + test_file< rgb8_image_t >( "S05I3P02.PNG" ); + + // S05N3P02 - 5x5 paletted file, no interlacing + test_file< rgb8_image_t >( "S05N3P02.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S05N3P02.PNG" ); + + // S06I3P02 - 6x6 paletted file, interlaced + test_file< rgb8_image_t >( "S06I3P02.PNG" ); + + // S06N3P02 - 6x6 paletted file, no interlacing + test_file< rgb8_image_t >( "S06N3P02.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S06N3P02.PNG" ); + + // S07I3P02 - 7x7 paletted file, interlaced + test_file< rgb8_image_t >( "S07I3P02.PNG" ); + + // S07N3P02 - 7x7 paletted file, no interlacing + test_file< rgb8_image_t >( "S07N3P02.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S07N3P02.PNG" ); + + // S08I3P02 - 8x8 paletted file, interlaced + test_file< rgb8_image_t >( "S08I3P02.PNG" ); + + // S08N3P02 - 8x8 paletted file, no interlacing + test_file< rgb8_image_t >( "S08N3P02.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S08N3P02.PNG" ); + + // S09I3P02 - 9x9 paletted file, interlaced + test_file< rgb8_image_t >( "S09I3P02.PNG" ); + + // S09N3P02 - 9x9 paletted file, no interlacing + test_file< rgb8_image_t >( "S09N3P02.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S09N3P02.PNG" ); + + // S32I3P04 - 32x32 paletted file, interlaced + test_file< rgb8_image_t >( "S32I3P04.PNG" ); + + // S32N3P04 - 32x32 paletted file, no interlacing + test_file< rgb8_image_t >( "S32N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S32N3P04.PNG" ); + + // S33I3P04 - 33x33 paletted file, interlaced + test_file< rgb8_image_t >( "S33I3P04.PNG" ); + + // S33N3P04 - 33x33 paletted file, no interlacing + test_file< rgb8_image_t >( "S33N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S33N3P04.PNG" ); + + // S34I3P04 - 34x34 paletted file, interlaced + test_file< rgb8_image_t >( "S34I3P04.PNG" ); + + // S34N3P04 - 34x34 paletted file, no interlacing + test_file< rgb8_image_t >( "S34N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S34N3P04.PNG" ); + + // S35I3P04 - 35x35 paletted file, interlaced + test_file< rgb8_image_t >( "S35I3P04.PNG" ); + + // S35N3P04 - 35x35 paletted file, no interlacing + test_file< rgb8_image_t >( "S35N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S35N3P04.PNG" ); + + // S36I3P04 - 36x36 paletted file, interlaced + test_file< rgb8_image_t >( "S36I3P04.PNG" ); + + // S36N3P04 - 36x36 paletted file, no interlacing + test_file< rgb8_image_t >( "S36N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S36N3P04.PNG" ); + + // S37I3P04 - 37x37 paletted file, interlaced + test_file< rgb8_image_t >( "S37I3P04.PNG" ); + + // S37N3P04 - 37x37 paletted file, no interlacing + test_file< rgb8_image_t >( "S37N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S37N3P04.PNG" ); + + // S38I3P04 - 38x38 paletted file, interlaced + test_file< rgb8_image_t >( "S38I3P04.PNG" ); + + // S38N3P04 - 38x38 paletted file, no interlacing + test_file< rgb8_image_t >( "S38N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S38N3P04.PNG" ); + + // S39I3P04 - 39x39 paletted file, interlaced + test_file< rgb8_image_t >( "S39I3P04.PNG" ); + + // S39N3P04 - 39x39 paletted file, no interlacing + test_file< rgb8_image_t >( "S39N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S39N3P04.PNG" ); + + // S40I3P04 - 40x40 paletted file, interlaced + test_file< rgb8_image_t >( "S40I3P04.PNG" ); + + // S40N3P04 - 40x40 paletted file, no interlacing + test_file< rgb8_image_t >( "S40N3P04.PNG" ); + test_png_scanline_reader< rgb8_image_t >( "S40N3P04.PNG" ); +} + +BOOST_AUTO_TEST_CASE( background_test ) +{ + // BGAI4A08 - 8 bit grayscale, alpha, no background chunk, interlaced + test_file< gray_alpha8_image_t >( "BGAI4A08.PNG" ); + + // BGAI4A16 - 16 bit grayscale, alpha, no background chunk, interlaced + test_file< gray_alpha16_image_t >( "BGAI4A16.PNG" ); + + // BGAN6A08 - 3x8 bits rgb color, alpha, no background chunk + test_file< rgba8_image_t >( "BGAN6A08.PNG" ); + + // BGAN6A16 - 3x16 bits rgb color, alpha, no background chunk + test_file< rgba16_image_t >( "BGAN6A16.PNG" ); + + // BGBN4A08 - 8 bit grayscale, alpha, black background chunk + test_file< gray_alpha8_image_t >( "BGBN4A08.PNG" ); + + // BGGN4A16 - 16 bit grayscale, alpha, gray background chunk + test_file< gray_alpha16_image_t >( "BGGN4A16.PNG" ); + + // BGWN6A08 - 3x8 bits rgb color, alpha, white background chunk + test_file< rgba8_image_t >( "BGWN6A08.PNG" ); + + // BGYN6A16 - 3x16 bits rgb color, alpha, yellow background chunk + test_file< rgba16_image_t >( "BGYN6A16.PNG" ); +} + +BOOST_AUTO_TEST_CASE( transparency_test ) +{ + // TBBN1G04 - transparent, black background chunk + // file missing + //test_file< gray_alpha8_image_t >( "TBBN1G04.PNG" ); + + // TBBN2C16 - transparent, blue background chunk + test_file< rgba16_image_t >( "TBBN2C16.PNG" ); + + // TBBN3P08 - transparent, black background chunk + test_file< rgba8_image_t >( "TBBN3P08.PNG" ); + + // TBGN2C16 - transparent, green background chunk + test_file< rgba16_image_t >( "TBGN2C16.PNG" ); + + // TBGN3P08 - transparent, light-gray background chunk + test_file< rgba8_image_t >( "TBGN3P08.PNG" ); + + // TBRN2C08 - transparent, red background chunk + test_file< rgba8_image_t >( "TBRN2C08.PNG" ); + + // TBWN1G16 - transparent, white background chunk + test_file< gray_alpha16_image_t >( "TBWN0G16.PNG" ); + + // TBWN3P08 - transparent, white background chunk + test_file< rgba8_image_t >( "TBWN3P08.PNG" ); + + // TBYN3P08 - transparent, yellow background chunk + test_file< rgba8_image_t >( "TBYN3P08.PNG" ); + + // TP0N1G08 - not transparent for reference (logo on gray) + test_file< gray8_image_t >( "TP0N0G08.PNG" ); + + // TP0N2C08 - not transparent for reference (logo on gray) + test_file< rgb8_image_t >( "TP0N2C08.PNG" ); + + // TP0N3P08 - not transparent for reference (logo on gray) + test_file< rgb8_image_t >( "TP0N3P08.PNG" ); + + // TP1N3P08 - transparent, but no background chunk + test_file< rgba8_image_t >( "TP1N3P08.PNG" ); +} + +BOOST_AUTO_TEST_CASE( gamma_test ) +{ + // G03N0G16 - grayscale, file-gamma = 0.35 + test_file< gray16_image_t >( "G03N0G16.PNG" ); + + // G03N2C08 - color, file-gamma = 0.35 + test_file< rgb8_image_t >( "G03N2C08.PNG" ); + + // G03N3P04 - paletted, file-gamma = 0.35 + test_file< rgb8_image_t >( "G03N3P04.PNG" ); + + // G04N0G16 - grayscale, file-gamma = 0.45 + test_file< gray16_image_t >( "G04N0G16.PNG" ); + + // G04N2C08 - color, file-gamma = 0.45 + test_file< rgb8_image_t >( "G04N2C08.PNG" ); + + // G04N3P04 - paletted, file-gamma = 0.45 + test_file< rgb8_image_t >( "G04N3P04.PNG" ); + + // G05N0G16 - grayscale, file-gamma = 0.55 + test_file< gray16_image_t >( "G05N0G16.PNG" ); + + // G05N2C08 - color, file-gamma = 0.55 + test_file< rgb8_image_t >( "G05N2C08.PNG" ); + + // G05N3P04 - paletted, file-gamma = 0.55 + test_file< rgb8_image_t >( "G05N3P04.PNG" ); + + // G07N0G16 - grayscale, file-gamma = 0.70 + test_file< gray16_image_t >( "G07N0G16.PNG" ); + + // G07N2C08 - color, file-gamma = 0.70 + test_file< rgb8_image_t >( "G07N2C08.PNG" ); + + // G07N3P04 - paletted, file-gamma = 0.70 + test_file< rgb8_image_t >( "G07N3P04.PNG" ); + + // G10N0G16 - grayscale, file-gamma = 1.00 + test_file< gray16_image_t >( "G10N0G16.PNG" ); + + // G10N2C08 - color, file-gamma = 1.00 + test_file< rgb8_image_t >( "G10N2C08.PNG" ); + + // G10N3P04 - paletted, file-gamma = 1.00 + test_file< rgb8_image_t >( "G10N3P04.PNG" ); + + // G25N0G16 - grayscale, file-gamma = 2.50 + test_file< gray16_image_t >( "G25N0G16.PNG" ); + + // G25N2C08 - color, file-gamma = 2.50 + test_file< rgb8_image_t >( "G25N2C08.PNG" ); + + // G25N3P04 - paletted, file-gamma = 2.50 + test_file< rgb8_image_t >( "G25N3P04.PNG" ); +} + +#endif // BOOST_GIL_IO_USE_PNG_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/png_test.cpp b/src/boost/libs/gil/test/extension/io/png_test.cpp new file mode 100644 index 00000000..287aa8ff --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/png_test.cpp @@ -0,0 +1,351 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE png_test +//#define BOOST_GIL_IO_PNG_FLOATING_POINT_SUPPORTED +//#define BOOST_GIL_IO_PNG_FIXED_POINT_SUPPORTED + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/png.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +using tag_t = png_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_png_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_using_string ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( png_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + ifstream in( png_filename.c_str(), ios::binary ); + + using backend_t = get_reader_backend<ifstream, tag_t>::type; + + backend_t backend = read_image_info( in + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + FILE* file = fopen( png_filename.c_str(), "rb" ); + + using backend_t = get_reader_backend<FILE*, tag_t>::type; + + backend_t backend = read_image_info( file + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgba8_image_t img; + read_image( png_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + ifstream in( png_filename.c_str(), ios::binary ); + + rgba8_image_t img; + read_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + FILE* file = fopen( png_filename.c_str(), "rb" ); + + rgba8_image_t img; + read_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + { + rgb8_image_t img; + read_and_convert_image( png_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + rgba8_image_t img; + read_and_convert_image( png_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + ifstream in( png_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_and_convert_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + FILE* file = fopen( png_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_and_convert_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + { + rgba8_image_t img( 1000, 600 ); + read_view( png_filename, view( img ), tag_t() ); + } + + { + ifstream in( png_filename.c_str(), ios::binary ); + + rgba8_image_t img( 1000, 600 ); + read_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( png_filename.c_str(), "rb" ); + + rgba8_image_t img( 1000, 600 ); + read_view( file, view( img ), tag_t() ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + { + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( png_filename, view( img ), tag_t() ); + } + + { + ifstream in( png_filename.c_str(), ios::binary ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( png_filename.c_str(), "rb" ); + + rgb8_image_t img( 1000, 600 ); + + read_and_convert_view( file + , view( img ) + , tag_t() + ); + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_view_test ) +{ + { + string filename( png_out + "write_test_string.png" ); + + write_view( filename + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( png_out + "write_test_string_bgr.png" ); + + write_view( filename + , create_mandel_view( 320, 240 + , bgr8_pixel_t( 255, 0, 0 ) + , bgr8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( png_out + "write_test_ofstream.png" ); + + ofstream out( filename.c_str(), ios::out | ios::binary ); + + write_view( out + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( png_out + "write_test_file.png" ); + + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( png_out + "write_test_info.png" ); + FILE* file = fopen( filename.c_str(), "wb" ); + + image_write_info< png_tag > info; + + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , info + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES +BOOST_AUTO_TEST_CASE( stream_test ) +{ + // 1. Read an image. + ifstream in( png_filename.c_str(), ios::binary ); + + rgba8_image_t img; + read_image( in, img, tag_t() ); + + // 2. Write image to in-memory buffer. + stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary ); + write_view( out_buffer, view( img ), tag_t() ); + + // 3. Copy in-memory buffer to another. + stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary ); + in_buffer << out_buffer.rdbuf(); + + // 4. Read in-memory buffer to gil image + rgba8_image_t dst; + read_image( in_buffer, dst, tag_t() ); + + // 5. Write out image. + string filename( png_out + "stream_test.png" ); + ofstream out( filename.c_str(), ios_base::binary ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( out, view( dst ), tag_t() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test_2 ) +{ + filebuf in_buf; + if( !in_buf.open( png_filename.c_str(), ios::in | ios::binary ) ) + { + BOOST_CHECK( false ); + } + + istream in( &in_buf ); + + rgba8_image_t img; + read_image( in, img, tag_t() ); +} + +BOOST_AUTO_TEST_CASE( subimage_test ) +{ + run_subimage_test< rgba8_image_t, tag_t >( png_filename + , point_t( 0, 0 ) + , point_t( 50, 50 ) + ); + + + run_subimage_test< rgba8_image_t, tag_t >( png_filename + , point_t( 135, 95 ) + , point_t( 50, 50 ) + ); +} + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + read_image( png_filename.c_str() + , runtime_image + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( png_out + "dynamic_image_test.png" + , view( runtime_image ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/png_write_test.cpp b/src/boost/libs/gil/test/extension/io/png_write_test.cpp new file mode 100644 index 00000000..ad072ad7 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/png_write_test.cpp @@ -0,0 +1,40 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE png_read_test_module +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT +#define BOOST_GIL_IO_ENABLE_GRAY_ALPHA +#define BOOST_FILESYSTEM_VERSION 3 + +#include <boost/gil/extension/io/png.hpp> + +#include <boost/test/unit_test.hpp> + +#include <cstdint> +#include <iostream> + +#include "color_space_write_test.hpp" +#include "paths.hpp" +#include "scanline_read_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; +using namespace boost::gil::detail; + +using tag_t = png_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_png_tests ) + +BOOST_AUTO_TEST_CASE( rgb_color_space_write_test ) +{ + color_space_write_test< tag_t >( png_out + "rgb_color_space_test.png" + , png_out + "bgr_color_space_test.png" + ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/pnm_old_test.cpp b/src/boost/libs/gil/test/extension/io/pnm_old_test.cpp new file mode 100644 index 00000000..bca10951 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/pnm_old_test.cpp @@ -0,0 +1,106 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE pnm_old_test_module +#include <boost/test/unit_test.hpp> + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/pnm/old.hpp> + +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( gil_io_pnm_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( old_read_dimensions_test ) +{ + boost::gil::point_t dim = pnm_read_dimensions(pnm_filename); + BOOST_CHECK_EQUAL( dim.x, 256 ); + BOOST_CHECK_EQUAL( dim.y, 256 ); +} + +BOOST_AUTO_TEST_CASE( old_read_image_test ) +{ + { + rgb8_image_t img; + pnm_read_image( pnm_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 256 ); + BOOST_CHECK_EQUAL( img.height(), 256 ); + } +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_image_test ) +{ + { + rgb8_image_t img; + pnm_read_and_convert_image( pnm_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 256 ); + BOOST_CHECK_EQUAL( img.height(), 256 ); + } +} + +BOOST_AUTO_TEST_CASE( old_read_view_test ) +{ + { + rgb8_image_t img( 256, 256 ); + pnm_read_view( pnm_filename, view( img ) ); + } +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_view_test ) +{ + { + rgb8_image_t img( 256, 256 ); + pnm_read_and_convert_view( pnm_filename, view( img ) ); + } +} + +BOOST_AUTO_TEST_CASE( old_write_view_test ) +{ + { + string filename( pnm_out + "test5.pnm" ); + gray8_image_t img( 256, 256); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + pnm_write_view( filename, view( img ) ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +BOOST_AUTO_TEST_CASE( old_dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + gray1_image_t + >; + + any_image< my_img_types > runtime_image; + + pnm_read_image( pnm_filename.c_str() + , runtime_image + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + pnm_write_view( pnm_out + "old_dynamic_image_test.pnm" + , view( runtime_image ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/pnm_read_test.cpp b/src/boost/libs/gil/test/extension/io/pnm_read_test.cpp new file mode 100644 index 00000000..2b66fead --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/pnm_read_test.cpp @@ -0,0 +1,144 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE pnm_read_test_module + +#include <boost/gil/extension/io/pnm.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" +#include "scanline_read_test.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = pnm_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_pnm_tests ) + +#ifdef BOOST_GIL_IO_USE_PNM_TEST_SUITE_IMAGES + +template< typename Image > +void write( Image& img + , const string& file_name + ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( pnm_out + file_name + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +template< typename Image > +void test_pnm_scanline_reader( string filename ) +{ + test_scanline_reader<Image, pnm_tag>( string( pnm_in + filename ).c_str() ); +} + +BOOST_AUTO_TEST_CASE( read_header_test ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( pnm_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._type , pnm_image_type::color_asc_t::value ); + BOOST_CHECK_EQUAL( backend._info._width , 256u ); + BOOST_CHECK_EQUAL( backend._info._height , 256u ); + BOOST_CHECK_EQUAL( backend._info._max_value, 255u ); + } +} + +BOOST_AUTO_TEST_CASE( read_reference_images_test ) +{ + // p1.pnm + { + gray8_image_t img; + + read_image( pnm_in + "p1.pnm", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 200u ); + BOOST_CHECK_EQUAL( view( img ).height(), 200u ); + + write( img, "p1.pnm" ); + + test_pnm_scanline_reader< gray8_image_t >( "p1.pnm" ); + } + + // p2.pnm + { + gray8_image_t img; + + read_image( pnm_in + "p2.pnm", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 200u ); + BOOST_CHECK_EQUAL( view( img ).height(), 200u ); + + write( img, "p2.pnm" ); + + test_pnm_scanline_reader< gray8_image_t >( "p2.pnm" ); + } + + // p3.pnm + { + rgb8_image_t img; + + read_image( pnm_in + "p3.pnm", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 256u ); + BOOST_CHECK_EQUAL( view( img ).height(), 256u ); + + write( img, "p3.pnm" ); + + test_pnm_scanline_reader< rgb8_image_t >( "p3.pnm" ); + } + + // p4.pnm + { + gray1_image_t img; + + read_image( pnm_in + "p4.pnm", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 200u ); + BOOST_CHECK_EQUAL( view( img ).height(), 200u ); + + write( img, "p4.pnm" ); + + test_pnm_scanline_reader< gray1_image_t >( "p4.pnm" ); + } + + // p5.pnm + { + gray8_image_t img; + + read_image( pnm_in + "p5.pnm", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 200u ); + BOOST_CHECK_EQUAL( view( img ).height(), 200u ); + + write( img, "p5.pnm" ); + + test_pnm_scanline_reader< gray8_image_t >( "p5.pnm" ); + } + + // p6.pnm + { + rgb8_image_t img; + + read_image( pnm_in + "p6.pnm", img, tag_t() ); + BOOST_CHECK_EQUAL( view( img ).width() , 256u ); + BOOST_CHECK_EQUAL( view( img ).height(), 256u ); + + write( img, "p6.pnm" ); + + test_pnm_scanline_reader< rgb8_image_t >( "p6.pnm" ); + } +} + +#endif // BOOST_GIL_IO_USE_PNM_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/pnm_test.cpp b/src/boost/libs/gil/test/extension/io/pnm_test.cpp new file mode 100644 index 00000000..6346d7d5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/pnm_test.cpp @@ -0,0 +1,329 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE pnm_test + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/pnm.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +using tag_t = pnm_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_pnm_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_using_string ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( pnm_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 256u ); + BOOST_CHECK_EQUAL( backend._info._height, 256u ); + } + + { + ifstream in( pnm_filename.c_str(), ios::binary ); + + using backend_t = get_reader_backend<ifstream, tag_t>::type; + + backend_t backend = read_image_info( in + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 256u ); + BOOST_CHECK_EQUAL( backend._info._height, 256u ); + } + + { + FILE* file = fopen( pnm_filename.c_str(), "rb" ); + + using backend_t = get_reader_backend<FILE*, tag_t>::type; + + backend_t backend = read_image_info( file + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 256u ); + BOOST_CHECK_EQUAL( backend._info._height, 256u ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgb8_image_t img; + read_image( pnm_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 256u ); + BOOST_CHECK_EQUAL( img.height(), 256u ); + } + + { + ifstream in( pnm_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 256u ); + BOOST_CHECK_EQUAL( img.height(), 256u ); + } + + { + FILE* file = fopen( pnm_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 256u ); + BOOST_CHECK_EQUAL( img.height(), 256u ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + { + rgb8_image_t img; + read_and_convert_image( pnm_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 256u ); + BOOST_CHECK_EQUAL( img.height(), 256u ); + } + + { + ifstream in( pnm_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_and_convert_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 256u ); + BOOST_CHECK_EQUAL( img.height(), 256u ); + } + + { + FILE* file = fopen( pnm_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_and_convert_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 256u ); + BOOST_CHECK_EQUAL( img.height(), 256u ); + } +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + { + rgb8_image_t img( 256, 256 ); + read_view( pnm_filename, view( img ), tag_t() ); + } + + { + ifstream in( pnm_filename.c_str(), ios::binary ); + + rgb8_image_t img( 256, 256 ); + read_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( pnm_filename.c_str(), "rb" ); + + rgb8_image_t img( 256, 256 ); + read_view( file, view( img ), tag_t() ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + { + rgb8_image_t img( 256, 256 ); + read_and_convert_view( pnm_filename, view( img ), tag_t() ); + } + + { + ifstream in( pnm_filename.c_str(), ios::binary ); + + rgb8_image_t img( 256, 256 ); + read_and_convert_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( pnm_filename.c_str(), "rb" ); + + rgb8_image_t img( 256, 256 ); + + read_and_convert_view( file + , view( img ) + , tag_t() + ); + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +BOOST_AUTO_TEST_CASE( write_view_test ) +{ + { + string filename( pnm_out + "write_test_string.pnm" ); + + write_view( filename + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( pnm_out + "write_test_ofstream.pnm" ); + + ofstream out( filename.c_str(), ios::out | ios::binary ); + + write_view( out + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( pnm_out + "write_test_file.pnm" ); + + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( pnm_out + "write_test_info.pnm" ); + FILE* file = fopen( filename.c_str(), "wb" ); + + image_write_info< tag_t > info; + + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , info + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( stream_test ) +{ + // 1. Read an image. + ifstream in( pnm_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + // 2. Write image to in-memory buffer. + stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary ); + write_view( out_buffer, view( img ), tag_t() ); + + // 3. Copy in-memory buffer to another. + stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary ); + in_buffer << out_buffer.rdbuf(); + + // 4. Read in-memory buffer to gil image + rgb8_image_t dst; + read_image( in_buffer, dst, tag_t() ); + + // 5. Write out image. + string filename( pnm_out + "stream_test.pnm" ); + ofstream out( filename.c_str(), ios_base::binary ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( out, view( dst ), tag_t() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test_2 ) +{ + filebuf in_buf; + if( !in_buf.open( pnm_filename.c_str(), ios::in | ios::binary ) ) + { + BOOST_CHECK( false ); + } + + istream in( &in_buf ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); +} + +BOOST_AUTO_TEST_CASE( subimage_test ) +{ + run_subimage_test< rgb8_image_t, tag_t >( pnm_filename + , point_t( 0, 0 ) + , point_t( 50, 50 ) + ); + + run_subimage_test< rgb8_image_t, tag_t >( pnm_filename + , point_t( 103, 103 ) + , point_t( 50, 50 ) + ); +} + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + gray1_image_t + >; + + any_image< my_img_types > runtime_image; + + read_image( pnm_filename.c_str() + , runtime_image + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( pnm_out + "dynamic_image_test.pnm" + , view( runtime_image ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/pnm_write_test.cpp b/src/boost/libs/gil/test/extension/io/pnm_write_test.cpp new file mode 100644 index 00000000..7f09ff5a --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/pnm_write_test.cpp @@ -0,0 +1,73 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE pnm_write_test_module + +#include <boost/gil/extension/io/pnm.hpp> + +#include <boost/test/unit_test.hpp> + +#include "color_space_write_test.hpp" +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = pnm_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_pnm_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_test ) +{ + mandel_view< rgb8_pixel_t >::type v = create_mandel_view( 200, 200 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ); + + // test writing all supported image types + { + using gray1_image_t = bit_aligned_image1_type<1, gray_layout_t>::type; + gray1_image_t dst( 200, 200 ); + + copy_and_convert_pixels( v, view( dst )); + + write_view( pnm_out + "p4_write_test.pnm" + , view( dst ) + , pnm_tag() + ); + } + + { + gray8_image_t dst( 200, 200 ); + + copy_and_convert_pixels( v, view( dst )); + + write_view( pnm_out + "p5_write_test.pnm" + , view( dst ) + , pnm_tag() + ); + } + + { + write_view( pnm_out + "p6_write_test.pnm" + , v + , pnm_tag() + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +BOOST_AUTO_TEST_CASE( rgb_color_space_write_test ) +{ + color_space_write_test< pnm_tag >( pnm_out + "rgb_color_space_test.pnm" + , pnm_out + "bgr_color_space_test.pnm" + ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/raw_test.cpp b/src/boost/libs/gil/test/extension/io/raw_test.cpp new file mode 100644 index 00000000..286f10ea --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/raw_test.cpp @@ -0,0 +1,128 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE raw_test +#define BOOST_FILESYSTEM_VERSION 3 +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/raw.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; +namespace fs = boost::filesystem; + +using tag_t = raw_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_raw_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_using_string ) +{ + { + /// raw_tag reader's can only constructed with char*, std::string, and LibRaw object + + using backend_t = get_reader_backend<char const*, tag_t>::type; + + backend_t b = make_reader_backend(raw_filename.c_str(), + image_read_settings<raw_tag>()); + + backend_t backend = read_image_info(raw_filename, tag_t()); + + BOOST_CHECK_EQUAL( backend._info._width , 2176 ); + BOOST_CHECK_EQUAL( backend._info._height, 1448 ); + } + + { + fs::path my_path( raw_filename ); + + using backend_t = get_reader_backend<fs::path, tag_t>::type; + + backend_t backend = read_image_info(my_path, tag_t()); + + BOOST_CHECK_EQUAL( backend._info._width , 2176 ); + BOOST_CHECK_EQUAL( backend._info._height, 1448 ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgb8_image_t img; + read_image( raw_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 2176 ); + BOOST_CHECK_EQUAL( img.height(), 1448 ); + } + + { + fs::path my_path( raw_filename ); + + rgb8_image_t img; + read_image( my_path, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 2176 ); + BOOST_CHECK_EQUAL( img.height(), 1448 ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + rgb8_image_t img; + read_and_convert_image( raw_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 2176 ); + BOOST_CHECK_EQUAL( img.height(), 1448 ); +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + rgb8_image_t img( 2176, 1448 ); + read_view( raw_filename, view( img ), tag_t() ); +} + +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + rgb8_image_t img( 2176, 1448 ); + read_and_convert_view( raw_filename, view( img ), tag_t() ); +} + +// BOOST_AUTO_TEST_CASE( subimage_test ) +// { +// run_subimage_test<rgb8_image_t, tag_t>(raw_filename, point_t(0, 0), point_t(127, 1)); +// run_subimage_test<rgb8_image_t, tag_t>(raw_filename, point_t(39, 7), point_t(50, 50)); +// } + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + read_image(raw_filename.c_str(), runtime_image, tag_t()); +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/scanline_read_test.hpp b/src/boost/libs/gil/test/extension/io/scanline_read_test.hpp new file mode 100644 index 00000000..ae10c7f1 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/scanline_read_test.hpp @@ -0,0 +1,61 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_IO_TEST_SCANLINE_READ_TEST_HPP +#define BOOST_GIL_IO_TEST_SCANLINE_READ_TEST_HPP + +#include <boost/gil.hpp> + +#include "cmp_view.hpp" + +template< typename Image + , typename FormatTag + > +void test_scanline_reader( const char* file_name ) +{ + using namespace boost::gil; + + // read image using scanline_read_iterator + using reader_t = scanline_reader + < + typename get_read_device<char const*, FormatTag>::type, + FormatTag + >; + + reader_t reader = make_scanline_reader( file_name, FormatTag() ); + + Image dst( reader._info._width, reader._info._height ); + + using iterator_t = typename reader_t::iterator_t; + + iterator_t it = reader.begin(); + iterator_t end = reader.end(); + + for( int row = 0; it != end; ++it, ++row ) + { + copy_pixels( interleaved_view( reader._info._width + , 1 + , ( typename Image::view_t::x_iterator ) *it + , reader._scanline_length + ) + , subimage_view( view( dst ) + , 0 + , row + , reader._info._width + , 1 + ) + ); + } + + //compare + Image img; + read_image( file_name, img, FormatTag() ); + + cmp_view( view( dst ), view( img ) ); +} + +#endif // BOOST_GIL_IO_TEST_SCANLINE_READ_TEST_HPP diff --git a/src/boost/libs/gil/test/extension/io/subimage_test.hpp b/src/boost/libs/gil/test/extension/io/subimage_test.hpp new file mode 100644 index 00000000..0fe8ed2a --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/subimage_test.hpp @@ -0,0 +1,51 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_IO_TEST_SUBIMAGE_TEST_HPP +#define BOOST_GIL_IO_TEST_SUBIMAGE_TEST_HPP + +#include <boost/gil.hpp> + +using namespace std; +using namespace boost; +using namespace gil; + +template< typename Image + , typename Format + > +void run_subimage_test( string filename + , const point_t& top_left + , const point_t& dimension + ) +{ + Image original, subimage; + + read_image( filename + , original + , Format() + ); + + image_read_settings< Format > settings( top_left + , dimension + ); + + + read_image( filename + , subimage + , settings + ); + + BOOST_CHECK( equal_pixels( const_view( subimage ) + , subimage_view( const_view( original ) + , top_left + , dimension + ) + ) + ); +} + +#endif // BOOST_GIL_IO_TEST_SUBIMAGE_TEST_HPP diff --git a/src/boost/libs/gil/test/extension/io/targa_old_test.cpp b/src/boost/libs/gil/test/extension/io/targa_old_test.cpp new file mode 100644 index 00000000..444828c5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/targa_old_test.cpp @@ -0,0 +1,101 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE targa_old_test_module + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/targa/old.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( gil_io_targa_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( old_read_dimensions_test ) +{ + boost::gil::point_t dim = targa_read_dimensions(targa_filename); + BOOST_CHECK_EQUAL( dim.x, 124 ); + BOOST_CHECK_EQUAL( dim.y, 124 ); +} + +BOOST_AUTO_TEST_CASE( old_read_image_test ) +{ + rgb8_image_t img; + targa_read_image( targa_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_image_test ) +{ + rgb8_image_t img; + targa_read_and_convert_image( targa_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); +} + +BOOST_AUTO_TEST_CASE( old_read_view_test ) +{ + rgb8_image_t img( 124, 124 ); + targa_read_view( targa_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_view_test ) +{ + rgb8_image_t img( 124, 124 ); + targa_read_and_convert_view( targa_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_write_view_test ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + targa_write_view( targa_out + "old_write_view_test.tga" + , create_mandel_view( 124, 124 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( old_dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + targa_read_image( targa_filename.c_str() + , runtime_image + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + targa_write_view( targa_out + "old_dynamic_image_test.tga" + , view( runtime_image ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/targa_read_test.cpp b/src/boost/libs/gil/test/extension/io/targa_read_test.cpp new file mode 100644 index 00000000..c042db78 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/targa_read_test.cpp @@ -0,0 +1,244 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE targa_read_test_module + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/targa.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" +#include "scanline_read_test.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = targa_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_targa_tests ) + +#ifdef BOOST_GIL_IO_USE_TARGA_FILEFORMAT_TEST_SUITE_IMAGES + +template< typename Image > +void test_targa_scanline_reader( string filename ) +{ + test_scanline_reader<Image, targa_tag>( string( targa_in + filename ).c_str() ); +} + +template< typename Image > +void write( Image& img + , const string& file_name + ) +{ +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( targa_out + file_name + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( read_header_test ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( targa_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._header_size , 18 ); + BOOST_CHECK_EQUAL( backend._info._offset , 18 ); + BOOST_CHECK_EQUAL( backend._info._color_map_type , 0 ); + BOOST_CHECK_EQUAL( backend._info._image_type , 10 ); + BOOST_CHECK_EQUAL( backend._info._color_map_start , 0 ); + BOOST_CHECK_EQUAL( backend._info._color_map_length, 0 ); + BOOST_CHECK_EQUAL( backend._info._color_map_depth , 0 ); + BOOST_CHECK_EQUAL( backend._info._x_origin , 0 ); + BOOST_CHECK_EQUAL( backend._info._y_origin , 0 ); + BOOST_CHECK_EQUAL( backend._info._width , 124 ); + BOOST_CHECK_EQUAL( backend._info._height , 124 ); + BOOST_CHECK_EQUAL( backend._info._bits_per_pixel , 24 ); + BOOST_CHECK_EQUAL( backend._info._descriptor , 0 ); + } +} + +BOOST_AUTO_TEST_CASE( read_reference_images_test ) +{ + // 24BPP_compressed.tga + { + rgb8_image_t img; + read_image( targa_in + "24BPP_compressed.tga", img, tag_t() ); + + typename rgb8_image_t::x_coord_t width = view( img ).width(); + typename rgb8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgb8_pixel_t(248, 0, 248) ); + BOOST_CHECK( view( img )(width-1, 0) == rgb8_pixel_t(0, 0, 248) ); + BOOST_CHECK( view( img )(0, height-1) == rgb8_pixel_t(248, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgb8_pixel_t(248, 0, 248) ); + + write( img, "24BPP_compressed_out.tga" ); + } + + // 24BPP_uncompressed.tga + { + rgb8_image_t img; + read_image( targa_in + "24BPP_uncompressed.tga", img, tag_t() ); + + typename rgb8_image_t::x_coord_t width = view( img ).width(); + typename rgb8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgb8_pixel_t(248, 0, 248) ); + BOOST_CHECK( view( img )(width-1, 0) == rgb8_pixel_t(0, 0, 248) ); + BOOST_CHECK( view( img )(0, height-1) == rgb8_pixel_t(248, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgb8_pixel_t(248, 0, 248) ); + + write( img, "24BPP_uncompressed_out.tga" ); + + test_targa_scanline_reader< bgr8_image_t >( "24BPP_uncompressed.tga" ); + } + + // 32BPP_compressed.tga + { + rgba8_image_t img; + read_image( targa_in + "32BPP_compressed.tga", img, tag_t() ); + + typename rgba8_image_t::x_coord_t width = view( img ).width(); + typename rgba8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgba8_pixel_t(248, 0, 248, 255) ); + BOOST_CHECK( view( img )(width-1, 0) == rgba8_pixel_t(0, 0, 248, 255) ); + BOOST_CHECK( view( img )(0, height-1) == rgba8_pixel_t(0, 0, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgba8_pixel_t(248, 0, 248, 255) ); + + write( img, "32BPP_compressed_out.tga" ); + } + + // 32BPP_uncompressed.tga + { + rgba8_image_t img; + read_image( targa_in + "32BPP_uncompressed.tga", img, tag_t() ); + + typename rgba8_image_t::x_coord_t width = view( img ).width(); + typename rgba8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgba8_pixel_t(248, 0, 248, 255) ); + BOOST_CHECK( view( img )(width-1, 0) == rgba8_pixel_t(0, 0, 248, 255) ); + BOOST_CHECK( view( img )(0, height-1) == rgba8_pixel_t(0, 0, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgba8_pixel_t(248, 0, 248, 255) ); + + write( img, "32BPP_uncompressed_out.tga" ); + + test_targa_scanline_reader< bgra8_image_t >( "32BPP_uncompressed.tga" ); + } + + // 24BPP_compressed_ul_origin.tga + { + rgb8_image_t img; + read_image( targa_in + "24BPP_compressed_ul_origin.tga", img, tag_t() ); + + typename rgb8_image_t::x_coord_t width = view( img ).width(); + typename rgb8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgb8_pixel_t(248, 0, 248) ); + BOOST_CHECK( view( img )(width-1, 0) == rgb8_pixel_t(0, 0, 248) ); + BOOST_CHECK( view( img )(0, height-1) == rgb8_pixel_t(248, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgb8_pixel_t(248, 0, 248) ); + + write( img, "24BPP_compressed_ul_origin_out.tga" ); + } + + // 24BPP_uncompressed_ul_origin.tga + { + rgb8_image_t img; + read_image( targa_in + "24BPP_uncompressed_ul_origin.tga", img, tag_t() ); + + typename rgb8_image_t::x_coord_t width = view( img ).width(); + typename rgb8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgb8_pixel_t(248, 0, 248) ); + BOOST_CHECK( view( img )(width-1, 0) == rgb8_pixel_t(0, 0, 248) ); + BOOST_CHECK( view( img )(0, height-1) == rgb8_pixel_t(248, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgb8_pixel_t(248, 0, 248) ); + + write( img, "24BPP_uncompressed_ul_origin_out.tga" ); + } + + // 32BPP_compressed_ul_origin.tga + { + rgba8_image_t img; + read_image( targa_in + "32BPP_compressed_ul_origin.tga", img, tag_t() ); + + typename rgba8_image_t::x_coord_t width = view( img ).width(); + typename rgba8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgba8_pixel_t(248, 0, 248, 255) ); + BOOST_CHECK( view( img )(width-1, 0) == rgba8_pixel_t(0, 0, 248, 255) ); + BOOST_CHECK( view( img )(0, height-1) == rgba8_pixel_t(0, 0, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgba8_pixel_t(248, 0, 248, 255) ); + + write( img, "32BPP_compressed_ul_origin_out.tga" ); + } + + // 32BPP_uncompressed_ul_origin.tga + { + rgba8_image_t img; + read_image( targa_in + "32BPP_uncompressed_ul_origin.tga", img, tag_t() ); + + typename rgba8_image_t::x_coord_t width = view( img ).width(); + typename rgba8_image_t::y_coord_t height = view( img ).height(); + + BOOST_CHECK_EQUAL( width , 124 ); + BOOST_CHECK_EQUAL( height, 124 ); + BOOST_CHECK( view( img )(0, 0) == rgba8_pixel_t(248, 0, 248, 255) ); + BOOST_CHECK( view( img )(width-1, 0) == rgba8_pixel_t(0, 0, 248, 255) ); + BOOST_CHECK( view( img )(0, height-1) == rgba8_pixel_t(0, 0, 0, 0) ); + BOOST_CHECK( view( img )(width-1, height-1) == rgba8_pixel_t(248, 0, 248, 255) ); + + write( img, "32BPP_uncompressed_ul_origin_out.tga" ); + } +} + +BOOST_AUTO_TEST_CASE( partial_image_test ) +{ + const std::string filename( targa_in + "24BPP_compressed.tga" ); + + { + rgb8_image_t img; + read_image( filename + , img + , image_read_settings< targa_tag >( point_t( 0, 0 ), point_t( 50, 50 ) ) + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( targa_out + "targa_partial.tga" + , view( img ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +#endif // BOOST_GIL_IO_USE_TARGA_FILEFORMAT_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/targa_test.cpp b/src/boost/libs/gil/test/extension/io/targa_test.cpp new file mode 100644 index 00000000..29176f65 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/targa_test.cpp @@ -0,0 +1,332 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE targa_test +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/targa.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; +namespace fs = boost::filesystem; + +using tag_t = targa_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_targa_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_using_string ) +{ + + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( targa_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 124 ); + BOOST_CHECK_EQUAL( backend._info._height, 124 ); + } + + { + ifstream in( targa_filename.c_str(), ios::binary ); + + using backend_t = get_reader_backend<ifstream, tag_t>::type; + + backend_t backend = read_image_info( in + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 124 ); + BOOST_CHECK_EQUAL( backend._info._height, 124 ); + } + + { + FILE* file = fopen( targa_filename.c_str(), "rb" ); + + using backend_t = get_reader_backend<FILE*, tag_t>::type; + + backend_t backend = read_image_info( file + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 124 ); + BOOST_CHECK_EQUAL( backend._info._height, 124 ); + } + + { + fs::path my_path( targa_filename ); + + using backend_t = get_reader_backend<fs::path, tag_t>::type; + + backend_t backend = read_image_info( my_path + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 124 ); + BOOST_CHECK_EQUAL( backend._info._height, 124 ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgb8_image_t img; + read_image( targa_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); + } + + { + ifstream in( targa_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); + } + + { + FILE* file = fopen( targa_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + { + rgb8_image_t img; + read_and_convert_image( targa_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); + } + + { + ifstream in( targa_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_and_convert_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); + } + + { + FILE* file = fopen( targa_filename.c_str(), "rb" ); + + rgb8_image_t img; + read_and_convert_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 124 ); + BOOST_CHECK_EQUAL( img.height(), 124 ); + } +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + { + rgb8_image_t img( 124, 124 ); + read_view( targa_filename, view( img ), tag_t() ); + } + + { + ifstream in( targa_filename.c_str(), ios::binary ); + + rgb8_image_t img( 124, 124 ); + read_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( targa_filename.c_str(), "rb" ); + + rgb8_image_t img( 124, 124 ); + read_view( file, view( img ), tag_t() ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + { + rgb8_image_t img( 124, 124 ); + read_and_convert_view( targa_filename, view( img ), tag_t() ); + } + + { + ifstream in( targa_filename.c_str(), ios::binary ); + + rgb8_image_t img( 124, 124 ); + read_and_convert_view( in, view( img ), tag_t() ); + } + + { + FILE* file = fopen( targa_filename.c_str(), "rb" ); + + rgb8_image_t img( 124, 124 ); + read_and_convert_view( file + , view( img ) + , tag_t() + ); + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_view_test ) +{ + { + string filename( targa_out + "write_test_ofstream.tga" ); + + ofstream out( filename.c_str(), ios::binary ); + + write_view( out + , create_mandel_view( 124, 124 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( targa_out + "write_test_file.tga" ); + + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 124, 124 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( targa_out + "write_test_info.tga" ); + + image_write_info< tag_t > info; + + FILE* file = fopen( filename.c_str(), "wb" ); + + write_view( file + , create_mandel_view( 124, 124 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , info + ); + } +} +#endif //BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES +BOOST_AUTO_TEST_CASE( stream_test ) +{ + // 1. Read an image. + ifstream in( targa_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); + + // 2. Write image to in-memory buffer. + stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary ); + write_view( out_buffer, view( img ), tag_t() ); + + // 3. Copy in-memory buffer to another. + stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary ); + in_buffer << out_buffer.rdbuf(); + + // 4. Read in-memory buffer to gil image + rgb8_image_t dst; + read_image( in_buffer, dst, tag_t() ); + + // 5. Write out image. + string filename( targa_out + "stream_test.tga" ); + ofstream out( filename.c_str(), ios_base::binary ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( out, view( dst ), tag_t() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test_2 ) +{ + filebuf in_buf; + if( !in_buf.open( targa_filename.c_str(), ios::in | ios::binary ) ) + { + BOOST_CHECK( false ); + } + + istream in( &in_buf ); + + rgb8_image_t img; + read_image( in, img, tag_t() ); +} + +BOOST_AUTO_TEST_CASE( subimage_test ) +{ + run_subimage_test< rgb8_image_t, tag_t >( targa_filename + , point_t( 0, 0 ) + , point_t( 50, 50 ) + ); + + // not working + //run_subimage_test< rgb8_image_t, tag_t >( targa_filename + // , point_t( 39, 7 ) + // , point_t( 50, 50 ) + // ); +} + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + rgba8_image_t + >; + + any_image< my_img_types > runtime_image; + + read_image( targa_filename.c_str() + , runtime_image + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( targa_out + "dynamic_image_test.tga" + , view( runtime_image ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/targa_write_test.cpp b/src/boost/libs/gil/test/extension/io/targa_write_test.cpp new file mode 100644 index 00000000..e9c78c4a --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/targa_write_test.cpp @@ -0,0 +1,60 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE targa_write_test_module + +#include <boost/gil.hpp> +#include <boost/gil/io/typedefs.hpp> +#include <boost/gil/extension/io/targa.hpp> + +#include <boost/test/unit_test.hpp> + +#include "color_space_write_test.hpp" +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = targa_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_targa_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_test ) +{ + // test writing all supported image types + { + write_view( targa_out + "rgb8_test.tga" + , create_mandel_view( 200, 200 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + write_view( targa_out + "rgba8_test.tga" + , create_mandel_view( 200, 200 + , rgba8_pixel_t( 0, 0, 255, 0 ) + , rgba8_pixel_t( 0, 255, 0, 0 ) + ) + , tag_t() + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +BOOST_AUTO_TEST_CASE( rgb_color_space_write_test ) +{ + color_space_write_test< tag_t >( targa_out + "rgb_color_space_test.tga" + , targa_out + "bgr_color_space_test.tga" + ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/test.cpp b/src/boost/libs/gil/test/extension/io/test.cpp new file mode 100644 index 00000000..d36a87c2 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/test.cpp @@ -0,0 +1,9 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MAIN +#include <boost/test/unit_test.hpp> diff --git a/src/boost/libs/gil/test/extension/io/tiff_file_format_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_file_format_test.cpp new file mode 100644 index 00000000..8f47761c --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_file_format_test.cpp @@ -0,0 +1,954 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_file_format_test_module + +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" +#include "scanline_read_test.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = tiff_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_LIBTIFF_TEST_SUITE_IMAGES + +template< typename Image > +void test_tiff_scanline_reader( string filename ) +{ + test_scanline_reader<Image, tag_t>( filename.c_str() ); +} + +// 73x43 2-bit minisblack gray image +BOOST_AUTO_TEST_CASE( two_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-02.tif" ); + + { + using image_t = bit_aligned_image1_type<2, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test4.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-04.tif 73x43 4-bit minisblack gray image +BOOST_AUTO_TEST_CASE( four_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-04.tif" ); + + { + using image_t = bit_aligned_image1_type<4, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test5.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-06.tif 73x43 6-bit minisblack gray image +BOOST_AUTO_TEST_CASE( six_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-06.tif" ); + + { + using image_t = bit_aligned_image1_type<6, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test6.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-08.tif 73x43 8-bit minisblack gray image +BOOST_AUTO_TEST_CASE( eight_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-08.tif" ); + + { + using image_t = gray8_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test7.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-10.tif 73x43 10-bit minisblack gray image +BOOST_AUTO_TEST_CASE( ten_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-10.tif" ); + + { + using image_t = bit_aligned_image1_type<10, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test8.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-12.tif 73x43 12-bit minisblack gray image +BOOST_AUTO_TEST_CASE( twelve_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-12.tif" ); + + { + using image_t = bit_aligned_image1_type<12, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test9.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-14.tif 73x43 14-bit minisblack gray image +BOOST_AUTO_TEST_CASE( fourteen_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-14.tif" ); + + { + using image_t = bit_aligned_image1_type<14, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test10.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-16.tif 73x43 16-bit minisblack gray image +BOOST_AUTO_TEST_CASE( sixteen_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-16.tif" ); + + { + using image_t = gray16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test11.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-24.tif 73x43 24-bit minisblack gray image +BOOST_AUTO_TEST_CASE( twentyfour_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-24.tif" ); + + { + using image_t = bit_aligned_image1_type<24, gray_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test12.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-minisblack-32.tif 73x43 32-bit minisblack gray image +BOOST_AUTO_TEST_CASE( thirtytwo_bit_minisblack_gray_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-minisblack-32.tif" ); + + { + using image_t = gray32_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test13.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-palette-02.tif 73x43 4-entry colormapped image +BOOST_AUTO_TEST_CASE( four_entry_colormapped_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-palette-02.tif" ); + + { + using image_t = rgb16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test14.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-palette-04.tif 73x43 16-entry colormapped image +BOOST_AUTO_TEST_CASE( sixteen_entry_colormapped_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-palette-04.tif" ); + + { + using image_t = rgb16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test15.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-palette-08.tif 73x43 256-entry colormapped image +BOOST_AUTO_TEST_CASE( twohundred_twenty_five_entry_colormapped_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-palette-08.tif" ); + + { + using image_t = rgb16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test16.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-palette-16.tif 73x43 65536-entry colormapped image +BOOST_AUTO_TEST_CASE( sixtyfive_thousand_entry_colormapped_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-palette-16.tif" ); + + { + using image_t = rgb16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test17.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-02.tif 73x43 2-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( two_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-02.tif" ); + + { + using image_t = bit_aligned_image3_type<2, 2, 2, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test18.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-04.tif 73x43 4-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( four_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-04.tif" ); + + { + using image_t = bit_aligned_image3_type<4, 4, 4, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test19.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-08.tif 73x43 8-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( eight_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-08.tif" ); + + { + using image_t = rgb8_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test20.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-10.tif 73x43 10-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( ten_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-10.tif" ); + + { + using image_t = bit_aligned_image3_type<10, 10, 10, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test21.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-12.tif 73x43 12-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( twelve_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-12.tif" ); + + { + using image_t = bit_aligned_image3_type<12, 12, 12, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test22.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-14.tif 73x43 14-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( fourteen_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-14.tif" ); + + { + using image_t = bit_aligned_image3_type<14, 14, 14, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test23.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-16.tif 73x43 16-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( sixteen_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-16.tif" ); + + { + using image_t = rgb16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test24.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-24.tif 73x43 24-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( twenty_four_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-24.tif" ); + + { + using image_t = bit_aligned_image3_type<24, 24, 24, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test25.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-contig-32.tif 73x43 32-bit contiguous RGB image +BOOST_AUTO_TEST_CASE( thirty_two_bit_contiguous_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-contig-32.tif" ); + + { + using image_t = rgb32_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test26.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-02.tif 73x43 2-bit seperated RGB image +BOOST_AUTO_TEST_CASE( two_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-02.tif" ); + + { + using image_t = bit_aligned_image3_type<2, 2, 2, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test27.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-04.tif 73x43 4-bit seperated RGB image +BOOST_AUTO_TEST_CASE( four_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-04.tif" ); + + { + using image_t = bit_aligned_image3_type<4, 4, 4, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test28.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-08.tif 73x43 8-bit seperated RGB image +BOOST_AUTO_TEST_CASE( eight_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-08.tif" ); + + { + using image_t = rgb8_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test29.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-10.tif 73x43 10-bit seperated RGB image +BOOST_AUTO_TEST_CASE( ten_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-10.tif" ); + + { + using image_t = bit_aligned_image3_type<10, 10, 10, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test30.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-12.tif 73x43 12-bit seperated RGB image +BOOST_AUTO_TEST_CASE( twelve_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-12.tif" ); + + { + using image_t = bit_aligned_image3_type<12, 12, 12, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test31.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-14.tif 73x43 14-bit seperated RGB image +BOOST_AUTO_TEST_CASE( fourteen_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-14.tif" ); + + { + using image_t = bit_aligned_image3_type<14, 14, 14, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test32.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-16.tif 73x43 16-bit seperated RGB image +BOOST_AUTO_TEST_CASE( sixteen_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-16.tif" ); + + { + using image_t = rgb16_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test33.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-24.tif 73x43 24-bit seperated RGB image +BOOST_AUTO_TEST_CASE( twenty_four_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-24.tif" ); + + { + using image_t = bit_aligned_image3_type<24, 24, 24, rgb_layout_t>::type; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test34.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-rgb-planar-32.tif 73x43 32-bit seperated RGB image +BOOST_AUTO_TEST_CASE( thirty_two_bit_seperated_RGB_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-rgb-planar-32.tif" ); + + { + using image_t = rgb32_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test35.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-separated-contig-08.tif 73x43 8-bit contiguous CMYK image +BOOST_AUTO_TEST_CASE( eight_bit_contiguous_CMYK_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-separated-contig-08.tif" ); + + { + using image_t = cmyk8_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test36.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-separated-contig-16.tif 73x43 16-bit contiguous CMYK image +BOOST_AUTO_TEST_CASE( sixteen_bit_contiguous_CMYK_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-separated-contig-16.tif" ); + + { + using image_t = cmyk16_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test37.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-separated-planar-08.tif 73x43 8-bit separated CMYK image +BOOST_AUTO_TEST_CASE( eight_bit_separated_CMYK_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-separated-planar-08.tif" ); + + { + using image_t = cmyk8_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test38.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +// flower-separated-planar-16.tif 73x43 16-bit separated CMYK image +BOOST_AUTO_TEST_CASE( sixteen_bit_separated_CMYK_image_test ) +{ + std::string filename( tiff_in + "libtiffpic/depth/flower-separated-planar-16.tif" ); + + { + using image_t = cmyk16_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test39.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +#endif // BOOST_GIL_IO_USE_TIFF_LIBTIFF_TEST_SUITE_IMAGES + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_CASE( tiger_separated_strip_contig_08 ) +{ + std::string filename( tiff_in_GM + "tiger-separated-strip-contig-08.tif" ); + + { + using image_t = cmyk8_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test40.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +BOOST_AUTO_TEST_CASE( tiger_separated_strip_contig_16 ) +{ + std::string filename( tiff_in_GM + "tiger-separated-strip-contig-16.tif" ); + + { + using image_t = cmyk16_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test41.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +BOOST_AUTO_TEST_CASE( tiger_separated_strip_planar_08 ) +{ + std::string filename( tiff_in_GM + "tiger-separated-strip-planar-08.tif" ); + + { + using image_t = cmyk8_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test42.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +BOOST_AUTO_TEST_CASE( tiger_separated_strip_planar_16 ) +{ + std::string filename( tiff_in_GM + "tiger-separated-strip-planar-16.tif" ); + + { + using image_t = cmyk16_planar_image_t; + image_t img; + + read_image( filename + , img + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "test43.tif" + , view( img ) + , tiff_tag() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + } +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_old_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_old_test.cpp new file mode 100644 index 00000000..e8a35a27 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_old_test.cpp @@ -0,0 +1,91 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_old_test_module + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/tiff/old.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" + +// This test file will only test the old library's interface. +// It's more of a compile time test than a runtime test. + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( old_read_dimensions_test ) +{ + boost::gil::point_t dim = tiff_read_dimensions(tiff_filename); + BOOST_CHECK_EQUAL( dim.x, 1000 ); + BOOST_CHECK_EQUAL( dim.y, 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_image_test ) +{ + rgba8_image_t img; + tiff_read_image( tiff_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_image_test ) +{ + rgb8_image_t img; + tiff_read_and_convert_image( tiff_filename, img ); + + BOOST_CHECK_EQUAL( img.width() , 1000 ); + BOOST_CHECK_EQUAL( img.height(), 600 ); +} + +BOOST_AUTO_TEST_CASE( old_read_view_test ) +{ + rgba8_image_t img( 1000, 600 ); + tiff_read_view( tiff_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_read_and_convert_view_test ) +{ + rgb8_image_t img( 1000, 600 ); + tiff_read_and_convert_view( tiff_filename, view( img ) ); +} + +BOOST_AUTO_TEST_CASE( old_dynamic_image_test ) +{ + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgba8_image_t, + gray1_image_t + >; + + any_image< my_img_types > runtime_image; + + tiff_read_image( tiff_filename.c_str() + , runtime_image + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + tiff_write_view( tiff_out + "old_dynamic_image_test.tif" + , view( runtime_image ) + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_subimage_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_subimage_test.cpp new file mode 100644 index 00000000..cf30e0f6 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_subimage_test.cpp @@ -0,0 +1,120 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_subimage_test_module + +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/test/unit_test.hpp> + +#include <fstream> +#include <sstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +using tag_t = tiff_tag; + +#include <boost/preprocessor/cat.hpp> +#include <boost/preprocessor/stringize.hpp> +#include <boost/preprocessor/tuple/elem.hpp> +#include <boost/preprocessor/comparison/less.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> +#define GENERATE_SUBIMAGE_TEST(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(subimage_test,data),n), bit_bit_aligned) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename_strip( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string filename_tile ( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(data) + "-tile-" ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename_strip = filename_strip + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + filename_tile = filename_tile + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + bit_aligned_image1_type< n, gray_layout_t >::type img1, img2, img3; \ + point_t top_left( 10, 10 ); \ + point_t dim( 32, 32 ); \ + image_read_settings< tag_t > settings( top_left, dim ); \ + read_image( filename_strip, img1, settings ); \ + read_image( filename_tile, img2 , settings ); \ + read_image( filename_strip, img3, tag_t() ); \ + BOOST_CHECK( equal_pixels( const_view( img1 ), const_view( img2 ))); \ + BOOST_CHECK( equal_pixels( const_view( img1 ), subimage_view( view( img3 ), top_left, dim ))); \ + } \ + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO( 1, 8, GENERATE_SUBIMAGE_TEST, minisblack ) +BOOST_PP_REPEAT_FROM_TO( 9, 16, GENERATE_SUBIMAGE_TEST, minisblack ) +BOOST_PP_REPEAT_FROM_TO( 17, 27, GENERATE_SUBIMAGE_TEST, minisblack ) +// @todo: there is a bug somewhere when the number of bits is 27 up to 31. + + +BOOST_AUTO_TEST_CASE( subimage_test_8 ) +{ + gray8_image_t img1, img2, img3; + + point_t top_left( 10, 10 ); + point_t dim( 32, 32 ); + + image_read_settings< tag_t > settings( top_left, dim ); + + read_image( tiff_in_GM + "tiger-minisblack-strip-08.tif", img1, settings ); + read_image( tiff_in_GM + "tiger-minisblack-tile-08.tif" , img2, settings ); + read_image( tiff_in_GM + "tiger-minisblack-strip-08.tif", img3, tag_t() ); + + BOOST_CHECK( equal_pixels( const_view( img1 ), const_view( img2 ))); + BOOST_CHECK( equal_pixels( const_view( img1 ), subimage_view( view( img3 ), top_left, dim ))); +} + +BOOST_AUTO_TEST_CASE( subimage_test_16 ) +{ + gray16_image_t img1, img2, img3; + + point_t top_left( 10, 10 ); + point_t dim( 32, 32 ); + + image_read_settings< tag_t > settings( top_left, dim ); + + read_image( tiff_in_GM + "tiger-minisblack-strip-16.tif", img1, settings ); + read_image( tiff_in_GM + "tiger-minisblack-tile-16.tif" , img2, settings ); + read_image( tiff_in_GM + "tiger-minisblack-strip-16.tif", img3, tag_t() ); + + BOOST_CHECK( equal_pixels( const_view( img1 ), const_view( img2 ))); + BOOST_CHECK( equal_pixels( const_view( img1 ), subimage_view( view( img3 ), top_left, dim ))); +} + +BOOST_AUTO_TEST_CASE( subimage_test_32 ) +{ + using gray32_pixel_t = pixel<unsigned int, gray_layout_t>; + image< gray32_pixel_t, false > img1, img2, img3; + + point_t top_left( 10, 10 ); + point_t dim( 32, 32 ); + + image_read_settings< tag_t > settings( top_left, dim ); + + read_image( tiff_in_GM + "tiger-minisblack-strip-32.tif", img1, settings ); + read_image( tiff_in_GM + "tiger-minisblack-tile-32.tif" , img2, settings ); + read_image( tiff_in_GM + "tiger-minisblack-strip-32.tif", img3, tag_t() ); + + BOOST_CHECK( equal_pixels( const_view( img1 ), const_view( img2 ))); + BOOST_CHECK( equal_pixels( const_view( img1 ), subimage_view( view( img3 ), top_left, dim ))); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_test.cpp new file mode 100644 index 00000000..62d6b9af --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_test.cpp @@ -0,0 +1,364 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_TEST_MODULE tiff_test +#define BOOST_FILESYSTEM_VERSION 3 +#define BOOST_GIL_IO_ADD_FS_PATH_SUPPORT + +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/mp11.hpp> +#include <boost/test/unit_test.hpp> + +#include <fstream> +#include <sstream> + +#include "mandel_view.hpp" +#include "paths.hpp" +#include "subimage_test.hpp" + +// This test file will only test the library's interface. +// It's more of a compile time test than a runtime test. + +using namespace std; +using namespace boost; +using namespace gil; +namespace fs = boost::filesystem; + +using tag_t = tiff_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( read_image_info_test ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( tiff_filename + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + ifstream in( tiff_filename.c_str(), ios::binary ); + + using backend_t = get_reader_backend<ifstream, tag_t>::type; + + backend_t backend = read_image_info( in + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + TIFF* file = TIFFOpen( tiff_filename.c_str(), "r" ); + + using backend_t = get_reader_backend<FILE*, tag_t>::type; + + backend_t backend = read_image_info( file + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } + + { + fs::path my_path( tiff_filename ); + + using backend_t = get_reader_backend<fs::path, tag_t>::type; + + backend_t backend = read_image_info( my_path + , tag_t() + ); + + + BOOST_CHECK_EQUAL( backend._info._width , 1000u ); + BOOST_CHECK_EQUAL( backend._info._height, 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_image_test ) +{ + { + rgba8_image_t img; + read_image( tiff_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + + ifstream in( tiff_filename.c_str(), ios::binary ); + + rgba8_image_t img; + read_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + TIFF* file = TIFFOpen( tiff_filename.c_str(), "r" ); + + rgba8_image_t img; + read_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test ) +{ + { + rgb8_image_t img; + read_and_convert_image( tiff_filename, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + ifstream in( tiff_filename.c_str(), ios::binary ); + + rgb8_image_t img; + read_and_convert_image( in, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + TIFF* file = TIFFOpen( tiff_filename.c_str(), "r" ); + + rgb8_image_t img; + read_and_convert_image( file, img, tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_image_test_2 ) +{ + gray8_image_t img; + read_and_convert_image( tiff_filename, img, tag_t() ); + + rgba8_image_t img2; + read_image( tiff_filename, img2, tag_t() ); + + + BOOST_CHECK( equal_pixels( const_view( img ) + , color_converted_view< gray8_pixel_t>( const_view( img2 ) ) + ) + ); +} + +BOOST_AUTO_TEST_CASE( read_view_test ) +{ + { + rgba8_image_t img( 1000, 600 ); + read_view( tiff_filename, view( img ), tag_t() ); + } + + { + ifstream in( tiff_filename.c_str(), ios::binary ); + + rgba8_image_t img( 1000, 600 ); + read_view( in, view( img ), tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + TIFF* file = TIFFOpen( tiff_filename.c_str(), "r" ); + + rgba8_image_t img( 1000, 600 ); + read_view( file, view( img ), tag_t() ); + } +} + +BOOST_AUTO_TEST_CASE( read_and_convert_view_test ) +{ + { + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( tiff_filename, view( img ), tag_t() ); + } + + { + ifstream in( tiff_filename.c_str(), ios::binary ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( in, view( img ), tag_t() ); + + BOOST_CHECK_EQUAL( img.width() , 1000u ); + BOOST_CHECK_EQUAL( img.height(), 600u ); + } + + { + TIFF* file = TIFFOpen( tiff_filename.c_str(), "r" ); + + rgb8_image_t img( 1000, 600 ); + read_and_convert_view( file, view( img ), tag_t() ); + } +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +BOOST_AUTO_TEST_CASE( write_view_test ) +{ + { + string filename( tiff_out + "write_test_string.tif" ); + + write_view( filename + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( tiff_out + "write_test_ofstream.tif" ); + ofstream out( filename.c_str(), ios_base::binary ); + + write_view( out + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( tiff_out + "write_test_tiff.tif" ); + TIFF* file = TIFFOpen( filename.c_str(), "w" ); + + write_view( file + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , tag_t() + ); + } + + { + string filename( tiff_out + "write_test_info.tif" ); + + image_write_info< tiff_tag > info; + write_view( filename + , create_mandel_view( 320, 240 + , rgb8_pixel_t( 0, 0, 255 ) + , rgb8_pixel_t( 0, 255, 0 ) + ) + , info + ); + } +} +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_CASE( stream_test ) +{ + // 1. Read an image. + ifstream in( tiff_filename.c_str(), ios::binary ); + + rgba8_image_t img; + read_image( in, img, tag_t() ); + + // 2. Write image to in-memory buffer. + stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary ); + write_view( out_buffer, view( img ), tag_t() ); + + // 3. Copy in-memory buffer to another. + stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary ); + in_buffer << out_buffer.rdbuf(); + + // 4. Read in-memory buffer to gil image + rgba8_image_t dst; + read_image( in_buffer, dst, tag_t() ); + + // 5. Write out image. + string filename( tiff_out + "stream_test.tif" ); + ofstream out( filename.c_str(), ios_base::binary ); +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( out, view( dst ), tag_t() ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( stream_test_2 ) +{ + filebuf in_buf; + if( !in_buf.open( tiff_filename.c_str(), ios::in | ios::binary ) ) + { + BOOST_CHECK( false ); + } + + istream in( &in_buf ); + + rgba8_image_t img; + read_image( in, img, tag_t() ); +} + +BOOST_AUTO_TEST_CASE( subimage_test ) +{ + run_subimage_test< rgba8_image_t, tag_t >( tiff_filename + , point_t( 0, 0 ) + , point_t( 50, 50 ) + ); + + run_subimage_test< rgba8_image_t, tag_t >( tiff_filename + , point_t( 50, 50 ) + , point_t( 50, 50 ) + ); +} + +BOOST_AUTO_TEST_CASE( dynamic_image_test ) +{ + // FIXME: This test has been disabled for now because of compilation issues with MSVC10. + + using my_img_types = mp11::mp_list + < + gray8_image_t, + gray16_image_t, + rgb8_image_t, + gray1_image_t + >; + + any_image< my_img_types > runtime_image; + + read_image( tiff_filename.c_str() + , runtime_image + , tag_t() + ); + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "dynamic_image_test.tif" + , view( runtime_image ) + , tag_t() + ); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_float_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_float_test.cpp new file mode 100644 index 00000000..a3171d42 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_float_test.cpp @@ -0,0 +1,106 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_float_test_module + +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/test/unit_test.hpp> + +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +using tag_t = tiff_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_CASE( read_minisblack_float_tile_and_strip32 ) +{ + std::string filename_strip( tiff_in_GM + "tiger-minisblack-float-strip-32.tif" ); + std::string filename_tile ( tiff_in_GM + "tiger-minisblack-float-tile-32.tif" ); + + gray32f_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_minisblack_float_tile_and_strip64 ) +{ + std::string filename_strip( tiff_in_GM + "tiger-minisblack-float-strip-64.tif" ); + std::string filename_tile ( tiff_in_GM + "tiger-minisblack-float-tile-64.tif" ); + + gray64f_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_rgb_float_tile_and_strip_planar32 ) +{ + std::string filename_strip( tiff_in_GM + "tiger-rgb-float-strip-planar-32.tif" ); + std::string filename_tile ( tiff_in_GM + "tiger-rgb-float-tile-planar-32.tif" ); + + rgb32f_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_rgb_float_tile_and_strip_contig32 ) +{ + std::string filename_strip( tiff_in_GM + "tiger-rgb-float-strip-contig-32.tif" ); + std::string filename_tile ( tiff_in_GM + "tiger-rgb-float-tile-contig-32.tif" ); + + rgb32f_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_rgb_float_tile_and_strip64 ) +{ + std::string filename_strip( tiff_in_GM + "tiger-rgb-float-strip-planar-64.tif" ); + std::string filename_tile ( tiff_in_GM + "tiger-rgb-float-tile-planar-64.tif" ); + + rgb64f_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_rgb_float_tile_and_strip_contig64 ) +{ + std::string filename_strip( tiff_in_GM + "tiger-rgb-float-strip-contig-64.tif" ); + std::string filename_tile ( tiff_in_GM + "tiger-rgb-float-tile-contig-64.tif" ); + + rgb64f_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_1-10.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_1-10.cpp new file mode 100644 index 00000000..8554ef5d --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_1-10.cpp @@ -0,0 +1,40 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_miniblack_test_1_10_module + +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO( 1, 8, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_MINISBLACK, minisblack ) +BOOST_PP_REPEAT_FROM_TO( 9, 11, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_MINISBLACK, minisblack ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_minisblack_strip_8 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-08.tif" ); + string filename_tile ( tiff_in_GM + "tiger-minisblack-tile-08.tif" ); + + gray8_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_11-20.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_11-20.cpp new file mode 100644 index 00000000..33810394 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_11-20.cpp @@ -0,0 +1,41 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_miniblack_test_11_20_module +#include <boost/test/unit_test.hpp> + +#include <cstdint> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(11, 16, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_MINISBLACK, minisblack ) +BOOST_PP_REPEAT_FROM_TO(17, 21, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_MINISBLACK, minisblack ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_minisblack_strip_16 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-16.tif" ); + string filename_tile ( tiff_in_GM + "tiger-minisblack-tile-16.tif" ); + + gray16_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_21-31_32-64.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_21-31_32-64.cpp new file mode 100644 index 00000000..f8c74793 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_test_21-31_32-64.cpp @@ -0,0 +1,58 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_miniblack_test_21_31_32_64_module +#include <boost/test/unit_test.hpp> + +#include <cstdint> +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(21, 32, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_MINISBLACK, minisblack ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_minisblack_strip_32 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-32.tif" ); + string filename_tile ( tiff_in_GM + "tiger-minisblack-tile-32.tif" ); + + using gray32_pixel_t = pixel<unsigned int, gray_layout_t>; + image< gray32_pixel_t, false > img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_minisblack_strip_64 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-64.tif" ); + string filename_tile ( tiff_in_GM + "tiger-minisblack-tile-64.tif" ); + + using gray64_pixel_t = pixel<uint64_t, gray_layout_t>; + image< gray64_pixel_t, false > img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_1-10.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_1-10.cpp new file mode 100644 index 00000000..98693ae0 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_1-10.cpp @@ -0,0 +1,47 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_miniblack_write_test_1_10_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(1, 8 , GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK, minisblack ) +BOOST_PP_REPEAT_FROM_TO(9, 11, GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK, minisblack ) + +BOOST_AUTO_TEST_CASE( write_minisblack_tile_and_compare_with_8 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-08.tif" ); + + gray8_image_t img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_minisblack_tile_and_compare_with_8.tif", view(img_strip), info ); + read_image( tiff_out + "write_minisblack_tile_and_compare_with_8.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_11-20.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_11-20.cpp new file mode 100644 index 00000000..67e23f94 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_11-20.cpp @@ -0,0 +1,47 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_miniblack_write_test_11_20_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(11, 16, GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK, minisblack ) +BOOST_PP_REPEAT_FROM_TO(17, 21, GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK, minisblack ) + +BOOST_AUTO_TEST_CASE( write_minisblack_tile_and_compare_with_16 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-16.tif" ); + + gray16_image_t img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_minisblack_tile_and_compare_with_16.tif", view(img_strip), info ); + read_image( tiff_out + "write_minisblack_tile_and_compare_with_16.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_21-31_32-64.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_21-31_32-64.cpp new file mode 100644 index 00000000..735ffc72 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_minisblack_write_test_21-31_32-64.cpp @@ -0,0 +1,71 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_miniblack_write_test_21_31_32_64_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(21, 32, GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK, minisblack ) + +BOOST_AUTO_TEST_CASE( write_tile_and_compare_with_minisblack_strip_32 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-32.tif" ); + + using gray32_pixel_t = pixel<unsigned int, gray_layout_t>; + image< gray32_pixel_t, false > img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_minisblack_tile_and_compare_with_32.tif", view(img_strip), info ); + read_image( tiff_out + "write_minisblack_tile_and_compare_with_32.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( write_tile_and_compare_with_minisblack_strip_64 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-minisblack-strip-64.tif" ); + + using gray64_pixel_t = pixel<uint64_t, gray_layout_t>; + image< gray64_pixel_t, false > img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_minisblack_tile_and_compare_with_64.tif", view(img_strip), info ); + read_image( tiff_out + "write_minisblack_tile_and_compare_with_64.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_test_1-8.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_test_1-8.cpp new file mode 100644 index 00000000..25b4d954 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_test_1-8.cpp @@ -0,0 +1,22 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_palette_test_1_8_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +// CHH - not supported palette +//BOOST_PP_REPEAT_FROM_TO(1, 9, GENERATE_TILE_STRIP_COMPARISON_PALETTE, palette ) + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_test_8-16.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_test_8-16.cpp new file mode 100644 index 00000000..0dad9f4d --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_test_8-16.cpp @@ -0,0 +1,22 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_palette_test_8_16_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +// CHH - not supported palette +//BOOST_PP_REPEAT_FROM_TO(9, 17, GENERATE_TILE_STRIP_COMPARISON_PALETTE, palette ) + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_write_test_1-8.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_write_test_1-8.cpp new file mode 100644 index 00000000..93002b4b --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_write_test_1-8.cpp @@ -0,0 +1,22 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_palette_write_test_1_8_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +// CHH - not supported palette +//BOOST_PP_REPEAT_FROM_TO(1, 9, GENERATE_WRITE_TILE_BIT_ALIGNED_PALETTE, palette ) + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_write_test_8-16.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_write_test_8-16.cpp new file mode 100644 index 00000000..b59b536e --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_palette_write_test_8-16.cpp @@ -0,0 +1,22 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_palette_write_test_8_16_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +// CHH - not supported palette +//BOOST_PP_REPEAT_FROM_TO(9, 17, GENERATE_WRITE_TILE_BIT_ALIGNED_PALETTE, palette ) + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_read_macros.hpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_read_macros.hpp new file mode 100644 index 00000000..0635ac3b --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_read_macros.hpp @@ -0,0 +1,102 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_TIFF_TILED_READ_MACROS_HPP +#define BOOST_GIL_TIFF_TILED_READ_MACROS_HPP + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/tiff/read.hpp> + +#include <boost/preprocessor/cat.hpp> +#include <boost/preprocessor/stringize.hpp> +#include <boost/preprocessor/tuple/elem.hpp> +#include <boost/preprocessor/comparison/less.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +#include "paths.hpp" + +using tag_t = boost::gil::tiff_tag; + +// TODO: Rename the macros to BOOST_GIL_* + +#define GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT( \ + BOOST_PP_CAT( \ + BOOST_PP_CAT( \ + BOOST_PP_CAT( \ + BOOST_PP_CAT( read_tile_and_compare_with_ \ + , BOOST_PP_TUPLE_ELEM(2,0,data) \ + ) \ + , BOOST_PP_TUPLE_ELEM(2,1,data) \ + ) \ + ,_strip_ \ + ) \ + ,n \ + ) \ + , bit_bit_aligned \ + ) \ + )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename_strip( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(2,0,data)) + "-strip-" + BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(2,1,data)) + "-" ); \ + string filename_tile ( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(2,0,data)) + "-tile-" + BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(2,1,data)) + "-" ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename_strip = filename_strip + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + filename_tile = filename_tile + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + bit_aligned_image3_type< n, n, n, rgb_layout_t >::type img_strip, img_tile; \ + read_image( filename_strip, img_strip, tag_t() ); \ + read_image( filename_tile, img_tile, tag_t() ); \ + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); \ + } \ + +// Special case for minisblack images +#define GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_MINISBLACK(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(read_tile_and_compare_with_,data),_strip_),n), bit_bit_aligned) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename_strip( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string filename_tile ( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(data) + "-tile-" ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename_strip = filename_strip + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + filename_tile = filename_tile + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + bit_aligned_image1_type< n, gray_layout_t >::type img_strip, img_tile; \ + read_image( filename_strip, img_strip, tag_t() ); \ + read_image( filename_tile, img_tile, tag_t() ); \ + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); \ + } \ + +// Special case for palette images +#define GENERATE_TILE_STRIP_COMPARISON_PALETTE(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(read_tile_and_compare_with_,data),_strip_),n), bit) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename_strip( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string filename_tile ( tiff_in_GM + "tiger-" + BOOST_PP_STRINGIZE(data) + "-tile-" ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename_strip = filename_strip + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + filename_tile = filename_tile + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + rgb16_image_t img_strip, img_tile; \ + read_image( filename_strip, img_strip, tag_t() ); \ + read_image( filename_tile, img_tile, tag_t() ); \ + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); \ + } \ + + + +#endif // BOOST_GIL_TIFF_TILED_READ_MACROS_HPP diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_1-10.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_1-10.cpp new file mode 100644 index 00000000..469e18b4 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_1-10.cpp @@ -0,0 +1,39 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_contig_test_1_10_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(1, 8, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,contig) ) +BOOST_PP_REPEAT_FROM_TO(9, 11, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,contig) ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_contig_strip_8 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-08.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-contig-08.tif" ); + + rgb8_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_11-20.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_11-20.cpp new file mode 100644 index 00000000..df796d78 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_11-20.cpp @@ -0,0 +1,39 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_contig_test_11_20_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(11, 16, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,contig) ) +BOOST_PP_REPEAT_FROM_TO(17, 21, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,contig) ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_contig_strip_16 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-16.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-contig-16.tif" ); + + rgb16_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_21-31_32_64.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_21-31_32_64.cpp new file mode 100644 index 00000000..e3d83f36 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_test_21-31_32_64.cpp @@ -0,0 +1,57 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_contig_test_21_31_32_64_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(21, 32, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,contig) ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_contig_strip_32 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-32.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-contig-32.tif" ); + + using rgb32_pixel_t= pixel<unsigned int, rgb_layout_t>; + image< rgb32_pixel_t, false > img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_contig_strip_64 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-64.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-contig-64.tif" ); + + using rgb64_pixel_t = pixel<uint64_t, rgb_layout_t>; + image< rgb64_pixel_t, false > img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_1-10.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_1-10.cpp new file mode 100644 index 00000000..682d8ee2 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_1-10.cpp @@ -0,0 +1,46 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_contig_write_test_1_10_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(1, 8, GENERATE_WRITE_TILE_BIT_ALIGNED_RGB, rgb ) +BOOST_PP_REPEAT_FROM_TO(9, 11, GENERATE_WRITE_TILE_BIT_ALIGNED_RGB, rgb ) + +BOOST_AUTO_TEST_CASE( write_tile_and_compare_with_rgb_strip_contig_8 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-08.tif" ); + + rgb8_image_t img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_8.tif", view(img_strip), info ); + read_image( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_8.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_11-20.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_11-20.cpp new file mode 100644 index 00000000..3da9172b --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_11-20.cpp @@ -0,0 +1,46 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_contig_write_test_11_20_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(11, 16, GENERATE_WRITE_TILE_BIT_ALIGNED_RGB, rgb ) +BOOST_PP_REPEAT_FROM_TO(17, 21, GENERATE_WRITE_TILE_BIT_ALIGNED_RGB, rgb ) + +BOOST_AUTO_TEST_CASE( write_tile_and_compare_with_rgb_strip_contig_16 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-16.tif" ); + + rgb16_image_t img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_16.tif", view(img_strip), info ); + read_image( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_16.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_21-31_32_64.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_21-31_32_64.cpp new file mode 100644 index 00000000..05e27b16 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_contig_write_test_21-31_32_64.cpp @@ -0,0 +1,71 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_contig_write_test_21_31_32_64_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_write_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(21, 31, GENERATE_WRITE_TILE_BIT_ALIGNED_RGB, rgb ) + +BOOST_AUTO_TEST_CASE( write_tile_and_compare_with_rgb_strip_contig_32 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-32.tif" ); + + using rgb32_pixel_t = pixel<unsigned int, rgb_layout_t>; + image< rgb32_pixel_t, false > img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_32.tif", view(img_strip), info ); + read_image( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_32.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +BOOST_AUTO_TEST_CASE( write_tile_and_compare_with_rgb_strip_contig_64 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-contig-64.tif" ); + + using rgb64_pixel_t = pixel<uint64_t, rgb_layout_t>; + image< rgb64_pixel_t, false > img_strip, img_saved; + + read_image( filename_strip, img_strip, tag_t() ); + + image_write_info<tag_t> info; + info._is_tiled = true; + info._tile_width = info._tile_length = 16; + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + write_view( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_64.tif", view(img_strip), info ); + read_image( tiff_out + "write_tile_and_compare_with_rgb_strip_contig_64.tif", img_saved, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_1-10.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_1-10.cpp new file mode 100644 index 00000000..797d4d66 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_1-10.cpp @@ -0,0 +1,39 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_planar_test_1_10_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(1, 8, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,planar) ) +BOOST_PP_REPEAT_FROM_TO(9, 11, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,planar) ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_planar_strip_8 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-planar-08.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-planar-08.tif" ); + + rgb8_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_11-20.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_11-20.cpp new file mode 100644 index 00000000..d118c9e0 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_11-20.cpp @@ -0,0 +1,39 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_planar_test_11_20_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(11, 16, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,planar) ) +BOOST_PP_REPEAT_FROM_TO(17, 21, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,planar) ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_planar_strip_16 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-planar-16.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-planar-16.tif" ); + + rgb16_image_t img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_21-31_32_64.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_21-31_32_64.cpp new file mode 100644 index 00000000..44c16457 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_rgb_planar_test_21-31_32_64.cpp @@ -0,0 +1,57 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_rgb_planar_test_21_31_32_64_module +#include <boost/test/unit_test.hpp> + +#include "tiff_tiled_read_macros.hpp" + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_PP_REPEAT_FROM_TO(21, 32, GENERATE_TILE_STRIP_COMPARISON_BIT_ALIGNED_RGB, (rgb,planar) ) + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_planar_strip_32 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-planar-32.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-planar-32.tif" ); + + using rgb32_pixel_t = pixel<unsigned int, rgb_layout_t>; + image< rgb32_pixel_t, false > img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +BOOST_AUTO_TEST_CASE( read_tile_and_compare_with_rgb_planar_strip_64 ) +{ + using namespace std; + using namespace boost; + using namespace gil; + + string filename_strip( tiff_in_GM + "tiger-rgb-strip-planar-64.tif" ); + string filename_tile ( tiff_in_GM + "tiger-rgb-tile-planar-64.tif" ); + + using rgb64_pixel_t = pixel<uint64_t, rgb_layout_t>; + image< rgb64_pixel_t, false > img_strip, img_tile; + + read_image( filename_strip, img_strip, tag_t() ); + read_image( filename_tile, img_tile, tag_t() ); + + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_tile) ), true); +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_test.cpp new file mode 100644 index 00000000..9e042ae3 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_test.cpp @@ -0,0 +1,84 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +//#define BOOST_TEST_MODULE tiff_tiled_test_module +#include <boost/test/unit_test.hpp> + +#include <boost/gil/extension/io/tiff.hpp> +#include "paths.hpp" + +using namespace std; +using namespace boost; +using namespace gil; + +using tag_t = tiff_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +#ifdef BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_CASE( read_tile_infos_test ) +{ + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( tiff_in_GM + "tiger-minisblack-float-tile-16.tif" + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._tile_width , 16 ); + BOOST_CHECK_EQUAL( backend._info._tile_length, 16 ); + } + + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( tiff_in_GM + "tiger-minisblack-tile-08.tif" + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._tile_width , 16 ); + BOOST_CHECK_EQUAL( backend._info._tile_length, 16 ); + } + + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( tiff_in_GM + "tiger-palette-tile-08.tif" + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._tile_width , 16 ); + BOOST_CHECK_EQUAL( backend._info._tile_length, 16 ); + } + + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( tiff_in_GM + "tiger-rgb-tile-contig-08.tif" + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._tile_width , 16 ); + BOOST_CHECK_EQUAL( backend._info._tile_length, 16 ); + } + + { + using backend_t = get_reader_backend<std::string const, tag_t>::type; + + backend_t backend = read_image_info( tiff_in_GM + "tiger-rgb-tile-planar-08.tif" + , tag_t() + ); + + BOOST_CHECK_EQUAL( backend._info._tile_width , 16 ); + BOOST_CHECK_EQUAL( backend._info._tile_length, 16 ); + } +} + +#endif // BOOST_GIL_IO_USE_TIFF_GRAPHICSMAGICK_TEST_SUITE_IMAGES + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/io/tiff_tiled_write_macros.hpp b/src/boost/libs/gil/test/extension/io/tiff_tiled_write_macros.hpp new file mode 100644 index 00000000..4cb2d4af --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_tiled_write_macros.hpp @@ -0,0 +1,165 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#ifndef BOOST_GIL_TIFF_TILED_WRITE_MACROS_HPP +#define BOOST_GIL_TIFF_TILED_WRITE_MACROS_HPP + +#include <boost/gil.hpp> +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/preprocessor/cat.hpp> +#include <boost/preprocessor/stringize.hpp> +#include <boost/preprocessor/tuple/elem.hpp> +#include <boost/preprocessor/comparison/less.hpp> +#include <boost/preprocessor/repetition/repeat_from_to.hpp> + +#include "paths.hpp" + +using tag_t = boost::gil::tiff_tag; + +// TODO: Rename the macros to BOOST_GIL_* + +#ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#define GENERATE_WRITE_TILE_BIT_ALIGNED_RGB(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(write_rgb_tile_and_compare_with_,data),_strip_),n), bit_bit_aligned) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename( string( "tiger-" ) + BOOST_PP_STRINGIZE(data) + "-strip-contig-" ); \ + string path( tiff_in_GM ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename += padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + path += filename; \ + bit_aligned_image3_type< n, n, n, rgb_layout_t >::type img_strip, img_saved; \ + read_image( path, img_strip, tag_t() ); \ + image_write_info<tag_t> info; \ + info._is_tiled = true; \ + info._tile_width = info._tile_length = 16; \ + write_view( tiff_out + filename, view(img_strip), info ); \ + read_image( tiff_out + filename, img_saved, tag_t() ); \ + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); \ + } \ + +// Special case for minisblack images +#define GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(write_minisblack_tile_and_compare_with_,data),_strip_),n), bit_bit_aligned) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename( string( "tiger-" ) + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string path( tiff_in_GM ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename = filename + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + path += filename; \ + bit_aligned_image1_type< n, gray_layout_t >::type img_strip, img_saved; \ + read_image( path, img_strip, tag_t() ); \ + image_write_info<tag_t> info; \ + info._is_tiled = true; \ + info._tile_width = info._tile_length = 16; \ + write_view( tiff_out + filename, view(img_strip), info ); \ + read_image( tiff_out + filename, img_saved, tag_t() ); \ + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); \ + } \ + +// Special case for palette images +#define GENERATE_WRITE_TILE_BIT_ALIGNED_PALETTE(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(write_palette_tile_and_compare_with_,data),_strip_),n), bit) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename( string( "tiger-" ) + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string path( tiff_in_GM ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename = filename + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + path += filename; \ + rgb16_image_t img_strip, img_saved; \ + read_image( path, img_strip, tag_t() ); \ + image_write_info<tag_t> info; \ + info._is_tiled = true; \ + info._tile_width = info._tile_length = 16; \ + write_view( tiff_out + filename, view(img_strip), info ); \ + read_image( tiff_out + filename, img_saved, tag_t() ); \ + BOOST_CHECK_EQUAL( equal_pixels( const_view(img_strip), const_view(img_saved) ), true); \ + } \ + +#else + +#define GENERATE_WRITE_TILE_BIT_ALIGNED_RGB(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(write_rgb_tile_and_compare_with_,data),_strip_),n), bit_bit_aligned) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename( string( "tiger-" ) + BOOST_PP_STRINGIZE(data) + "-strip-contig-" ); \ + string path( tiff_in_GM ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename += padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + path += filename; \ + bit_aligned_image3_type< n, n, n, rgb_layout_t >::type img_strip, img_saved; \ + read_image( path, img_strip, tag_t() ); \ + image_write_info<tag_t> info; \ + info._is_tiled = true; \ + info._tile_width = info._tile_length = 16; \ + } \ + +// Special case for minisblack images +#define GENERATE_WRITE_TILE_BIT_ALIGNED_MINISBLACK(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(write_minisblack_tile_and_compare_with_,data),_strip_),n), bit_bit_aligned) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename( string( "tiger-" ) + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string path( tiff_in_GM ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename = filename + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + path += filename; \ + bit_aligned_image1_type< n, gray_layout_t >::type img_strip, img_saved; \ + read_image( path, img_strip, tag_t() ); \ + image_write_info<tag_t> info; \ + info._is_tiled = true; \ + info._tile_width = info._tile_length = 16; \ + } \ + +// Special case for palette images +#define GENERATE_WRITE_TILE_BIT_ALIGNED_PALETTE(z, n, data)\ + BOOST_AUTO_TEST_CASE( BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_CAT(write_palette_tile_and_compare_with_,data),_strip_),n), bit) )\ + { \ + using namespace std; \ + using namespace boost; \ + using namespace gil; \ + string filename( string( "tiger-" ) + BOOST_PP_STRINGIZE(data) + "-strip-" ); \ + string path( tiff_in_GM ); \ + string padding(""); \ + if(BOOST_PP_LESS(n, 10)==1) \ + padding = "0"; \ + filename = filename + padding + BOOST_PP_STRINGIZE(n) + ".tif"; \ + path += filename; \ + rgb16_image_t img_strip, img_saved; \ + read_image( path, img_strip, tag_t() ); \ + image_write_info<tag_t> info; \ + info._is_tiled = true; \ + info._tile_width = info._tile_length = 16; \ + } \ + +#endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES + +#endif // BOOST_GIL_TIFF_TILED_READ_MACROS_HPP diff --git a/src/boost/libs/gil/test/extension/io/tiff_write_test.cpp b/src/boost/libs/gil/test/extension/io/tiff_write_test.cpp new file mode 100644 index 00000000..6b488d56 --- /dev/null +++ b/src/boost/libs/gil/test/extension/io/tiff_write_test.cpp @@ -0,0 +1,32 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/io/typedefs.hpp> +#include <boost/gil/extension/io/tiff.hpp> + +#include <boost/test/unit_test.hpp> + +#include "color_space_write_test.hpp" +#include "mandel_view.hpp" +#include "paths.hpp" + +using namespace std; +using namespace boost::gil; + +using tag_t = tiff_tag; + +BOOST_AUTO_TEST_SUITE( gil_io_tiff_tests ) + +BOOST_AUTO_TEST_CASE( rgb_color_space_write_test ) +{ + color_space_write_test< tag_t >( tiff_out + "rgb_color_space_test.tif" + , tiff_out + "bgr_color_space_test.tif" + ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/CMakeLists.txt b/src/boost/libs/gil/test/extension/numeric/CMakeLists.txt new file mode 100644 index 00000000..ad7c3b32 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/CMakeLists.txt @@ -0,0 +1,37 @@ +# +# Copyright (c) 2017 Mateusz Loskot <mateusz at loskot dot net> +# All rights reserved. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +message(STATUS "Boost.GIL: Configuring tests in test/extension/numeric") + +foreach(_name + channel_numeric_operations + convolve_cols + convolve_rows + convolve + kernel + matrix3x2 + numeric + pixel_numeric_operations + convolve_2d + extend_boundary) + set(_test t_ext_numeric_${_name}) + set(_target test_ext_numeric_${_name}) + + add_executable(${_target} "") + target_sources(${_target} PRIVATE ${_name}.cpp) + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies) + add_test(NAME ${_test} COMMAND ${_target}) + + unset(_name) + unset(_target) + unset(_test) +endforeach() diff --git a/src/boost/libs/gil/test/extension/numeric/Jamfile b/src/boost/libs/gil/test/extension/numeric/Jamfile new file mode 100644 index 00000000..8e212bcc --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/Jamfile @@ -0,0 +1,29 @@ +# Boost.GIL (Generic Image Library) - Numeric tests +# +# Copyright (c) 2013 Christian Henning +# Copyright (c) 2019 Mateusz Loskot <mateusz at loskot dot net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or +# copy at http://www.boost.org/LICENSE_1_0.txt) + +import testing ; + +project + : requirements + <library>/boost/test//boost_unit_test_framework + <link>shared:<define>BOOST_TEST_DYN_LINK=1 + ; + +alias headers : [ generate_self_contained_headers extension/numeric ] ; + +run channel_numeric_operations.cpp ; +run convolve.cpp ; +run convolve_cols.cpp ; +run convolve_rows.cpp ; +run kernel.cpp ; +compile-fail kernel_1d_fixed_even_size_fail.cpp ; +run matrix3x2.cpp ; +run numeric.cpp ; +run pixel_numeric_operations.cpp ; +run convolve_2d.cpp ; diff --git a/src/boost/libs/gil/test/extension/numeric/channel_numeric_operations.cpp b/src/boost/libs/gil/test/extension/numeric/channel_numeric_operations.cpp new file mode 100644 index 00000000..6ece4f25 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/channel_numeric_operations.cpp @@ -0,0 +1,305 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/channel_numeric_operations.hpp> + +#include <tuple> +#include <type_traits> + +#define BOOST_TEST_MODULE test_ext_numeric_pixel_numeric_operations +#include "unit_test.hpp" +#include "unit_test_utility.hpp" +#include "core/channel/test_fixture.hpp" + +namespace gil = boost::gil; +namespace fixture = boost::gil::test::fixture; + +BOOST_AUTO_TEST_SUITE(channel_plus_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_plus_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(0, 0) == channel_t(0)); + BOOST_TEST(f(100, 27) == channel_t(127)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + { + using channel1_t = channel_t; + using channel2_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + gil::channel_plus_t<channel1_t, channel2_t, channel1_t> f; + BOOST_TEST(f(0, 0) == channel1_t(0)); + BOOST_TEST(f(100, 27) == channel_t(127)); + } + { + using channel1_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + using channel2_t = channel_t; + gil::channel_plus_t<channel1_t, channel2_t, channel2_t> f; + BOOST_TEST(f(0, 0) == channel2_t(0)); + BOOST_TEST(f(100, 27) == channel_t(127)); + } +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_integer_signed_types_with_overflow, channel_t, fixture::channel_integer_signed_types) +{ + // Signed integer overflow is UB, so just check addition does not yield mathematically + // expected value but is constrained by the range of representable values for given type. + + auto const max_value = gil::channel_traits<channel_t>::max_value(); + gil::channel_plus_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(max_value, 1) != std::int64_t(max_value) + 1); + BOOST_TEST(f(max_value, max_value) != std::int64_t(max_value) + max_value); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_integer_unsigned_types_with_wraparound, channel_t, fixture::channel_integer_unsigned_types) +{ + // The C Standard, 6.2.5, paragraph 9 [ISO/IEC 9899:2011], states: + // A computation involving unsigned operands can never overflow, because a result that + // cannot be represented by the resulting unsigned integer type is reduced modulo the number + // that is one greater than the largest value that can be represented by the resulting type. + + auto const max_value = gil::channel_traits<channel_t>::max_value(); + auto const min_value = gil::channel_traits<channel_t>::min_value(); + gil::channel_plus_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(max_value, 1) == min_value); + BOOST_TEST(f(max_value, max_value) == max_value - 1); +} + +BOOST_AUTO_TEST_SUITE_END() // channel_plus_t + +BOOST_AUTO_TEST_SUITE(channel_minus_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(minus_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_minus_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(0, 0) == channel_t(0)); + BOOST_TEST(f(100, 27) == channel_t(73)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(minus_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + { + using channel1_t = channel_t; + using channel2_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + gil::channel_minus_t<channel1_t, channel2_t, channel1_t> f; + BOOST_TEST(f(0, 0) == channel1_t(0)); + BOOST_TEST(f(100, 27) == channel_t(73)); + } + { + using channel1_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + using channel2_t = channel_t; + gil::channel_minus_t<channel1_t, channel2_t, channel2_t> f; + BOOST_TEST(f(0, 0) == channel2_t(0)); + BOOST_TEST(f(100, 27) == channel_t(73)); + } +} + +BOOST_AUTO_TEST_SUITE_END() // channel_minus_t + +BOOST_AUTO_TEST_SUITE(channel_multiplies_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(multiplies_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_multiplies_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(0, 0) == channel_t(0)); + BOOST_TEST(f(1, 1) == channel_t(1)); + BOOST_TEST(f(4, 2) == channel_t(8)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(multiplies_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + { + using channel1_t = channel_t; + using channel2_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + gil::channel_multiplies_t<channel1_t, channel2_t, channel1_t> f; + BOOST_TEST(f(0, 0) == channel1_t(0)); + BOOST_TEST(f(4, 2) == channel_t(8)); + } + { + using channel1_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + using channel2_t = channel_t; + gil::channel_multiplies_t<channel1_t, channel2_t, channel2_t> f; + BOOST_TEST(f(0, 0) == channel2_t(0)); + BOOST_TEST(f(4, 2) == channel_t(8)); + } +} + +BOOST_AUTO_TEST_SUITE_END() // channel_multiplies_t + +BOOST_AUTO_TEST_SUITE(channel_divides_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(divides_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_divides_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(0, 1) == channel_t(0)); + BOOST_TEST(f(1, 1) == channel_t(1)); + BOOST_TEST(f(4, 2) == channel_t(2)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(divides_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + { + using channel1_t = channel_t; + using channel2_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + gil::channel_divides_t<channel1_t, channel2_t, channel1_t> f; + BOOST_TEST(f(0, 1) == channel1_t(0)); + BOOST_TEST(f(4, 2) == channel_t(2)); + } + { + using channel1_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + using channel2_t = channel_t; + gil::channel_divides_t<channel1_t, channel2_t, channel2_t> f; + BOOST_TEST(f(0, 1) == channel2_t(0)); + BOOST_TEST(f(4, 2) == channel_t(2)); + } +} + +BOOST_AUTO_TEST_SUITE_END() // channel_divides_t + +BOOST_AUTO_TEST_SUITE(channel_plus_scalar_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_scalar_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_plus_scalar_t<channel_t, int, channel_t> f; + BOOST_TEST(f(0, 0) == channel_t(0)); + BOOST_TEST(f(100, 27) == channel_t(127)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_scalar_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + using channel_result_t = std::uint8_t; + gil::channel_plus_scalar_t<channel_t, int, channel_result_t> f; + BOOST_TEST(f(0, 0) == channel_result_t(0)); + BOOST_TEST(f(100, 27) == channel_result_t(127)); +} + +BOOST_AUTO_TEST_SUITE_END() // channel_plus_scalar_t + +BOOST_AUTO_TEST_SUITE(channel_minus_scalar_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(minus_scalar_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_minus_scalar_t<channel_t, int, channel_t> f; + BOOST_TEST(f(0, 0) == channel_t(0)); + BOOST_TEST(f(100, 27) == channel_t(73)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(minus_scalar_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + using channel_result_t = std::uint8_t; + gil::channel_minus_scalar_t<channel_t, int, std::uint8_t> f; + BOOST_TEST(f(0, 0) == channel_result_t(0)); + BOOST_TEST(f(100, 27) == channel_result_t(73)); +} + +BOOST_AUTO_TEST_SUITE_END() // channel_minus_scalar_t + +BOOST_AUTO_TEST_SUITE(channel_multiplies_scalar_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(multiplies_scalar_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_multiplies_scalar_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(0, 0) == channel_t(0)); + BOOST_TEST(f(1, 1) == channel_t(1)); + BOOST_TEST(f(4, 2) == channel_t(8)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(multiplies_scalar_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + using channel_result_t = std::uint8_t; + gil::channel_multiplies_scalar_t<channel_t, int, channel_result_t> f; + BOOST_TEST(f(0, 0) == channel_result_t(0)); + BOOST_TEST(f(4, 2) == channel_result_t(8)); +} + +BOOST_AUTO_TEST_SUITE_END() // channel_multiplies_scalar_t + +BOOST_AUTO_TEST_SUITE(channel_divides_scalar_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(divides_scalar_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_divides_scalar_t<channel_t, channel_t, channel_t> f; + BOOST_TEST(f(0, 1) == channel_t(0)); + BOOST_TEST(f(1, 1) == channel_t(1)); + BOOST_TEST(f(4, 2) == channel_t(2)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(divides_scalar_integer_mixed_types, channel_t, fixture::channel_integer_types) +{ + using channel_result_t = std::uint8_t; // duplicates only one of fixture::channel_integer_types + gil::channel_divides_scalar_t<channel_t, int, channel_result_t> f; + BOOST_TEST(f(0, 1) == channel_t(0)); + BOOST_TEST(f(4, 2) == channel_t(2)); +} + +BOOST_AUTO_TEST_SUITE_END() // channel_divides_scalar_t + +BOOST_AUTO_TEST_SUITE(channel_halves_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(halves_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_halves_t<channel_t> f; + { + channel_t c(0); + f(c); + BOOST_TEST(c == channel_t(0)); + } + { + channel_t c(2); + f(c); + BOOST_TEST(c == channel_t(1)); + } + { + channel_t c(4); + f(c); + BOOST_TEST(c == channel_t(2)); + } +} + +BOOST_AUTO_TEST_SUITE_END() // channel_halves_t + +BOOST_AUTO_TEST_SUITE(channel_zeros_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(zeros_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_zeros_t<channel_t> f; + { + channel_t c(0); + f(c); + BOOST_TEST(c == channel_t(0)); + } + { + channel_t c(2); + f(c); + BOOST_TEST(c == channel_t(0)); + } + { + channel_t c(4); + f(c); + BOOST_TEST(c == channel_t(0)); + } +} + +BOOST_AUTO_TEST_SUITE_END() // channel_zeros_t + +BOOST_AUTO_TEST_SUITE(channel_assigns_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(assigns_integer_same_types, channel_t, fixture::channel_integer_types) +{ + gil::channel_assigns_t<channel_t, channel_t> f; + { + channel_t c1(10); + channel_t c2(20); + f(c1, c2); + BOOST_TEST(c2 == c1); + } + +} + +BOOST_AUTO_TEST_SUITE_END() // channel_assigns_t diff --git a/src/boost/libs/gil/test/extension/numeric/convolve.cpp b/src/boost/libs/gil/test/extension/numeric/convolve.cpp new file mode 100644 index 00000000..d12fc9ac --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/convolve.cpp @@ -0,0 +1,79 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/convolve.hpp> + +#include <tuple> +#include <type_traits> + +#define BOOST_TEST_MODULE test_ext_numeric_colvolve_2d +#include "unit_test.hpp" +#include "unit_test_utility.hpp" +#include "test_fixture.hpp" +#include "core/image/test_fixture.hpp" + +namespace gil = boost::gil; +namespace fixture = boost::gil::test::fixture; + +BOOST_AUTO_TEST_SUITE(convolve_1d) + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_1x1_kernel_1x1_identity, Image, fixture::image_types) +{ + auto const img = fixture::create_image<Image>(1, 1, 7); + Image img_out(img); + + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const kernel = fixture::create_kernel<channel_t>({1}); + gil::detail::convolve_1d<pixel_t>(const_view(img_out), kernel, view(img_out)); + + // 1x1 kernel reduces convolution to multiplication + BOOST_TEST(gil::const_view(img).front() == gil::const_view(img_out).front()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_1x1_kernel_3x3_identity, Image, fixture::image_types) +{ + auto const img = fixture::create_image<Image>(1, 1, 7); + Image img_out(img); + + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const kernel = fixture::create_kernel<channel_t>({0, 0, 0, 0, 1, 0, 0, 0, 0}); + gil::detail::convolve_1d<pixel_t>(const_view(img_out), kernel, view(img_out)); + + BOOST_TEST(gil::const_view(img).front() == gil::const_view(img_out).front()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_3x3_kernel_3x3_identity, Image, fixture::image_types) +{ + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const img = fixture::generate_image<Image>(3, 3, fixture::random_value<channel_t>{}); + Image img_out(img); + + auto const kernel = fixture::create_kernel<channel_t>({0, 0, 0, 0, 1, 0, 0, 0, 0}); + gil::detail::convolve_1d<pixel_t>(const_view(img_out), kernel, view(img_out)); + + BOOST_TEST(gil::equal_pixels(gil::const_view(img), gil::const_view(img_out))); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_5x5_kernel_3x3_identity, Image, fixture::image_types) +{ + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const img = fixture::generate_image<Image>(5, 5, fixture::random_value<channel_t>{}); + Image img_out(img); + + auto const kernel = fixture::create_kernel<channel_t>({0, 0, 0, 0, 1, 0, 0, 0, 0}); + gil::detail::convolve_1d<pixel_t>(const_view(img_out), kernel, view(img_out)); + // TODO: Test different boundary options + + BOOST_TEST(gil::equal_pixels(gil::const_view(img), gil::const_view(img_out))); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/convolve_2d.cpp b/src/boost/libs/gil/test/extension/numeric/convolve_2d.cpp new file mode 100644 index 00000000..0a1012eb --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/convolve_2d.cpp @@ -0,0 +1,67 @@ +// +// Copyright 2019 Miral Shah <miralshah2211@gmail.com> +// +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#include <cstddef> + +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/convolve.hpp> + +#define BOOST_TEST_MODULE test_ext_convolve_2d +#include "unit_test.hpp" + +namespace gil = boost::gil; + +std::uint8_t img[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 0, 0, 0, 255, 0, 0, + 0, 0, 0, 255, 0, 255, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 0, 0, + 0, 0, 0, 255, 0, 255, 0, 0, 0, + 0, 0, 255, 0, 0, 0, 255, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +std::uint8_t output[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 28, 28, 28, 0, 28, 28, 28, 0, + 0, 28, 56, 56, 56, 56, 56, 28, 0, + 0, 28, 56, 85, 85, 85, 56, 28, 0, + 0, 0, 56, 85, 141, 85, 56, 0, 0, + 0, 28, 56, 85, 85, 85, 56, 28, 0, + 0, 28, 56, 56, 56, 56, 56, 28, 0, + 0, 28, 28, 28, 0, 28, 28, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +BOOST_AUTO_TEST_SUITE(convolve_2d) + +BOOST_AUTO_TEST_CASE(convolve_2d_with_normalized_mean_filter) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t*>(img), 9); + + gil::image<gil::gray8_pixel_t> temp_img(src_view.width(), src_view.height()); + typename gil::image<gil::gray8_pixel_t>::view_t temp_view = view(temp_img); + gil::gray8_view_t dst_view(temp_view); + + std::vector<float> v(9, 1.0f / 9.0f); + gil::detail::kernel_2d<float> kernel(v.begin(), v.size(), 1, 1); + + gil::detail::convolve_2d(src_view, kernel, dst_view); + + gil::gray8c_view_t out_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t*>(output), 9); + + BOOST_TEST(gil::equal_pixels(out_view, dst_view)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/convolve_cols.cpp b/src/boost/libs/gil/test/extension/numeric/convolve_cols.cpp new file mode 100644 index 00000000..51b7acee --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/convolve_cols.cpp @@ -0,0 +1,52 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/convolve.hpp> + +#include <tuple> +#include <type_traits> + +#define BOOST_TEST_MODULE test_ext_numeric_colvolve_cols +#include "unit_test.hpp" +#include "unit_test_utility.hpp" +#include "test_fixture.hpp" +#include "core/image/test_fixture.hpp" + +namespace gil = boost::gil; +namespace fixture = boost::gil::test::fixture; + +BOOST_AUTO_TEST_SUITE(convolve_cols) + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_1x1_kernel_1x1_identity, Image, fixture::image_types) +{ + auto const img = fixture::create_image<Image>(1, 1, 7); + auto img_out = fixture::create_image<Image>(1, 1, 0); + + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const kernel = fixture::create_kernel<channel_t>({1}); + gil::convolve_cols<pixel_t>(const_view(img), kernel, view(img_out)); + + // 1x1 kernel reduces convolution to multiplication + BOOST_TEST(gil::const_view(img).front() == gil::const_view(img_out).front()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_1x1_kernel_3x3_identity, Image, fixture::image_types) +{ + auto const img = fixture::create_image<Image>(1, 1, 7); + auto img_out = fixture::create_image<Image>(1, 1, 0); + + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const kernel = fixture::create_kernel<channel_t>({0, 0, 0, 0, 1, 0, 0, 0, 0}); + gil::convolve_cols<pixel_t>(const_view(img), kernel, view(img_out)); + + BOOST_TEST(gil::const_view(img).front() == gil::const_view(img_out).front()); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/convolve_rows.cpp b/src/boost/libs/gil/test/extension/numeric/convolve_rows.cpp new file mode 100644 index 00000000..8e50d282 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/convolve_rows.cpp @@ -0,0 +1,52 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/convolve.hpp> + +#include <tuple> +#include <type_traits> + +#define BOOST_TEST_MODULE test_ext_numeric_colvolve_rows +#include "unit_test.hpp" +#include "unit_test_utility.hpp" +#include "test_fixture.hpp" +#include "core/image/test_fixture.hpp" + +namespace gil = boost::gil; +namespace fixture = boost::gil::test::fixture; + +BOOST_AUTO_TEST_SUITE(convolve_rows) + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_1x1_kernel_1x1_identity, Image, fixture::image_types) +{ + auto const img = fixture::create_image<Image>(1, 1, 7); + auto img_out = fixture::create_image<Image>(1, 1, 0); + + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const kernel = fixture::create_kernel<channel_t>({1}); + gil::convolve_rows<pixel_t>(const_view(img), kernel, view(img_out)); + + // 1x1 kernel reduces convolution to multiplication + BOOST_TEST(gil::const_view(img).front() == gil::const_view(img_out).front()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(image_1x1_kernel_3x3_identity, Image, fixture::image_types) +{ + auto const img = fixture::create_image<Image>(1, 1, 7); + auto img_out = fixture::create_image<Image>(1, 1, 0); + + using pixel_t = typename Image::value_type; + using channel_t = typename gil::channel_type<pixel_t>::type; + auto const kernel = fixture::create_kernel<channel_t>({0, 0, 0, 0, 1, 0, 0, 0, 0}); + gil::convolve_rows<pixel_t>(const_view(img), kernel, view(img_out)); + + BOOST_TEST(gil::const_view(img).front() == gil::const_view(img_out).front()); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/extend_boundary.cpp b/src/boost/libs/gil/test/extension/numeric/extend_boundary.cpp new file mode 100644 index 00000000..81b34a56 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/extend_boundary.cpp @@ -0,0 +1,244 @@ +// +// Copyright 2019 Pranam Lashkari <plashkari628@gmail.com> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// + +#define BOOST_TEST_MODULE test_ext_numeric_extend_boundary +#include "unit_test.hpp" +#include "unit_test_utility.hpp" + +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/algorithm.hpp> +#include <boost/gil/extension/numeric/convolve.hpp> + +namespace gil = boost::gil; + +std::uint8_t img[] = +{ + 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 0, 0, 0, 0, 0, 0, 0, 32, + 11, 0, 255, 0, 0, 0, 255, 0, 31, + 12, 0, 0, 255, 0, 255, 0, 0, 30, + 13, 0, 0, 0, 255, 0, 0, 0, 29, + 14, 0, 0, 255, 0, 255, 0, 0, 28, + 15, 0, 255, 0, 0, 0, 255, 0, 27, + 16, 0, 0, 0, 0, 0, 0, 0, 26, + 17, 18, 19, 20, 21, 22, 23, 24, 25 +}; + +std::uint8_t row_output_constant[] = +{ + 1, 2, 3, 4, 5, 6, 7, 8, 9, + 1, 2, 3, 4, 5, 6, 7, 8, 9, + 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 0, 0, 0, 0, 0, 0, 0, 32, + 11, 0, 255, 0, 0, 0, 255, 0, 31, + 12, 0, 0, 255, 0, 255, 0, 0, 30, + 13, 0, 0, 0, 255, 0, 0, 0, 29, + 14, 0, 0, 255, 0, 255, 0, 0, 28, + 15, 0, 255, 0, 0, 0, 255, 0, 27, + 16, 0, 0, 0, 0, 0, 0, 0, 26, + 17, 18, 19, 20, 21, 22, 23, 24, 25, + 17, 18, 19, 20, 21, 22, 23, 24, 25, + 17, 18, 19, 20, 21, 22, 23, 24, 25 +}; + +std::uint8_t row_output_zero[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 0, 0, 0, 0, 0, 0, 0, 32, + 11, 0, 255, 0, 0, 0, 255, 0, 31, + 12, 0, 0, 255, 0, 255, 0, 0, 30, + 13, 0, 0, 0, 255, 0, 0, 0, 29, + 14, 0, 0, 255, 0, 255, 0, 0, 28, + 15, 0, 255, 0, 0, 0, 255, 0, 27, + 16, 0, 0, 0, 0, 0, 0, 0, 26, + 17, 18, 19, 20, 21, 22, 23, 24, 25, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +std::uint8_t col_output_constant[] = +{ + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, + 10, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, + 11, 11, 0, 255, 0, 0, 0, 255, 0, 31, 31, + 12, 12, 0, 0, 255, 0, 255, 0, 0, 30, 30, + 13, 13, 0, 0, 0, 255, 0, 0, 0, 29, 29, + 14, 14, 0, 0, 255, 0, 255, 0, 0, 28, 28, + 15, 15, 0, 255, 0, 0, 0, 255, 0, 27, 27, + 16, 16, 0, 0, 0, 0, 0, 0, 0, 26, 26, + 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25 +}; + +std::uint8_t col_output_zero[] = +{ + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, + 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 0, 11, 0, 255, 0, 0, 0, 255, 0, 31, 0, 0, + 0, 0, 12, 0, 0, 255, 0, 255, 0, 0, 30, 0, 0, + 0, 0, 13, 0, 0, 0, 255, 0, 0, 0, 29, 0, 0, + 0, 0, 14, 0, 0, 255, 0, 255, 0, 0, 28, 0, 0, + 0, 0, 15, 0, 255, 0, 0, 0, 255, 0, 27, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 0, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0 +}; + +std::uint8_t boundary_output_constant[] = +{ + 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, + 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, + 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, + 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, + 11, 11, 11, 0, 255, 0, 0, 0, 255, 0, 31, 31, 31, + 12, 12, 12, 0, 0, 255, 0, 255, 0, 0, 30, 30, 30, + 13, 13, 13, 0, 0, 0, 255, 0, 0, 0, 29, 29, 29, + 14, 14, 14, 0, 0, 255, 0, 255, 0, 0, 28, 28, 28, + 15, 15, 15, 0, 255, 0, 0, 0, 255, 0, 27, 27, 27, + 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, + 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, + 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, + 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25 +}; + +std::uint8_t boundary_output_zero[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, + 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 0, 11, 0, 255, 0, 0, 0, 255, 0, 31, 0, 0, + 0, 0, 12, 0, 0, 255, 0, 255, 0, 0, 30, 0, 0, + 0, 0, 13, 0, 0, 0, 255, 0, 0, 0, 29, 0, 0, + 0, 0, 14, 0, 0, 255, 0, 255, 0, 0, 28, 0, 0, + 0, 0, 15, 0, 255, 0, 0, 0, 255, 0, 27, 0, 0, + 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 0, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +BOOST_AUTO_TEST_SUITE(boundary_extension) + +BOOST_AUTO_TEST_CASE(extend_row_with_constant) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + gil::gray8c_view_t out_view = + gil::interleaved_view(9, 13, reinterpret_cast<const gil::gray8_pixel_t *>(row_output_constant), 9); + + auto output = gil::extend_row(src_view, 2, gil::boundary_option::extend_constant); + + BOOST_TEST(gil::equal_pixels(out_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_row_with_zero) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + gil::gray8c_view_t out_view = + gil::interleaved_view(9, 15, reinterpret_cast<const gil::gray8_pixel_t *>(row_output_zero), 9); + + auto output = gil::extend_row(src_view, 3, gil::boundary_option::extend_zero); + + BOOST_TEST(gil::equal_pixels(out_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_row_with_padded) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + auto src_sub_view = gil::subimage_view(src_view, 0, 1, 9, 7); + + auto output = gil::extend_row(src_sub_view, 1, gil::boundary_option::extend_padded); + + BOOST_TEST(gil::equal_pixels(src_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_col_with_constant) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + gil::gray8c_view_t out_view = + gil::interleaved_view(11, 9, reinterpret_cast<const gil::gray8_pixel_t *>(col_output_constant), 11); + + auto output = gil::extend_col(src_view, 1, gil::boundary_option::extend_constant); + + BOOST_TEST(gil::equal_pixels(out_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_col_with_zero) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + gil::gray8c_view_t out_view = + gil::interleaved_view(13, 9, reinterpret_cast<const gil::gray8_pixel_t *>(col_output_zero), 13); + + auto output = gil::extend_col(src_view, 2, gil::boundary_option::extend_zero); + + BOOST_TEST(gil::equal_pixels(out_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_col_with_padded) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + auto src_sub_view = gil::subimage_view(src_view, 1, 0, 7, 9); + + auto output = gil::extend_col(src_sub_view, 1, gil::boundary_option::extend_padded); + + BOOST_TEST(gil::equal_pixels(src_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_img_with_constant) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + gil::gray8c_view_t out_view = + gil::interleaved_view(13, 13, reinterpret_cast<const gil::gray8_pixel_t *>(boundary_output_constant), 13); + + auto output = gil::extend_boundary(src_view, 2, gil::boundary_option::extend_constant); + + BOOST_TEST(gil::equal_pixels(out_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_img_with_zero) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + gil::gray8c_view_t out_view = + gil::interleaved_view(13, 13, reinterpret_cast<const gil::gray8_pixel_t *>(boundary_output_zero), 13); + + auto output = gil::extend_boundary(src_view, 2, gil::boundary_option::extend_zero); + + BOOST_TEST(gil::equal_pixels(out_view, gil::view(output))); +} + +BOOST_AUTO_TEST_CASE(extend_img_with_padded) +{ + gil::gray8c_view_t src_view = + gil::interleaved_view(9, 9, reinterpret_cast<const gil::gray8_pixel_t *>(img), 9); + + auto src_sub_view = gil::subimage_view(src_view, 1, 1, 7, 7); + + auto output = gil::extend_boundary(src_sub_view, 1, gil::boundary_option::extend_padded); + + BOOST_TEST(gil::equal_pixels(src_view, gil::view(output))); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/kernel.cpp b/src/boost/libs/gil/test/extension/numeric/kernel.cpp new file mode 100644 index 00000000..de273a4b --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/kernel.cpp @@ -0,0 +1,307 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// Copyright 2019 Miral Shah <miralshah2211@gmail.com> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#define BOOST_DISABLE_ASSERTS 1 // kernel_1d_adaptor assertions are too strict +#include <boost/gil/extension/numeric/kernel.hpp> +#include <vector> + +#define BOOST_TEST_MODULE test_ext_numeric_kernel +#include "unit_test.hpp" + +namespace gil = boost::gil; + +BOOST_AUTO_TEST_CASE(kernel_1d_default_constructor) +{ + gil::kernel_1d<int> k; + BOOST_TEST(k.center() == 0); + BOOST_TEST(k.left_size() == 0); + BOOST_TEST(k.right_size() == -1); // TODO: Why not 0? + // std::vector interface + BOOST_TEST(k.size() == 0); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_default_constructor) +{ + gil::detail::kernel_2d<int> k; + BOOST_TEST(k.center_y() == 0); + BOOST_TEST(k.center_x() == 0); + + //BOOST_TEST(k.left_size() == 0); + //BOOST_TEST(k.right_size() == -1); + BOOST_TEST(k.upper_size() == 0); + BOOST_TEST(k.lower_size() == -1); + // std::vector interface + BOOST_TEST(k.size() == 0); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_parameterized_constructor) +{ + gil::kernel_1d<int> k(9, 4); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_parameterized_constructor) +{ + gil::detail::kernel_2d<int> k(9, 4, 4); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + BOOST_TEST(k.upper_size() == 4); + BOOST_TEST(k.lower_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_parameterized_constructor_with_iterator) +{ + std::vector<int> v(9); + gil::kernel_1d<int> k(v.cbegin(), v.size(), 4); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_parameterized_constructor_with_iterator) +{ + std::vector<int> v(81); + gil::detail::kernel_2d<int> k(v.cbegin(), v.size(), 4, 4); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + BOOST_TEST(k.upper_size() == 4); + BOOST_TEST(k.lower_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_copy_constructor) +{ + gil::kernel_1d<int> d(9, 4); + gil::kernel_1d<int> k(d); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.center() == d.center()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_copy_constructor) +{ + gil::detail::kernel_2d<int> d(9, 4, 4); + gil::detail::kernel_2d<int> k(d); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.center_y() == d.center_y()); + BOOST_TEST(k.center_x() == d.center_x()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + BOOST_TEST(k.lower_size() == d.lower_size()); + BOOST_TEST(k.upper_size() == d.upper_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_assignment_operator) +{ + gil::kernel_1d<int> d(9, 4); + gil::kernel_1d<int> k; + k = d; + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.center() == d.center()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_assignment_operator) +{ + gil::detail::kernel_2d<int> d(9, 4, 4); + gil::detail::kernel_2d<int> k; + k = d; + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.center_y() == d.center_y()); + BOOST_TEST(k.center_x() == d.center_x()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + BOOST_TEST(k.lower_size() == d.lower_size()); + BOOST_TEST(k.upper_size() == d.upper_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_reverse_Kernel) +{ + gil::kernel_1d<int> d(12, 4); + BOOST_TEST(d.center() == 4); + auto k = gil::reverse_kernel(d); + BOOST_TEST(k.center() == d.right_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_fixed_default_constructor) +{ + gil::kernel_1d_fixed<int, 9> k; + BOOST_TEST(k.center() == 0); + BOOST_TEST(k.left_size() == 0); + BOOST_TEST(k.right_size() == 8); // TODO: Why not 0 or -1 if not set? + // std::array interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_fixed_default_constructor) +{ + gil::detail::kernel_2d_fixed<int, 9> k; + BOOST_TEST(k.center_x() == 0); + BOOST_TEST(k.center_y() == 0); + BOOST_TEST(k.left_size() == 0); + BOOST_TEST(k.right_size() == 8); // TODO: Why not 0 or -1 if not set? + BOOST_TEST(k.upper_size() == 0); + BOOST_TEST(k.lower_size() == 8); + // std::array interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_fixed_parameterized_constructor) +{ + gil::kernel_1d_fixed<int, 9> k(4); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_fixed_parameterized_constructor) +{ + gil::detail::kernel_2d_fixed<int, 9> k(4, 4); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + BOOST_TEST(k.upper_size() == 4); + BOOST_TEST(k.lower_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_fixed_parameterized_constructor_with_iterator) +{ + // FIXME: The constructor should throw if v.size() < k.size() + std::vector<int> v(9); + gil::kernel_1d_fixed<int, 9> k(v.cbegin(), 4); + BOOST_TEST((gil::kernel_1d_fixed<int, 9>::static_size) == 9); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_fixed_parameterized_constructor_with_iterator) +{ +// // FIXME: The constructor should throw if v.size() < k.size() + std::array<int, 81> v; + gil::detail::kernel_2d_fixed<int, 9> k(v.cbegin(), 4, 4); + BOOST_TEST((gil::detail::kernel_2d_fixed<int, 9>::static_size) == 9); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.left_size() == 4); + BOOST_TEST(k.right_size() == 4); + BOOST_TEST(k.upper_size() == 4); + BOOST_TEST(k.lower_size() == 4); + // std::vector interface + BOOST_TEST(k.size() == 9); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_fixed_copy_constructor) +{ + gil::kernel_1d_fixed<int, 9> d(4); + gil::kernel_1d_fixed<int, 9> k(d); + BOOST_TEST((gil::kernel_1d_fixed<int, 9>::static_size) == 9); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.center() == d.center()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_fixed_copy_constructor) +{ + gil::detail::kernel_2d_fixed<int, 9> d(4, 4); + gil::detail::kernel_2d_fixed<int, 9> k(d); + BOOST_TEST((gil::detail::kernel_2d_fixed<int, 9>::static_size) == 9); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == d.center_x()); + BOOST_TEST(k.center_y() == d.center_y()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + BOOST_TEST(k.lower_size() == d.lower_size()); + BOOST_TEST(k.upper_size() == d.upper_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_fixed_assignment_operator) +{ + gil::kernel_1d_fixed<int, 9> d(4); + gil::kernel_1d_fixed<int, 9> k; + k = d; + BOOST_TEST((gil::kernel_1d_fixed<int, 9>::static_size) == 9); + BOOST_TEST(k.center() == 4); + BOOST_TEST(k.center() == d.center()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_2d_fixed_assignment_operator) +{ + gil::detail::kernel_2d_fixed<int, 9> d(4, 4); + gil::detail::kernel_2d_fixed<int, 9> k; + k = d; + BOOST_TEST((gil::detail::kernel_2d_fixed<int, 9>::static_size) == 9); + BOOST_TEST(k.center_x() == 4); + BOOST_TEST(k.center_y() == 4); + BOOST_TEST(k.center_x() == d.center_x()); + BOOST_TEST(k.center_y() == d.center_y()); + BOOST_TEST(k.left_size() == d.left_size()); + BOOST_TEST(k.right_size() == d.right_size()); + BOOST_TEST(k.lower_size() == d.lower_size()); + BOOST_TEST(k.upper_size() == d.upper_size()); + // std::vector interface + BOOST_TEST(k.size() == d.size()); +} + +BOOST_AUTO_TEST_CASE(kernel_1d_fixed_reverse_Kernel) +{ + std::array<int, 3> values = {1, 2, 3}; + gil::kernel_1d_fixed<int, 3> d(values.begin(), 1); + BOOST_TEST((gil::kernel_1d_fixed<int, 3>::static_size) == 3); + BOOST_TEST(d == values); + + std::array<int, 3> values_rev = {3, 2, 1}; + auto k = gil::reverse_kernel(d); + BOOST_TEST(k == values_rev); +} + + diff --git a/src/boost/libs/gil/test/extension/numeric/kernel_1d_fixed_even_size_fail.cpp b/src/boost/libs/gil/test/extension/numeric/kernel_1d_fixed_even_size_fail.cpp new file mode 100644 index 00000000..a8be85fc --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/kernel_1d_fixed_even_size_fail.cpp @@ -0,0 +1,16 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil/extension/numeric/kernel.hpp> + +namespace gil = boost::gil; + +int main() +{ + gil::kernel_1d_fixed<int, 0> k0; + gil::kernel_1d_fixed<int, 4> k4; +} diff --git a/src/boost/libs/gil/test/extension/numeric/matrix3x2.cpp b/src/boost/libs/gil/test/extension/numeric/matrix3x2.cpp new file mode 100644 index 00000000..452db415 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/matrix3x2.cpp @@ -0,0 +1,170 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil/extension/numeric/affine.hpp> +#include <boost/gil/extension/numeric/resample.hpp> +#include <boost/gil/extension/numeric/sampler.hpp> +#include <boost/gil.hpp> + +#define BOOST_TEST_MODULE test_ext_numeric_matrix3x2 +#include "unit_test.hpp" + +namespace gil = boost::gil; + +namespace { +constexpr double HALF_PI = 1.57079632679489661923; +} + +BOOST_AUTO_TEST_CASE(matrix3x2_default_constructor) +{ + gil::matrix3x2<int> m1; + BOOST_TEST(m1.a == 1); + BOOST_TEST(m1.b == 0); + BOOST_TEST(m1.c == 0); + BOOST_TEST(m1.d == 1); + BOOST_TEST(m1.e == 0); + BOOST_TEST(m1.f == 0); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_parameterized_constructor) +{ + gil::matrix3x2<int> m1(1, 2, 3, 4, 5, 6); + BOOST_TEST(m1.a == 1); + BOOST_TEST(m1.b == 2); + BOOST_TEST(m1.c == 3); + BOOST_TEST(m1.d == 4); + BOOST_TEST(m1.e == 5); + BOOST_TEST(m1.f == 6); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_copy_constructor) +{ + gil::matrix3x2<int> m1(1, 2, 3, 4, 5, 6); + gil::matrix3x2<int> m2(m1); + BOOST_TEST(m2.a == 1); + BOOST_TEST(m2.b == 2); + BOOST_TEST(m2.c == 3); + BOOST_TEST(m2.d == 4); + BOOST_TEST(m2.e == 5); + BOOST_TEST(m2.f == 6); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_assignment_operator) +{ + gil::matrix3x2<int> m1(1, 2, 3, 4, 5, 6); + gil::matrix3x2<int> m2; + m2 = m1; + BOOST_TEST(m2.a == 1); + BOOST_TEST(m2.b == 2); + BOOST_TEST(m2.c == 3); + BOOST_TEST(m2.d == 4); + BOOST_TEST(m2.e == 5); + BOOST_TEST(m2.f == 6); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_multiplication_assignment) +{ + gil::matrix3x2<int> m1; + gil::matrix3x2<int> m2; + m2 *= m1; + BOOST_TEST(m2.a == 1); + BOOST_TEST(m2.b == 0); + BOOST_TEST(m2.c == 0); + BOOST_TEST(m2.d == 1); + BOOST_TEST(m2.e == 0); + BOOST_TEST(m2.f == 0); + + gil::matrix3x2<int> m3(0, 0, 0, 0, 0, 0); + m2 *= m3; + BOOST_TEST(m2.a == 0); + BOOST_TEST(m2.b == 0); + BOOST_TEST(m2.c == 0); + BOOST_TEST(m2.d == 0); + BOOST_TEST(m2.e == 0); + BOOST_TEST(m2.f == 0); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_matrix3x2_multiplication) +{ + gil::matrix3x2<int> m1; + gil::matrix3x2<int> m2(0, 0, 0, 0, 0, 0); + gil::matrix3x2<int> m3; + m3 = m1 * m2; + BOOST_TEST(m3.a == 0); + BOOST_TEST(m3.b == 0); + BOOST_TEST(m3.c == 0); + BOOST_TEST(m3.d == 0); + BOOST_TEST(m3.e == 0); + BOOST_TEST(m3.f == 0); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_vector_multiplication) +{ + gil::matrix3x2<int> m1; + gil::point<int> v1{2, 4}; + + gil::point<int> v2 = v1 * m1; + BOOST_TEST(v2.x == 2); + BOOST_TEST(v2.y == 4); + + gil::point<int> v3 = gil::transform(m1, v1); + BOOST_TEST(v3.x == 2); + BOOST_TEST(v3.y == 4); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_get_rotate) +{ + auto m1 = gil::matrix3x2<double>::get_rotate(HALF_PI); + BOOST_TEST(m1.a == std::cos(HALF_PI), btt::tolerance(0.03)); + BOOST_TEST(m1.b == 1); + BOOST_TEST(m1.c == -1); + BOOST_TEST(m1.d == std::cos(HALF_PI), btt::tolerance(0.03)); + BOOST_TEST(m1.e == 0); + BOOST_TEST(m1.f == 0); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_get_scale) +{ + gil::matrix3x2<int> m1; + m1 = gil::matrix3x2<int>::get_scale(2); + BOOST_TEST(m1.a == 2); + BOOST_TEST(m1.b == 0); + BOOST_TEST(m1.c == 0); + BOOST_TEST(m1.d == 2); + BOOST_TEST(m1.e == 0); + BOOST_TEST(m1.f == 0); + m1 = gil::matrix3x2<int>::get_scale(2, 4); + BOOST_TEST(m1.a == 2); + BOOST_TEST(m1.d == 4); + m1 = gil::matrix3x2<int>::get_scale(gil::point<int>{4, 8}); + BOOST_TEST(m1.a == 4); + BOOST_TEST(m1.d == 8); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_get_translate) +{ + gil::matrix3x2<int> m1; + m1 = gil::matrix3x2<int>::get_translate(2, 4); + BOOST_TEST(m1.a == 1); + BOOST_TEST(m1.b == 0); + BOOST_TEST(m1.c == 0); + BOOST_TEST(m1.d == 1); + BOOST_TEST(m1.e == 2); + BOOST_TEST(m1.f == 4); + m1 = gil::matrix3x2<int>::get_translate(gil::point<int>{4, 8}); + BOOST_TEST(m1.e == 4); + BOOST_TEST(m1.f == 8); +} + +BOOST_AUTO_TEST_CASE(matrix3x2_transform) +{ + gil::matrix3x2<int> m1; + gil::point<int> v1{2, 4}; + gil::point<int> v2 = gil::transform(m1, v1); + BOOST_TEST(v2.x == 2); + BOOST_TEST(v2.y == 4); +} diff --git a/src/boost/libs/gil/test/extension/numeric/numeric.cpp b/src/boost/libs/gil/test/extension/numeric/numeric.cpp new file mode 100644 index 00000000..48f68b35 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/numeric.cpp @@ -0,0 +1,177 @@ +// +// Copyright 2013 Krzysztof Czainski +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil/image.hpp> +#include <boost/gil/typedefs.hpp> + +#include <boost/gil/extension/numeric/resample.hpp> +#include <boost/gil/extension/numeric/sampler.hpp> + +#include <boost/assert.hpp> + +#define BOOST_TEST_MODULE test_ext_numeric_numeric +#include "unit_test.hpp" + +using namespace boost; +using namespace gil; + +template < class F, class I > +struct TestMapFn +{ + using point_t = point<F>; + using result_type = point_t; + result_type operator()(point<I> const& src) const + { + F x = static_cast<F>( src.x ) - 0.5; + F y = static_cast<F>( src.y ) - 0.5; + return { x, y }; + } +}; + +namespace boost { namespace gil { + +// NOTE: I suggest this could be the default behavior: + +template <typename T> struct mapping_traits; + +template < class F, class I > +struct mapping_traits<TestMapFn<F, I>> +{ + using result_type = typename TestMapFn<F, I>::result_type; +}; + +template <class F, class I> +inline point<F> transform(TestMapFn<F, I> const& mf, point<I> const& src) +{ + return mf(src); +} + +}} // boost::gil + + +BOOST_AUTO_TEST_SUITE(Numeric_Tests) + +BOOST_AUTO_TEST_CASE( pixel_numeric_operations_plus ) +{ + rgb8_pixel_t a( 10, 20, 30 ); + bgr8_pixel_t b( 30, 20, 10 ); + + pixel_plus_t< rgb8_pixel_t + , bgr8_pixel_t + , rgb8_pixel_t + > op; + rgb8_pixel_t c = op( a, b ); + + BOOST_ASSERT( get_color( c, red_t() ) == 20 ); + BOOST_ASSERT( get_color( c, green_t() ) == 40 ); + BOOST_ASSERT( get_color( c, blue_t() ) == 60 ); + + pixel_plus_t< rgb8_pixel_t + , bgr8_pixel_t + , bgr8_pixel_t + > op2; + bgr8_pixel_t d = op2( a, b ); + + BOOST_ASSERT( get_color( d, red_t() ) == 20 ); + BOOST_ASSERT( get_color( d, green_t() ) == 40 ); + BOOST_ASSERT( get_color( d, blue_t() ) == 60 ); +} + +BOOST_AUTO_TEST_CASE( pixel_numeric_operations_multiply ) +{ + rgb32f_pixel_t a( 1.f, 2.f, 3.f ); + bgr32f_pixel_t b( 2.f, 2.f, 2.f ); + + pixel_multiply_t< rgb32f_pixel_t + , bgr32f_pixel_t + , rgb32f_pixel_t + > op; + rgb32f_pixel_t c = op( a, b ); + + float epsilon = 1e-6f; + BOOST_CHECK_CLOSE( static_cast<float>( get_color( c, red_t() )), 2.f, epsilon ); + BOOST_CHECK_CLOSE( static_cast<float>( get_color( c, green_t() )), 4.f, epsilon ); + BOOST_CHECK_CLOSE( static_cast<float>( get_color( c, blue_t() )), 6.f, epsilon ); +} + +BOOST_AUTO_TEST_CASE( pixel_numeric_operations_divide ) +{ + // integer + { + rgb8_pixel_t a( 10, 20, 30 ); + bgr8_pixel_t b( 2, 2, 2 ); + + pixel_divide_t< rgb8_pixel_t + , bgr8_pixel_t + , rgb8_pixel_t + > op; + rgb32f_pixel_t c = op( a, b ); + + BOOST_ASSERT( get_color( c, red_t() ) == 5 ); + BOOST_ASSERT( get_color( c, green_t() ) == 10 ); + BOOST_ASSERT( get_color( c, blue_t() ) == 15 ); + } + + // float + { + rgb32f_pixel_t a( 1.f, 2.f, 3.f ); + bgr32f_pixel_t b( 2.f, 2.f, 2.f ); + + pixel_divide_t< rgb32f_pixel_t + , bgr32f_pixel_t + , rgb32f_pixel_t + > op; + rgb32f_pixel_t c = op( a, b ); + + float epsilon = 1e-6f; + BOOST_CHECK_CLOSE( static_cast< float >( get_color( c, red_t() )), 0.5f, epsilon ); + BOOST_CHECK_CLOSE( static_cast< float >( get_color( c, green_t() )), 1.f, epsilon ); + BOOST_CHECK_CLOSE( static_cast< float >( get_color( c, blue_t() )), 1.5f, epsilon ); + } +} + +BOOST_AUTO_TEST_CASE(bilinear_sampler_test) +{ + // R G B + // G W R + // B R G + rgb8_image_t img(3,3); + rgb8_view_t v = view(img); + v(0,0) = v(1,2) = v(2,1) = rgb8_pixel_t(128,0,0); + v(0,1) = v(1,0) = v(2,2) = rgb8_pixel_t(0,128,0); + v(0,2) = v(2,0) = rgb8_pixel_t(0,0,128); + v(1,1) = rgb8_pixel_t(128,128,128); + + rgb8_image_t dimg(4,4); + rgb8c_view_t dv = const_view(dimg); + + TestMapFn<double,rgb8_image_t::coord_t> mf; + + resample_pixels(const_view(img), view(dimg), mf, bilinear_sampler()); + + BOOST_ASSERT(rgb8_pixel_t(128,0,0) == dv(0,0)); + BOOST_ASSERT(rgb8_pixel_t(64,64,0) == dv(0,1)); + BOOST_ASSERT(rgb8_pixel_t(0,64,64) == dv(0,2)); + BOOST_ASSERT(rgb8_pixel_t(0,0,128) == dv(0,3)); + + BOOST_ASSERT(rgb8_pixel_t(64,64,0) == dv(1,0)); + BOOST_ASSERT(rgb8_pixel_t(64,96,32) == dv(1,1)); + BOOST_ASSERT(rgb8_pixel_t(64,64,64) == dv(1,2)); + BOOST_ASSERT(rgb8_pixel_t(64,0,64) == dv(1,3)); + + BOOST_ASSERT(rgb8_pixel_t(0,64,64) == dv(2,0)); + BOOST_ASSERT(rgb8_pixel_t(64,64,64) == dv(2,1)); + BOOST_ASSERT(rgb8_pixel_t(96,64,32) == dv(2,2)); + BOOST_ASSERT(rgb8_pixel_t(64,64,0) == dv(2,3)); + + BOOST_ASSERT(rgb8_pixel_t(0,0,128) == dv(3,0)); + BOOST_ASSERT(rgb8_pixel_t(64,0,64) == dv(3,1)); + BOOST_ASSERT(rgb8_pixel_t(64,64,0) == dv(3,2)); + BOOST_ASSERT(rgb8_pixel_t(0,128,0) == dv(3,3)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/numeric/pixel_numeric_operations.cpp b/src/boost/libs/gil/test/extension/numeric/pixel_numeric_operations.cpp new file mode 100644 index 00000000..eb4f1544 --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/pixel_numeric_operations.cpp @@ -0,0 +1,278 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/pixel_numeric_operations.hpp> + +#include <tuple> +#include <type_traits> + +#define BOOST_TEST_MODULE test_ext_numeric_pixel_numeric_operations +#include "unit_test.hpp" +#include "unit_test_utility.hpp" +#include "core/image/test_fixture.hpp" // random_value +#include "core/pixel/test_fixture.hpp" + +namespace gil = boost::gil; +namespace fixture = boost::gil::test::fixture; + +BOOST_AUTO_TEST_SUITE(pixel_plus_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(plus_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_plus_t<pixel_t, pixel_t, pixel_t> f; + { + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + BOOST_TEST(f(p0, p0) == p0); + } + { + pixel_t p1; + gil::static_fill(p1, static_cast<channel_t>(1)); + pixel_t r2; + gil::static_fill(r2, static_cast<channel_t>(2)); + BOOST_TEST(f(p1, p1) == r2); + } + { + // Generates pixels with consecutive channel values: {1} or {1,2,3} or {1,2,3,4} etc. + fixture::consecutive_value<channel_t> g(1); + pixel_t p; + gil::static_generate(p, [&g]() { return g(); }); + auto const r = f(p, p); + BOOST_TEST(r != p); + BOOST_TEST(gil::at_c<0>(r) == (gil::at_c<0>(p) + gil::at_c<0>(p))); + } +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_plus_t + +BOOST_AUTO_TEST_SUITE(pixel_minus_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(minus_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_minus_t<pixel_t, pixel_t, pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + BOOST_TEST(f(p0, p0) == p0); + { + pixel_t p1, p2; + gil::static_fill(p1, static_cast<channel_t>(1)); + gil::static_fill(p2, static_cast<channel_t>(2)); + pixel_t r1; + gil::static_fill(r1, static_cast<channel_t>(1)); + BOOST_TEST(f(p2, p1) == r1); + } + { + // Generates pixels with consecutive channel values: {1} or {1,2,3} or {1,2,3,4} etc. + fixture::consecutive_value<channel_t> g(1); + pixel_t p; + gil::static_generate(p, [&g]() { return g(); }); + BOOST_TEST(f(p, p) == p0); + } +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_minus_t + +BOOST_AUTO_TEST_SUITE(pixel_multiplies_scalar_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_multiplies_scalar_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_multiplies_scalar_t<pixel_t, channel_t, pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + BOOST_TEST(f(p0, 0) == p0); + + { + pixel_t p1; + gil::static_fill(p1, static_cast<channel_t>(1)); + BOOST_TEST(f(p1, 0) == p0); + BOOST_TEST(f(p1, 1) == p1); + } + { + // Generates pixels with consecutive channel values: {1} or {1,2,3} or {1,2,3,4} etc. + fixture::consecutive_value<channel_t> g(1); + pixel_t p; + gil::static_generate(p, [&g]() { return g(); }); + + // check first channel value is doubled + auto const r = f(p, 2); + BOOST_TEST(r != p); + BOOST_TEST(gil::at_c<0>(r) == (gil::at_c<0>(p) * 2)); + } +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_multiplies_scalar_t + +BOOST_AUTO_TEST_SUITE(pixel_multiply_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_multiply_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_multiply_t<pixel_t, pixel_t, pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + BOOST_TEST(f(p0, p0) == p0); + + pixel_t p1; + gil::static_fill(p1, static_cast<channel_t>(1)); + BOOST_TEST(f(p1, p1) == p1); + + pixel_t p2; + gil::static_fill(p2, static_cast<channel_t>(2)); + BOOST_TEST(f(p1, p2) == p2); +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_multiply_t + +BOOST_AUTO_TEST_SUITE(pixel_divides_scalar_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_divides_scalar_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_divides_scalar_t<pixel_t, channel_t, pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + BOOST_TEST(f(p0, 1) == p0); + + pixel_t p1; + gil::static_fill(p1, static_cast<channel_t>(1)); + BOOST_TEST(f(p1, 1) == p1); + + pixel_t p2; + gil::static_fill(p2, static_cast<channel_t>(2)); + BOOST_TEST(f(p2, 2) == p1); +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_divides_scalar_t + +BOOST_AUTO_TEST_SUITE(pixel_divide_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_divide_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_divide_t<pixel_t, pixel_t, pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + pixel_t p1; + gil::static_fill(p1, static_cast<channel_t>(1)); + BOOST_TEST(f(p0, p1) == p0); + BOOST_TEST(f(p1, p1) == p1); + + pixel_t p2; + gil::static_fill(p2, static_cast<channel_t>(2)); + BOOST_TEST(f(p2, p1) == p2); +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_divide_t + +BOOST_AUTO_TEST_SUITE(pixel_halves_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_halves_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_halves_t<pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + pixel_t p1; + gil::static_fill(p1, static_cast<channel_t>(1)); + + { + auto p = p0; + BOOST_TEST(f(p) == p0); + } + { + auto p = p1; + BOOST_TEST(f(p) == p0); // truncates toward Zero + } + { + pixel_t p2; + gil::static_fill(p2, static_cast<channel_t>(2)); + BOOST_TEST(f(p2) == p1); + } +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_halves_t + +BOOST_AUTO_TEST_SUITE(pixel_zeros_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_zeros_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_zeros_t<pixel_t> f; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + { + auto p = p0; + BOOST_TEST(f(p) == p0); + } + { + fixture::consecutive_value<channel_t> g(1); + pixel_t p; + gil::static_generate(p, [&g]() { return g(); }); + BOOST_TEST(f(p) == p0); + } +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_zeros_t + +BOOST_AUTO_TEST_SUITE(zero_channels) + +BOOST_AUTO_TEST_CASE_TEMPLATE(zero_channels_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + + pixel_t p0; + gil::static_fill(p0, static_cast<channel_t>(0)); + { + auto p = p0; + gil::zero_channels(p); + BOOST_TEST(p == p0); + } + { + fixture::consecutive_value<channel_t> g(1); + pixel_t p; + gil::static_generate(p, [&g]() { return g(); }); + gil::zero_channels(p); + BOOST_TEST(p == p0); + } +} + +BOOST_AUTO_TEST_SUITE_END() // zero_channels + +BOOST_AUTO_TEST_SUITE(pixel_assigns_t) + +BOOST_AUTO_TEST_CASE_TEMPLATE(pixel_assigns_integer_same_types, pixel_t, fixture::pixel_integer_types) +{ + using channel_t = typename gil::channel_type<pixel_t>::type; + gil::pixel_assigns_t<pixel_t, pixel_t> f; + + { + pixel_t p0, r; + gil::static_fill(p0, static_cast<channel_t>(0)); + f(p0, r); + BOOST_TEST(p0 == r); + } + { + fixture::consecutive_value<channel_t> g(1); + pixel_t p, r; + gil::static_generate(p, [&g]() { return g(); }); + f(p, r); + BOOST_TEST(p == r); + } +} + +BOOST_AUTO_TEST_SUITE_END() // pixel_assigns_t diff --git a/src/boost/libs/gil/test/extension/numeric/test_fixture.hpp b/src/boost/libs/gil/test/extension/numeric/test_fixture.hpp new file mode 100644 index 00000000..bfd5cf6f --- /dev/null +++ b/src/boost/libs/gil/test/extension/numeric/test_fixture.hpp @@ -0,0 +1,30 @@ +// +// Copyright 2019 Mateusz Loskot <mateusz at loskot dot net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/numeric/kernel.hpp> +#include <boost/assert.hpp> + +#include <initializer_list> +#include <type_traits> + +namespace boost { namespace gil { + +namespace test { namespace fixture { + +template <typename T> +auto create_kernel(std::initializer_list<T> const& values) + -> gil::kernel_1d<T> +{ + static_assert(std::is_arithmetic<T>::value, + "kernel value type should be integral or floating-point type"); + BOOST_ASSERT_MSG((values.size() - 1) % 2 == 0, "expected odd number of kernel values"); + gil::kernel_1d<T> kernel(values.begin(), values.size(), (values.size() - 1) / 2); + return kernel; +} + +}}}} // namespace boost::gil::test::fixture diff --git a/src/boost/libs/gil/test/extension/toolbox/CMakeLists.txt b/src/boost/libs/gil/test/extension/toolbox/CMakeLists.txt new file mode 100644 index 00000000..7288f14b --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/CMakeLists.txt @@ -0,0 +1,49 @@ +# +# Copyright (c) 2017 Mateusz Loskot <mateusz at loskot dot net> +# All rights reserved. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) +# +message(STATUS "Boost.GIL: Configuring tests in test/extension/toolbox") + +foreach(_name + all) + set(_test t_ext_toolbox_${_name}) + set(_target test_ext_toolbox_${_name}) + + add_executable(${_target} "") + target_sources(${_target} + PRIVATE + test.cpp + channel_type.cpp + channel_view.cpp + cmyka.cpp + get_num_bits.cpp + get_pixel_type.cpp + gray_alpha.cpp + gray_to_rgba.cpp + hsl_hsv_test.cpp + indexed_image_test.cpp + is_bit_aligned.cpp + is_homogeneous.cpp + is_similar.cpp + lab_test.cpp + pixel_bit_size.cpp + rgb_to_luminance.cpp + # TODO: Add subchroma_image.cpp after fixing run-time failure, + # for details see https://github.com/boostorg/gil/pull/164 + #subchroma_image.cpp + xyz_test.cpp) + target_link_libraries(${_target} + PRIVATE + gil_compile_options + gil_include_directories + gil_dependencies) + add_test(NAME ${_test} COMMAND ${_target}) + + unset(_name) + unset(_target) + unset(_test) +endforeach() diff --git a/src/boost/libs/gil/test/extension/toolbox/Jamfile b/src/boost/libs/gil/test/extension/toolbox/Jamfile new file mode 100644 index 00000000..3f6c3fc2 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/Jamfile @@ -0,0 +1,40 @@ +# Boost.GIL (Generic Image Library) - Toolbox tests +# +# Copyright (c) 2012 Christian Henning +# Copyright (c) 2012 Mateusz Loskot <mateusz@loskot.net> +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +import testing ; + +project + : requirements + <library>/boost/test//boost_unit_test_framework + <link>shared:<define>BOOST_TEST_DYN_LINK=1 + ; + +alias headers : [ generate_self_contained_headers extension/toolbox ] ; + +run + test.cpp + channel_type.cpp + channel_view.cpp + cmyka.cpp + get_num_bits.cpp + get_pixel_type.cpp + gray_alpha.cpp + gray_to_rgba.cpp + hsl_hsv_test.cpp + indexed_image_test.cpp + is_bit_aligned.cpp + is_homogeneous.cpp + is_similar.cpp + lab_test.cpp + pixel_bit_size.cpp + rgb_to_luminance.cpp + # TODO: Add subchroma_image.cpp after fixing run-time failure, + # for details see https://github.com/boostorg/gil/pull/164 + #subchroma_image.cpp + xyz_test.cpp + ; diff --git a/src/boost/libs/gil/test/extension/toolbox/channel_type.cpp b/src/boost/libs/gil/test/extension/toolbox/channel_type.cpp new file mode 100644 index 00000000..35f98f15 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/channel_type.cpp @@ -0,0 +1,43 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil/extension/toolbox/metafunctions/channel_type.hpp> +#include <boost/gil/extension/toolbox/metafunctions/is_bit_aligned.hpp> + +#include <boost/gil/channel.hpp> +#include <boost/gil/detail/is_channel_integral.hpp> + +#include <boost/test/unit_test.hpp> + +#include <type_traits> + +namespace bg = boost::gil; + +BOOST_AUTO_TEST_SUITE(toolbox_tests) + +BOOST_AUTO_TEST_CASE(channel_type_test) +{ + static_assert(std::is_same + < + unsigned char, + bg::channel_type<bg::rgb8_pixel_t>::type + >::value, ""); + + // float32_t is a scoped_channel_value object + static_assert(std::is_same + < + bg::float32_t, + bg::channel_type<bg::rgba32f_pixel_t>::type + >::value, ""); + + // channel_type for bit_aligned images doesn't work with standard gil. + using image_t = bg::bit_aligned_image4_type<4, 4, 4, 4, bg::rgb_layout_t>::type; + using channel_t = bg::channel_type<image_t::view_t::reference>::type; + static_assert(bg::detail::is_channel_integral<channel_t>::value, ""); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/channel_view.cpp b/src/boost/libs/gil/test/extension/toolbox/channel_view.cpp new file mode 100644 index 00000000..c4193043 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/channel_view.cpp @@ -0,0 +1,43 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/channel_view.hpp> + +#include <boost/test/unit_test.hpp> + +#include <type_traits> + +namespace bg = boost::gil; + +BOOST_AUTO_TEST_SUITE(toolbox_tests) + +BOOST_AUTO_TEST_CASE(channel_view_test) +{ + using image_t = bg::rgb8_image_t; + image_t img(100, 100); + + using kth_channel_view_t + = bg::kth_channel_view_type<0, bg::rgb8_view_t::const_t>::type; + using channel_view_t + = bg::channel_view_type<bg::red_t, bg::rgb8_view_t::const_t>::type; + + static_assert(std::is_same + < + kth_channel_view_t, + channel_view_t + >::value, + ""); + + kth_channel_view_t const kth0 = bg::kth_channel_view<0>(bg::const_view(img)); + BOOST_TEST(kth0.num_channels() == 1u); + + channel_view_t const red = bg::channel_view<bg::red_t>(bg::const_view(img)); + BOOST_TEST(red.num_channels() == 1u); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/cmyka.cpp b/src/boost/libs/gil/test/extension/toolbox/cmyka.cpp new file mode 100644 index 00000000..bcabff23 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/cmyka.cpp @@ -0,0 +1,30 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil/extension/toolbox/color_spaces/cmyka.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( cmyka_test ) +{ + cmyka8_pixel_t a( 10, 20, 30, 40, 50 ); + rgba8_pixel_t b; + cmyka8_pixel_t c; + + color_convert( a, b ); + + // no rgba to cmyka conversion implemented + //color_convert( b, c ); + //BOOST_ASSERT( at_c<0>(a) == at_c<0>(c) ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/fabscript b/src/boost/libs/gil/test/extension/toolbox/fabscript new file mode 100644 index 00000000..6f52f82e --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/fabscript @@ -0,0 +1,44 @@ +# -*- python -*- +# +# Copyright (c) 2017 Stefan Seefeld +# All rights reserved. +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +from faber import platform +from faber.feature import set +from faber.tools.compiler import define, libs, linkpath +from faber.artefacts.binary import binary +from faber.test import test, report, fail +from os.path import join + +boost_suffix = options.get_with('boost-suffix') +boost_suffix = '-' + boost_suffix if boost_suffix else '' +boost_unit_test_framework = 'boost_unit_test_framework' + boost_suffix +boost_filesystem = 'boost_filesystem' + boost_suffix +boost_system = 'boost_system' + boost_suffix + +test_features = set(define('BOOST_TEST_DYN_LINK'), + libs(boost_unit_test_framework, + boost_system, + boost_filesystem)) + + +def gil_test(name, sources, features, condition=True): + return test(name, binary(name, sources, features=features, condition=condition)) + + +# TODO: Add `subchroma_image.cpp` after fixing run-time failure, +# for details see https://github.com/boostorg/gil/pull/164 +tests = [gil_test('toolbox', + ['test.cpp', 'channel_type.cpp', 'channel_view.cpp', 'cmyka.cpp', + 'get_num_bits.cpp', 'get_pixel_type.cpp', 'gray_alpha.cpp', 'gray_to_rgba.cpp', + 'hsl_hsv_test.cpp', 'indexed_image_test.cpp', 'is_bit_aligned.cpp', + 'is_homogeneous.cpp', 'is_similar.cpp', 'lab_test.cpp', 'pixel_bit_size.cpp', + 'rgb_to_luminance.cpp', 'xyz_test.cpp'], + features=test_features), +] + +default = report('report', tests, fail_on_failures=True) diff --git a/src/boost/libs/gil/test/extension/toolbox/get_num_bits.cpp b/src/boost/libs/gil/test/extension/toolbox/get_num_bits.cpp new file mode 100644 index 00000000..9b9ab9d5 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/get_num_bits.cpp @@ -0,0 +1,41 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/channel_type.hpp> +#include <boost/gil/extension/toolbox/metafunctions/get_num_bits.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( get_num_bits_test ) +{ + using image_t = bit_aligned_image4_type<4, 4, 4, 4, rgb_layout_t>::type; + + using channel_t = channel_type<image_t::view_t::reference>::type; + static_assert(get_num_bits<channel_t>::value == 4, ""); + + using const_channel_t = channel_type<image_t::const_view_t::reference>::type; + static_assert(get_num_bits<const_channel_t>::value == 4, ""); + + using bits_t = packed_channel_value<23>; + static_assert(get_num_bits<bits_t>::value == 23, ""); + static_assert(get_num_bits<bits_t const>::value == 23, ""); + + static_assert(get_num_bits<unsigned char >::value == 8, ""); + static_assert(get_num_bits<unsigned char const>::value == 8, ""); + + static_assert(get_num_bits<channel_type<gray8_image_t::view_t::value_type>::type>::value == 8, ""); + static_assert(get_num_bits<channel_type<rgba32_image_t::view_t::value_type>::type>::value == 32, ""); +} + +BOOST_AUTO_TEST_SUITE_END() + diff --git a/src/boost/libs/gil/test/extension/toolbox/get_pixel_type.cpp b/src/boost/libs/gil/test/extension/toolbox/get_pixel_type.cpp new file mode 100644 index 00000000..d0dc57ab --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/get_pixel_type.cpp @@ -0,0 +1,41 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/get_pixel_type.hpp> + +#include <boost/test/unit_test.hpp> + +#include <type_traits> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( get_pixel_type_test ) +{ + { + using image_t = bit_aligned_image3_type<4, 15, 4, rgb_layout_t>::type; + static_assert(std::is_same + < + get_pixel_type<image_t::view_t>::type, + image_t::view_t::reference + >::value, ""); + } + + { + using image_t = rgb8_image_t; + static_assert(std::is_same + < + get_pixel_type<image_t::view_t>::type, + image_t::view_t::value_type + >::value, ""); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/gray_alpha.cpp b/src/boost/libs/gil/test/extension/toolbox/gray_alpha.cpp new file mode 100644 index 00000000..67e4c1dc --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/gray_alpha.cpp @@ -0,0 +1,43 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil/extension/toolbox/color_spaces/gray_alpha.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( gray_alpha_test ) +{ + { + gray_alpha8_pixel_t a( 10, 20 ); + gray8_pixel_t b; + + color_convert( a, b ); + } + + { + gray_alpha8_pixel_t a( 10, 20 ); + rgb8_pixel_t b; + gray_alpha8_pixel_t c; + + color_convert( a, b ); + } + + { + gray_alpha8_pixel_t a( 10, 20 ); + rgba8_pixel_t b; + gray_alpha8_pixel_t c; + + color_convert( a, b ); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/gray_to_rgba.cpp b/src/boost/libs/gil/test/extension/toolbox/gray_to_rgba.cpp new file mode 100644 index 00000000..378f39ef --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/gray_to_rgba.cpp @@ -0,0 +1,26 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/test/unit_test.hpp> + +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/color_converters/gray_to_rgba.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( gray_to_rgba_test ) +{ + gray8_pixel_t a( 45 ); + rgba8_pixel_t b; + + color_convert( a, b ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/hsl_hsv_test.cpp b/src/boost/libs/gil/test/extension/toolbox/hsl_hsv_test.cpp new file mode 100644 index 00000000..9027c344 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/hsl_hsv_test.cpp @@ -0,0 +1,75 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/color_spaces/hsl.hpp> +#include <boost/gil/extension/toolbox/color_spaces/hsv.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( hsl_hsv_test ) +{ + { + rgb8_pixel_t p( 128, 0, 128 ); + + hsl32f_pixel_t h; + + color_convert( p, h ); + color_convert( h, p ); + } + + { + size_t width = 640; + size_t height = 480; + + hsl32f_image_t hsl_img( width, height ); + hsv32f_image_t hsv_img( width, height ); + + for( size_t y = 0; y < height; y++ ) + { + hsl32f_view_t::x_iterator hsl_x_it = view( hsl_img ).row_begin( y ); + hsv32f_view_t::x_iterator hsv_x_it = view( hsv_img ).row_begin( y ); + + float v = static_cast<float>( height - y ) + / height; + + for( size_t x = 0; x < width; x++ ) + { + float hue = ( x + 1.f ) / width; + + hsl_x_it[x] = hsl32f_pixel_t( hue, 1.0, v ); + hsv_x_it[x] = hsv32f_pixel_t( hue, 1.0, v ); + } + } + } + + { + rgb8_image_t rgb_img( 640, 480 ); + fill_pixels( view(rgb_img), rgb8_pixel_t( 255, 128, 64 )); + hsl32f_image_t hsl_img( view( rgb_img ).dimensions() ); + + copy_pixels( color_converted_view<hsl32f_pixel_t>( view( rgb_img )) + , view( hsl_img )); + } + + { + rgb8_image_t rgb_img( 640, 480 ); + fill_pixels( view(rgb_img), rgb8_pixel_t( 255, 128, 64 )); + hsv32f_image_t hsv_img( view( rgb_img ).dimensions() ); + + copy_pixels( color_converted_view<hsv32f_pixel_t>( view( rgb_img )) + , view( hsv_img )); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/indexed_image_test.cpp b/src/boost/libs/gil/test/extension/toolbox/indexed_image_test.cpp new file mode 100644 index 00000000..f546fa07 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/indexed_image_test.cpp @@ -0,0 +1,150 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/image_types/indexed_image.hpp> + +#include <boost/assert.hpp> +#include <boost/test/unit_test.hpp> + +#include <cstdint> + +namespace bg = boost::gil; + +BOOST_AUTO_TEST_SUITE(toolbox_tests) + +BOOST_AUTO_TEST_CASE(index_image_test) +{ + auto const pixel_generator = []() -> bg::rgb8_pixel_t { + static int i = 0; + i = (i > 255) ? 0 : (i + 1); + auto const i8 = static_cast<std::uint8_t>(i); + return bg::rgb8_pixel_t(i8, i8, i8); + }; + + { + bg::indexed_image<std::uint8_t, bg::rgb8_pixel_t> img(640, 480); + bg::fill_pixels(bg::view(img), bg::rgb8_pixel_t(255, 0, 0)); + + bg::rgb8_pixel_t const p = *bg::view(img).xy_at(10, 10); + BOOST_TEST(p[0] == 255); + } + { + using image_t = bg::indexed_image<bg::gray8_pixel_t, bg::rgb8_pixel_t>; + image_t img(640, 480, 256); + + generate_pixels(img.get_indices_view(), []() -> bg::gray8_pixel_t + { + static int i = 0; + i = (i > 255) ? 0 : (i + 1); + auto const i8 = static_cast<std::uint8_t>(i); + return bg::gray8_pixel_t(i8); + }); + generate_pixels(img.get_palette_view(), pixel_generator); + + bg::gray8_pixel_t index{0}; + index = *img.get_indices_view().xy_at(0, 0); // verify values along first row + BOOST_TEST(static_cast<int>(index) == (0 + 1)); + index = *img.get_indices_view().xy_at(128, 0); + BOOST_TEST(static_cast<int>(index) == (128 + 1)); + // verify wrapping of value by the pixels generator above + index = *img.get_indices_view().xy_at(255, 0); + BOOST_TEST(static_cast<int>(index) == 0); + + // access via member function + bg::rgb8_pixel_t const pixel1 = *img.get_palette_view().xy_at(index, 0); + BOOST_TEST(pixel1[0] == pixel1[1]); + BOOST_TEST(pixel1[1] == pixel1[2]); + + // access via free function + bg::rgb8_pixel_t const pixel2 = *bg::view(img).xy_at(10, 1); + BOOST_TEST(pixel2[0] == pixel2[1]); + BOOST_TEST(pixel2[1] == pixel2[2]); + } + { + using image_t = bg::indexed_image<bg::gray8_pixel_t, bg::rgb8_pixel_t>; + image_t img(640, 480, 256); + + generate_pixels(img.get_indices_view(), []() -> uint8_t + { + static int i = 0; + i = (i > 255) ? 0 : (i + 1); + return static_cast<std::uint8_t>(i); + }); + generate_pixels(img.get_palette_view(), pixel_generator); + + std::uint8_t index = *img.get_indices_view().xy_at(128, 0); + BOOST_TEST(static_cast<int>(index) == (128 + 1)); + + bg::rgb8_pixel_t const pixel1 = *img.get_palette_view().xy_at(index, 0); + BOOST_TEST(pixel1[0] == pixel1[1]); + BOOST_TEST(pixel1[1] == pixel1[2]); + + bg::rgb8_pixel_t const pixel2 = *view(img).xy_at(10, 1); + BOOST_TEST(pixel2[0] == pixel2[1]); + BOOST_TEST(pixel2[1] == pixel2[2]); + } + { + using image_t = bg::indexed_image<std::uint8_t, bg::rgb8_pixel_t>; + image_t img(640, 480, 256); + + for (image_t::y_coord_t y = 0; y < bg::view(img).height(); ++y) + { + image_t::view_t::x_iterator it = bg::view(img).row_begin(y); + for (image_t::x_coord_t x = 0; x < bg::view(img).width(); ++x) + { + bg::rgb8_pixel_t p = *it; + boost::ignore_unused(p); + it++; + } + } + + // TODO: No checks? ~mloskot + } +} + +BOOST_AUTO_TEST_CASE(index_image_view_test) +{ + // generate some data + std::size_t const width = 640; + std::size_t const height = 480; + std::size_t const num_colors = 3; + std::uint8_t const index = 2; + + // indices + std::vector<std::uint8_t> indices(width * height, index); + + // colors + std::vector<bg::rgb8_pixel_t> palette(num_colors); + palette[0] = bg::rgb8_pixel_t(10, 20, 30); + palette[1] = bg::rgb8_pixel_t(40, 50, 60); + palette[2] = bg::rgb8_pixel_t(70, 80, 90); + + // create image views from raw memory + auto indices_view = bg::interleaved_view(width, height, + (bg::gray8_image_t::view_t::x_iterator) indices.data(), + width); // row size in bytes + + auto palette_view = bg::interleaved_view(100, 1, + (bg::rgb8_image_t::view_t::x_iterator) palette.data(), + num_colors * 3); // row size in bytes + + auto ii_view = bg::view(indices_view, palette_view); + + auto p = ii_view(bg::point_t(0, 0)); + auto q = *ii_view.at(bg::point_t(0, 0)); + + BOOST_ASSERT(bg::get_color(p, bg::red_t()) == 70); + BOOST_ASSERT(bg::get_color(p, bg::green_t()) == 80); + BOOST_ASSERT(bg::get_color(p, bg::blue_t()) == 90); + + BOOST_ASSERT(bg::get_color(q, bg::red_t()) == 70); + BOOST_ASSERT(bg::get_color(q, bg::green_t()) == 80); + BOOST_ASSERT(bg::get_color(q, bg::blue_t()) == 90); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/is_bit_aligned.cpp b/src/boost/libs/gil/test/extension/toolbox/is_bit_aligned.cpp new file mode 100644 index 00000000..57c82661 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/is_bit_aligned.cpp @@ -0,0 +1,24 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/is_bit_aligned.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( is_bit_aligned_test ) +{ + using image_t = bit_aligned_image1_type< 4, gray_layout_t>::type; + static_assert(is_bit_aligned<image_t::view_t::value_type>::value, ""); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/is_homogeneous.cpp b/src/boost/libs/gil/test/extension/toolbox/is_homogeneous.cpp new file mode 100644 index 00000000..0e3dd5de --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/is_homogeneous.cpp @@ -0,0 +1,28 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/is_homogeneous.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( is_homogeneous_test ) +{ + static_assert(is_homogeneous<rgb8_pixel_t>::value, ""); + + static_assert(is_homogeneous<cmyk16c_planar_ref_t>::value, ""); + + using image_t = bit_aligned_image1_type< 4, gray_layout_t>::type; + static_assert(is_homogeneous<image_t::view_t::reference>::value, ""); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/is_similar.cpp b/src/boost/libs/gil/test/extension/toolbox/is_similar.cpp new file mode 100644 index 00000000..bfc7a9a6 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/is_similar.cpp @@ -0,0 +1,23 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/is_similar.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( is_similar_test ) +{ + // TODO: fill the test +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/lab_test.cpp b/src/boost/libs/gil/test/extension/toolbox/lab_test.cpp new file mode 100644 index 00000000..8f891cee --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/lab_test.cpp @@ -0,0 +1,185 @@ +// +// Copyright 2013 Christian Henning +// Copyright 2013 Davide Anastasia <davideanastasia@users.sourceforge.net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/color_spaces/lab.hpp> + +#if defined(BOOST_CLANG) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wfloat-equal" +#endif + +#if defined(BOOST_GCC) && (BOOST_GCC >= 40900) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + +#include <boost/test/unit_test.hpp> + +#if defined(BOOST_CLANG) +#pragma clang diagnostic pop +#endif + +#if defined(BOOST_GCC) && (BOOST_GCC >= 40900) +#pragma GCC diagnostic pop +#endif + +#include <iostream> + +using namespace boost; + +#define TEST_CHECK_CLOSE(a, b) \ + BOOST_CHECK_CLOSE(a, b, 0.0005f) + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( Lab_to_XYZ_Test1 ) +{ + gil::lab32f_pixel_t lab_pixel(40.366198f, 53.354489f, 26.117702f); + gil::xyz32f_pixel_t xyz_pixel; + + gil::color_convert(lab_pixel, xyz_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(xyz_pixel[0]), 0.197823f); + TEST_CHECK_CLOSE(static_cast<float>(xyz_pixel[1]), 0.114731f); + TEST_CHECK_CLOSE(static_cast<float>(xyz_pixel[2]), 0.048848f); +} + +BOOST_AUTO_TEST_CASE(Lab_to_XYZ_Test2) +{ + gil::lab32f_pixel_t lab_pixel(50, 0, 0); + gil::xyz32f_pixel_t xyz_pixel; + + gil::color_convert(lab_pixel, xyz_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(xyz_pixel[0]), 0.175064f); + TEST_CHECK_CLOSE(static_cast<float>(xyz_pixel[1]), 0.184187f); + TEST_CHECK_CLOSE(static_cast<float>(xyz_pixel[2]), 0.200548f); +} + +BOOST_AUTO_TEST_CASE(XYZ_to_Lab_Test1) +{ + gil::lab32f_pixel_t lab_pixel; + gil::xyz32f_pixel_t xyz_pixel(0.085703f, 0.064716f, 0.147082f); + + gil::color_convert(xyz_pixel, lab_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[0]), 30.572438f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[1]), 23.4674f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[2]), -22.322275f); +} + +BOOST_AUTO_TEST_CASE(RGB_to_Lab_Test1) +{ + gil::rgb32f_pixel_t rgb_pixel(0.75f, 0.5f, 0.25f); + gil::lab32f_pixel_t lab_pixel; + + gil::color_convert(rgb_pixel, lab_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[0]), 58.7767f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[1]), 18.5851f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[2]), 43.7975f); +} + +BOOST_AUTO_TEST_CASE(RGB_to_Lab_Test2) +{ + gil::rgb32f_pixel_t rgb_pixel(1.f, 0.f, 0.f); + gil::lab32f_pixel_t lab_pixel; + + gil::color_convert(rgb_pixel, lab_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[0]), 53.2408f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[1]), 80.0925f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[2]), 67.2032f); +} + +BOOST_AUTO_TEST_CASE(RGB_to_Lab_Test3) +{ + gil::rgb32f_pixel_t rgb_pixel(0.f, 1.f, 0.f); + gil::lab32f_pixel_t lab_pixel; + + gil::color_convert(rgb_pixel, lab_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[0]), 87.7347f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[1]), -86.1827f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[2]), 83.1793f); +} + +BOOST_AUTO_TEST_CASE(RGB_to_Lab_Test4) +{ + gil::rgb32f_pixel_t rgb_pixel(0.f, 0.f, 1.f); + gil::lab32f_pixel_t lab_pixel; + + gil::color_convert(rgb_pixel, lab_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[0]), 32.2970f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[1]), 79.1875f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[2]), -107.8602f); +} + +BOOST_AUTO_TEST_CASE(RGB_to_Lab_Test5) +{ + gil::rgb32f_pixel_t rgb_pixel(1.f, 1.f, 1.f); + gil::lab32f_pixel_t lab_pixel; + + gil::color_convert(rgb_pixel, lab_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[0]), 100.f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[1]), 0.f); + TEST_CHECK_CLOSE(static_cast<float>(lab_pixel[2]), 0.f); +} + +BOOST_AUTO_TEST_CASE(Lab_to_RGB_Test1) +{ + gil::lab32f_pixel_t lab_pixel(75.f, 20.f, 40.f); + gil::rgb32f_pixel_t rgb_pixel; + + gil::color_convert(lab_pixel, rgb_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[0]), 0.943240f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[1]), 0.663990f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[2]), 0.437893f); +} + +BOOST_AUTO_TEST_CASE(Lab_to_RGB_Test2) +{ + gil::lab32f_pixel_t lab_pixel(100.f, 0.f, 0.f); + gil::rgb32f_pixel_t rgb_pixel; + + gil::color_convert(lab_pixel, rgb_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[0]), 1.f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[1]), 1.f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[2]), 1.f); +} + +BOOST_AUTO_TEST_CASE(Lab_to_RGB_Test3) +{ + gil::lab32f_pixel_t lab_pixel(56.8140f, -42.3665f, 10.6728f); + gil::rgb32f_pixel_t rgb_pixel; + + gil::color_convert(lab_pixel, rgb_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[0]), 0.099999f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[1]), 0.605568f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[2]), 0.456662f); +} + +BOOST_AUTO_TEST_CASE(Lab_to_RGB_Test4) +{ + gil::lab32f_pixel_t lab_pixel(50.5874f, 4.0347f, 50.5456f); + gil::rgb32f_pixel_t rgb_pixel; + + gil::color_convert(lab_pixel, rgb_pixel); + + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[0]), 0.582705f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[1]), 0.454891f); + TEST_CHECK_CLOSE(static_cast<float>(rgb_pixel[2]), 0.1f); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/pixel_bit_size.cpp b/src/boost/libs/gil/test/extension/toolbox/pixel_bit_size.cpp new file mode 100644 index 00000000..0308a736 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/pixel_bit_size.cpp @@ -0,0 +1,27 @@ +// +// Copyright 2013 Christian Henning +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/metafunctions/pixel_bit_size.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( pixel_bit_size_test ) +{ + using image_t = bit_aligned_image5_type + < + 16, 16, 16, 8, 8, devicen_layout_t<5> + >::type; + static_assert(pixel_bit_size<image_t::view_t::reference>::value == 64, ""); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/rgb_to_luminance.cpp b/src/boost/libs/gil/test/extension/toolbox/rgb_to_luminance.cpp new file mode 100644 index 00000000..2ccf8a30 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/rgb_to_luminance.cpp @@ -0,0 +1,33 @@ +// +// Copyright 2013 Christian Henning +// Copyright 2013 Davide Anastasia <davideanastasia@users.sourceforge.net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/color_converters/rgb_to_luminance.hpp> + +#include <boost/test/unit_test.hpp> + +using namespace boost; +using namespace gil; + +struct double_zero { static double apply() { return 0.0; } }; +struct double_one { static double apply() { return 1.0; } }; + +using gray64f_pixel_t = pixel<double, gray_layout_t>; +using rgb64f_pixel_t = pixel<double, rgb_layout_t >; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( rgb_to_luminance_test ) +{ + rgb64f_pixel_t a( 10, 20, 30 ); + gray64f_pixel_t b; + + color_convert( a, b ); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/subchroma_image.cpp b/src/boost/libs/gil/test/extension/toolbox/subchroma_image.cpp new file mode 100644 index 00000000..b3949377 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/subchroma_image.cpp @@ -0,0 +1,107 @@ +// Copyright 2013 Christian Henning +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +/// \brief Unit test for subchroma_image type. + +#include <boost/test/unit_test.hpp> + +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/color_spaces/ycbcr.hpp> +#include <boost/gil/extension/toolbox/image_types/subchroma_image.hpp> + +#include <boost/mp11.hpp> + +using namespace std; +using namespace boost; +using namespace gil; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE( subchroma_image_test ) +{ + { + ycbcr_601_8_pixel_t a( 10, 20, 30 ); + rgb8_pixel_t b; + bgr8_pixel_t c; + + color_convert( a, b ); + color_convert( a, c ); + BOOST_ASSERT( static_equal( b, c )); + + color_convert( b, a ); + } + + { + ycbcr_709_8_pixel_t a( 10, 20, 30 ); + rgb8_pixel_t b; + bgr8_pixel_t c; + + color_convert( a, b ); + color_convert( a, c ); + BOOST_ASSERT( static_equal( b, c )); + + color_convert( b, a ); + } + + { + using pixel_t = rgb8_pixel_t; + using image_t = subchroma_image<pixel_t>; + + image_t img( 640, 480 ); + + fill_pixels( view( img ) + , pixel_t( 10, 20, 30 ) + ); + } + + { + using pixel_t = rgb8_pixel_t; + + subchroma_image<pixel_t, mp11::mp_list_c<int, 4, 4, 4>> a(640, 480); + static_assert(a.ss_X == 1 && a.ss_Y == 1, ""); + subchroma_image<pixel_t, mp11::mp_list_c<int, 4, 4, 0>> b(640, 480); + static_assert(b.ss_X == 1 && b.ss_Y == 2, ""); + subchroma_image<pixel_t, mp11::mp_list_c<int, 4, 2, 2>> c(640, 480); + static_assert(c.ss_X == 2 && c.ss_Y == 1, ""); + subchroma_image<pixel_t, mp11::mp_list_c<int, 4, 2, 0>> d(640, 480); + static_assert(d.ss_X == 2 && d.ss_Y == 2, ""); + subchroma_image<pixel_t, mp11::mp_list_c<int, 4, 1, 1>> e(640, 480); + static_assert(e.ss_X == 4 && e.ss_Y == 1, ""); + subchroma_image<pixel_t, mp11::mp_list_c<int, 4, 1, 0>> f(640, 480); + static_assert(f.ss_X == 4 && f.ss_Y == 2, ""); + + fill_pixels( view( a ), pixel_t( 10, 20, 30 ) ); + fill_pixels( view( b ), pixel_t( 10, 20, 30 ) ); + fill_pixels( view( c ), pixel_t( 10, 20, 30 ) ); + fill_pixels( view( d ), pixel_t( 10, 20, 30 ) ); + fill_pixels( view( e ), pixel_t( 10, 20, 30 ) ); + fill_pixels( view( f ), pixel_t( 10, 20, 30 ) ); + + } + + { + using pixel_t = ycbcr_601_8_pixel_t; + using factors_t = mp11::mp_list_c<int, 4, 2, 2>; + using image_t = subchroma_image<pixel_t, factors_t>; + + std::size_t y_width = 640; + std::size_t y_height = 480; + + std::size_t image_size = ( y_width * y_height ) + + ( y_width / image_t::ss_X ) * ( y_height / image_t::ss_Y ) + + ( y_width / image_t::ss_X ) * ( y_height / image_t::ss_Y ); + + vector< unsigned char > data( image_size ); + + image_t::view_t v = subchroma_view< pixel_t, factors_t >( y_width + , y_height + , &data.front() + ); + rgb8_pixel_t p; + p = *v.xy_at( 0, 0 ); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/boost/libs/gil/test/extension/toolbox/test.cpp b/src/boost/libs/gil/test/extension/toolbox/test.cpp new file mode 100644 index 00000000..8034bf67 --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/test.cpp @@ -0,0 +1,2 @@ +#define BOOST_TEST_MAIN +#include <boost/test/unit_test.hpp> diff --git a/src/boost/libs/gil/test/extension/toolbox/xyz_test.cpp b/src/boost/libs/gil/test/extension/toolbox/xyz_test.cpp new file mode 100644 index 00000000..26f0cebb --- /dev/null +++ b/src/boost/libs/gil/test/extension/toolbox/xyz_test.cpp @@ -0,0 +1,193 @@ +// +// Copyright 2013 Christian Henning +// Copyright 2013 Davide Anastasia <davideanastasia@users.sourceforge.net> +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +#include <boost/gil.hpp> +#include <boost/gil/extension/toolbox/color_spaces/xyz.hpp> + +#include <boost/test/unit_test.hpp> + +#include <cstdint> +#include <iostream> +#include <limits> + +using namespace boost; +using namespace std; + +const float SKEW = 0.0001f; + +BOOST_AUTO_TEST_SUITE( toolbox_tests ) + +BOOST_AUTO_TEST_CASE(rgb32f_xyz32f_1) +{ + gil::xyz32f_pixel_t xyz32f; + gil::rgb32f_pixel_t p32f(.934351f, 0.785446f, .105858f), p32f_b; + gil::color_convert(p32f, xyz32f); + gil::color_convert(xyz32f, p32f_b); + + BOOST_TEST_MESSAGE( p32f[0] << " " + << p32f[1] << " " + << p32f[2] << " -> " + << xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << p32f_b[0] << " " + << p32f_b[1] << " " + << p32f_b[2] ); + + BOOST_CHECK( abs(p32f[0] - p32f_b[0]) < SKEW ); + BOOST_CHECK( abs(p32f[1] - p32f_b[1]) < SKEW ); + BOOST_CHECK( abs(p32f[2] - p32f_b[2]) < SKEW ); + BOOST_CHECK( abs( xyz32f[0] - 0.562669) < SKEW ); + BOOST_CHECK( abs( xyz32f[1] - 0.597462) < SKEW ); + BOOST_CHECK( abs( xyz32f[2] - 0.096050) < SKEW ); +} + +BOOST_AUTO_TEST_CASE(rgb32f_xyz32f_2) +{ + gil::xyz32f_pixel_t xyz32f; + gil::rgb32f_pixel_t p32f(.694617f, 0.173810f, 0.218710f), p32f_b; + gil::color_convert(p32f, xyz32f); + gil::color_convert(xyz32f, p32f_b); + + BOOST_TEST_MESSAGE( p32f[0] << " " + << p32f[1] << " " + << p32f[2] << " -> " + << xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << p32f_b[0] << " " + << p32f_b[1] << " " + << p32f_b[2] ); + + BOOST_CHECK( abs(p32f[0] - p32f_b[0]) < SKEW ); + BOOST_CHECK( abs(p32f[1] - p32f_b[1]) < SKEW ); + BOOST_CHECK( abs(p32f[2] - p32f_b[2]) < SKEW ); + BOOST_CHECK( abs( xyz32f[0] - 0.197823) < SKEW ); + BOOST_CHECK( abs( xyz32f[1] - 0.114731) < SKEW ); + BOOST_CHECK( abs( xyz32f[2] - 0.048848) < SKEW ); +} + +BOOST_AUTO_TEST_CASE(xyz32f_rgb32f_1) +{ + gil::xyz32f_pixel_t xyz32f(.332634f, .436288f, .109853f), xyz32f_b; + gil::rgb32f_pixel_t p32f; + gil::color_convert(xyz32f, p32f); + gil::color_convert(p32f, xyz32f_b); + + BOOST_TEST_MESSAGE( xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << p32f[0] << " " + << p32f[1] << " " + << p32f[2] << " -> " + << xyz32f_b[0] << " " + << xyz32f_b[1] << " " + << xyz32f_b[2] ); + + BOOST_CHECK( abs(xyz32f_b[0] - xyz32f[0]) < SKEW ); + BOOST_CHECK( abs(xyz32f_b[1] - xyz32f[1]) < SKEW ); + BOOST_CHECK( abs(xyz32f_b[2] - xyz32f[2]) < SKEW ); + BOOST_CHECK( abs( p32f[0] - 0.628242) < SKEW ); + BOOST_CHECK( abs( p32f[1] - 0.735771) < SKEW ); + BOOST_CHECK( abs( p32f[2] - 0.236473) < SKEW ); +} + +BOOST_AUTO_TEST_CASE(xyz32f_rgb32f_2) +{ + gil::xyz32f_pixel_t xyz32f(.375155f, .352705f, .260025f), xyz32f_b; + gil::rgb32f_pixel_t p32f; + gil::color_convert(xyz32f, p32f); + gil::color_convert(p32f, xyz32f_b); + + BOOST_TEST_MESSAGE( xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << p32f[0] << " " + << p32f[1] << " " + << p32f[2] << " -> " + << xyz32f_b[0] << " " + << xyz32f_b[1] << " " + << xyz32f_b[2] ); + + BOOST_CHECK( abs(xyz32f_b[0] - xyz32f[0]) < SKEW ); + BOOST_CHECK( abs(xyz32f_b[1] - xyz32f[1]) < SKEW ); + BOOST_CHECK( abs(xyz32f_b[2] - xyz32f[2]) < SKEW ); + BOOST_CHECK( abs( p32f[0] - 0.763580) < SKEW ); + BOOST_CHECK( abs( p32f[1] - 0.591622) < SKEW ); + BOOST_CHECK( abs( p32f[2] - 0.510392) < SKEW ); +} + +BOOST_AUTO_TEST_CASE(rgb8u_xyz32f_1) +{ + gil::xyz32f_pixel_t xyz32f; + gil::rgb8_pixel_t p8u(177, 44, 56), p8u_b; + gil::color_convert(p8u, xyz32f); + gil::color_convert(xyz32f, p8u_b); + + BOOST_TEST_MESSAGE( static_cast<int>(p8u[0]) << " " + << static_cast<int>(p8u[1]) << " " + << static_cast<int>(p8u[2]) << " -> " + << xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << static_cast<int>(p8u_b[0]) << " " + << static_cast<int>(p8u_b[1]) << " " + << static_cast<int>(p8u_b[2]) ); + + BOOST_CHECK(p8u[0] == p8u_b[0]); + BOOST_CHECK(p8u[1] == p8u_b[1]); + BOOST_CHECK(p8u[2] == p8u_b[2]); +} + +BOOST_AUTO_TEST_CASE(rgb8u_xyz32f_2) +{ + gil::xyz32f_pixel_t xyz32f; + gil::rgb8_pixel_t p8u(72, 90, 165), p8u_b; + gil::color_convert(p8u, xyz32f); + gil::color_convert(xyz32f, p8u_b); + + BOOST_TEST_MESSAGE( + static_cast<int>(p8u[0]) << " " + << static_cast<int>(p8u[1]) << " " + << static_cast<int>(p8u[2]) << " -> " + << xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << static_cast<int>(p8u_b[0]) << " " + << static_cast<int>(p8u_b[1]) << " " + << static_cast<int>(p8u_b[2]) ); + + BOOST_CHECK(p8u[0] == p8u_b[0]); + BOOST_CHECK(p8u[1] == p8u_b[1]); + BOOST_CHECK(p8u[2] == p8u_b[2]); +} + +BOOST_AUTO_TEST_CASE(rgb16u_xyz32f_1) +{ + gil::xyz32f_pixel_t xyz32f; + gil::rgb16_pixel_t p16u(12564, 20657, 200), p16u_b; + gil::color_convert(p16u, xyz32f); + gil::color_convert(xyz32f, p16u_b); + + BOOST_TEST_MESSAGE( + static_cast<int>(p16u[0]) << " " + << static_cast<int>(p16u[1]) << " " + << static_cast<int>(p16u[2]) << " -> " + << xyz32f[0] << " " + << xyz32f[1] << " " + << xyz32f[2] << " -> " + << static_cast<int>(p16u_b[0]) << " " + << static_cast<int>(p16u_b[1]) << " " + << static_cast<int>(p16u_b[2]) ); + + BOOST_CHECK(p16u[0] == p16u_b[0]); + BOOST_CHECK(p16u[1] == p16u_b[1]); + BOOST_CHECK(p16u[2] == p16u_b[2]); +} + +BOOST_AUTO_TEST_SUITE_END() |