diff --git a/doc/world_builder_declarations.schema.json b/doc/world_builder_declarations.schema.json index 3af170cee..4e73e4fa1 100644 --- a/doc/world_builder_declarations.schema.json +++ b/doc/world_builder_declarations.schema.json @@ -236,7 +236,8 @@ "name": "${1:My Oceanic Plate}", "coordinates": [], "temperature models": [], - "composition models": [] + "composition models": [], + "indicator models": [] } }, { diff --git a/include/world_builder/features/oceanic_plate.h b/include/world_builder/features/oceanic_plate.h index 22db84208..3b608c75c 100644 --- a/include/world_builder/features/oceanic_plate.h +++ b/include/world_builder/features/oceanic_plate.h @@ -58,6 +58,10 @@ namespace WorldBuilder { class Interface; } // namespace Density + namespace Indicator + { + class Interface; + } // namespace Indicator } // namespace OceanicPlateModels /** @@ -183,6 +187,14 @@ namespace WorldBuilder */ std::vector > density_models; + /** + * A vector containing all the pointers to the indicator models. This vector is + * responsible for the features and has ownership over them. Therefore + * unique pointers are used. + * @see Features + */ + std::vector > indicator_models; + double min_depth; Objects::Surface min_depth_surface; double max_depth; diff --git a/include/world_builder/features/oceanic_plate_models/indicator/depth_range.h b/include/world_builder/features/oceanic_plate_models/indicator/depth_range.h new file mode 100644 index 000000000..1e64914bd --- /dev/null +++ b/include/world_builder/features/oceanic_plate_models/indicator/depth_range.h @@ -0,0 +1,94 @@ +/* + Copyright (C) 2018-2026 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef WORLD_BUILDER_FEATURES_OCEANIC_PLATE_MODELS_INDICATOR_DEPTH_RANGE_H +#define WORLD_BUILDER_FEATURES_OCEANIC_PLATE_MODELS_INDICATOR_DEPTH_RANGE_H + + +#include "world_builder/features/oceanic_plate_models/indicator/interface.h" +#include "world_builder/features/feature_utilities.h" +#include "world_builder/objects/surface.h" + +namespace WorldBuilder +{ + namespace Features + { + using namespace FeatureUtilities; + namespace OceanicPlateModels + { + namespace Indicator + { + /** + * This class represents a oceanic plate and can implement submodules + * for indicator. These submodules determine what + * the returned indicator of the indicator functions of this class will be. + */ + class DepthRange final: public Interface + { + public: + /** + * constructor + */ + DepthRange(WorldBuilder::World *world); + + /** + * Destructor + */ + ~DepthRange() override final; + + /** + * declare and read in the world builder file into the parameters class + */ + static + void declare_entries(Parameters &prm, const std::string &parent_name = ""); + + /** + * declare and read in the world builder file into the parameters class + */ + void parse_entries(Parameters &prm, const std::vector> &coordinates) override final; + + + /** + * Returns a indicator based on the given position, depth in the model, + * and current indicator + */ + double get_indicator(const Point<3> &position, + const Objects::NaturalCoordinate &position_in_natural_coordinates, + const double depth, + const unsigned int indicator_number, + double indicator, + const double feature_min_depth, + const double feature_max_depth) const override final; + + + private: + // depth-range indicator submodule parameters + double min_depth; + Objects::Surface min_depth_surface; + double max_depth; + Objects::Surface max_depth_surface; + std::vector indicators; + Operations operation; + }; + } // namespace Indicator + } // namespace OceanicPlateModels + } // namespace Features +} // namespace WorldBuilder + +#endif diff --git a/include/world_builder/features/oceanic_plate_models/indicator/interface.h b/include/world_builder/features/oceanic_plate_models/indicator/interface.h new file mode 100644 index 000000000..801631bf8 --- /dev/null +++ b/include/world_builder/features/oceanic_plate_models/indicator/interface.h @@ -0,0 +1,169 @@ +/* + Copyright (C) 2018-2026 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef WORLD_BUILDER_FEATURES_OCEANIC_PLATE_MODELS_INDICATOR_INTERFACE_H +#define WORLD_BUILDER_FEATURES_OCEANIC_PLATE_MODELS_INDICATOR_INTERFACE_H + + +#include "world_builder/parameters.h" +#include "world_builder/objects/natural_coordinate.h" + + +namespace WorldBuilder +{ + class World; + class Parameters; + template class Point; + + /** + * This class is an interface for the specific plate tectonic feature classes, + * such as oceanic plate, oceanic plate and subduction zone. + */ + namespace Features + { + + namespace OceanicPlateModels + { + namespace Indicator + { + class ObjectFactory; + + class Interface + { + public: + /** + * constructor + */ + Interface(); + + /** + * Destructor + */ + virtual + ~Interface(); + + /** + * declare and read in the world builder file into the parameters class + */ + static + void declare_entries(Parameters &prm, + const std::string &parent_name, + const std::vector &required_entries); + + /** + * declare and read in the world builder file into the parameters class + */ + virtual + void parse_entries(Parameters &prm, const std::vector> &coordinates) = 0; + + + /** + * takes indicator and position and returns a indicator. + */ + virtual + double get_indicator(const Point<3> &position, + const Objects::NaturalCoordinate &position_in_natural_coordinates, + const double depth, + const unsigned int indicator_number, + double indicator, + const double feature_min_depth, + const double feature_max_depth) const = 0; + /** + * A function to register a new type. This is part of the automatic + * registration of the object factory. + */ + static void registerType(const std::string &name, + void ( * /*declare_entries*/)(Parameters &, const std::string &), + ObjectFactory *factory); + + + /** + * A function to create a new type. This is part of the automatic + * registration of the object factory. + */ + static std::unique_ptr create(const std::string &name, WorldBuilder::World *world); + + /** + * Returns the name of the plugin + */ + std::string get_name() const + { + return name; + }; + + protected: + /** + * A pointer to the world class to retrieve variables. + */ + WorldBuilder::World *world; + + /** + * The name of the feature type. + */ + std::string name; + + private: + static std::map &get_factory_map() + { + static std::map factories; + return factories; + } + + static std::map &get_declare_map() + { + static std::map declares; + return declares; + } + + }; + + + /** + * A class to create new objects + */ + class ObjectFactory + { + public: + virtual std::unique_ptr create(World *world) = 0; + }; + + /** + * A macro which should be in every derived cpp file to automatically + * register it. Because this is a library, we need some extra measures + * to ensure that the static variable is actually initialized. + */ +#define WB_REGISTER_FEATURE_OCEANIC_PLATE_INDICATOR_MODEL(classname,name) \ + class classname##Factory : public ObjectFactory { \ + public: \ + classname##Factory() \ + { \ + Interface::registerType(#name, classname::declare_entries, this); \ + } \ + std::unique_ptr create(World *world) override final { \ + return std::unique_ptr(new classname(world)); \ + } \ + }; \ + static classname##Factory global_##classname##Factory; + + } // namespace Indicator + } // namespace OceanicPlateModels + } // namespace Features +} // namespace WorldBuilder + +#endif diff --git a/include/world_builder/parameters.h b/include/world_builder/parameters.h index ddbce5a6c..f15ab469f 100644 --- a/include/world_builder/parameters.h +++ b/include/world_builder/parameters.h @@ -197,6 +197,30 @@ namespace WorldBuilder std::vector get_composition_properties(const std::string &name) const; + struct indicator_property + { + unsigned int index; + std::string name; + }; + + /** + * Parse indicator properties. + * The index is required, while name is optional. + * If the entry is absent, the vector is empty. + * \param name The name of the entry to be declared + */ + std::vector + get_indicator_property(const std::string &name) const; + + /** + * A specialized version of get which can return vectors/arrays + * of the indicator properties + * \param name The name of the entry to retrieved + */ + template + std::vector get_vector(const std::string &name, + const std::map &indicator_properties); + /** * Declares the existence an entry in the parameters class. * Default values are supplied by the type. diff --git a/include/world_builder/types/indicator_property.h b/include/world_builder/types/indicator_property.h new file mode 100644 index 000000000..5cc9a84ee --- /dev/null +++ b/include/world_builder/types/indicator_property.h @@ -0,0 +1,73 @@ +/* + Copyright (C) 2018-2026 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifndef WORLD_BUILDER_TYPES_INDICATOR_PROPERTY_H +#define WORLD_BUILDER_TYPES_INDICATOR_PROPERTY_H + + +#include "world_builder/types/interface.h" + +#include +#include + + +namespace WorldBuilder +{ + class Parameters; + + namespace Types + { + /** + * Schema type for a single indicator-property object. + * Expected keys are: + * - index (required) + * - name (optional, defaults to index as string) + */ + class IndicatorProperty final: public Interface + { + public: + + /** + * A constructor used for the load_entry function + */ + IndicatorProperty(); + + IndicatorProperty(const IndicatorProperty &) = default; + + ~IndicatorProperty() override final = default; + + void write_schema(Parameters &prm, + const std::string &name, + const std::string &documentation) const override final; + + std::vector required; + + protected: + IndicatorProperty *clone_impl() const override final + { + return new IndicatorProperty(*this); + }; + + private: + + }; + } // namespace Types +} // namespace WorldBuilder + +#endif \ No newline at end of file diff --git a/include/world_builder/world.h b/include/world_builder/world.h index 5abab6103..6256f2d0d 100644 --- a/include/world_builder/world.h +++ b/include/world_builder/world.h @@ -209,6 +209,18 @@ namespace WorldBuilder */ double composition(const std::array &point, const double depth, const unsigned int composition_number) const; + /** + * Returns the indicator based on a 2d Cartesian point and the depth in the + * model at that point. + */ + double indicator(const std::array &point, const double depth, const unsigned int indicator_number) const; + + /** + * Returns the indicator based on a 3d Cartesian point, the depth in the + * model at that point and the gravity norm at that point. + */ + double indicator(const std::array &point, const double depth, const unsigned int indicator_number) const; + /** * Returns the grain orientations and sizes based on a 2d Cartesian point, the depth in * the model at that point and the gravity norm at that point. @@ -260,6 +272,12 @@ namespace WorldBuilder */ Parameters::composition_properties get_composition_properties(const unsigned int composition_index) const; + /** + * Return all indicator properties from its index. + * If the index is unknown, returns fallback properties with a generated name. + */ + Parameters::indicator_property get_indicator_property(const unsigned int indicator_index) const; + /** * This is the parameter class, which stores all the values loaded in * from the parameter file or which are set directly. @@ -352,6 +370,11 @@ namespace WorldBuilder */ std::map composition_properties; + /** + * A map from indicator index to its properties for quick lookups. + */ + std::map indicator_properties; + private: /** * The minimum dimension. If cross section data is provided, it is set diff --git a/source/gwb-grid/main.cc b/source/gwb-grid/main.cc index 460561f73..1f8c13de2 100644 --- a/source/gwb-grid/main.cc +++ b/source/gwb-grid/main.cc @@ -317,6 +317,7 @@ int main(int argc, char **argv) size_t dim = 3; size_t compositions = 0; + size_t indicators = 0; // common std::string grid_type = "chunk"; @@ -536,6 +537,9 @@ int main(int argc, char **argv) if (line_i[0] == "compositions" && line_i[1] == "=") compositions = string_to_unsigned_int(line_i[2]); + if (line_i[0] == "indicators" && line_i[1] == "=") + indicators = string_to_unsigned_int(line_i[2]); + if (line_i[0] == "x_min" && line_i[1] == "=") x_min = string_to_double(line_i[2]); if (line_i[0] == "x_max" && line_i[1] == "=") @@ -1846,6 +1850,8 @@ int main(int argc, char **argv) { dataSetInfo.emplace_back( "Composition "+std::to_string(c), vtu11::DataSetType::PointData, 1 ); } + for (size_t i0 = 0; i0 < indicators; ++i0) + dataSetInfo.emplace_back("Indicator "+std::to_string(i0), vtu11::DataSetType::PointData, 1 ); std::cout << "[5/6] Preparing to write the paraview file: stage 5 of 5, computing the properties \r"; std::cout.flush(); @@ -1864,9 +1870,11 @@ int main(int argc, char **argv) for (unsigned int c = 0; c < compositions; ++c) properties.push_back({{2,c,0}}); // composition c + for (unsigned int i0 = 0; i0 < indicators; ++i0) + properties.push_back({{8,i0,0}}); // indicator // compute temperature - std::vector data_set(6+output_densities+compositions); + std::vector data_set(6+output_densities+compositions+indicators); data_set[0] = grid_depth_wrt_surface; data_set[1] = grid_depth_wrt_reference; @@ -1881,6 +1889,9 @@ int main(int argc, char **argv) for (size_t c = 0; c < compositions; ++c) data_set[6+c+output_densities].resize(n_p); + for (size_t i0 = 0; i0 < indicators; ++i0) + data_set[6+output_densities+compositions+i0].resize(n_p); + if (dim == 2) { pool.parallel_for(0, n_p, [&] (size_t i) @@ -1901,6 +1912,10 @@ int main(int argc, char **argv) { data_set[6+c+output_densities][i] = output[6+c+output_densities]; } + for (size_t i0 = 0; i0 < indicators; ++i0) + { + data_set[6+output_densities+compositions+i0][i] = output[6+output_densities+compositions+i0]; + } }); } else @@ -1923,6 +1938,10 @@ int main(int argc, char **argv) { data_set[6+c+output_densities][i] = output[6+c+output_densities]; } + for (size_t i0 = 0; i0 < indicators; ++i0) + { + data_set[6+output_densities+compositions+i0][i] = output[6+output_densities+compositions+i0]; + } }); } std::cout << "[6/6] Writing the paraview file \r"; diff --git a/source/world_builder/features/oceanic_plate.cc b/source/world_builder/features/oceanic_plate.cc index fa90fa762..3d9076d61 100644 --- a/source/world_builder/features/oceanic_plate.cc +++ b/source/world_builder/features/oceanic_plate.cc @@ -25,6 +25,7 @@ #include "world_builder/features/oceanic_plate_models/velocity/interface.h" #include "world_builder/features/oceanic_plate_models/topography/interface.h" #include "world_builder/features/oceanic_plate_models/density/interface.h" +#include "world_builder/features/oceanic_plate_models/indicator/interface.h" #include "world_builder/features/feature_utilities.h" #include "world_builder/nan.h" #include "world_builder/types/array.h" @@ -83,6 +84,7 @@ namespace WorldBuilder Pointer((path + "/body/coordinates").c_str()).Create(declarations).SetArray(); Pointer((path + "/body/temperature models").c_str()).Create(declarations).SetArray(); Pointer((path + "/body/composition models").c_str()).Create(declarations).SetArray(); + Pointer((path + "/body/indicator models").c_str()).Create(declarations).SetArray(); } @@ -116,6 +118,9 @@ namespace WorldBuilder prm.declare_entry("density models", Types::PluginSystem("", Features::OceanicPlateModels::Density::Interface::declare_entries, {"model"}), "A list of density models."); + prm.declare_entry("indicator models", + Types::PluginSystem("", Features::OceanicPlateModels::Indicator::Interface::declare_entries, {"model"}), + "A list of indicator models."); } void @@ -233,6 +238,22 @@ namespace WorldBuilder } } prm.leave_subsection(); + + prm.get_unique_pointers("indicator models", indicator_models); + + prm.enter_subsection("indicator models"); + { + for (unsigned int i = 0; i < indicator_models.size(); ++i) + { + prm.enter_subsection(std::to_string(i)); + { + indicator_models[i]->parse_entries(prm,coordinates); + } + prm.leave_subsection(); + } + } + prm.leave_subsection(); + } @@ -363,6 +384,26 @@ namespace WorldBuilder break; } + case 8: // indicator + { + for (const auto &indicator_model: indicator_models) + { + output[entry_in_output[i_property]] = indicator_model->get_indicator(position_in_cartesian_coordinates, + position_in_natural_coordinates, + depth, + properties[i_property][1], + output[entry_in_output[i_property]], + min_depth_local, + max_depth_local); + + WBAssert(!std::isnan(output[entry_in_output[i_property]]), "Indicator is not a number: " << output[entry_in_output[i_property]] + << ", based on a indicator model with the name " << indicator_model->get_name() << ", in feature " << this->name); + WBAssert(std::isfinite(output[entry_in_output[i_property]]), "Indicator is not a finite: " << output[entry_in_output[i_property]] + << ", based on a indicator model with the name " << indicator_model->get_name() << ", in feature " << this->name); + } + break; + } + break; case 6: // topography: handled outside, so just fall through to the default error if it gets to here default: { diff --git a/source/world_builder/features/oceanic_plate_models/indicator/depth_range.cc b/source/world_builder/features/oceanic_plate_models/indicator/depth_range.cc new file mode 100644 index 000000000..fd5846bf0 --- /dev/null +++ b/source/world_builder/features/oceanic_plate_models/indicator/depth_range.cc @@ -0,0 +1,139 @@ +/* + Copyright (C) 2018-2026 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "world_builder/features/oceanic_plate_models/indicator/depth_range.h" + +#include "world_builder/nan.h" +#include "world_builder/types/array.h" +#include "world_builder/types/double.h" +#include "world_builder/types/object.h" +#include "world_builder/types/one_of.h" +#include "world_builder/types/value_at_points.h" +#include "world_builder/world.h" + + +namespace WorldBuilder +{ + using namespace Utilities; + + namespace Features + { + namespace OceanicPlateModels + { + namespace Indicator + { + DepthRange::DepthRange(WorldBuilder::World *world_) + : + min_depth(NaN::DSNAN), + max_depth(NaN::DSNAN), + operation(Operations::REPLACE) + { + this->world = world_; + this->name = "depth range"; + } + + DepthRange::~DepthRange() + = default; + + void + DepthRange::declare_entries(Parameters &prm, const std::string & /*unused*/) + { + // Document plugin and require entries if needed. + // Add indicators to the required parameters. + prm.declare_entry("", Types::Object({"indicators"}), + "A depth-dependent indicator model. Sets constant indicator value of 1 to " + "indicate temperature, velocity, and composition corresponding to index " + "0, 1, 2, respectively, in the indicators list"); + + // Declare entries of this plugin + prm.declare_entry("min depth", Types::OneOf(Types::Double(0), + Types::Array(Types::ValueAtPoints(0.,2)), + Types::String("")), + "The depth in meters from which the composition of this feature is present."); + + prm.declare_entry("max depth", Types::OneOf(Types::Double(std::numeric_limits::max()), + Types::Array(Types::ValueAtPoints(std::numeric_limits::max(),2)), + Types::String("")), + "The depth in meters to which the composition of this feature is present."); + + prm.declare_entry("operation", Types::String("replace", std::vector {"replace", "replace defined only"}), + "Whether the value should replace any value previously defined at this location (replace) or " + "add the value to the previously define value. Replacing implies that all indicators not " + "explicitly defined are set to zero. To only replace the defined indicators use the replace only defined option."); + } + + void + DepthRange::parse_entries(Parameters &prm, const std::vector> &coordinates) + { + min_depth_surface = Objects::Surface(prm.get("min depth",coordinates)); + min_depth = min_depth_surface.minimum; + max_depth_surface = Objects::Surface(prm.get("max depth",coordinates)); + max_depth = max_depth_surface.maximum; + WBAssert(max_depth >= min_depth, "max depth needs to be larger or equal to min depth."); + indicators = prm.get_vector("indicators", world->indicator_properties); + operation = string_operations_to_enum(prm.get("operation")); + } + + + double + DepthRange::get_indicator(const Point<3> & /*position_in_cartesian_coordinates*/, + const Objects::NaturalCoordinate &position_in_natural_coordinates, + const double depth, + const unsigned int indicator_number, + double indicator_, + const double feature_min_depth, + const double feature_max_depth) const + { + if (depth <= max_depth && depth >= min_depth) + { + const double min_depth_local = min_depth_surface.constant_value ? min_depth : min_depth_surface.local_value(position_in_natural_coordinates.get_surface_point()).interpolated_value; + const double max_depth_local = max_depth_surface.constant_value ? max_depth : max_depth_surface.local_value(position_in_natural_coordinates.get_surface_point()).interpolated_value; + + const double min_depth_local_local = std::max(feature_min_depth, min_depth_local); + const double max_depth_local_local = std::min(feature_max_depth, max_depth_local); + if (depth <= max_depth_local_local && depth >= min_depth_local_local) + { + for (unsigned int i =0; i < indicators.size(); ++i) + { + if (indicators[i] == indicator_number) + { + return apply_operation(operation,indicator_,1.0); + } + } + + if (operation == Operations::REPLACE) + return 0.0; + } + } + else + // else if (depth <= feature_max_depth && depth >= feature_min_depth) + { + if (operation == Operations::REPLACE) + return 0.0; + } + + return indicator_; + } + + WB_REGISTER_FEATURE_OCEANIC_PLATE_INDICATOR_MODEL(DepthRange, depth range) + } // namespace Indicator + } // namespace OceanicPlateModels + } // namespace Features +} // namespace WorldBuilder + diff --git a/source/world_builder/features/oceanic_plate_models/indicator/interface.cc b/source/world_builder/features/oceanic_plate_models/indicator/interface.cc new file mode 100644 index 000000000..927a807a3 --- /dev/null +++ b/source/world_builder/features/oceanic_plate_models/indicator/interface.cc @@ -0,0 +1,94 @@ +/* + Copyright (C) 2018-2026 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "world_builder/features/oceanic_plate_models/indicator/interface.h" + +#include + +#include "world_builder/types/string.h" + +namespace WorldBuilder +{ + namespace Features + { + namespace OceanicPlateModels + { + namespace Indicator + { + Interface::Interface() + = default; + + Interface::~Interface () + = default; + + void + Interface::declare_entries(Parameters &prm, + const std::string &parent_name, + const std::vector &required_entries) + { + // The type needs to be stored in a separate value, otherwise there are memory issues + const Types::String type = Types::String("replace", std::vector {"replace", "add", "subtract"}); + + prm.declare_model_entries("temperature",parent_name, get_declare_map(),required_entries, + { + std::tuple + { + "operation", type, + "Whether the value should replace any value previously defined at this location (replace), " + "add the value to the previously define value (add) or subtract the value to the previously " + "define value (subtract)." + } + }); + } + + + void + Interface::registerType(const std::string &name, + void ( *declare_entries)(Parameters &, const std::string &), + ObjectFactory *factory) + { + get_factory_map()[name] = factory; + get_declare_map()[name] = declare_entries; + } + + std::unique_ptr + Interface::create(const std::string &name, WorldBuilder::World *world) + { + std::string lower_case_name; + std::transform(name.begin(), + name.end(), + std::back_inserter(lower_case_name), + ::tolower);; + + // Have a nice assert message to check whether a plugin exists in the case + // of a debug compilation. + WBAssertThrow(get_factory_map().find(lower_case_name) != get_factory_map().end(), + "Internal error: Plugin with name '" << lower_case_name << "' is not found. " + "The size of factories is " << get_factory_map().size() << '.'); + + // Using at() because the [] will just insert values + // which is undesirable in this case. An exception is + // thrown when the name is not present. + return get_factory_map().at(lower_case_name)->create(world); + } + } // namespace Indicator + } // namespace OceanicPlateModels + } // namespace Features +} // namespace WorldBuilder + diff --git a/source/world_builder/parameters.cc b/source/world_builder/parameters.cc index 9ac10ad64..e9c0b2b82 100644 --- a/source/world_builder/parameters.cc +++ b/source/world_builder/parameters.cc @@ -38,6 +38,7 @@ #include "world_builder/features/oceanic_plate_models/velocity/interface.h" #include "world_builder/features/oceanic_plate_models/topography/interface.h" #include "world_builder/features/oceanic_plate_models/density/interface.h" +#include "world_builder/features/oceanic_plate_models/indicator/interface.h" #include "world_builder/features/plume_models/composition/interface.h" #include "world_builder/features/plume_models/grains/interface.h" #include "world_builder/features/plume_models/temperature/interface.h" @@ -47,6 +48,7 @@ #include "world_builder/features/subducting_plate_models/velocity/interface.h" #include "world_builder/gravity_model/interface.h" #include "world_builder/types/composition_property.h" +#include "world_builder/types/indicator_property.h" #include "world_builder/types/object.h" #include "world_builder/utilities.h" #include "data/LITHO1.0/litho_coord_data.h" @@ -263,6 +265,52 @@ namespace WorldBuilder } + std::vector + Parameters::get_indicator_property(const std::string &name) const + { + // parse entries as indices linked to names + // struct data type allows easy extension for more properties in the future + std::vector indicator_property_output; + + const std::string strict_base = this->get_full_json_path(); + const Value *indicator_property_entries = Pointer((strict_base + "/" + name).c_str()).Get(parameters); + + if (indicator_property_entries == nullptr) + return indicator_property_output; + + WBAssertThrow(indicator_property_entries->IsArray(), + "Invalid entry \"" << name << "\": expected an array of objects with required key \"index\" and optional key \"name\"."); + + std::map seen_indexes; + indicator_property_output.reserve(indicator_property_entries->Size()); + + for (SizeType i = 0; i < indicator_property_entries->Size(); ++i) + { + const Value &entry = (*indicator_property_entries)[i]; + + // index must be unique + const unsigned int indicator_index = entry["index"].GetUint(); + WBAssertThrow(seen_indexes.find(indicator_index) == seen_indexes.end(), + "Duplicate indicator index " << indicator_index << " in \"" << name << "\"."); + seen_indexes[indicator_index] = true; + + // name defaults to index (as string) unless user defined + const std::string indicator_name = + entry.HasMember("name") ? entry["name"].GetString() + : std::to_string(indicator_index); + + indicator_property_output.emplace_back( + Parameters::indicator_property + { + indicator_index, + indicator_name + }); + } + + return indicator_property_output; + } + + template<> std::string Parameters::get(const std::string &name) @@ -1996,6 +2044,87 @@ namespace WorldBuilder return vector; } + template<> + std::vector + Parameters::get_vector(const std::string &name, + const std::map &indicator_properties) + { + std::vector vector; + const std::string strict_base = this->get_full_json_path(); + + if (Pointer((strict_base + "/" + name).c_str()).Get(parameters) != nullptr) + { + Value *array = Pointer((strict_base + "/" + name).c_str()).Get(parameters); + + for (size_t i = 0; i < array->Size(); ++i ) + { + const std::string base = (strict_base + "/").append(name).append("/").append(std::to_string(i)); + Value *entry = Pointer(base.c_str()).Get(parameters); + + if (entry->IsUint()) + { + const unsigned int index = entry->GetUint(); + + // ensure index exists + WBAssertThrow(indicator_properties.find(index) != indicator_properties.end(), + "Invalid indicator index " << index << " at: " << base); + + vector.push_back(index); + } + else if (entry->IsString()) + { + const std::string feature_indicator_name = entry->GetString(); + bool found = false; + + // search by name (still needs loop unless you build name→index map) + for (const auto &paired_entry : indicator_properties) + { + const unsigned int &idx = paired_entry.first; + const Parameters::indicator_property &prop = paired_entry.second; + if (prop.name == feature_indicator_name) + { + vector.push_back(idx); + found = true; + break; + } + } + + WBAssertThrow(found, + "internal error: could not find the value \"" << feature_indicator_name + << "\" in the indicator properties at: " + << this->get_full_json_schema_path() + "/" + name + "/items/enum"); + } + else + { + WBAssertThrow(false, + "internal error: expected an unsigned int or a string for the value at: " + << base); + } + } + } + else + { + const Value *value = Pointer((this->get_full_json_schema_path() + "/" + name + "/minItems").c_str()).Get(declarations); + + WBAssertThrow(value != nullptr, + "internal error: could not retrieve the minItems value at: " + << this->get_full_json_schema_path() + "/" + name + "/minItems value"); + + const size_t min_size = value->GetUint(); + + const unsigned int default_value = + Pointer((this->get_full_json_schema_path() + "/" + name + "/items/default value").c_str()) + .Get(declarations)->GetUint(); + + for (size_t i = 0; i < min_size; ++i) + { + vector.push_back(default_value); + } + } + + return vector; + } + template std::unique_ptr Parameters::get_unique_pointer(const std::string &name) @@ -2501,6 +2630,14 @@ namespace WorldBuilder Parameters::get_unique_pointers(const std::string &name, std::vector > &vector); + /** + * Todo: Returns a vector of pointers to the Point<3> Type based on the provided name. + * Note that the variable with this name has to be loaded before this function is called. + */ + template bool + Parameters::get_unique_pointers(const std::string &name, + std::vector > &vector); + /** * Todo: Returns a vector of pointers to the Point<3> Type based on the provided name. diff --git a/source/world_builder/types/indicator_property.cc b/source/world_builder/types/indicator_property.cc new file mode 100644 index 000000000..a3e43a1c8 --- /dev/null +++ b/source/world_builder/types/indicator_property.cc @@ -0,0 +1,77 @@ +/* + Copyright (C) 2018-2026 by the authors of the World Builder code. + + This file is part of the World Builder. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#include "world_builder/types/indicator_property.h" +#include "world_builder/parameters.h" + +namespace WorldBuilder +{ + namespace Types + { + IndicatorProperty::IndicatorProperty() + // constructor + // default values for the schema + : + required({"index"}) + { + this->type_name = Types::type::Object; + } + + void + IndicatorProperty::write_schema(Parameters &prm, + const std::string &name, + const std::string &documentation) const + { + using namespace rapidjson; + Document &declarations = prm.declarations; + const std::string strict_base = prm.get_full_json_path() + "/" + name; + + Pointer((strict_base + "/type").c_str()).Set(declarations,"object"); + Pointer((strict_base + "/description").c_str()).Set(declarations,documentation.c_str()); + Pointer((strict_base + "/additionalProperties").c_str()).Set(declarations,false); + + if (!required.empty()) + { + for (unsigned int i = 0; i < required.size(); ++i) + { + if (i == 0 && Pointer((strict_base + "/required").c_str()).Get(declarations) == nullptr) + { + Pointer((strict_base + "/required/0").c_str()).Create(declarations); + Pointer((strict_base + "/required/0").c_str()).Set(declarations, required[i].c_str()); + } + else + { + Pointer((strict_base + "/required/-").c_str()).Set(declarations, required[i].c_str()); + } + } + } + + // named properties and their defaults + Pointer((strict_base + "/properties/index/type").c_str()).Set(declarations,"integer"); + Pointer((strict_base + "/properties/index/minimum").c_str()).Set(declarations,0); + Pointer((strict_base + "/properties/index/description").c_str()).Set(declarations, + "The indicator index used in indicator lookups."); + + Pointer((strict_base + "/properties/name/type").c_str()).Set(declarations,"string"); + Pointer((strict_base + "/properties/name/default value").c_str()).Set(declarations, ""); + Pointer((strict_base + "/properties/name/description").c_str()).Set(declarations, + "Optional indicator name. Defaults to ."); + } + } // namespace Types +} // namespace WorldBuilder \ No newline at end of file diff --git a/source/world_builder/world.cc b/source/world_builder/world.cc index 2b3e3260c..7860ced45 100644 --- a/source/world_builder/world.cc +++ b/source/world_builder/world.cc @@ -31,6 +31,7 @@ #include "world_builder/types/object.h" #include "world_builder/types/plugin_system.h" #include "world_builder/types/composition_property.h" +#include "world_builder/types/indicator_property.h" #include "world_builder/types/point.h" #include "world_builder/types/int.h" @@ -149,6 +150,8 @@ namespace WorldBuilder prm.declare_entry("composition properties", Types::Array(Types::CompositionProperty()), "The material properties of the composition. This stores user-defined indices (required), linked to composition properties (optional) including name and reference density."); + prm.declare_entry("indicator properties", Types::Array(Types::IndicatorProperty()), + "The properties of the indicator. This stores user-defined indices (required), linked to indicator properties (optional) including name"); prm.declare_entry("potential mantle temperature", Types::Double(1600), "The potential temperature of the mantle at the surface in Kelvin."); prm.declare_entry("surface temperature", Types::Double(293.15), @@ -330,6 +333,19 @@ namespace WorldBuilder composition_properties.emplace(composition_entry.index, composition_entry); } + /** + * Mapping of indicator properties as a struct + * Indicator indices (required) mapped to their properties (optional). + * Parsing is handled in parameters.cc + * Struct with default values is defined in types/indicator_property + */ + const auto parsed_indicator_property = prm.get_indicator_property("indicator properties"); + + for (const auto &indicator_entry : parsed_indicator_property) + { + indicator_properties.emplace(indicator_entry.index, indicator_entry); + } + /** * Now load the features. Some features use for example temperature values, * so it is important that this is parsed the last. @@ -389,6 +405,11 @@ namespace WorldBuilder n_output_entries += 1; break; } + case 8: // indicator + { + n_output_entries += 1; + break; + } default: WBAssertThrow(false, "Internal error: Unimplemented property provided. " << @@ -486,10 +507,15 @@ namespace WorldBuilder break; } default: - WBAssertThrow(false, - "Internal error: Unimplemented property provided. " << - "Only temperature (1), composition (2), grains (3), tag (4), velocity (5) or topography (6) are allowed. " - "Provided property number was: " << property[0]); + case 8: // indicator + { + counter += 1; + break; + } + WBAssertThrow(false, + "Internal error: Unimplemented property provided. " << + "Only temperature (1), composition (2), grains (3), tag (4), velocity (5) or topography (6) are allowed. " + "Provided property number was: " << property[0]); } } @@ -586,6 +612,13 @@ namespace WorldBuilder properties_local.emplace_back(properties[i_property]); break; } + case 8: // indicator + { + entry_in_output.emplace_back(output.size()); + output.emplace_back(0); + properties_local.emplace_back(properties[i_property]); + break; + } default: WBAssertThrow(false, "Internal error: Unimplemented property provided. " << @@ -647,6 +680,22 @@ namespace WorldBuilder return properties(point, depth, {{{2,composition_number,0}}})[0]; } + double + World::indicator(const std::array &point, + const double depth, + const unsigned int indicator_number) const + { + return properties(point, depth, {{{8,indicator_number,0}}})[0]; + } + + double + World::indicator(const std::array &point, + const double depth, + const unsigned int indicator_number) const + { + return properties(point, depth, {{{8,indicator_number,0}}})[0]; + } + WorldBuilder::grains World::grains(const std::array &point, const double depth, diff --git a/tests/data/indicator_properties_map.wb b/tests/data/indicator_properties_map.wb new file mode 100644 index 000000000..bfd08d1db --- /dev/null +++ b/tests/data/indicator_properties_map.wb @@ -0,0 +1,24 @@ +{ + "version":"1.2", + "coordinate system":{"model":"cartesian"}, + "gravity model":{"model":"uniform", "magnitude":10}, + "indicator properties":[ + { + "index":0, + "name":"temperature" + }, + { + "index":1, + "name":"velocity" + }, + { + "index":2, + "name":"composition" + } + ], + "features":[ + {"model":"oceanic plate", "name":"First oceanic plate", "max depth":250e3, "coordinates":[[-1e3,1e10],[500e3,1e10],[500e3,-1e10],[-1e3,-1e10]], + "temperature models":[{"model":"uniform", "temperature":150}], + "indicator models":[{"model": "depth range", "min depth": 50e3, "max depth": 100e3, "indicators": [0, 1]}]} + ] +} diff --git a/tests/gwb-grid/oceanic_plate_indicator.grid b/tests/gwb-grid/oceanic_plate_indicator.grid new file mode 100644 index 000000000..c5b242a6c --- /dev/null +++ b/tests/gwb-grid/oceanic_plate_indicator.grid @@ -0,0 +1,15 @@ +# Grid File for creating vtk files to view in Paraview or Visit +grid_type = cartesian +dim = 2 +compositions = 1 +indicators = 3 + +# domain of the grid (x and y are the surface, z is vertical with 0 at the bottom) +x_min = 0e3 +x_max = 1000e3 +z_min = 0e3 +z_max = 500e3 + +# grid properties +n_cell_x = 50 +n_cell_z = 25 diff --git a/tests/gwb-grid/oceanic_plate_indicator.vtu b/tests/gwb-grid/oceanic_plate_indicator.vtu new file mode 100644 index 000000000..a3052d4a6 --- /dev/null +++ b/tests/gwb-grid/oceanic_plate_indicator.vtu @@ -0,0 +1,57 @@ + + + + + + +500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + + + + + +0 0 0 20000 0 0 40000 0 0 60000 0 0 80000 0 0 100000 0 0 120000 0 0 140000 0 0 160000 0 0 180000 0 0 200000 0 0 220000 0 0 240000 0 0 260000 0 0 280000 0 0 300000 0 0 320000 0 0 340000 0 0 360000 0 0 380000 0 0 400000 0 0 420000 0 0 440000 0 0 460000 0 0 480000 0 0 500000 0 0 520000 0 0 540000 0 0 560000 0 0 580000 0 0 600000 0 0 620000 0 0 640000 0 0 660000 0 0 680000 0 0 700000 0 0 720000 0 0 740000 0 0 760000 0 0 780000 0 0 800000 0 0 820000 0 0 840000 0 0 860000 0 0 880000 0 0 900000 0 0 920000 0 0 940000 0 0 960000 0 0 980000 0 0 1e+06 0 0 0 20000 0 20000 20000 0 40000 20000 0 60000 20000 0 80000 20000 0 100000 20000 0 120000 20000 0 140000 20000 0 160000 20000 0 180000 20000 0 200000 20000 0 220000 20000 0 240000 20000 0 260000 20000 0 280000 20000 0 300000 20000 0 320000 20000 0 340000 20000 0 360000 20000 0 380000 20000 0 400000 20000 0 420000 20000 0 440000 20000 0 460000 20000 0 480000 20000 0 500000 20000 0 520000 20000 0 540000 20000 0 560000 20000 0 580000 20000 0 600000 20000 0 620000 20000 0 640000 20000 0 660000 20000 0 680000 20000 0 700000 20000 0 720000 20000 0 740000 20000 0 760000 20000 0 780000 20000 0 800000 20000 0 820000 20000 0 840000 20000 0 860000 20000 0 880000 20000 0 900000 20000 0 920000 20000 0 940000 20000 0 960000 20000 0 980000 20000 0 1e+06 20000 0 0 40000 0 20000 40000 0 40000 40000 0 60000 40000 0 80000 40000 0 100000 40000 0 120000 40000 0 140000 40000 0 160000 40000 0 180000 40000 0 200000 40000 0 220000 40000 0 240000 40000 0 260000 40000 0 280000 40000 0 300000 40000 0 320000 40000 0 340000 40000 0 360000 40000 0 380000 40000 0 400000 40000 0 420000 40000 0 440000 40000 0 460000 40000 0 480000 40000 0 500000 40000 0 520000 40000 0 540000 40000 0 560000 40000 0 580000 40000 0 600000 40000 0 620000 40000 0 640000 40000 0 660000 40000 0 680000 40000 0 700000 40000 0 720000 40000 0 740000 40000 0 760000 40000 0 780000 40000 0 800000 40000 0 820000 40000 0 840000 40000 0 860000 40000 0 880000 40000 0 900000 40000 0 920000 40000 0 940000 40000 0 960000 40000 0 980000 40000 0 1e+06 40000 0 0 60000 0 20000 60000 0 40000 60000 0 60000 60000 0 80000 60000 0 100000 60000 0 120000 60000 0 140000 60000 0 160000 60000 0 180000 60000 0 200000 60000 0 220000 60000 0 240000 60000 0 260000 60000 0 280000 60000 0 300000 60000 0 320000 60000 0 340000 60000 0 360000 60000 0 380000 60000 0 400000 60000 0 420000 60000 0 440000 60000 0 460000 60000 0 480000 60000 0 500000 60000 0 520000 60000 0 540000 60000 0 560000 60000 0 580000 60000 0 600000 60000 0 620000 60000 0 640000 60000 0 660000 60000 0 680000 60000 0 700000 60000 0 720000 60000 0 740000 60000 0 760000 60000 0 780000 60000 0 800000 60000 0 820000 60000 0 840000 60000 0 860000 60000 0 880000 60000 0 900000 60000 0 920000 60000 0 940000 60000 0 960000 60000 0 980000 60000 0 1e+06 60000 0 0 80000 0 20000 80000 0 40000 80000 0 60000 80000 0 80000 80000 0 100000 80000 0 120000 80000 0 140000 80000 0 160000 80000 0 180000 80000 0 200000 80000 0 220000 80000 0 240000 80000 0 260000 80000 0 280000 80000 0 300000 80000 0 320000 80000 0 340000 80000 0 360000 80000 0 380000 80000 0 400000 80000 0 420000 80000 0 440000 80000 0 460000 80000 0 480000 80000 0 500000 80000 0 520000 80000 0 540000 80000 0 560000 80000 0 580000 80000 0 600000 80000 0 620000 80000 0 640000 80000 0 660000 80000 0 680000 80000 0 700000 80000 0 720000 80000 0 740000 80000 0 760000 80000 0 780000 80000 0 800000 80000 0 820000 80000 0 840000 80000 0 860000 80000 0 880000 80000 0 900000 80000 0 920000 80000 0 940000 80000 0 960000 80000 0 980000 80000 0 1e+06 80000 0 0 100000 0 20000 100000 0 40000 100000 0 60000 100000 0 80000 100000 0 100000 100000 0 120000 100000 0 140000 100000 0 160000 100000 0 180000 100000 0 200000 100000 0 220000 100000 0 240000 100000 0 260000 100000 0 280000 100000 0 300000 100000 0 320000 100000 0 340000 100000 0 360000 100000 0 380000 100000 0 400000 100000 0 420000 100000 0 440000 100000 0 460000 100000 0 480000 100000 0 500000 100000 0 520000 100000 0 540000 100000 0 560000 100000 0 580000 100000 0 600000 100000 0 620000 100000 0 640000 100000 0 660000 100000 0 680000 100000 0 700000 100000 0 720000 100000 0 740000 100000 0 760000 100000 0 780000 100000 0 800000 100000 0 820000 100000 0 840000 100000 0 860000 100000 0 880000 100000 0 900000 100000 0 920000 100000 0 940000 100000 0 960000 100000 0 980000 100000 0 1e+06 100000 0 0 120000 0 20000 120000 0 40000 120000 0 60000 120000 0 80000 120000 0 100000 120000 0 120000 120000 0 140000 120000 0 160000 120000 0 180000 120000 0 200000 120000 0 220000 120000 0 240000 120000 0 260000 120000 0 280000 120000 0 300000 120000 0 320000 120000 0 340000 120000 0 360000 120000 0 380000 120000 0 400000 120000 0 420000 120000 0 440000 120000 0 460000 120000 0 480000 120000 0 500000 120000 0 520000 120000 0 540000 120000 0 560000 120000 0 580000 120000 0 600000 120000 0 620000 120000 0 640000 120000 0 660000 120000 0 680000 120000 0 700000 120000 0 720000 120000 0 740000 120000 0 760000 120000 0 780000 120000 0 800000 120000 0 820000 120000 0 840000 120000 0 860000 120000 0 880000 120000 0 900000 120000 0 920000 120000 0 940000 120000 0 960000 120000 0 980000 120000 0 1e+06 120000 0 0 140000 0 20000 140000 0 40000 140000 0 60000 140000 0 80000 140000 0 100000 140000 0 120000 140000 0 140000 140000 0 160000 140000 0 180000 140000 0 200000 140000 0 220000 140000 0 240000 140000 0 260000 140000 0 280000 140000 0 300000 140000 0 320000 140000 0 340000 140000 0 360000 140000 0 380000 140000 0 400000 140000 0 420000 140000 0 440000 140000 0 460000 140000 0 480000 140000 0 500000 140000 0 520000 140000 0 540000 140000 0 560000 140000 0 580000 140000 0 600000 140000 0 620000 140000 0 640000 140000 0 660000 140000 0 680000 140000 0 700000 140000 0 720000 140000 0 740000 140000 0 760000 140000 0 780000 140000 0 800000 140000 0 820000 140000 0 840000 140000 0 860000 140000 0 880000 140000 0 900000 140000 0 920000 140000 0 940000 140000 0 960000 140000 0 980000 140000 0 1e+06 140000 0 0 160000 0 20000 160000 0 40000 160000 0 60000 160000 0 80000 160000 0 100000 160000 0 120000 160000 0 140000 160000 0 160000 160000 0 180000 160000 0 200000 160000 0 220000 160000 0 240000 160000 0 260000 160000 0 280000 160000 0 300000 160000 0 320000 160000 0 340000 160000 0 360000 160000 0 380000 160000 0 400000 160000 0 420000 160000 0 440000 160000 0 460000 160000 0 480000 160000 0 500000 160000 0 520000 160000 0 540000 160000 0 560000 160000 0 580000 160000 0 600000 160000 0 620000 160000 0 640000 160000 0 660000 160000 0 680000 160000 0 700000 160000 0 720000 160000 0 740000 160000 0 760000 160000 0 780000 160000 0 800000 160000 0 820000 160000 0 840000 160000 0 860000 160000 0 880000 160000 0 900000 160000 0 920000 160000 0 940000 160000 0 960000 160000 0 980000 160000 0 1e+06 160000 0 0 180000 0 20000 180000 0 40000 180000 0 60000 180000 0 80000 180000 0 100000 180000 0 120000 180000 0 140000 180000 0 160000 180000 0 180000 180000 0 200000 180000 0 220000 180000 0 240000 180000 0 260000 180000 0 280000 180000 0 300000 180000 0 320000 180000 0 340000 180000 0 360000 180000 0 380000 180000 0 400000 180000 0 420000 180000 0 440000 180000 0 460000 180000 0 480000 180000 0 500000 180000 0 520000 180000 0 540000 180000 0 560000 180000 0 580000 180000 0 600000 180000 0 620000 180000 0 640000 180000 0 660000 180000 0 680000 180000 0 700000 180000 0 720000 180000 0 740000 180000 0 760000 180000 0 780000 180000 0 800000 180000 0 820000 180000 0 840000 180000 0 860000 180000 0 880000 180000 0 900000 180000 0 920000 180000 0 940000 180000 0 960000 180000 0 980000 180000 0 1e+06 180000 0 0 200000 0 20000 200000 0 40000 200000 0 60000 200000 0 80000 200000 0 100000 200000 0 120000 200000 0 140000 200000 0 160000 200000 0 180000 200000 0 200000 200000 0 220000 200000 0 240000 200000 0 260000 200000 0 280000 200000 0 300000 200000 0 320000 200000 0 340000 200000 0 360000 200000 0 380000 200000 0 400000 200000 0 420000 200000 0 440000 200000 0 460000 200000 0 480000 200000 0 500000 200000 0 520000 200000 0 540000 200000 0 560000 200000 0 580000 200000 0 600000 200000 0 620000 200000 0 640000 200000 0 660000 200000 0 680000 200000 0 700000 200000 0 720000 200000 0 740000 200000 0 760000 200000 0 780000 200000 0 800000 200000 0 820000 200000 0 840000 200000 0 860000 200000 0 880000 200000 0 900000 200000 0 920000 200000 0 940000 200000 0 960000 200000 0 980000 200000 0 1e+06 200000 0 0 220000 0 20000 220000 0 40000 220000 0 60000 220000 0 80000 220000 0 100000 220000 0 120000 220000 0 140000 220000 0 160000 220000 0 180000 220000 0 200000 220000 0 220000 220000 0 240000 220000 0 260000 220000 0 280000 220000 0 300000 220000 0 320000 220000 0 340000 220000 0 360000 220000 0 380000 220000 0 400000 220000 0 420000 220000 0 440000 220000 0 460000 220000 0 480000 220000 0 500000 220000 0 520000 220000 0 540000 220000 0 560000 220000 0 580000 220000 0 600000 220000 0 620000 220000 0 640000 220000 0 660000 220000 0 680000 220000 0 700000 220000 0 720000 220000 0 740000 220000 0 760000 220000 0 780000 220000 0 800000 220000 0 820000 220000 0 840000 220000 0 860000 220000 0 880000 220000 0 900000 220000 0 920000 220000 0 940000 220000 0 960000 220000 0 980000 220000 0 1e+06 220000 0 0 240000 0 20000 240000 0 40000 240000 0 60000 240000 0 80000 240000 0 100000 240000 0 120000 240000 0 140000 240000 0 160000 240000 0 180000 240000 0 200000 240000 0 220000 240000 0 240000 240000 0 260000 240000 0 280000 240000 0 300000 240000 0 320000 240000 0 340000 240000 0 360000 240000 0 380000 240000 0 400000 240000 0 420000 240000 0 440000 240000 0 460000 240000 0 480000 240000 0 500000 240000 0 520000 240000 0 540000 240000 0 560000 240000 0 580000 240000 0 600000 240000 0 620000 240000 0 640000 240000 0 660000 240000 0 680000 240000 0 700000 240000 0 720000 240000 0 740000 240000 0 760000 240000 0 780000 240000 0 800000 240000 0 820000 240000 0 840000 240000 0 860000 240000 0 880000 240000 0 900000 240000 0 920000 240000 0 940000 240000 0 960000 240000 0 980000 240000 0 1e+06 240000 0 0 260000 0 20000 260000 0 40000 260000 0 60000 260000 0 80000 260000 0 100000 260000 0 120000 260000 0 140000 260000 0 160000 260000 0 180000 260000 0 200000 260000 0 220000 260000 0 240000 260000 0 260000 260000 0 280000 260000 0 300000 260000 0 320000 260000 0 340000 260000 0 360000 260000 0 380000 260000 0 400000 260000 0 420000 260000 0 440000 260000 0 460000 260000 0 480000 260000 0 500000 260000 0 520000 260000 0 540000 260000 0 560000 260000 0 580000 260000 0 600000 260000 0 620000 260000 0 640000 260000 0 660000 260000 0 680000 260000 0 700000 260000 0 720000 260000 0 740000 260000 0 760000 260000 0 780000 260000 0 800000 260000 0 820000 260000 0 840000 260000 0 860000 260000 0 880000 260000 0 900000 260000 0 920000 260000 0 940000 260000 0 960000 260000 0 980000 260000 0 1e+06 260000 0 0 280000 0 20000 280000 0 40000 280000 0 60000 280000 0 80000 280000 0 100000 280000 0 120000 280000 0 140000 280000 0 160000 280000 0 180000 280000 0 200000 280000 0 220000 280000 0 240000 280000 0 260000 280000 0 280000 280000 0 300000 280000 0 320000 280000 0 340000 280000 0 360000 280000 0 380000 280000 0 400000 280000 0 420000 280000 0 440000 280000 0 460000 280000 0 480000 280000 0 500000 280000 0 520000 280000 0 540000 280000 0 560000 280000 0 580000 280000 0 600000 280000 0 620000 280000 0 640000 280000 0 660000 280000 0 680000 280000 0 700000 280000 0 720000 280000 0 740000 280000 0 760000 280000 0 780000 280000 0 800000 280000 0 820000 280000 0 840000 280000 0 860000 280000 0 880000 280000 0 900000 280000 0 920000 280000 0 940000 280000 0 960000 280000 0 980000 280000 0 1e+06 280000 0 0 300000 0 20000 300000 0 40000 300000 0 60000 300000 0 80000 300000 0 100000 300000 0 120000 300000 0 140000 300000 0 160000 300000 0 180000 300000 0 200000 300000 0 220000 300000 0 240000 300000 0 260000 300000 0 280000 300000 0 300000 300000 0 320000 300000 0 340000 300000 0 360000 300000 0 380000 300000 0 400000 300000 0 420000 300000 0 440000 300000 0 460000 300000 0 480000 300000 0 500000 300000 0 520000 300000 0 540000 300000 0 560000 300000 0 580000 300000 0 600000 300000 0 620000 300000 0 640000 300000 0 660000 300000 0 680000 300000 0 700000 300000 0 720000 300000 0 740000 300000 0 760000 300000 0 780000 300000 0 800000 300000 0 820000 300000 0 840000 300000 0 860000 300000 0 880000 300000 0 900000 300000 0 920000 300000 0 940000 300000 0 960000 300000 0 980000 300000 0 1e+06 300000 0 0 320000 0 20000 320000 0 40000 320000 0 60000 320000 0 80000 320000 0 100000 320000 0 120000 320000 0 140000 320000 0 160000 320000 0 180000 320000 0 200000 320000 0 220000 320000 0 240000 320000 0 260000 320000 0 280000 320000 0 300000 320000 0 320000 320000 0 340000 320000 0 360000 320000 0 380000 320000 0 400000 320000 0 420000 320000 0 440000 320000 0 460000 320000 0 480000 320000 0 500000 320000 0 520000 320000 0 540000 320000 0 560000 320000 0 580000 320000 0 600000 320000 0 620000 320000 0 640000 320000 0 660000 320000 0 680000 320000 0 700000 320000 0 720000 320000 0 740000 320000 0 760000 320000 0 780000 320000 0 800000 320000 0 820000 320000 0 840000 320000 0 860000 320000 0 880000 320000 0 900000 320000 0 920000 320000 0 940000 320000 0 960000 320000 0 980000 320000 0 1e+06 320000 0 0 340000 0 20000 340000 0 40000 340000 0 60000 340000 0 80000 340000 0 100000 340000 0 120000 340000 0 140000 340000 0 160000 340000 0 180000 340000 0 200000 340000 0 220000 340000 0 240000 340000 0 260000 340000 0 280000 340000 0 300000 340000 0 320000 340000 0 340000 340000 0 360000 340000 0 380000 340000 0 400000 340000 0 420000 340000 0 440000 340000 0 460000 340000 0 480000 340000 0 500000 340000 0 520000 340000 0 540000 340000 0 560000 340000 0 580000 340000 0 600000 340000 0 620000 340000 0 640000 340000 0 660000 340000 0 680000 340000 0 700000 340000 0 720000 340000 0 740000 340000 0 760000 340000 0 780000 340000 0 800000 340000 0 820000 340000 0 840000 340000 0 860000 340000 0 880000 340000 0 900000 340000 0 920000 340000 0 940000 340000 0 960000 340000 0 980000 340000 0 1e+06 340000 0 0 360000 0 20000 360000 0 40000 360000 0 60000 360000 0 80000 360000 0 100000 360000 0 120000 360000 0 140000 360000 0 160000 360000 0 180000 360000 0 200000 360000 0 220000 360000 0 240000 360000 0 260000 360000 0 280000 360000 0 300000 360000 0 320000 360000 0 340000 360000 0 360000 360000 0 380000 360000 0 400000 360000 0 420000 360000 0 440000 360000 0 460000 360000 0 480000 360000 0 500000 360000 0 520000 360000 0 540000 360000 0 560000 360000 0 580000 360000 0 600000 360000 0 620000 360000 0 640000 360000 0 660000 360000 0 680000 360000 0 700000 360000 0 720000 360000 0 740000 360000 0 760000 360000 0 780000 360000 0 800000 360000 0 820000 360000 0 840000 360000 0 860000 360000 0 880000 360000 0 900000 360000 0 920000 360000 0 940000 360000 0 960000 360000 0 980000 360000 0 1e+06 360000 0 0 380000 0 20000 380000 0 40000 380000 0 60000 380000 0 80000 380000 0 100000 380000 0 120000 380000 0 140000 380000 0 160000 380000 0 180000 380000 0 200000 380000 0 220000 380000 0 240000 380000 0 260000 380000 0 280000 380000 0 300000 380000 0 320000 380000 0 340000 380000 0 360000 380000 0 380000 380000 0 400000 380000 0 420000 380000 0 440000 380000 0 460000 380000 0 480000 380000 0 500000 380000 0 520000 380000 0 540000 380000 0 560000 380000 0 580000 380000 0 600000 380000 0 620000 380000 0 640000 380000 0 660000 380000 0 680000 380000 0 700000 380000 0 720000 380000 0 740000 380000 0 760000 380000 0 780000 380000 0 800000 380000 0 820000 380000 0 840000 380000 0 860000 380000 0 880000 380000 0 900000 380000 0 920000 380000 0 940000 380000 0 960000 380000 0 980000 380000 0 1e+06 380000 0 0 400000 0 20000 400000 0 40000 400000 0 60000 400000 0 80000 400000 0 100000 400000 0 120000 400000 0 140000 400000 0 160000 400000 0 180000 400000 0 200000 400000 0 220000 400000 0 240000 400000 0 260000 400000 0 280000 400000 0 300000 400000 0 320000 400000 0 340000 400000 0 360000 400000 0 380000 400000 0 400000 400000 0 420000 400000 0 440000 400000 0 460000 400000 0 480000 400000 0 500000 400000 0 520000 400000 0 540000 400000 0 560000 400000 0 580000 400000 0 600000 400000 0 620000 400000 0 640000 400000 0 660000 400000 0 680000 400000 0 700000 400000 0 720000 400000 0 740000 400000 0 760000 400000 0 780000 400000 0 800000 400000 0 820000 400000 0 840000 400000 0 860000 400000 0 880000 400000 0 900000 400000 0 920000 400000 0 940000 400000 0 960000 400000 0 980000 400000 0 1e+06 400000 0 0 420000 0 20000 420000 0 40000 420000 0 60000 420000 0 80000 420000 0 100000 420000 0 120000 420000 0 140000 420000 0 160000 420000 0 180000 420000 0 200000 420000 0 220000 420000 0 240000 420000 0 260000 420000 0 280000 420000 0 300000 420000 0 320000 420000 0 340000 420000 0 360000 420000 0 380000 420000 0 400000 420000 0 420000 420000 0 440000 420000 0 460000 420000 0 480000 420000 0 500000 420000 0 520000 420000 0 540000 420000 0 560000 420000 0 580000 420000 0 600000 420000 0 620000 420000 0 640000 420000 0 660000 420000 0 680000 420000 0 700000 420000 0 720000 420000 0 740000 420000 0 760000 420000 0 780000 420000 0 800000 420000 0 820000 420000 0 840000 420000 0 860000 420000 0 880000 420000 0 900000 420000 0 920000 420000 0 940000 420000 0 960000 420000 0 980000 420000 0 1e+06 420000 0 0 440000 0 20000 440000 0 40000 440000 0 60000 440000 0 80000 440000 0 100000 440000 0 120000 440000 0 140000 440000 0 160000 440000 0 180000 440000 0 200000 440000 0 220000 440000 0 240000 440000 0 260000 440000 0 280000 440000 0 300000 440000 0 320000 440000 0 340000 440000 0 360000 440000 0 380000 440000 0 400000 440000 0 420000 440000 0 440000 440000 0 460000 440000 0 480000 440000 0 500000 440000 0 520000 440000 0 540000 440000 0 560000 440000 0 580000 440000 0 600000 440000 0 620000 440000 0 640000 440000 0 660000 440000 0 680000 440000 0 700000 440000 0 720000 440000 0 740000 440000 0 760000 440000 0 780000 440000 0 800000 440000 0 820000 440000 0 840000 440000 0 860000 440000 0 880000 440000 0 900000 440000 0 920000 440000 0 940000 440000 0 960000 440000 0 980000 440000 0 1e+06 440000 0 0 460000 0 20000 460000 0 40000 460000 0 60000 460000 0 80000 460000 0 100000 460000 0 120000 460000 0 140000 460000 0 160000 460000 0 180000 460000 0 200000 460000 0 220000 460000 0 240000 460000 0 260000 460000 0 280000 460000 0 300000 460000 0 320000 460000 0 340000 460000 0 360000 460000 0 380000 460000 0 400000 460000 0 420000 460000 0 440000 460000 0 460000 460000 0 480000 460000 0 500000 460000 0 520000 460000 0 540000 460000 0 560000 460000 0 580000 460000 0 600000 460000 0 620000 460000 0 640000 460000 0 660000 460000 0 680000 460000 0 700000 460000 0 720000 460000 0 740000 460000 0 760000 460000 0 780000 460000 0 800000 460000 0 820000 460000 0 840000 460000 0 860000 460000 0 880000 460000 0 900000 460000 0 920000 460000 0 940000 460000 0 960000 460000 0 980000 460000 0 1e+06 460000 0 0 480000 0 20000 480000 0 40000 480000 0 60000 480000 0 80000 480000 0 100000 480000 0 120000 480000 0 140000 480000 0 160000 480000 0 180000 480000 0 200000 480000 0 220000 480000 0 240000 480000 0 260000 480000 0 280000 480000 0 300000 480000 0 320000 480000 0 340000 480000 0 360000 480000 0 380000 480000 0 400000 480000 0 420000 480000 0 440000 480000 0 460000 480000 0 480000 480000 0 500000 480000 0 520000 480000 0 540000 480000 0 560000 480000 0 580000 480000 0 600000 480000 0 620000 480000 0 640000 480000 0 660000 480000 0 680000 480000 0 700000 480000 0 720000 480000 0 740000 480000 0 760000 480000 0 780000 480000 0 800000 480000 0 820000 480000 0 840000 480000 0 860000 480000 0 880000 480000 0 900000 480000 0 920000 480000 0 940000 480000 0 960000 480000 0 980000 480000 0 1e+06 480000 0 0 500000 0 20000 500000 0 40000 500000 0 60000 500000 0 80000 500000 0 100000 500000 0 120000 500000 0 140000 500000 0 160000 500000 0 180000 500000 0 200000 500000 0 220000 500000 0 240000 500000 0 260000 500000 0 280000 500000 0 300000 500000 0 320000 500000 0 340000 500000 0 360000 500000 0 380000 500000 0 400000 500000 0 420000 500000 0 440000 500000 0 460000 500000 0 480000 500000 0 500000 500000 0 520000 500000 0 540000 500000 0 560000 500000 0 580000 500000 0 600000 500000 0 620000 500000 0 640000 500000 0 660000 500000 0 680000 500000 0 700000 500000 0 720000 500000 0 740000 500000 0 760000 500000 0 780000 500000 0 800000 500000 0 820000 500000 0 840000 500000 0 860000 500000 0 880000 500000 0 900000 500000 0 920000 500000 0 940000 500000 0 960000 500000 0 980000 500000 0 1e+06 500000 0 + + + + +0 1 52 51 1 2 53 52 2 3 54 53 3 4 55 54 4 5 56 55 5 6 57 56 6 7 58 57 7 8 59 58 8 9 60 59 9 10 61 60 10 11 62 61 11 12 63 62 12 13 64 63 13 14 65 64 14 15 66 65 15 16 67 66 16 17 68 67 17 18 69 68 18 19 70 69 19 20 71 70 20 21 72 71 21 22 73 72 22 23 74 73 23 24 75 74 24 25 76 75 25 26 77 76 26 27 78 77 27 28 79 78 28 29 80 79 29 30 81 80 30 31 82 81 31 32 83 82 32 33 84 83 33 34 85 84 34 35 86 85 35 36 87 86 36 37 88 87 37 38 89 88 38 39 90 89 39 40 91 90 40 41 92 91 41 42 93 92 42 43 94 93 43 44 95 94 44 45 96 95 45 46 97 96 46 47 98 97 47 48 99 98 48 49 100 99 49 50 101 100 51 52 103 102 52 53 104 103 53 54 105 104 54 55 106 105 55 56 107 106 56 57 108 107 57 58 109 108 58 59 110 109 59 60 111 110 60 61 112 111 61 62 113 112 62 63 114 113 63 64 115 114 64 65 116 115 65 66 117 116 66 67 118 117 67 68 119 118 68 69 120 119 69 70 121 120 70 71 122 121 71 72 123 122 72 73 124 123 73 74 125 124 74 75 126 125 75 76 127 126 76 77 128 127 77 78 129 128 78 79 130 129 79 80 131 130 80 81 132 131 81 82 133 132 82 83 134 133 83 84 135 134 84 85 136 135 85 86 137 136 86 87 138 137 87 88 139 138 88 89 140 139 89 90 141 140 90 91 142 141 91 92 143 142 92 93 144 143 93 94 145 144 94 95 146 145 95 96 147 146 96 97 148 147 97 98 149 148 98 99 150 149 99 100 151 150 100 101 152 151 102 103 154 153 103 104 155 154 104 105 156 155 105 106 157 156 106 107 158 157 107 108 159 158 108 109 160 159 109 110 161 160 110 111 162 161 111 112 163 162 112 113 164 163 113 114 165 164 114 115 166 165 115 116 167 166 116 117 168 167 117 118 169 168 118 119 170 169 119 120 171 170 120 121 172 171 121 122 173 172 122 123 174 173 123 124 175 174 124 125 176 175 125 126 177 176 126 127 178 177 127 128 179 178 128 129 180 179 129 130 181 180 130 131 182 181 131 132 183 182 132 133 184 183 133 134 185 184 134 135 186 185 135 136 187 186 136 137 188 187 137 138 189 188 138 139 190 189 139 140 191 190 140 141 192 191 141 142 193 192 142 143 194 193 143 144 195 194 144 145 196 195 145 146 197 196 146 147 198 197 147 148 199 198 148 149 200 199 149 150 201 200 150 151 202 201 151 152 203 202 153 154 205 204 154 155 206 205 155 156 207 206 156 157 208 207 157 158 209 208 158 159 210 209 159 160 211 210 160 161 212 211 161 162 213 212 162 163 214 213 163 164 215 214 164 165 216 215 165 166 217 216 166 167 218 217 167 168 219 218 168 169 220 219 169 170 221 220 170 171 222 221 171 172 223 222 172 173 224 223 173 174 225 224 174 175 226 225 175 176 227 226 176 177 228 227 177 178 229 228 178 179 230 229 179 180 231 230 180 181 232 231 181 182 233 232 182 183 234 233 183 184 235 234 184 185 236 235 185 186 237 236 186 187 238 237 187 188 239 238 188 189 240 239 189 190 241 240 190 191 242 241 191 192 243 242 192 193 244 243 193 194 245 244 194 195 246 245 195 196 247 246 196 197 248 247 197 198 249 248 198 199 250 249 199 200 251 250 200 201 252 251 201 202 253 252 202 203 254 253 204 205 256 255 205 206 257 256 206 207 258 257 207 208 259 258 208 209 260 259 209 210 261 260 210 211 262 261 211 212 263 262 212 213 264 263 213 214 265 264 214 215 266 265 215 216 267 266 216 217 268 267 217 218 269 268 218 219 270 269 219 220 271 270 220 221 272 271 221 222 273 272 222 223 274 273 223 224 275 274 224 225 276 275 225 226 277 276 226 227 278 277 227 228 279 278 228 229 280 279 229 230 281 280 230 231 282 281 231 232 283 282 232 233 284 283 233 234 285 284 234 235 286 285 235 236 287 286 236 237 288 287 237 238 289 288 238 239 290 289 239 240 291 290 240 241 292 291 241 242 293 292 242 243 294 293 243 244 295 294 244 245 296 295 245 246 297 296 246 247 298 297 247 248 299 298 248 249 300 299 249 250 301 300 250 251 302 301 251 252 303 302 252 253 304 303 253 254 305 304 255 256 307 306 256 257 308 307 257 258 309 308 258 259 310 309 259 260 311 310 260 261 312 311 261 262 313 312 262 263 314 313 263 264 315 314 264 265 316 315 265 266 317 316 266 267 318 317 267 268 319 318 268 269 320 319 269 270 321 320 270 271 322 321 271 272 323 322 272 273 324 323 273 274 325 324 274 275 326 325 275 276 327 326 276 277 328 327 277 278 329 328 278 279 330 329 279 280 331 330 280 281 332 331 281 282 333 332 282 283 334 333 283 284 335 334 284 285 336 335 285 286 337 336 286 287 338 337 287 288 339 338 288 289 340 339 289 290 341 340 290 291 342 341 291 292 343 342 292 293 344 343 293 294 345 344 294 295 346 345 295 296 347 346 296 297 348 347 297 298 349 348 298 299 350 349 299 300 351 350 300 301 352 351 301 302 353 352 302 303 354 353 303 304 355 354 304 305 356 355 306 307 358 357 307 308 359 358 308 309 360 359 309 310 361 360 310 311 362 361 311 312 363 362 312 313 364 363 313 314 365 364 314 315 366 365 315 316 367 366 316 317 368 367 317 318 369 368 318 319 370 369 319 320 371 370 320 321 372 371 321 322 373 372 322 323 374 373 323 324 375 374 324 325 376 375 325 326 377 376 326 327 378 377 327 328 379 378 328 329 380 379 329 330 381 380 330 331 382 381 331 332 383 382 332 333 384 383 333 334 385 384 334 335 386 385 335 336 387 386 336 337 388 387 337 338 389 388 338 339 390 389 339 340 391 390 340 341 392 391 341 342 393 392 342 343 394 393 343 344 395 394 344 345 396 395 345 346 397 396 346 347 398 397 347 348 399 398 348 349 400 399 349 350 401 400 350 351 402 401 351 352 403 402 352 353 404 403 353 354 405 404 354 355 406 405 355 356 407 406 357 358 409 408 358 359 410 409 359 360 411 410 360 361 412 411 361 362 413 412 362 363 414 413 363 364 415 414 364 365 416 415 365 366 417 416 366 367 418 417 367 368 419 418 368 369 420 419 369 370 421 420 370 371 422 421 371 372 423 422 372 373 424 423 373 374 425 424 374 375 426 425 375 376 427 426 376 377 428 427 377 378 429 428 378 379 430 429 379 380 431 430 380 381 432 431 381 382 433 432 382 383 434 433 383 384 435 434 384 385 436 435 385 386 437 436 386 387 438 437 387 388 439 438 388 389 440 439 389 390 441 440 390 391 442 441 391 392 443 442 392 393 444 443 393 394 445 444 394 395 446 445 395 396 447 446 396 397 448 447 397 398 449 448 398 399 450 449 399 400 451 450 400 401 452 451 401 402 453 452 402 403 454 453 403 404 455 454 404 405 456 455 405 406 457 456 406 407 458 457 408 409 460 459 409 410 461 460 410 411 462 461 411 412 463 462 412 413 464 463 413 414 465 464 414 415 466 465 415 416 467 466 416 417 468 467 417 418 469 468 418 419 470 469 419 420 471 470 420 421 472 471 421 422 473 472 422 423 474 473 423 424 475 474 424 425 476 475 425 426 477 476 426 427 478 477 427 428 479 478 428 429 480 479 429 430 481 480 430 431 482 481 431 432 483 482 432 433 484 483 433 434 485 484 434 435 486 485 435 436 487 486 436 437 488 487 437 438 489 488 438 439 490 489 439 440 491 490 440 441 492 491 441 442 493 492 442 443 494 493 443 444 495 494 444 445 496 495 445 446 497 496 446 447 498 497 447 448 499 498 448 449 500 499 449 450 501 500 450 451 502 501 451 452 503 502 452 453 504 503 453 454 505 504 454 455 506 505 455 456 507 506 456 457 508 507 457 458 509 508 459 460 511 510 460 461 512 511 461 462 513 512 462 463 514 513 463 464 515 514 464 465 516 515 465 466 517 516 466 467 518 517 467 468 519 518 468 469 520 519 469 470 521 520 470 471 522 521 471 472 523 522 472 473 524 523 473 474 525 524 474 475 526 525 475 476 527 526 476 477 528 527 477 478 529 528 478 479 530 529 479 480 531 530 480 481 532 531 481 482 533 532 482 483 534 533 483 484 535 534 484 485 536 535 485 486 537 536 486 487 538 537 487 488 539 538 488 489 540 539 489 490 541 540 490 491 542 541 491 492 543 542 492 493 544 543 493 494 545 544 494 495 546 545 495 496 547 546 496 497 548 547 497 498 549 548 498 499 550 549 499 500 551 550 500 501 552 551 501 502 553 552 502 503 554 553 503 504 555 554 504 505 556 555 505 506 557 556 506 507 558 557 507 508 559 558 508 509 560 559 510 511 562 561 511 512 563 562 512 513 564 563 513 514 565 564 514 515 566 565 515 516 567 566 516 517 568 567 517 518 569 568 518 519 570 569 519 520 571 570 520 521 572 571 521 522 573 572 522 523 574 573 523 524 575 574 524 525 576 575 525 526 577 576 526 527 578 577 527 528 579 578 528 529 580 579 529 530 581 580 530 531 582 581 531 532 583 582 532 533 584 583 533 534 585 584 534 535 586 585 535 536 587 586 536 537 588 587 537 538 589 588 538 539 590 589 539 540 591 590 540 541 592 591 541 542 593 592 542 543 594 593 543 544 595 594 544 545 596 595 545 546 597 596 546 547 598 597 547 548 599 598 548 549 600 599 549 550 601 600 550 551 602 601 551 552 603 602 552 553 604 603 553 554 605 604 554 555 606 605 555 556 607 606 556 557 608 607 557 558 609 608 558 559 610 609 559 560 611 610 561 562 613 612 562 563 614 613 563 564 615 614 564 565 616 615 565 566 617 616 566 567 618 617 567 568 619 618 568 569 620 619 569 570 621 620 570 571 622 621 571 572 623 622 572 573 624 623 573 574 625 624 574 575 626 625 575 576 627 626 576 577 628 627 577 578 629 628 578 579 630 629 579 580 631 630 580 581 632 631 581 582 633 632 582 583 634 633 583 584 635 634 584 585 636 635 585 586 637 636 586 587 638 637 587 588 639 638 588 589 640 639 589 590 641 640 590 591 642 641 591 592 643 642 592 593 644 643 593 594 645 644 594 595 646 645 595 596 647 646 596 597 648 647 597 598 649 648 598 599 650 649 599 600 651 650 600 601 652 651 601 602 653 652 602 603 654 653 603 604 655 654 604 605 656 655 605 606 657 656 606 607 658 657 607 608 659 658 608 609 660 659 609 610 661 660 610 611 662 661 612 613 664 663 613 614 665 664 614 615 666 665 615 616 667 666 616 617 668 667 617 618 669 668 618 619 670 669 619 620 671 670 620 621 672 671 621 622 673 672 622 623 674 673 623 624 675 674 624 625 676 675 625 626 677 676 626 627 678 677 627 628 679 678 628 629 680 679 629 630 681 680 630 631 682 681 631 632 683 682 632 633 684 683 633 634 685 684 634 635 686 685 635 636 687 686 636 637 688 687 637 638 689 688 638 639 690 689 639 640 691 690 640 641 692 691 641 642 693 692 642 643 694 693 643 644 695 694 644 645 696 695 645 646 697 696 646 647 698 697 647 648 699 698 648 649 700 699 649 650 701 700 650 651 702 701 651 652 703 702 652 653 704 703 653 654 705 704 654 655 706 705 655 656 707 706 656 657 708 707 657 658 709 708 658 659 710 709 659 660 711 710 660 661 712 711 661 662 713 712 663 664 715 714 664 665 716 715 665 666 717 716 666 667 718 717 667 668 719 718 668 669 720 719 669 670 721 720 670 671 722 721 671 672 723 722 672 673 724 723 673 674 725 724 674 675 726 725 675 676 727 726 676 677 728 727 677 678 729 728 678 679 730 729 679 680 731 730 680 681 732 731 681 682 733 732 682 683 734 733 683 684 735 734 684 685 736 735 685 686 737 736 686 687 738 737 687 688 739 738 688 689 740 739 689 690 741 740 690 691 742 741 691 692 743 742 692 693 744 743 693 694 745 744 694 695 746 745 695 696 747 746 696 697 748 747 697 698 749 748 698 699 750 749 699 700 751 750 700 701 752 751 701 702 753 752 702 703 754 753 703 704 755 754 704 705 756 755 705 706 757 756 706 707 758 757 707 708 759 758 708 709 760 759 709 710 761 760 710 711 762 761 711 712 763 762 712 713 764 763 714 715 766 765 715 716 767 766 716 717 768 767 717 718 769 768 718 719 770 769 719 720 771 770 720 721 772 771 721 722 773 772 722 723 774 773 723 724 775 774 724 725 776 775 725 726 777 776 726 727 778 777 727 728 779 778 728 729 780 779 729 730 781 780 730 731 782 781 731 732 783 782 732 733 784 783 733 734 785 784 734 735 786 785 735 736 787 786 736 737 788 787 737 738 789 788 738 739 790 789 739 740 791 790 740 741 792 791 741 742 793 792 742 743 794 793 743 744 795 794 744 745 796 795 745 746 797 796 746 747 798 797 747 748 799 798 748 749 800 799 749 750 801 800 750 751 802 801 751 752 803 802 752 753 804 803 753 754 805 804 754 755 806 805 755 756 807 806 756 757 808 807 757 758 809 808 758 759 810 809 759 760 811 810 760 761 812 811 761 762 813 812 762 763 814 813 763 764 815 814 765 766 817 816 766 767 818 817 767 768 819 818 768 769 820 819 769 770 821 820 770 771 822 821 771 772 823 822 772 773 824 823 773 774 825 824 774 775 826 825 775 776 827 826 776 777 828 827 777 778 829 828 778 779 830 829 779 780 831 830 780 781 832 831 781 782 833 832 782 783 834 833 783 784 835 834 784 785 836 835 785 786 837 836 786 787 838 837 787 788 839 838 788 789 840 839 789 790 841 840 790 791 842 841 791 792 843 842 792 793 844 843 793 794 845 844 794 795 846 845 795 796 847 846 796 797 848 847 797 798 849 848 798 799 850 849 799 800 851 850 800 801 852 851 801 802 853 852 802 803 854 853 803 804 855 854 804 805 856 855 805 806 857 856 806 807 858 857 807 808 859 858 808 809 860 859 809 810 861 860 810 811 862 861 811 812 863 862 812 813 864 863 813 814 865 864 814 815 866 865 816 817 868 867 817 818 869 868 818 819 870 869 819 820 871 870 820 821 872 871 821 822 873 872 822 823 874 873 823 824 875 874 824 825 876 875 825 826 877 876 826 827 878 877 827 828 879 878 828 829 880 879 829 830 881 880 830 831 882 881 831 832 883 882 832 833 884 883 833 834 885 884 834 835 886 885 835 836 887 886 836 837 888 887 837 838 889 888 838 839 890 889 839 840 891 890 840 841 892 891 841 842 893 892 842 843 894 893 843 844 895 894 844 845 896 895 845 846 897 896 846 847 898 897 847 848 899 898 848 849 900 899 849 850 901 900 850 851 902 901 851 852 903 902 852 853 904 903 853 854 905 904 854 855 906 905 855 856 907 906 856 857 908 907 857 858 909 908 858 859 910 909 859 860 911 910 860 861 912 911 861 862 913 912 862 863 914 913 863 864 915 914 864 865 916 915 865 866 917 916 867 868 919 918 868 869 920 919 869 870 921 920 870 871 922 921 871 872 923 922 872 873 924 923 873 874 925 924 874 875 926 925 875 876 927 926 876 877 928 927 877 878 929 928 878 879 930 929 879 880 931 930 880 881 932 931 881 882 933 932 882 883 934 933 883 884 935 934 884 885 936 935 885 886 937 936 886 887 938 937 887 888 939 938 888 889 940 939 889 890 941 940 890 891 942 941 891 892 943 942 892 893 944 943 893 894 945 944 894 895 946 945 895 896 947 946 896 897 948 947 897 898 949 948 898 899 950 949 899 900 951 950 900 901 952 951 901 902 953 952 902 903 954 953 903 904 955 954 904 905 956 955 905 906 957 956 906 907 958 957 907 908 959 958 908 909 960 959 909 910 961 960 910 911 962 961 911 912 963 962 912 913 964 963 913 914 965 964 914 915 966 965 915 916 967 966 916 917 968 967 918 919 970 969 919 920 971 970 920 921 972 971 921 922 973 972 922 923 974 973 923 924 975 974 924 925 976 975 925 926 977 976 926 927 978 977 927 928 979 978 928 929 980 979 929 930 981 980 930 931 982 981 931 932 983 982 932 933 984 983 933 934 985 984 934 935 986 985 935 936 987 986 936 937 988 987 937 938 989 988 938 939 990 989 939 940 991 990 940 941 992 991 941 942 993 992 942 943 994 993 943 944 995 994 944 945 996 995 945 946 997 996 946 947 998 997 947 948 999 998 948 949 1000 999 949 950 1001 1000 950 951 1002 1001 951 952 1003 1002 952 953 1004 1003 953 954 1005 1004 954 955 1006 1005 955 956 1007 1006 956 957 1008 1007 957 958 1009 1008 958 959 1010 1009 959 960 1011 1010 960 961 1012 1011 961 962 1013 1012 962 963 1014 1013 963 964 1015 1014 964 965 1016 1015 965 966 1017 1016 966 967 1018 1017 967 968 1019 1018 969 970 1021 1020 970 971 1022 1021 971 972 1023 1022 972 973 1024 1023 973 974 1025 1024 974 975 1026 1025 975 976 1027 1026 976 977 1028 1027 977 978 1029 1028 978 979 1030 1029 979 980 1031 1030 980 981 1032 1031 981 982 1033 1032 982 983 1034 1033 983 984 1035 1034 984 985 1036 1035 985 986 1037 1036 986 987 1038 1037 987 988 1039 1038 988 989 1040 1039 989 990 1041 1040 990 991 1042 1041 991 992 1043 1042 992 993 1044 1043 993 994 1045 1044 994 995 1046 1045 995 996 1047 1046 996 997 1048 1047 997 998 1049 1048 998 999 1050 1049 999 1000 1051 1050 1000 1001 1052 1051 1001 1002 1053 1052 1002 1003 1054 1053 1003 1004 1055 1054 1004 1005 1056 1055 1005 1006 1057 1056 1006 1007 1058 1057 1007 1008 1059 1058 1008 1009 1060 1059 1009 1010 1061 1060 1010 1011 1062 1061 1011 1012 1063 1062 1012 1013 1064 1063 1013 1014 1065 1064 1014 1015 1066 1065 1015 1016 1067 1066 1016 1017 1068 1067 1017 1018 1069 1068 1018 1019 1070 1069 1020 1021 1072 1071 1021 1022 1073 1072 1022 1023 1074 1073 1023 1024 1075 1074 1024 1025 1076 1075 1025 1026 1077 1076 1026 1027 1078 1077 1027 1028 1079 1078 1028 1029 1080 1079 1029 1030 1081 1080 1030 1031 1082 1081 1031 1032 1083 1082 1032 1033 1084 1083 1033 1034 1085 1084 1034 1035 1086 1085 1035 1036 1087 1086 1036 1037 1088 1087 1037 1038 1089 1088 1038 1039 1090 1089 1039 1040 1091 1090 1040 1041 1092 1091 1041 1042 1093 1092 1042 1043 1094 1093 1043 1044 1095 1094 1044 1045 1096 1095 1045 1046 1097 1096 1046 1047 1098 1097 1047 1048 1099 1098 1048 1049 1100 1099 1049 1050 1101 1100 1050 1051 1102 1101 1051 1052 1103 1102 1052 1053 1104 1103 1053 1054 1105 1104 1054 1055 1106 1105 1055 1056 1107 1106 1056 1057 1108 1107 1057 1058 1109 1108 1058 1059 1110 1109 1059 1060 1111 1110 1060 1061 1112 1111 1061 1062 1113 1112 1062 1063 1114 1113 1063 1064 1115 1114 1064 1065 1116 1115 1065 1066 1117 1116 1066 1067 1118 1117 1067 1068 1119 1118 1068 1069 1120 1119 1069 1070 1121 1120 1071 1072 1123 1122 1072 1073 1124 1123 1073 1074 1125 1124 1074 1075 1126 1125 1075 1076 1127 1126 1076 1077 1128 1127 1077 1078 1129 1128 1078 1079 1130 1129 1079 1080 1131 1130 1080 1081 1132 1131 1081 1082 1133 1132 1082 1083 1134 1133 1083 1084 1135 1134 1084 1085 1136 1135 1085 1086 1137 1136 1086 1087 1138 1137 1087 1088 1139 1138 1088 1089 1140 1139 1089 1090 1141 1140 1090 1091 1142 1141 1091 1092 1143 1142 1092 1093 1144 1143 1093 1094 1145 1144 1094 1095 1146 1145 1095 1096 1147 1146 1096 1097 1148 1147 1097 1098 1149 1148 1098 1099 1150 1149 1099 1100 1151 1150 1100 1101 1152 1151 1101 1102 1153 1152 1102 1103 1154 1153 1103 1104 1155 1154 1104 1105 1156 1155 1105 1106 1157 1156 1106 1107 1158 1157 1107 1108 1159 1158 1108 1109 1160 1159 1109 1110 1161 1160 1110 1111 1162 1161 1111 1112 1163 1162 1112 1113 1164 1163 1113 1114 1165 1164 1114 1115 1166 1165 1115 1116 1167 1166 1116 1117 1168 1167 1117 1118 1169 1168 1118 1119 1170 1169 1119 1120 1171 1170 1120 1121 1172 1171 1122 1123 1174 1173 1123 1124 1175 1174 1124 1125 1176 1175 1125 1126 1177 1176 1126 1127 1178 1177 1127 1128 1179 1178 1128 1129 1180 1179 1129 1130 1181 1180 1130 1131 1182 1181 1131 1132 1183 1182 1132 1133 1184 1183 1133 1134 1185 1184 1134 1135 1186 1185 1135 1136 1187 1186 1136 1137 1188 1187 1137 1138 1189 1188 1138 1139 1190 1189 1139 1140 1191 1190 1140 1141 1192 1191 1141 1142 1193 1192 1142 1143 1194 1193 1143 1144 1195 1194 1144 1145 1196 1195 1145 1146 1197 1196 1146 1147 1198 1197 1147 1148 1199 1198 1148 1149 1200 1199 1149 1150 1201 1200 1150 1151 1202 1201 1151 1152 1203 1202 1152 1153 1204 1203 1153 1154 1205 1204 1154 1155 1206 1205 1155 1156 1207 1206 1156 1157 1208 1207 1157 1158 1209 1208 1158 1159 1210 1209 1159 1160 1211 1210 1160 1161 1212 1211 1161 1162 1213 1212 1162 1163 1214 1213 1163 1164 1215 1214 1164 1165 1216 1215 1165 1166 1217 1216 1166 1167 1218 1217 1167 1168 1219 1218 1168 1169 1220 1219 1169 1170 1221 1220 1170 1171 1222 1221 1171 1172 1223 1222 1173 1174 1225 1224 1174 1175 1226 1225 1175 1176 1227 1226 1176 1177 1228 1227 1177 1178 1229 1228 1178 1179 1230 1229 1179 1180 1231 1230 1180 1181 1232 1231 1181 1182 1233 1232 1182 1183 1234 1233 1183 1184 1235 1234 1184 1185 1236 1235 1185 1186 1237 1236 1186 1187 1238 1237 1187 1188 1239 1238 1188 1189 1240 1239 1189 1190 1241 1240 1190 1191 1242 1241 1191 1192 1243 1242 1192 1193 1244 1243 1193 1194 1245 1244 1194 1195 1246 1245 1195 1196 1247 1246 1196 1197 1248 1247 1197 1198 1249 1248 1198 1199 1250 1249 1199 1200 1251 1250 1200 1201 1252 1251 1201 1202 1253 1252 1202 1203 1254 1253 1203 1204 1255 1254 1204 1205 1256 1255 1205 1206 1257 1256 1206 1207 1258 1257 1207 1208 1259 1258 1208 1209 1260 1259 1209 1210 1261 1260 1210 1211 1262 1261 1211 1212 1263 1262 1212 1213 1264 1263 1213 1214 1265 1264 1214 1215 1266 1265 1215 1216 1267 1266 1216 1217 1268 1267 1217 1218 1269 1268 1218 1219 1270 1269 1219 1220 1271 1270 1220 1221 1272 1271 1221 1222 1273 1272 1222 1223 1274 1273 1224 1225 1276 1275 1225 1226 1277 1276 1226 1227 1278 1277 1227 1228 1279 1278 1228 1229 1280 1279 1229 1230 1281 1280 1230 1231 1282 1281 1231 1232 1283 1282 1232 1233 1284 1283 1233 1234 1285 1284 1234 1235 1286 1285 1235 1236 1287 1286 1236 1237 1288 1287 1237 1238 1289 1288 1238 1239 1290 1289 1239 1240 1291 1290 1240 1241 1292 1291 1241 1242 1293 1292 1242 1243 1294 1293 1243 1244 1295 1294 1244 1245 1296 1295 1245 1246 1297 1296 1246 1247 1298 1297 1247 1248 1299 1298 1248 1249 1300 1299 1249 1250 1301 1300 1250 1251 1302 1301 1251 1252 1303 1302 1252 1253 1304 1303 1253 1254 1305 1304 1254 1255 1306 1305 1255 1256 1307 1306 1256 1257 1308 1307 1257 1258 1309 1308 1258 1259 1310 1309 1259 1260 1311 1310 1260 1261 1312 1311 1261 1262 1313 1312 1262 1263 1314 1313 1263 1264 1315 1314 1264 1265 1316 1315 1265 1266 1317 1316 1266 1267 1318 1317 1267 1268 1319 1318 1268 1269 1320 1319 1269 1270 1321 1320 1270 1271 1322 1321 1271 1272 1323 1322 1272 1273 1324 1323 1273 1274 1325 1324 + + +4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 504 508 512 516 520 524 528 532 536 540 544 548 552 556 560 564 568 572 576 580 584 588 592 596 600 604 608 612 616 620 624 628 632 636 640 644 648 652 656 660 664 668 672 676 680 684 688 692 696 700 704 708 712 716 720 724 728 732 736 740 744 748 752 756 760 764 768 772 776 780 784 788 792 796 800 804 808 812 816 820 824 828 832 836 840 844 848 852 856 860 864 868 872 876 880 884 888 892 896 900 904 908 912 916 920 924 928 932 936 940 944 948 952 956 960 964 968 972 976 980 984 988 992 996 1000 1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1100 1104 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 1300 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1400 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 1492 1496 1500 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664 1668 1672 1676 1680 1684 1688 1692 1696 1700 1704 1708 1712 1716 1720 1724 1728 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788 1792 1796 1800 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1900 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 2052 2056 2060 2064 2068 2072 2076 2080 2084 2088 2092 2096 2100 2104 2108 2112 2116 2120 2124 2128 2132 2136 2140 2144 2148 2152 2156 2160 2164 2168 2172 2176 2180 2184 2188 2192 2196 2200 2204 2208 2212 2216 2220 2224 2228 2232 2236 2240 2244 2248 2252 2256 2260 2264 2268 2272 2276 2280 2284 2288 2292 2296 2300 2304 2308 2312 2316 2320 2324 2328 2332 2336 2340 2344 2348 2352 2356 2360 2364 2368 2372 2376 2380 2384 2388 2392 2396 2400 2404 2408 2412 2416 2420 2424 2428 2432 2436 2440 2444 2448 2452 2456 2460 2464 2468 2472 2476 2480 2484 2488 2492 2496 2500 2504 2508 2512 2516 2520 2524 2528 2532 2536 2540 2544 2548 2552 2556 2560 2564 2568 2572 2576 2580 2584 2588 2592 2596 2600 2604 2608 2612 2616 2620 2624 2628 2632 2636 2640 2644 2648 2652 2656 2660 2664 2668 2672 2676 2680 2684 2688 2692 2696 2700 2704 2708 2712 2716 2720 2724 2728 2732 2736 2740 2744 2748 2752 2756 2760 2764 2768 2772 2776 2780 2784 2788 2792 2796 2800 2804 2808 2812 2816 2820 2824 2828 2832 2836 2840 2844 2848 2852 2856 2860 2864 2868 2872 2876 2880 2884 2888 2892 2896 2900 2904 2908 2912 2916 2920 2924 2928 2932 2936 2940 2944 2948 2952 2956 2960 2964 2968 2972 2976 2980 2984 2988 2992 2996 3000 3004 3008 3012 3016 3020 3024 3028 3032 3036 3040 3044 3048 3052 3056 3060 3064 3068 3072 3076 3080 3084 3088 3092 3096 3100 3104 3108 3112 3116 3120 3124 3128 3132 3136 3140 3144 3148 3152 3156 3160 3164 3168 3172 3176 3180 3184 3188 3192 3196 3200 3204 3208 3212 3216 3220 3224 3228 3232 3236 3240 3244 3248 3252 3256 3260 3264 3268 3272 3276 3280 3284 3288 3292 3296 3300 3304 3308 3312 3316 3320 3324 3328 3332 3336 3340 3344 3348 3352 3356 3360 3364 3368 3372 3376 3380 3384 3388 3392 3396 3400 3404 3408 3412 3416 3420 3424 3428 3432 3436 3440 3444 3448 3452 3456 3460 3464 3468 3472 3476 3480 3484 3488 3492 3496 3500 3504 3508 3512 3516 3520 3524 3528 3532 3536 3540 3544 3548 3552 3556 3560 3564 3568 3572 3576 3580 3584 3588 3592 3596 3600 3604 3608 3612 3616 3620 3624 3628 3632 3636 3640 3644 3648 3652 3656 3660 3664 3668 3672 3676 3680 3684 3688 3692 3696 3700 3704 3708 3712 3716 3720 3724 3728 3732 3736 3740 3744 3748 3752 3756 3760 3764 3768 3772 3776 3780 3784 3788 3792 3796 3800 3804 3808 3812 3816 3820 3824 3828 3832 3836 3840 3844 3848 3852 3856 3860 3864 3868 3872 3876 3880 3884 3888 3892 3896 3900 3904 3908 3912 3916 3920 3924 3928 3932 3936 3940 3944 3948 3952 3956 3960 3964 3968 3972 3976 3980 3984 3988 3992 3996 4000 4004 4008 4012 4016 4020 4024 4028 4032 4036 4040 4044 4048 4052 4056 4060 4064 4068 4072 4076 4080 4084 4088 4092 4096 4100 4104 4108 4112 4116 4120 4124 4128 4132 4136 4140 4144 4148 4152 4156 4160 4164 4168 4172 4176 4180 4184 4188 4192 4196 4200 4204 4208 4212 4216 4220 4224 4228 4232 4236 4240 4244 4248 4252 4256 4260 4264 4268 4272 4276 4280 4284 4288 4292 4296 4300 4304 4308 4312 4316 4320 4324 4328 4332 4336 4340 4344 4348 4352 4356 4360 4364 4368 4372 4376 4380 4384 4388 4392 4396 4400 4404 4408 4412 4416 4420 4424 4428 4432 4436 4440 4444 4448 4452 4456 4460 4464 4468 4472 4476 4480 4484 4488 4492 4496 4500 4504 4508 4512 4516 4520 4524 4528 4532 4536 4540 4544 4548 4552 4556 4560 4564 4568 4572 4576 4580 4584 4588 4592 4596 4600 4604 4608 4612 4616 4620 4624 4628 4632 4636 4640 4644 4648 4652 4656 4660 4664 4668 4672 4676 4680 4684 4688 4692 4696 4700 4704 4708 4712 4716 4720 4724 4728 4732 4736 4740 4744 4748 4752 4756 4760 4764 4768 4772 4776 4780 4784 4788 4792 4796 4800 4804 4808 4812 4816 4820 4824 4828 4832 4836 4840 4844 4848 4852 4856 4860 4864 4868 4872 4876 4880 4884 4888 4892 4896 4900 4904 4908 4912 4916 4920 4924 4928 4932 4936 4940 4944 4948 4952 4956 4960 4964 4968 4972 4976 4980 4984 4988 4992 4996 5000 + + +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 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 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 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 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 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 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 + + + + + diff --git a/tests/gwb-grid/oceanic_plate_indicator.wb b/tests/gwb-grid/oceanic_plate_indicator.wb new file mode 100644 index 000000000..8938d1b26 --- /dev/null +++ b/tests/gwb-grid/oceanic_plate_indicator.wb @@ -0,0 +1,30 @@ +{ +"version":"1.2", +"cross section": [[0,0],[1000e3,0e3]], +"coordinate system":{"model":"cartesian"}, +"gravity model":{"model":"uniform", "magnitude":10}, +"indicator properties":[ + { + "index":0, + "name":"temperature" + }, + { + "index":1, + "name":"velocity" + }, + { + "index":2, + "name":"composition" + } +], +"features": +[ + {"model":"oceanic plate", "name":"First oceanic plate", "max depth":250e3, "coordinates":[[-1e3,1e10],[500e3,1e10],[500e3,-1e10],[-1e3,-1e10]], + "temperature models":[{"model":"uniform", "temperature":150}], + "indicator models":[{"model": "depth range", "min depth": 50e3, "max depth": 100e3, "indicators": ["temperature", "velocity"]}]}, + + {"model":"oceanic plate", "name":"Second oceanic plate", "max depth":250e3, "coordinates":[[500e3,1e10],[1000e3,1e10],[1000e3,-1e10],[500e3,-1e10]], + "temperature models":[{"model":"uniform", "temperature":20}], + "composition models":[{"model":"uniform", "compositions":[2]}]} +] +} diff --git a/tests/gwb-grid/oceanic_plate_indicator_overlap.grid b/tests/gwb-grid/oceanic_plate_indicator_overlap.grid new file mode 100644 index 000000000..c5b242a6c --- /dev/null +++ b/tests/gwb-grid/oceanic_plate_indicator_overlap.grid @@ -0,0 +1,15 @@ +# Grid File for creating vtk files to view in Paraview or Visit +grid_type = cartesian +dim = 2 +compositions = 1 +indicators = 3 + +# domain of the grid (x and y are the surface, z is vertical with 0 at the bottom) +x_min = 0e3 +x_max = 1000e3 +z_min = 0e3 +z_max = 500e3 + +# grid properties +n_cell_x = 50 +n_cell_z = 25 diff --git a/tests/gwb-grid/oceanic_plate_indicator_overlap.vtu b/tests/gwb-grid/oceanic_plate_indicator_overlap.vtu new file mode 100644 index 000000000..9966a45e6 --- /dev/null +++ b/tests/gwb-grid/oceanic_plate_indicator_overlap.vtu @@ -0,0 +1,57 @@ + + + + + + +500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 500000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 480000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 460000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 440000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 420000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 400000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 380000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 360000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 340000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 320000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 300000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 280000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 260000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 240000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 220000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 200000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 180000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 160000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 140000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 120000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 100000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 80000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 60000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 40000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1840.44 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1830.16 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1819.94 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1809.78 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1799.67 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1789.62 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1779.63 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1769.69 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1759.81 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1749.98 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1740.21 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1730.49 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 1720.82 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 150 150 150 150 150 150 150 150 150 150 150 150 150 150 150 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 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 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 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 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 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 1 1 1 1 1 1 1 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 1 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 1 1 1 1 1 1 1 1 1 1 1 1 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 20000 0 0 40000 0 0 60000 0 0 80000 0 0 100000 0 0 120000 0 0 140000 0 0 160000 0 0 180000 0 0 200000 0 0 220000 0 0 240000 0 0 260000 0 0 280000 0 0 300000 0 0 320000 0 0 340000 0 0 360000 0 0 380000 0 0 400000 0 0 420000 0 0 440000 0 0 460000 0 0 480000 0 0 500000 0 0 520000 0 0 540000 0 0 560000 0 0 580000 0 0 600000 0 0 620000 0 0 640000 0 0 660000 0 0 680000 0 0 700000 0 0 720000 0 0 740000 0 0 760000 0 0 780000 0 0 800000 0 0 820000 0 0 840000 0 0 860000 0 0 880000 0 0 900000 0 0 920000 0 0 940000 0 0 960000 0 0 980000 0 0 1e+06 0 0 0 20000 0 20000 20000 0 40000 20000 0 60000 20000 0 80000 20000 0 100000 20000 0 120000 20000 0 140000 20000 0 160000 20000 0 180000 20000 0 200000 20000 0 220000 20000 0 240000 20000 0 260000 20000 0 280000 20000 0 300000 20000 0 320000 20000 0 340000 20000 0 360000 20000 0 380000 20000 0 400000 20000 0 420000 20000 0 440000 20000 0 460000 20000 0 480000 20000 0 500000 20000 0 520000 20000 0 540000 20000 0 560000 20000 0 580000 20000 0 600000 20000 0 620000 20000 0 640000 20000 0 660000 20000 0 680000 20000 0 700000 20000 0 720000 20000 0 740000 20000 0 760000 20000 0 780000 20000 0 800000 20000 0 820000 20000 0 840000 20000 0 860000 20000 0 880000 20000 0 900000 20000 0 920000 20000 0 940000 20000 0 960000 20000 0 980000 20000 0 1e+06 20000 0 0 40000 0 20000 40000 0 40000 40000 0 60000 40000 0 80000 40000 0 100000 40000 0 120000 40000 0 140000 40000 0 160000 40000 0 180000 40000 0 200000 40000 0 220000 40000 0 240000 40000 0 260000 40000 0 280000 40000 0 300000 40000 0 320000 40000 0 340000 40000 0 360000 40000 0 380000 40000 0 400000 40000 0 420000 40000 0 440000 40000 0 460000 40000 0 480000 40000 0 500000 40000 0 520000 40000 0 540000 40000 0 560000 40000 0 580000 40000 0 600000 40000 0 620000 40000 0 640000 40000 0 660000 40000 0 680000 40000 0 700000 40000 0 720000 40000 0 740000 40000 0 760000 40000 0 780000 40000 0 800000 40000 0 820000 40000 0 840000 40000 0 860000 40000 0 880000 40000 0 900000 40000 0 920000 40000 0 940000 40000 0 960000 40000 0 980000 40000 0 1e+06 40000 0 0 60000 0 20000 60000 0 40000 60000 0 60000 60000 0 80000 60000 0 100000 60000 0 120000 60000 0 140000 60000 0 160000 60000 0 180000 60000 0 200000 60000 0 220000 60000 0 240000 60000 0 260000 60000 0 280000 60000 0 300000 60000 0 320000 60000 0 340000 60000 0 360000 60000 0 380000 60000 0 400000 60000 0 420000 60000 0 440000 60000 0 460000 60000 0 480000 60000 0 500000 60000 0 520000 60000 0 540000 60000 0 560000 60000 0 580000 60000 0 600000 60000 0 620000 60000 0 640000 60000 0 660000 60000 0 680000 60000 0 700000 60000 0 720000 60000 0 740000 60000 0 760000 60000 0 780000 60000 0 800000 60000 0 820000 60000 0 840000 60000 0 860000 60000 0 880000 60000 0 900000 60000 0 920000 60000 0 940000 60000 0 960000 60000 0 980000 60000 0 1e+06 60000 0 0 80000 0 20000 80000 0 40000 80000 0 60000 80000 0 80000 80000 0 100000 80000 0 120000 80000 0 140000 80000 0 160000 80000 0 180000 80000 0 200000 80000 0 220000 80000 0 240000 80000 0 260000 80000 0 280000 80000 0 300000 80000 0 320000 80000 0 340000 80000 0 360000 80000 0 380000 80000 0 400000 80000 0 420000 80000 0 440000 80000 0 460000 80000 0 480000 80000 0 500000 80000 0 520000 80000 0 540000 80000 0 560000 80000 0 580000 80000 0 600000 80000 0 620000 80000 0 640000 80000 0 660000 80000 0 680000 80000 0 700000 80000 0 720000 80000 0 740000 80000 0 760000 80000 0 780000 80000 0 800000 80000 0 820000 80000 0 840000 80000 0 860000 80000 0 880000 80000 0 900000 80000 0 920000 80000 0 940000 80000 0 960000 80000 0 980000 80000 0 1e+06 80000 0 0 100000 0 20000 100000 0 40000 100000 0 60000 100000 0 80000 100000 0 100000 100000 0 120000 100000 0 140000 100000 0 160000 100000 0 180000 100000 0 200000 100000 0 220000 100000 0 240000 100000 0 260000 100000 0 280000 100000 0 300000 100000 0 320000 100000 0 340000 100000 0 360000 100000 0 380000 100000 0 400000 100000 0 420000 100000 0 440000 100000 0 460000 100000 0 480000 100000 0 500000 100000 0 520000 100000 0 540000 100000 0 560000 100000 0 580000 100000 0 600000 100000 0 620000 100000 0 640000 100000 0 660000 100000 0 680000 100000 0 700000 100000 0 720000 100000 0 740000 100000 0 760000 100000 0 780000 100000 0 800000 100000 0 820000 100000 0 840000 100000 0 860000 100000 0 880000 100000 0 900000 100000 0 920000 100000 0 940000 100000 0 960000 100000 0 980000 100000 0 1e+06 100000 0 0 120000 0 20000 120000 0 40000 120000 0 60000 120000 0 80000 120000 0 100000 120000 0 120000 120000 0 140000 120000 0 160000 120000 0 180000 120000 0 200000 120000 0 220000 120000 0 240000 120000 0 260000 120000 0 280000 120000 0 300000 120000 0 320000 120000 0 340000 120000 0 360000 120000 0 380000 120000 0 400000 120000 0 420000 120000 0 440000 120000 0 460000 120000 0 480000 120000 0 500000 120000 0 520000 120000 0 540000 120000 0 560000 120000 0 580000 120000 0 600000 120000 0 620000 120000 0 640000 120000 0 660000 120000 0 680000 120000 0 700000 120000 0 720000 120000 0 740000 120000 0 760000 120000 0 780000 120000 0 800000 120000 0 820000 120000 0 840000 120000 0 860000 120000 0 880000 120000 0 900000 120000 0 920000 120000 0 940000 120000 0 960000 120000 0 980000 120000 0 1e+06 120000 0 0 140000 0 20000 140000 0 40000 140000 0 60000 140000 0 80000 140000 0 100000 140000 0 120000 140000 0 140000 140000 0 160000 140000 0 180000 140000 0 200000 140000 0 220000 140000 0 240000 140000 0 260000 140000 0 280000 140000 0 300000 140000 0 320000 140000 0 340000 140000 0 360000 140000 0 380000 140000 0 400000 140000 0 420000 140000 0 440000 140000 0 460000 140000 0 480000 140000 0 500000 140000 0 520000 140000 0 540000 140000 0 560000 140000 0 580000 140000 0 600000 140000 0 620000 140000 0 640000 140000 0 660000 140000 0 680000 140000 0 700000 140000 0 720000 140000 0 740000 140000 0 760000 140000 0 780000 140000 0 800000 140000 0 820000 140000 0 840000 140000 0 860000 140000 0 880000 140000 0 900000 140000 0 920000 140000 0 940000 140000 0 960000 140000 0 980000 140000 0 1e+06 140000 0 0 160000 0 20000 160000 0 40000 160000 0 60000 160000 0 80000 160000 0 100000 160000 0 120000 160000 0 140000 160000 0 160000 160000 0 180000 160000 0 200000 160000 0 220000 160000 0 240000 160000 0 260000 160000 0 280000 160000 0 300000 160000 0 320000 160000 0 340000 160000 0 360000 160000 0 380000 160000 0 400000 160000 0 420000 160000 0 440000 160000 0 460000 160000 0 480000 160000 0 500000 160000 0 520000 160000 0 540000 160000 0 560000 160000 0 580000 160000 0 600000 160000 0 620000 160000 0 640000 160000 0 660000 160000 0 680000 160000 0 700000 160000 0 720000 160000 0 740000 160000 0 760000 160000 0 780000 160000 0 800000 160000 0 820000 160000 0 840000 160000 0 860000 160000 0 880000 160000 0 900000 160000 0 920000 160000 0 940000 160000 0 960000 160000 0 980000 160000 0 1e+06 160000 0 0 180000 0 20000 180000 0 40000 180000 0 60000 180000 0 80000 180000 0 100000 180000 0 120000 180000 0 140000 180000 0 160000 180000 0 180000 180000 0 200000 180000 0 220000 180000 0 240000 180000 0 260000 180000 0 280000 180000 0 300000 180000 0 320000 180000 0 340000 180000 0 360000 180000 0 380000 180000 0 400000 180000 0 420000 180000 0 440000 180000 0 460000 180000 0 480000 180000 0 500000 180000 0 520000 180000 0 540000 180000 0 560000 180000 0 580000 180000 0 600000 180000 0 620000 180000 0 640000 180000 0 660000 180000 0 680000 180000 0 700000 180000 0 720000 180000 0 740000 180000 0 760000 180000 0 780000 180000 0 800000 180000 0 820000 180000 0 840000 180000 0 860000 180000 0 880000 180000 0 900000 180000 0 920000 180000 0 940000 180000 0 960000 180000 0 980000 180000 0 1e+06 180000 0 0 200000 0 20000 200000 0 40000 200000 0 60000 200000 0 80000 200000 0 100000 200000 0 120000 200000 0 140000 200000 0 160000 200000 0 180000 200000 0 200000 200000 0 220000 200000 0 240000 200000 0 260000 200000 0 280000 200000 0 300000 200000 0 320000 200000 0 340000 200000 0 360000 200000 0 380000 200000 0 400000 200000 0 420000 200000 0 440000 200000 0 460000 200000 0 480000 200000 0 500000 200000 0 520000 200000 0 540000 200000 0 560000 200000 0 580000 200000 0 600000 200000 0 620000 200000 0 640000 200000 0 660000 200000 0 680000 200000 0 700000 200000 0 720000 200000 0 740000 200000 0 760000 200000 0 780000 200000 0 800000 200000 0 820000 200000 0 840000 200000 0 860000 200000 0 880000 200000 0 900000 200000 0 920000 200000 0 940000 200000 0 960000 200000 0 980000 200000 0 1e+06 200000 0 0 220000 0 20000 220000 0 40000 220000 0 60000 220000 0 80000 220000 0 100000 220000 0 120000 220000 0 140000 220000 0 160000 220000 0 180000 220000 0 200000 220000 0 220000 220000 0 240000 220000 0 260000 220000 0 280000 220000 0 300000 220000 0 320000 220000 0 340000 220000 0 360000 220000 0 380000 220000 0 400000 220000 0 420000 220000 0 440000 220000 0 460000 220000 0 480000 220000 0 500000 220000 0 520000 220000 0 540000 220000 0 560000 220000 0 580000 220000 0 600000 220000 0 620000 220000 0 640000 220000 0 660000 220000 0 680000 220000 0 700000 220000 0 720000 220000 0 740000 220000 0 760000 220000 0 780000 220000 0 800000 220000 0 820000 220000 0 840000 220000 0 860000 220000 0 880000 220000 0 900000 220000 0 920000 220000 0 940000 220000 0 960000 220000 0 980000 220000 0 1e+06 220000 0 0 240000 0 20000 240000 0 40000 240000 0 60000 240000 0 80000 240000 0 100000 240000 0 120000 240000 0 140000 240000 0 160000 240000 0 180000 240000 0 200000 240000 0 220000 240000 0 240000 240000 0 260000 240000 0 280000 240000 0 300000 240000 0 320000 240000 0 340000 240000 0 360000 240000 0 380000 240000 0 400000 240000 0 420000 240000 0 440000 240000 0 460000 240000 0 480000 240000 0 500000 240000 0 520000 240000 0 540000 240000 0 560000 240000 0 580000 240000 0 600000 240000 0 620000 240000 0 640000 240000 0 660000 240000 0 680000 240000 0 700000 240000 0 720000 240000 0 740000 240000 0 760000 240000 0 780000 240000 0 800000 240000 0 820000 240000 0 840000 240000 0 860000 240000 0 880000 240000 0 900000 240000 0 920000 240000 0 940000 240000 0 960000 240000 0 980000 240000 0 1e+06 240000 0 0 260000 0 20000 260000 0 40000 260000 0 60000 260000 0 80000 260000 0 100000 260000 0 120000 260000 0 140000 260000 0 160000 260000 0 180000 260000 0 200000 260000 0 220000 260000 0 240000 260000 0 260000 260000 0 280000 260000 0 300000 260000 0 320000 260000 0 340000 260000 0 360000 260000 0 380000 260000 0 400000 260000 0 420000 260000 0 440000 260000 0 460000 260000 0 480000 260000 0 500000 260000 0 520000 260000 0 540000 260000 0 560000 260000 0 580000 260000 0 600000 260000 0 620000 260000 0 640000 260000 0 660000 260000 0 680000 260000 0 700000 260000 0 720000 260000 0 740000 260000 0 760000 260000 0 780000 260000 0 800000 260000 0 820000 260000 0 840000 260000 0 860000 260000 0 880000 260000 0 900000 260000 0 920000 260000 0 940000 260000 0 960000 260000 0 980000 260000 0 1e+06 260000 0 0 280000 0 20000 280000 0 40000 280000 0 60000 280000 0 80000 280000 0 100000 280000 0 120000 280000 0 140000 280000 0 160000 280000 0 180000 280000 0 200000 280000 0 220000 280000 0 240000 280000 0 260000 280000 0 280000 280000 0 300000 280000 0 320000 280000 0 340000 280000 0 360000 280000 0 380000 280000 0 400000 280000 0 420000 280000 0 440000 280000 0 460000 280000 0 480000 280000 0 500000 280000 0 520000 280000 0 540000 280000 0 560000 280000 0 580000 280000 0 600000 280000 0 620000 280000 0 640000 280000 0 660000 280000 0 680000 280000 0 700000 280000 0 720000 280000 0 740000 280000 0 760000 280000 0 780000 280000 0 800000 280000 0 820000 280000 0 840000 280000 0 860000 280000 0 880000 280000 0 900000 280000 0 920000 280000 0 940000 280000 0 960000 280000 0 980000 280000 0 1e+06 280000 0 0 300000 0 20000 300000 0 40000 300000 0 60000 300000 0 80000 300000 0 100000 300000 0 120000 300000 0 140000 300000 0 160000 300000 0 180000 300000 0 200000 300000 0 220000 300000 0 240000 300000 0 260000 300000 0 280000 300000 0 300000 300000 0 320000 300000 0 340000 300000 0 360000 300000 0 380000 300000 0 400000 300000 0 420000 300000 0 440000 300000 0 460000 300000 0 480000 300000 0 500000 300000 0 520000 300000 0 540000 300000 0 560000 300000 0 580000 300000 0 600000 300000 0 620000 300000 0 640000 300000 0 660000 300000 0 680000 300000 0 700000 300000 0 720000 300000 0 740000 300000 0 760000 300000 0 780000 300000 0 800000 300000 0 820000 300000 0 840000 300000 0 860000 300000 0 880000 300000 0 900000 300000 0 920000 300000 0 940000 300000 0 960000 300000 0 980000 300000 0 1e+06 300000 0 0 320000 0 20000 320000 0 40000 320000 0 60000 320000 0 80000 320000 0 100000 320000 0 120000 320000 0 140000 320000 0 160000 320000 0 180000 320000 0 200000 320000 0 220000 320000 0 240000 320000 0 260000 320000 0 280000 320000 0 300000 320000 0 320000 320000 0 340000 320000 0 360000 320000 0 380000 320000 0 400000 320000 0 420000 320000 0 440000 320000 0 460000 320000 0 480000 320000 0 500000 320000 0 520000 320000 0 540000 320000 0 560000 320000 0 580000 320000 0 600000 320000 0 620000 320000 0 640000 320000 0 660000 320000 0 680000 320000 0 700000 320000 0 720000 320000 0 740000 320000 0 760000 320000 0 780000 320000 0 800000 320000 0 820000 320000 0 840000 320000 0 860000 320000 0 880000 320000 0 900000 320000 0 920000 320000 0 940000 320000 0 960000 320000 0 980000 320000 0 1e+06 320000 0 0 340000 0 20000 340000 0 40000 340000 0 60000 340000 0 80000 340000 0 100000 340000 0 120000 340000 0 140000 340000 0 160000 340000 0 180000 340000 0 200000 340000 0 220000 340000 0 240000 340000 0 260000 340000 0 280000 340000 0 300000 340000 0 320000 340000 0 340000 340000 0 360000 340000 0 380000 340000 0 400000 340000 0 420000 340000 0 440000 340000 0 460000 340000 0 480000 340000 0 500000 340000 0 520000 340000 0 540000 340000 0 560000 340000 0 580000 340000 0 600000 340000 0 620000 340000 0 640000 340000 0 660000 340000 0 680000 340000 0 700000 340000 0 720000 340000 0 740000 340000 0 760000 340000 0 780000 340000 0 800000 340000 0 820000 340000 0 840000 340000 0 860000 340000 0 880000 340000 0 900000 340000 0 920000 340000 0 940000 340000 0 960000 340000 0 980000 340000 0 1e+06 340000 0 0 360000 0 20000 360000 0 40000 360000 0 60000 360000 0 80000 360000 0 100000 360000 0 120000 360000 0 140000 360000 0 160000 360000 0 180000 360000 0 200000 360000 0 220000 360000 0 240000 360000 0 260000 360000 0 280000 360000 0 300000 360000 0 320000 360000 0 340000 360000 0 360000 360000 0 380000 360000 0 400000 360000 0 420000 360000 0 440000 360000 0 460000 360000 0 480000 360000 0 500000 360000 0 520000 360000 0 540000 360000 0 560000 360000 0 580000 360000 0 600000 360000 0 620000 360000 0 640000 360000 0 660000 360000 0 680000 360000 0 700000 360000 0 720000 360000 0 740000 360000 0 760000 360000 0 780000 360000 0 800000 360000 0 820000 360000 0 840000 360000 0 860000 360000 0 880000 360000 0 900000 360000 0 920000 360000 0 940000 360000 0 960000 360000 0 980000 360000 0 1e+06 360000 0 0 380000 0 20000 380000 0 40000 380000 0 60000 380000 0 80000 380000 0 100000 380000 0 120000 380000 0 140000 380000 0 160000 380000 0 180000 380000 0 200000 380000 0 220000 380000 0 240000 380000 0 260000 380000 0 280000 380000 0 300000 380000 0 320000 380000 0 340000 380000 0 360000 380000 0 380000 380000 0 400000 380000 0 420000 380000 0 440000 380000 0 460000 380000 0 480000 380000 0 500000 380000 0 520000 380000 0 540000 380000 0 560000 380000 0 580000 380000 0 600000 380000 0 620000 380000 0 640000 380000 0 660000 380000 0 680000 380000 0 700000 380000 0 720000 380000 0 740000 380000 0 760000 380000 0 780000 380000 0 800000 380000 0 820000 380000 0 840000 380000 0 860000 380000 0 880000 380000 0 900000 380000 0 920000 380000 0 940000 380000 0 960000 380000 0 980000 380000 0 1e+06 380000 0 0 400000 0 20000 400000 0 40000 400000 0 60000 400000 0 80000 400000 0 100000 400000 0 120000 400000 0 140000 400000 0 160000 400000 0 180000 400000 0 200000 400000 0 220000 400000 0 240000 400000 0 260000 400000 0 280000 400000 0 300000 400000 0 320000 400000 0 340000 400000 0 360000 400000 0 380000 400000 0 400000 400000 0 420000 400000 0 440000 400000 0 460000 400000 0 480000 400000 0 500000 400000 0 520000 400000 0 540000 400000 0 560000 400000 0 580000 400000 0 600000 400000 0 620000 400000 0 640000 400000 0 660000 400000 0 680000 400000 0 700000 400000 0 720000 400000 0 740000 400000 0 760000 400000 0 780000 400000 0 800000 400000 0 820000 400000 0 840000 400000 0 860000 400000 0 880000 400000 0 900000 400000 0 920000 400000 0 940000 400000 0 960000 400000 0 980000 400000 0 1e+06 400000 0 0 420000 0 20000 420000 0 40000 420000 0 60000 420000 0 80000 420000 0 100000 420000 0 120000 420000 0 140000 420000 0 160000 420000 0 180000 420000 0 200000 420000 0 220000 420000 0 240000 420000 0 260000 420000 0 280000 420000 0 300000 420000 0 320000 420000 0 340000 420000 0 360000 420000 0 380000 420000 0 400000 420000 0 420000 420000 0 440000 420000 0 460000 420000 0 480000 420000 0 500000 420000 0 520000 420000 0 540000 420000 0 560000 420000 0 580000 420000 0 600000 420000 0 620000 420000 0 640000 420000 0 660000 420000 0 680000 420000 0 700000 420000 0 720000 420000 0 740000 420000 0 760000 420000 0 780000 420000 0 800000 420000 0 820000 420000 0 840000 420000 0 860000 420000 0 880000 420000 0 900000 420000 0 920000 420000 0 940000 420000 0 960000 420000 0 980000 420000 0 1e+06 420000 0 0 440000 0 20000 440000 0 40000 440000 0 60000 440000 0 80000 440000 0 100000 440000 0 120000 440000 0 140000 440000 0 160000 440000 0 180000 440000 0 200000 440000 0 220000 440000 0 240000 440000 0 260000 440000 0 280000 440000 0 300000 440000 0 320000 440000 0 340000 440000 0 360000 440000 0 380000 440000 0 400000 440000 0 420000 440000 0 440000 440000 0 460000 440000 0 480000 440000 0 500000 440000 0 520000 440000 0 540000 440000 0 560000 440000 0 580000 440000 0 600000 440000 0 620000 440000 0 640000 440000 0 660000 440000 0 680000 440000 0 700000 440000 0 720000 440000 0 740000 440000 0 760000 440000 0 780000 440000 0 800000 440000 0 820000 440000 0 840000 440000 0 860000 440000 0 880000 440000 0 900000 440000 0 920000 440000 0 940000 440000 0 960000 440000 0 980000 440000 0 1e+06 440000 0 0 460000 0 20000 460000 0 40000 460000 0 60000 460000 0 80000 460000 0 100000 460000 0 120000 460000 0 140000 460000 0 160000 460000 0 180000 460000 0 200000 460000 0 220000 460000 0 240000 460000 0 260000 460000 0 280000 460000 0 300000 460000 0 320000 460000 0 340000 460000 0 360000 460000 0 380000 460000 0 400000 460000 0 420000 460000 0 440000 460000 0 460000 460000 0 480000 460000 0 500000 460000 0 520000 460000 0 540000 460000 0 560000 460000 0 580000 460000 0 600000 460000 0 620000 460000 0 640000 460000 0 660000 460000 0 680000 460000 0 700000 460000 0 720000 460000 0 740000 460000 0 760000 460000 0 780000 460000 0 800000 460000 0 820000 460000 0 840000 460000 0 860000 460000 0 880000 460000 0 900000 460000 0 920000 460000 0 940000 460000 0 960000 460000 0 980000 460000 0 1e+06 460000 0 0 480000 0 20000 480000 0 40000 480000 0 60000 480000 0 80000 480000 0 100000 480000 0 120000 480000 0 140000 480000 0 160000 480000 0 180000 480000 0 200000 480000 0 220000 480000 0 240000 480000 0 260000 480000 0 280000 480000 0 300000 480000 0 320000 480000 0 340000 480000 0 360000 480000 0 380000 480000 0 400000 480000 0 420000 480000 0 440000 480000 0 460000 480000 0 480000 480000 0 500000 480000 0 520000 480000 0 540000 480000 0 560000 480000 0 580000 480000 0 600000 480000 0 620000 480000 0 640000 480000 0 660000 480000 0 680000 480000 0 700000 480000 0 720000 480000 0 740000 480000 0 760000 480000 0 780000 480000 0 800000 480000 0 820000 480000 0 840000 480000 0 860000 480000 0 880000 480000 0 900000 480000 0 920000 480000 0 940000 480000 0 960000 480000 0 980000 480000 0 1e+06 480000 0 0 500000 0 20000 500000 0 40000 500000 0 60000 500000 0 80000 500000 0 100000 500000 0 120000 500000 0 140000 500000 0 160000 500000 0 180000 500000 0 200000 500000 0 220000 500000 0 240000 500000 0 260000 500000 0 280000 500000 0 300000 500000 0 320000 500000 0 340000 500000 0 360000 500000 0 380000 500000 0 400000 500000 0 420000 500000 0 440000 500000 0 460000 500000 0 480000 500000 0 500000 500000 0 520000 500000 0 540000 500000 0 560000 500000 0 580000 500000 0 600000 500000 0 620000 500000 0 640000 500000 0 660000 500000 0 680000 500000 0 700000 500000 0 720000 500000 0 740000 500000 0 760000 500000 0 780000 500000 0 800000 500000 0 820000 500000 0 840000 500000 0 860000 500000 0 880000 500000 0 900000 500000 0 920000 500000 0 940000 500000 0 960000 500000 0 980000 500000 0 1e+06 500000 0 + + + + +0 1 52 51 1 2 53 52 2 3 54 53 3 4 55 54 4 5 56 55 5 6 57 56 6 7 58 57 7 8 59 58 8 9 60 59 9 10 61 60 10 11 62 61 11 12 63 62 12 13 64 63 13 14 65 64 14 15 66 65 15 16 67 66 16 17 68 67 17 18 69 68 18 19 70 69 19 20 71 70 20 21 72 71 21 22 73 72 22 23 74 73 23 24 75 74 24 25 76 75 25 26 77 76 26 27 78 77 27 28 79 78 28 29 80 79 29 30 81 80 30 31 82 81 31 32 83 82 32 33 84 83 33 34 85 84 34 35 86 85 35 36 87 86 36 37 88 87 37 38 89 88 38 39 90 89 39 40 91 90 40 41 92 91 41 42 93 92 42 43 94 93 43 44 95 94 44 45 96 95 45 46 97 96 46 47 98 97 47 48 99 98 48 49 100 99 49 50 101 100 51 52 103 102 52 53 104 103 53 54 105 104 54 55 106 105 55 56 107 106 56 57 108 107 57 58 109 108 58 59 110 109 59 60 111 110 60 61 112 111 61 62 113 112 62 63 114 113 63 64 115 114 64 65 116 115 65 66 117 116 66 67 118 117 67 68 119 118 68 69 120 119 69 70 121 120 70 71 122 121 71 72 123 122 72 73 124 123 73 74 125 124 74 75 126 125 75 76 127 126 76 77 128 127 77 78 129 128 78 79 130 129 79 80 131 130 80 81 132 131 81 82 133 132 82 83 134 133 83 84 135 134 84 85 136 135 85 86 137 136 86 87 138 137 87 88 139 138 88 89 140 139 89 90 141 140 90 91 142 141 91 92 143 142 92 93 144 143 93 94 145 144 94 95 146 145 95 96 147 146 96 97 148 147 97 98 149 148 98 99 150 149 99 100 151 150 100 101 152 151 102 103 154 153 103 104 155 154 104 105 156 155 105 106 157 156 106 107 158 157 107 108 159 158 108 109 160 159 109 110 161 160 110 111 162 161 111 112 163 162 112 113 164 163 113 114 165 164 114 115 166 165 115 116 167 166 116 117 168 167 117 118 169 168 118 119 170 169 119 120 171 170 120 121 172 171 121 122 173 172 122 123 174 173 123 124 175 174 124 125 176 175 125 126 177 176 126 127 178 177 127 128 179 178 128 129 180 179 129 130 181 180 130 131 182 181 131 132 183 182 132 133 184 183 133 134 185 184 134 135 186 185 135 136 187 186 136 137 188 187 137 138 189 188 138 139 190 189 139 140 191 190 140 141 192 191 141 142 193 192 142 143 194 193 143 144 195 194 144 145 196 195 145 146 197 196 146 147 198 197 147 148 199 198 148 149 200 199 149 150 201 200 150 151 202 201 151 152 203 202 153 154 205 204 154 155 206 205 155 156 207 206 156 157 208 207 157 158 209 208 158 159 210 209 159 160 211 210 160 161 212 211 161 162 213 212 162 163 214 213 163 164 215 214 164 165 216 215 165 166 217 216 166 167 218 217 167 168 219 218 168 169 220 219 169 170 221 220 170 171 222 221 171 172 223 222 172 173 224 223 173 174 225 224 174 175 226 225 175 176 227 226 176 177 228 227 177 178 229 228 178 179 230 229 179 180 231 230 180 181 232 231 181 182 233 232 182 183 234 233 183 184 235 234 184 185 236 235 185 186 237 236 186 187 238 237 187 188 239 238 188 189 240 239 189 190 241 240 190 191 242 241 191 192 243 242 192 193 244 243 193 194 245 244 194 195 246 245 195 196 247 246 196 197 248 247 197 198 249 248 198 199 250 249 199 200 251 250 200 201 252 251 201 202 253 252 202 203 254 253 204 205 256 255 205 206 257 256 206 207 258 257 207 208 259 258 208 209 260 259 209 210 261 260 210 211 262 261 211 212 263 262 212 213 264 263 213 214 265 264 214 215 266 265 215 216 267 266 216 217 268 267 217 218 269 268 218 219 270 269 219 220 271 270 220 221 272 271 221 222 273 272 222 223 274 273 223 224 275 274 224 225 276 275 225 226 277 276 226 227 278 277 227 228 279 278 228 229 280 279 229 230 281 280 230 231 282 281 231 232 283 282 232 233 284 283 233 234 285 284 234 235 286 285 235 236 287 286 236 237 288 287 237 238 289 288 238 239 290 289 239 240 291 290 240 241 292 291 241 242 293 292 242 243 294 293 243 244 295 294 244 245 296 295 245 246 297 296 246 247 298 297 247 248 299 298 248 249 300 299 249 250 301 300 250 251 302 301 251 252 303 302 252 253 304 303 253 254 305 304 255 256 307 306 256 257 308 307 257 258 309 308 258 259 310 309 259 260 311 310 260 261 312 311 261 262 313 312 262 263 314 313 263 264 315 314 264 265 316 315 265 266 317 316 266 267 318 317 267 268 319 318 268 269 320 319 269 270 321 320 270 271 322 321 271 272 323 322 272 273 324 323 273 274 325 324 274 275 326 325 275 276 327 326 276 277 328 327 277 278 329 328 278 279 330 329 279 280 331 330 280 281 332 331 281 282 333 332 282 283 334 333 283 284 335 334 284 285 336 335 285 286 337 336 286 287 338 337 287 288 339 338 288 289 340 339 289 290 341 340 290 291 342 341 291 292 343 342 292 293 344 343 293 294 345 344 294 295 346 345 295 296 347 346 296 297 348 347 297 298 349 348 298 299 350 349 299 300 351 350 300 301 352 351 301 302 353 352 302 303 354 353 303 304 355 354 304 305 356 355 306 307 358 357 307 308 359 358 308 309 360 359 309 310 361 360 310 311 362 361 311 312 363 362 312 313 364 363 313 314 365 364 314 315 366 365 315 316 367 366 316 317 368 367 317 318 369 368 318 319 370 369 319 320 371 370 320 321 372 371 321 322 373 372 322 323 374 373 323 324 375 374 324 325 376 375 325 326 377 376 326 327 378 377 327 328 379 378 328 329 380 379 329 330 381 380 330 331 382 381 331 332 383 382 332 333 384 383 333 334 385 384 334 335 386 385 335 336 387 386 336 337 388 387 337 338 389 388 338 339 390 389 339 340 391 390 340 341 392 391 341 342 393 392 342 343 394 393 343 344 395 394 344 345 396 395 345 346 397 396 346 347 398 397 347 348 399 398 348 349 400 399 349 350 401 400 350 351 402 401 351 352 403 402 352 353 404 403 353 354 405 404 354 355 406 405 355 356 407 406 357 358 409 408 358 359 410 409 359 360 411 410 360 361 412 411 361 362 413 412 362 363 414 413 363 364 415 414 364 365 416 415 365 366 417 416 366 367 418 417 367 368 419 418 368 369 420 419 369 370 421 420 370 371 422 421 371 372 423 422 372 373 424 423 373 374 425 424 374 375 426 425 375 376 427 426 376 377 428 427 377 378 429 428 378 379 430 429 379 380 431 430 380 381 432 431 381 382 433 432 382 383 434 433 383 384 435 434 384 385 436 435 385 386 437 436 386 387 438 437 387 388 439 438 388 389 440 439 389 390 441 440 390 391 442 441 391 392 443 442 392 393 444 443 393 394 445 444 394 395 446 445 395 396 447 446 396 397 448 447 397 398 449 448 398 399 450 449 399 400 451 450 400 401 452 451 401 402 453 452 402 403 454 453 403 404 455 454 404 405 456 455 405 406 457 456 406 407 458 457 408 409 460 459 409 410 461 460 410 411 462 461 411 412 463 462 412 413 464 463 413 414 465 464 414 415 466 465 415 416 467 466 416 417 468 467 417 418 469 468 418 419 470 469 419 420 471 470 420 421 472 471 421 422 473 472 422 423 474 473 423 424 475 474 424 425 476 475 425 426 477 476 426 427 478 477 427 428 479 478 428 429 480 479 429 430 481 480 430 431 482 481 431 432 483 482 432 433 484 483 433 434 485 484 434 435 486 485 435 436 487 486 436 437 488 487 437 438 489 488 438 439 490 489 439 440 491 490 440 441 492 491 441 442 493 492 442 443 494 493 443 444 495 494 444 445 496 495 445 446 497 496 446 447 498 497 447 448 499 498 448 449 500 499 449 450 501 500 450 451 502 501 451 452 503 502 452 453 504 503 453 454 505 504 454 455 506 505 455 456 507 506 456 457 508 507 457 458 509 508 459 460 511 510 460 461 512 511 461 462 513 512 462 463 514 513 463 464 515 514 464 465 516 515 465 466 517 516 466 467 518 517 467 468 519 518 468 469 520 519 469 470 521 520 470 471 522 521 471 472 523 522 472 473 524 523 473 474 525 524 474 475 526 525 475 476 527 526 476 477 528 527 477 478 529 528 478 479 530 529 479 480 531 530 480 481 532 531 481 482 533 532 482 483 534 533 483 484 535 534 484 485 536 535 485 486 537 536 486 487 538 537 487 488 539 538 488 489 540 539 489 490 541 540 490 491 542 541 491 492 543 542 492 493 544 543 493 494 545 544 494 495 546 545 495 496 547 546 496 497 548 547 497 498 549 548 498 499 550 549 499 500 551 550 500 501 552 551 501 502 553 552 502 503 554 553 503 504 555 554 504 505 556 555 505 506 557 556 506 507 558 557 507 508 559 558 508 509 560 559 510 511 562 561 511 512 563 562 512 513 564 563 513 514 565 564 514 515 566 565 515 516 567 566 516 517 568 567 517 518 569 568 518 519 570 569 519 520 571 570 520 521 572 571 521 522 573 572 522 523 574 573 523 524 575 574 524 525 576 575 525 526 577 576 526 527 578 577 527 528 579 578 528 529 580 579 529 530 581 580 530 531 582 581 531 532 583 582 532 533 584 583 533 534 585 584 534 535 586 585 535 536 587 586 536 537 588 587 537 538 589 588 538 539 590 589 539 540 591 590 540 541 592 591 541 542 593 592 542 543 594 593 543 544 595 594 544 545 596 595 545 546 597 596 546 547 598 597 547 548 599 598 548 549 600 599 549 550 601 600 550 551 602 601 551 552 603 602 552 553 604 603 553 554 605 604 554 555 606 605 555 556 607 606 556 557 608 607 557 558 609 608 558 559 610 609 559 560 611 610 561 562 613 612 562 563 614 613 563 564 615 614 564 565 616 615 565 566 617 616 566 567 618 617 567 568 619 618 568 569 620 619 569 570 621 620 570 571 622 621 571 572 623 622 572 573 624 623 573 574 625 624 574 575 626 625 575 576 627 626 576 577 628 627 577 578 629 628 578 579 630 629 579 580 631 630 580 581 632 631 581 582 633 632 582 583 634 633 583 584 635 634 584 585 636 635 585 586 637 636 586 587 638 637 587 588 639 638 588 589 640 639 589 590 641 640 590 591 642 641 591 592 643 642 592 593 644 643 593 594 645 644 594 595 646 645 595 596 647 646 596 597 648 647 597 598 649 648 598 599 650 649 599 600 651 650 600 601 652 651 601 602 653 652 602 603 654 653 603 604 655 654 604 605 656 655 605 606 657 656 606 607 658 657 607 608 659 658 608 609 660 659 609 610 661 660 610 611 662 661 612 613 664 663 613 614 665 664 614 615 666 665 615 616 667 666 616 617 668 667 617 618 669 668 618 619 670 669 619 620 671 670 620 621 672 671 621 622 673 672 622 623 674 673 623 624 675 674 624 625 676 675 625 626 677 676 626 627 678 677 627 628 679 678 628 629 680 679 629 630 681 680 630 631 682 681 631 632 683 682 632 633 684 683 633 634 685 684 634 635 686 685 635 636 687 686 636 637 688 687 637 638 689 688 638 639 690 689 639 640 691 690 640 641 692 691 641 642 693 692 642 643 694 693 643 644 695 694 644 645 696 695 645 646 697 696 646 647 698 697 647 648 699 698 648 649 700 699 649 650 701 700 650 651 702 701 651 652 703 702 652 653 704 703 653 654 705 704 654 655 706 705 655 656 707 706 656 657 708 707 657 658 709 708 658 659 710 709 659 660 711 710 660 661 712 711 661 662 713 712 663 664 715 714 664 665 716 715 665 666 717 716 666 667 718 717 667 668 719 718 668 669 720 719 669 670 721 720 670 671 722 721 671 672 723 722 672 673 724 723 673 674 725 724 674 675 726 725 675 676 727 726 676 677 728 727 677 678 729 728 678 679 730 729 679 680 731 730 680 681 732 731 681 682 733 732 682 683 734 733 683 684 735 734 684 685 736 735 685 686 737 736 686 687 738 737 687 688 739 738 688 689 740 739 689 690 741 740 690 691 742 741 691 692 743 742 692 693 744 743 693 694 745 744 694 695 746 745 695 696 747 746 696 697 748 747 697 698 749 748 698 699 750 749 699 700 751 750 700 701 752 751 701 702 753 752 702 703 754 753 703 704 755 754 704 705 756 755 705 706 757 756 706 707 758 757 707 708 759 758 708 709 760 759 709 710 761 760 710 711 762 761 711 712 763 762 712 713 764 763 714 715 766 765 715 716 767 766 716 717 768 767 717 718 769 768 718 719 770 769 719 720 771 770 720 721 772 771 721 722 773 772 722 723 774 773 723 724 775 774 724 725 776 775 725 726 777 776 726 727 778 777 727 728 779 778 728 729 780 779 729 730 781 780 730 731 782 781 731 732 783 782 732 733 784 783 733 734 785 784 734 735 786 785 735 736 787 786 736 737 788 787 737 738 789 788 738 739 790 789 739 740 791 790 740 741 792 791 741 742 793 792 742 743 794 793 743 744 795 794 744 745 796 795 745 746 797 796 746 747 798 797 747 748 799 798 748 749 800 799 749 750 801 800 750 751 802 801 751 752 803 802 752 753 804 803 753 754 805 804 754 755 806 805 755 756 807 806 756 757 808 807 757 758 809 808 758 759 810 809 759 760 811 810 760 761 812 811 761 762 813 812 762 763 814 813 763 764 815 814 765 766 817 816 766 767 818 817 767 768 819 818 768 769 820 819 769 770 821 820 770 771 822 821 771 772 823 822 772 773 824 823 773 774 825 824 774 775 826 825 775 776 827 826 776 777 828 827 777 778 829 828 778 779 830 829 779 780 831 830 780 781 832 831 781 782 833 832 782 783 834 833 783 784 835 834 784 785 836 835 785 786 837 836 786 787 838 837 787 788 839 838 788 789 840 839 789 790 841 840 790 791 842 841 791 792 843 842 792 793 844 843 793 794 845 844 794 795 846 845 795 796 847 846 796 797 848 847 797 798 849 848 798 799 850 849 799 800 851 850 800 801 852 851 801 802 853 852 802 803 854 853 803 804 855 854 804 805 856 855 805 806 857 856 806 807 858 857 807 808 859 858 808 809 860 859 809 810 861 860 810 811 862 861 811 812 863 862 812 813 864 863 813 814 865 864 814 815 866 865 816 817 868 867 817 818 869 868 818 819 870 869 819 820 871 870 820 821 872 871 821 822 873 872 822 823 874 873 823 824 875 874 824 825 876 875 825 826 877 876 826 827 878 877 827 828 879 878 828 829 880 879 829 830 881 880 830 831 882 881 831 832 883 882 832 833 884 883 833 834 885 884 834 835 886 885 835 836 887 886 836 837 888 887 837 838 889 888 838 839 890 889 839 840 891 890 840 841 892 891 841 842 893 892 842 843 894 893 843 844 895 894 844 845 896 895 845 846 897 896 846 847 898 897 847 848 899 898 848 849 900 899 849 850 901 900 850 851 902 901 851 852 903 902 852 853 904 903 853 854 905 904 854 855 906 905 855 856 907 906 856 857 908 907 857 858 909 908 858 859 910 909 859 860 911 910 860 861 912 911 861 862 913 912 862 863 914 913 863 864 915 914 864 865 916 915 865 866 917 916 867 868 919 918 868 869 920 919 869 870 921 920 870 871 922 921 871 872 923 922 872 873 924 923 873 874 925 924 874 875 926 925 875 876 927 926 876 877 928 927 877 878 929 928 878 879 930 929 879 880 931 930 880 881 932 931 881 882 933 932 882 883 934 933 883 884 935 934 884 885 936 935 885 886 937 936 886 887 938 937 887 888 939 938 888 889 940 939 889 890 941 940 890 891 942 941 891 892 943 942 892 893 944 943 893 894 945 944 894 895 946 945 895 896 947 946 896 897 948 947 897 898 949 948 898 899 950 949 899 900 951 950 900 901 952 951 901 902 953 952 902 903 954 953 903 904 955 954 904 905 956 955 905 906 957 956 906 907 958 957 907 908 959 958 908 909 960 959 909 910 961 960 910 911 962 961 911 912 963 962 912 913 964 963 913 914 965 964 914 915 966 965 915 916 967 966 916 917 968 967 918 919 970 969 919 920 971 970 920 921 972 971 921 922 973 972 922 923 974 973 923 924 975 974 924 925 976 975 925 926 977 976 926 927 978 977 927 928 979 978 928 929 980 979 929 930 981 980 930 931 982 981 931 932 983 982 932 933 984 983 933 934 985 984 934 935 986 985 935 936 987 986 936 937 988 987 937 938 989 988 938 939 990 989 939 940 991 990 940 941 992 991 941 942 993 992 942 943 994 993 943 944 995 994 944 945 996 995 945 946 997 996 946 947 998 997 947 948 999 998 948 949 1000 999 949 950 1001 1000 950 951 1002 1001 951 952 1003 1002 952 953 1004 1003 953 954 1005 1004 954 955 1006 1005 955 956 1007 1006 956 957 1008 1007 957 958 1009 1008 958 959 1010 1009 959 960 1011 1010 960 961 1012 1011 961 962 1013 1012 962 963 1014 1013 963 964 1015 1014 964 965 1016 1015 965 966 1017 1016 966 967 1018 1017 967 968 1019 1018 969 970 1021 1020 970 971 1022 1021 971 972 1023 1022 972 973 1024 1023 973 974 1025 1024 974 975 1026 1025 975 976 1027 1026 976 977 1028 1027 977 978 1029 1028 978 979 1030 1029 979 980 1031 1030 980 981 1032 1031 981 982 1033 1032 982 983 1034 1033 983 984 1035 1034 984 985 1036 1035 985 986 1037 1036 986 987 1038 1037 987 988 1039 1038 988 989 1040 1039 989 990 1041 1040 990 991 1042 1041 991 992 1043 1042 992 993 1044 1043 993 994 1045 1044 994 995 1046 1045 995 996 1047 1046 996 997 1048 1047 997 998 1049 1048 998 999 1050 1049 999 1000 1051 1050 1000 1001 1052 1051 1001 1002 1053 1052 1002 1003 1054 1053 1003 1004 1055 1054 1004 1005 1056 1055 1005 1006 1057 1056 1006 1007 1058 1057 1007 1008 1059 1058 1008 1009 1060 1059 1009 1010 1061 1060 1010 1011 1062 1061 1011 1012 1063 1062 1012 1013 1064 1063 1013 1014 1065 1064 1014 1015 1066 1065 1015 1016 1067 1066 1016 1017 1068 1067 1017 1018 1069 1068 1018 1019 1070 1069 1020 1021 1072 1071 1021 1022 1073 1072 1022 1023 1074 1073 1023 1024 1075 1074 1024 1025 1076 1075 1025 1026 1077 1076 1026 1027 1078 1077 1027 1028 1079 1078 1028 1029 1080 1079 1029 1030 1081 1080 1030 1031 1082 1081 1031 1032 1083 1082 1032 1033 1084 1083 1033 1034 1085 1084 1034 1035 1086 1085 1035 1036 1087 1086 1036 1037 1088 1087 1037 1038 1089 1088 1038 1039 1090 1089 1039 1040 1091 1090 1040 1041 1092 1091 1041 1042 1093 1092 1042 1043 1094 1093 1043 1044 1095 1094 1044 1045 1096 1095 1045 1046 1097 1096 1046 1047 1098 1097 1047 1048 1099 1098 1048 1049 1100 1099 1049 1050 1101 1100 1050 1051 1102 1101 1051 1052 1103 1102 1052 1053 1104 1103 1053 1054 1105 1104 1054 1055 1106 1105 1055 1056 1107 1106 1056 1057 1108 1107 1057 1058 1109 1108 1058 1059 1110 1109 1059 1060 1111 1110 1060 1061 1112 1111 1061 1062 1113 1112 1062 1063 1114 1113 1063 1064 1115 1114 1064 1065 1116 1115 1065 1066 1117 1116 1066 1067 1118 1117 1067 1068 1119 1118 1068 1069 1120 1119 1069 1070 1121 1120 1071 1072 1123 1122 1072 1073 1124 1123 1073 1074 1125 1124 1074 1075 1126 1125 1075 1076 1127 1126 1076 1077 1128 1127 1077 1078 1129 1128 1078 1079 1130 1129 1079 1080 1131 1130 1080 1081 1132 1131 1081 1082 1133 1132 1082 1083 1134 1133 1083 1084 1135 1134 1084 1085 1136 1135 1085 1086 1137 1136 1086 1087 1138 1137 1087 1088 1139 1138 1088 1089 1140 1139 1089 1090 1141 1140 1090 1091 1142 1141 1091 1092 1143 1142 1092 1093 1144 1143 1093 1094 1145 1144 1094 1095 1146 1145 1095 1096 1147 1146 1096 1097 1148 1147 1097 1098 1149 1148 1098 1099 1150 1149 1099 1100 1151 1150 1100 1101 1152 1151 1101 1102 1153 1152 1102 1103 1154 1153 1103 1104 1155 1154 1104 1105 1156 1155 1105 1106 1157 1156 1106 1107 1158 1157 1107 1108 1159 1158 1108 1109 1160 1159 1109 1110 1161 1160 1110 1111 1162 1161 1111 1112 1163 1162 1112 1113 1164 1163 1113 1114 1165 1164 1114 1115 1166 1165 1115 1116 1167 1166 1116 1117 1168 1167 1117 1118 1169 1168 1118 1119 1170 1169 1119 1120 1171 1170 1120 1121 1172 1171 1122 1123 1174 1173 1123 1124 1175 1174 1124 1125 1176 1175 1125 1126 1177 1176 1126 1127 1178 1177 1127 1128 1179 1178 1128 1129 1180 1179 1129 1130 1181 1180 1130 1131 1182 1181 1131 1132 1183 1182 1132 1133 1184 1183 1133 1134 1185 1184 1134 1135 1186 1185 1135 1136 1187 1186 1136 1137 1188 1187 1137 1138 1189 1188 1138 1139 1190 1189 1139 1140 1191 1190 1140 1141 1192 1191 1141 1142 1193 1192 1142 1143 1194 1193 1143 1144 1195 1194 1144 1145 1196 1195 1145 1146 1197 1196 1146 1147 1198 1197 1147 1148 1199 1198 1148 1149 1200 1199 1149 1150 1201 1200 1150 1151 1202 1201 1151 1152 1203 1202 1152 1153 1204 1203 1153 1154 1205 1204 1154 1155 1206 1205 1155 1156 1207 1206 1156 1157 1208 1207 1157 1158 1209 1208 1158 1159 1210 1209 1159 1160 1211 1210 1160 1161 1212 1211 1161 1162 1213 1212 1162 1163 1214 1213 1163 1164 1215 1214 1164 1165 1216 1215 1165 1166 1217 1216 1166 1167 1218 1217 1167 1168 1219 1218 1168 1169 1220 1219 1169 1170 1221 1220 1170 1171 1222 1221 1171 1172 1223 1222 1173 1174 1225 1224 1174 1175 1226 1225 1175 1176 1227 1226 1176 1177 1228 1227 1177 1178 1229 1228 1178 1179 1230 1229 1179 1180 1231 1230 1180 1181 1232 1231 1181 1182 1233 1232 1182 1183 1234 1233 1183 1184 1235 1234 1184 1185 1236 1235 1185 1186 1237 1236 1186 1187 1238 1237 1187 1188 1239 1238 1188 1189 1240 1239 1189 1190 1241 1240 1190 1191 1242 1241 1191 1192 1243 1242 1192 1193 1244 1243 1193 1194 1245 1244 1194 1195 1246 1245 1195 1196 1247 1246 1196 1197 1248 1247 1197 1198 1249 1248 1198 1199 1250 1249 1199 1200 1251 1250 1200 1201 1252 1251 1201 1202 1253 1252 1202 1203 1254 1253 1203 1204 1255 1254 1204 1205 1256 1255 1205 1206 1257 1256 1206 1207 1258 1257 1207 1208 1259 1258 1208 1209 1260 1259 1209 1210 1261 1260 1210 1211 1262 1261 1211 1212 1263 1262 1212 1213 1264 1263 1213 1214 1265 1264 1214 1215 1266 1265 1215 1216 1267 1266 1216 1217 1268 1267 1217 1218 1269 1268 1218 1219 1270 1269 1219 1220 1271 1270 1220 1221 1272 1271 1221 1222 1273 1272 1222 1223 1274 1273 1224 1225 1276 1275 1225 1226 1277 1276 1226 1227 1278 1277 1227 1228 1279 1278 1228 1229 1280 1279 1229 1230 1281 1280 1230 1231 1282 1281 1231 1232 1283 1282 1232 1233 1284 1283 1233 1234 1285 1284 1234 1235 1286 1285 1235 1236 1287 1286 1236 1237 1288 1287 1237 1238 1289 1288 1238 1239 1290 1289 1239 1240 1291 1290 1240 1241 1292 1291 1241 1242 1293 1292 1242 1243 1294 1293 1243 1244 1295 1294 1244 1245 1296 1295 1245 1246 1297 1296 1246 1247 1298 1297 1247 1248 1299 1298 1248 1249 1300 1299 1249 1250 1301 1300 1250 1251 1302 1301 1251 1252 1303 1302 1252 1253 1304 1303 1253 1254 1305 1304 1254 1255 1306 1305 1255 1256 1307 1306 1256 1257 1308 1307 1257 1258 1309 1308 1258 1259 1310 1309 1259 1260 1311 1310 1260 1261 1312 1311 1261 1262 1313 1312 1262 1263 1314 1313 1263 1264 1315 1314 1264 1265 1316 1315 1265 1266 1317 1316 1266 1267 1318 1317 1267 1268 1319 1318 1268 1269 1320 1319 1269 1270 1321 1320 1270 1271 1322 1321 1271 1272 1323 1322 1272 1273 1324 1323 1273 1274 1325 1324 + + +4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 504 508 512 516 520 524 528 532 536 540 544 548 552 556 560 564 568 572 576 580 584 588 592 596 600 604 608 612 616 620 624 628 632 636 640 644 648 652 656 660 664 668 672 676 680 684 688 692 696 700 704 708 712 716 720 724 728 732 736 740 744 748 752 756 760 764 768 772 776 780 784 788 792 796 800 804 808 812 816 820 824 828 832 836 840 844 848 852 856 860 864 868 872 876 880 884 888 892 896 900 904 908 912 916 920 924 928 932 936 940 944 948 952 956 960 964 968 972 976 980 984 988 992 996 1000 1004 1008 1012 1016 1020 1024 1028 1032 1036 1040 1044 1048 1052 1056 1060 1064 1068 1072 1076 1080 1084 1088 1092 1096 1100 1104 1108 1112 1116 1120 1124 1128 1132 1136 1140 1144 1148 1152 1156 1160 1164 1168 1172 1176 1180 1184 1188 1192 1196 1200 1204 1208 1212 1216 1220 1224 1228 1232 1236 1240 1244 1248 1252 1256 1260 1264 1268 1272 1276 1280 1284 1288 1292 1296 1300 1304 1308 1312 1316 1320 1324 1328 1332 1336 1340 1344 1348 1352 1356 1360 1364 1368 1372 1376 1380 1384 1388 1392 1396 1400 1404 1408 1412 1416 1420 1424 1428 1432 1436 1440 1444 1448 1452 1456 1460 1464 1468 1472 1476 1480 1484 1488 1492 1496 1500 1504 1508 1512 1516 1520 1524 1528 1532 1536 1540 1544 1548 1552 1556 1560 1564 1568 1572 1576 1580 1584 1588 1592 1596 1600 1604 1608 1612 1616 1620 1624 1628 1632 1636 1640 1644 1648 1652 1656 1660 1664 1668 1672 1676 1680 1684 1688 1692 1696 1700 1704 1708 1712 1716 1720 1724 1728 1732 1736 1740 1744 1748 1752 1756 1760 1764 1768 1772 1776 1780 1784 1788 1792 1796 1800 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1900 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 2052 2056 2060 2064 2068 2072 2076 2080 2084 2088 2092 2096 2100 2104 2108 2112 2116 2120 2124 2128 2132 2136 2140 2144 2148 2152 2156 2160 2164 2168 2172 2176 2180 2184 2188 2192 2196 2200 2204 2208 2212 2216 2220 2224 2228 2232 2236 2240 2244 2248 2252 2256 2260 2264 2268 2272 2276 2280 2284 2288 2292 2296 2300 2304 2308 2312 2316 2320 2324 2328 2332 2336 2340 2344 2348 2352 2356 2360 2364 2368 2372 2376 2380 2384 2388 2392 2396 2400 2404 2408 2412 2416 2420 2424 2428 2432 2436 2440 2444 2448 2452 2456 2460 2464 2468 2472 2476 2480 2484 2488 2492 2496 2500 2504 2508 2512 2516 2520 2524 2528 2532 2536 2540 2544 2548 2552 2556 2560 2564 2568 2572 2576 2580 2584 2588 2592 2596 2600 2604 2608 2612 2616 2620 2624 2628 2632 2636 2640 2644 2648 2652 2656 2660 2664 2668 2672 2676 2680 2684 2688 2692 2696 2700 2704 2708 2712 2716 2720 2724 2728 2732 2736 2740 2744 2748 2752 2756 2760 2764 2768 2772 2776 2780 2784 2788 2792 2796 2800 2804 2808 2812 2816 2820 2824 2828 2832 2836 2840 2844 2848 2852 2856 2860 2864 2868 2872 2876 2880 2884 2888 2892 2896 2900 2904 2908 2912 2916 2920 2924 2928 2932 2936 2940 2944 2948 2952 2956 2960 2964 2968 2972 2976 2980 2984 2988 2992 2996 3000 3004 3008 3012 3016 3020 3024 3028 3032 3036 3040 3044 3048 3052 3056 3060 3064 3068 3072 3076 3080 3084 3088 3092 3096 3100 3104 3108 3112 3116 3120 3124 3128 3132 3136 3140 3144 3148 3152 3156 3160 3164 3168 3172 3176 3180 3184 3188 3192 3196 3200 3204 3208 3212 3216 3220 3224 3228 3232 3236 3240 3244 3248 3252 3256 3260 3264 3268 3272 3276 3280 3284 3288 3292 3296 3300 3304 3308 3312 3316 3320 3324 3328 3332 3336 3340 3344 3348 3352 3356 3360 3364 3368 3372 3376 3380 3384 3388 3392 3396 3400 3404 3408 3412 3416 3420 3424 3428 3432 3436 3440 3444 3448 3452 3456 3460 3464 3468 3472 3476 3480 3484 3488 3492 3496 3500 3504 3508 3512 3516 3520 3524 3528 3532 3536 3540 3544 3548 3552 3556 3560 3564 3568 3572 3576 3580 3584 3588 3592 3596 3600 3604 3608 3612 3616 3620 3624 3628 3632 3636 3640 3644 3648 3652 3656 3660 3664 3668 3672 3676 3680 3684 3688 3692 3696 3700 3704 3708 3712 3716 3720 3724 3728 3732 3736 3740 3744 3748 3752 3756 3760 3764 3768 3772 3776 3780 3784 3788 3792 3796 3800 3804 3808 3812 3816 3820 3824 3828 3832 3836 3840 3844 3848 3852 3856 3860 3864 3868 3872 3876 3880 3884 3888 3892 3896 3900 3904 3908 3912 3916 3920 3924 3928 3932 3936 3940 3944 3948 3952 3956 3960 3964 3968 3972 3976 3980 3984 3988 3992 3996 4000 4004 4008 4012 4016 4020 4024 4028 4032 4036 4040 4044 4048 4052 4056 4060 4064 4068 4072 4076 4080 4084 4088 4092 4096 4100 4104 4108 4112 4116 4120 4124 4128 4132 4136 4140 4144 4148 4152 4156 4160 4164 4168 4172 4176 4180 4184 4188 4192 4196 4200 4204 4208 4212 4216 4220 4224 4228 4232 4236 4240 4244 4248 4252 4256 4260 4264 4268 4272 4276 4280 4284 4288 4292 4296 4300 4304 4308 4312 4316 4320 4324 4328 4332 4336 4340 4344 4348 4352 4356 4360 4364 4368 4372 4376 4380 4384 4388 4392 4396 4400 4404 4408 4412 4416 4420 4424 4428 4432 4436 4440 4444 4448 4452 4456 4460 4464 4468 4472 4476 4480 4484 4488 4492 4496 4500 4504 4508 4512 4516 4520 4524 4528 4532 4536 4540 4544 4548 4552 4556 4560 4564 4568 4572 4576 4580 4584 4588 4592 4596 4600 4604 4608 4612 4616 4620 4624 4628 4632 4636 4640 4644 4648 4652 4656 4660 4664 4668 4672 4676 4680 4684 4688 4692 4696 4700 4704 4708 4712 4716 4720 4724 4728 4732 4736 4740 4744 4748 4752 4756 4760 4764 4768 4772 4776 4780 4784 4788 4792 4796 4800 4804 4808 4812 4816 4820 4824 4828 4832 4836 4840 4844 4848 4852 4856 4860 4864 4868 4872 4876 4880 4884 4888 4892 4896 4900 4904 4908 4912 4916 4920 4924 4928 4932 4936 4940 4944 4948 4952 4956 4960 4964 4968 4972 4976 4980 4984 4988 4992 4996 5000 + + +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 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 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 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 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 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 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 + + + + + diff --git a/tests/gwb-grid/oceanic_plate_indicator_overlap.wb b/tests/gwb-grid/oceanic_plate_indicator_overlap.wb new file mode 100644 index 000000000..185f958a3 --- /dev/null +++ b/tests/gwb-grid/oceanic_plate_indicator_overlap.wb @@ -0,0 +1,31 @@ +{ +"version":"1.2", +"cross section": [[0,0],[1000e3,0e3]], +"coordinate system":{"model":"cartesian"}, +"gravity model":{"model":"uniform", "magnitude":10}, +"indicator properties":[ + { + "index":0, + "name":"temperature" + }, + { + "index":1, + "name":"velocity" + }, + { + "index":2, + "name":"composition" + } +], +"features": +[ + {"model":"oceanic plate", "name":"First oceanic plate", "max depth":250e3, "coordinates":[[-1e3,1e10],[500e3,1e10],[500e3,-1e10],[-1e3,-1e10]], + "temperature models":[{"model":"uniform", "temperature":150}], + "indicator models":[{"model": "depth range", "min depth": 50e3, "max depth": 100e3, "indicators": ["temperature", "velocity"]}]}, + + {"model":"oceanic plate", "name":"Second oceanic plate", "max depth":250e3, "coordinates":[[300e3,1e10],[1000e3,1e10],[1000e3,-1e10],[300e3,-1e10]], + "temperature models":[{"model":"uniform", "temperature":20}], + "composition models":[{"model":"uniform", "compositions":[2]}], + "indicator models":[{"model": "depth range", "min depth": 40e3, "max depth": 90e3, "indicators": ["composition"]}]} +] +} diff --git a/tests/unit_tests/unit_test_world_builder.cc b/tests/unit_tests/unit_test_world_builder.cc index a6ee054a4..1fc02c00b 100644 --- a/tests/unit_tests/unit_test_world_builder.cc +++ b/tests/unit_tests/unit_test_world_builder.cc @@ -8122,3 +8122,20 @@ TEST_CASE("WorldBuilder composition property maps") CHECK(world.composition_properties[1].name == "harzburgite"); CHECK(world.composition_properties[3].reference_density == Approx(3350.0)); } + +TEST_CASE("WorldBuilder indicator property maps") +{ + std::vector> approval_tests; + + const std::string file_name = WorldBuilder::Data::WORLD_BUILDER_SOURCE_DIR + "/tests/data/indicator_properties_map.wb"; + WorldBuilder::World world(file_name); + + world.parse_entries(world.parameters); + + CHECK(world.indicator_properties[0].index == 0); + CHECK(world.indicator_properties[0].name == "temperature"); + + CHECK(world.indicator_properties[1].name == "velocity"); + + CHECK(world.indicator_properties[2].name == "composition"); +} \ No newline at end of file