From 0bd02a60867f511a31e0424cbe82cc8ea6f566c4 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sun, 19 Feb 2023 01:14:04 +0000 Subject: [PATCH 01/94] Removed GDNative support, will not work in Godot 4 --- addons/zylann.hterrain/native/factory.gd | 7 +++++-- addons/zylann.hterrain/native/hterrain.gdnlib | 17 ----------------- addons/zylann.hterrain/native/image_utils.gdns | 8 -------- .../zylann.hterrain/native/quad_tree_lod.gdns | 8 -------- 4 files changed, 5 insertions(+), 35 deletions(-) delete mode 100644 addons/zylann.hterrain/native/hterrain.gdnlib delete mode 100644 addons/zylann.hterrain/native/image_utils.gdns delete mode 100644 addons/zylann.hterrain/native/quad_tree_lod.gdns diff --git a/addons/zylann.hterrain/native/factory.gd b/addons/zylann.hterrain/native/factory.gd index 059ce5fb..bd1b1953 100644 --- a/addons/zylann.hterrain/native/factory.gd +++ b/addons/zylann.hterrain/native/factory.gd @@ -4,10 +4,13 @@ const NATIVE_PATH = "res://addons/zylann.hterrain/native/" const HT_ImageUtilsGeneric = preload("./image_utils_generic.gd") const HT_QuadTreeLodGeneric = preload("./quad_tree_lod_generic.gd") +# No native code was ported when moving to Godot 4. +# It may be changed too using GDExtension. + # See https://docs.godotengine.org/en/stable/classes/class_os.html#class-os-method-get-name const _supported_os = { - "Windows": true, - "X11": true, + # "Windows": true, + # "X11": true, #"OSX": true } # See https://docs.godotengine.org/en/stable/tutorials/export/feature_tags.html diff --git a/addons/zylann.hterrain/native/hterrain.gdnlib b/addons/zylann.hterrain/native/hterrain.gdnlib deleted file mode 100644 index ffec5eb4..00000000 --- a/addons/zylann.hterrain/native/hterrain.gdnlib +++ /dev/null @@ -1,17 +0,0 @@ -[general] - -singleton = false -load_once = true -symbol_prefix = "godot_" -reloadable = false - -[entry] - -Windows.64 = "res://addons/zylann.hterrain/native/bin/win64/hterrain_native.dll" -X11.64 = "res://addons/zylann.hterrain/native/bin/linux/libhterrain_native.so" - -[dependencies] - -X11.64 = [] -Windows.64 = [] -OSX.64 = [] diff --git a/addons/zylann.hterrain/native/image_utils.gdns b/addons/zylann.hterrain/native/image_utils.gdns deleted file mode 100644 index b9fd8018..00000000 --- a/addons/zylann.hterrain/native/image_utils.gdns +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="NativeScript" load_steps=2 format=2] - -[ext_resource path="res://addons/zylann.hterrain/native/hterrain.gdnlib" type="GDNativeLibrary" id=1] - -[resource] -resource_name = "image_utils" -class_name = "ImageUtils" -library = ExtResource( 1 ) diff --git a/addons/zylann.hterrain/native/quad_tree_lod.gdns b/addons/zylann.hterrain/native/quad_tree_lod.gdns deleted file mode 100644 index 9eb6a48a..00000000 --- a/addons/zylann.hterrain/native/quad_tree_lod.gdns +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="NativeScript" load_steps=2 format=2] - -[ext_resource path="res://addons/zylann.hterrain/native/hterrain.gdnlib" type="GDNativeLibrary" id=1] - -[resource] -resource_name = "quad_tree_lod" -class_name = "QuadTreeLod" -library = ExtResource( 1 ) From 19ffaa259f26556cf64621729ad3a3f34d21e426 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 18 Mar 2023 01:32:24 +0000 Subject: [PATCH 02/94] First pass of porting scripts and shaders. Still untested. I only renamed some function calls and properties and usages, added `@` for annotations, property syntax etc. Other things still need to be ported and tested. --- addons/zylann.hterrain/hterrain.gd | 270 +++++++------ addons/zylann.hterrain/hterrain_chunk.gd | 42 +- .../zylann.hterrain/hterrain_chunk_debug.gd | 35 +- addons/zylann.hterrain/hterrain_collider.gd | 52 ++- addons/zylann.hterrain/hterrain_data.gd | 377 +++++++----------- .../zylann.hterrain/hterrain_detail_layer.gd | 281 ++++++++----- addons/zylann.hterrain/hterrain_mesher.gd | 40 +- .../hterrain_resource_loader.gd | 20 +- .../hterrain_resource_saver.gd | 23 +- .../zylann.hterrain/hterrain_texture_set.gd | 45 ++- addons/zylann.hterrain/native/factory.gd | 2 +- .../native/image_utils_generic.gd | 120 ++---- .../native/quad_tree_lod_generic.gd | 22 +- addons/zylann.hterrain/plugin.cfg | 2 +- addons/zylann.hterrain/shaders/array.shader | 8 +- .../shaders/array_global.shader | 2 +- addons/zylann.hterrain/shaders/detail.shader | 8 +- addons/zylann.hterrain/shaders/lookdev.shader | 4 +- .../zylann.hterrain/shaders/low_poly.shader | 4 +- .../shaders/multisplat16.shader | 8 +- .../shaders/multisplat16_lite.shader | 8 +- addons/zylann.hterrain/shaders/simple4.shader | 8 +- .../shaders/simple4_lite.shader | 4 +- .../tools/about/about_dialog.gd | 10 +- .../tools/about/about_dialog.tscn | 8 +- addons/zylann.hterrain/tools/brush/brush.gd | 30 +- .../tools/brush/brush_editor.gd | 72 ++-- addons/zylann.hterrain/tools/brush/decal.gd | 18 +- .../zylann.hterrain/tools/brush/decal.shader | 2 +- addons/zylann.hterrain/tools/brush/painter.gd | 76 ++-- .../settings_dialog/brush_settings_dialog.gd | 34 +- .../brush/settings_dialog/preview_painter.gd | 2 +- .../settings_dialog/preview_scratchpad.gd | 10 +- .../tools/brush/terrain_painter.gd | 5 +- .../tools/detail_editor/detail_editor.gd | 21 +- .../tools/exporter/export_image_dialog.gd | 48 +-- .../tools/generate_mesh_dialog.gd | 8 +- .../tools/generator/generator_dialog.gd | 72 ++-- .../generator/shaders/bump2normal.shader | 10 +- .../tools/generator/shaders/erode.shader | 13 +- .../tools/generator/texture_generator.gd | 41 +- .../tools/generator/texture_generator_pass.gd | 14 +- .../zylann.hterrain/tools/globalmap_baker.gd | 39 +- .../tools/importer/importer_dialog.gd | 32 +- .../tools/inspector/inspector.gd | 152 +++---- .../tools/load_texture_dialog.gd | 4 +- .../zylann.hterrain/tools/minimap/minimap.gd | 23 +- .../tools/minimap/minimap_overlay.gd | 8 +- .../tools/minimap/ratio_container.gd | 12 +- .../zylann.hterrain/tools/normalmap_baker.gd | 48 +-- .../packed_texture_array_importer.gd | 72 ++-- .../packed_texture_importer.gd | 54 +-- .../packed_textures/packed_texture_util.gd | 21 +- .../stream_texture_importer.gd | 10 +- .../texture_layered_importer.gd | 10 +- addons/zylann.hterrain/tools/panel.gd | 24 +- addons/zylann.hterrain/tools/plugin.gd | 111 +++--- .../tools/preview_generator.gd | 31 +- .../zylann.hterrain/tools/progress_window.gd | 8 +- .../tools/resize_dialog/resize_dialog.gd | 31 +- .../zylann.hterrain/tools/terrain_preview.gd | 54 +-- .../tools/texture_editor/flow_container.gd | 4 +- .../set_editor/source_file_item_editor.gd | 14 +- .../set_editor/texture_set_editor.gd | 90 ++--- .../set_editor/texture_set_import_editor.gd | 127 +++--- .../tools/texture_editor/texture_editor.gd | 18 +- .../tools/texture_editor/texture_list.gd | 8 +- .../tools/texture_editor/texture_list_item.gd | 18 +- .../tools/util/dialog_fitter.gd | 4 +- .../zylann.hterrain/tools/util/editor_util.gd | 48 +-- .../tools/util/interval_slider.gd | 22 +- addons/zylann.hterrain/tools/util/result.gd | 2 +- .../tools/util/rich_text_label_hyperlinks.gd | 6 +- .../zylann.hterrain/tools/util/spin_slider.gd | 175 +++++--- .../util/direct_mesh_instance.gd | 40 +- .../util/direct_multimesh_instance.gd | 25 +- addons/zylann.hterrain/util/errors.gd | 14 +- addons/zylann.hterrain/util/grid.gd | 47 +-- .../zylann.hterrain/util/image_file_cache.gd | 67 ++-- addons/zylann.hterrain/util/logger.gd | 1 + addons/zylann.hterrain/util/util.gd | 128 ++---- addons/zylann.hterrain/util/xyz_format.gd | 18 +- 82 files changed, 1719 insertions(+), 1780 deletions(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index d682864f..7e67a317 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -1,5 +1,5 @@ -tool -extends Spatial +@tool +extends Node3D const HT_NativeFactory = preload("./native/factory.gd") const HT_Mesher = preload("./hterrain_mesher.gd") @@ -140,16 +140,50 @@ const _DEBUG_AABB = false signal transform_changed(global_transform) -export(float, 0.0, 1.0) var ambient_wind := 0.0 setget set_ambient_wind -export(int, 2, 5) var lod_scale := 2.0 setget set_lod_scale, get_lod_scale +@export_range(0.0, 1.0) var ambient_wind : float: + get: + return ambient_wind + set(value): + if ambient_wind == amplitude: + return + ambient_wind = amplitude + for layer in _detail_layers: + layer.update_material() + + +@export_range(2, 5) var lod_scale := 2.0: + get: + return lod_scale + set(value): + _lodder.set_split_scale(value) + -# TODO Replace with `size` in world units? # Prefer using this instead of scaling the node's transform. -# Spatial.scale isn't used because it's not suitable for terrains, +# Node3D.scale isn't used because it's not suitable for terrains, # it would scale grass too and other environment objects. -export var map_scale := Vector3(1, 1, 1) setget set_map_scale +# TODO Replace with `size` in world units? +@export var map_scale := Vector3(1, 1, 1): + get: + return map_scale: + set(p_map_scale): + if map_scale == p_map_scale: + return + p_map_scale.x = max(p_map_scale.x, MIN_MAP_SCALE) + p_map_scale.y = max(p_map_scale.y, MIN_MAP_SCALE) + p_map_scale.z = max(p_map_scale.z, MIN_MAP_SCALE) + map_scale = p_map_scale + _on_transform_changed() + + +@export var centered := false: + get: + return centered + set(p_centered): + if p_centered == centered: + return + centered = p_centered + _on_transform_changed() -export var centered := false setget set_centered var _custom_shader : Shader = null var _custom_globalmap_shader : Shader = null @@ -158,7 +192,7 @@ var _shader_uses_texture_array := false var _material := ShaderMaterial.new() var _material_params_need_update := false # Possible values are the same as the enum `GeometryInstance.SHADOW_CASTING_SETTING_*`. -var _cast_shadow_setting := GeometryInstance.SHADOW_CASTING_SETTING_ON +var _cast_shadow_setting := GeometryInstance3D.SHADOW_CASTING_SETTING_ON var _render_layer_mask := 1 @@ -205,22 +239,19 @@ func _init(): _logger.debug("Create HeightMap") # This sets up the defaults. They may be overriden shortly after by the scene loader. - _lodder.set_callbacks( \ - funcref(self, "_cb_make_chunk"), \ - funcref(self,"_cb_recycle_chunk"), \ - funcref(self, "_cb_get_vertical_bounds")) + _lodder.set_callbacks(_cb_make_chunk, _cb_recycle_chunk, _cb_get_vertical_bounds) set_notify_transform(true) # TODO Temporary! # This is a workaround for https://github.com/godotengine/godot/issues/24488 - _material.set_shader_param("u_ground_uv_scale", 20) - _material.set_shader_param("u_ground_uv_scale_vec4", Color(20, 20, 20, 20)) - _material.set_shader_param("u_depth_blending", true) + _material.set_shader_parameter("u_ground_uv_scale", 20) + _material.set_shader_parameter("u_ground_uv_scale_vec4", Color(20, 20, 20, 20)) + _material.set_shader_parameter("u_depth_blending", true) _material.shader = load(_builtin_shaders[_shader_type].path) - _texture_set.connect("changed", self, "_on_texture_set_changed") + _texture_set.changed.connect(_on_texture_set_changed) if _collision_enabled: if _check_heightmap_collider_support(): @@ -335,7 +366,7 @@ func _get_property_list(): ] if _material.shader != null: - var shader_params := VisualServer.shader_get_param_list(_material.shader.get_rid()) + var shader_params := RenderingServer.get_shader_parameter_list(_material.shader.get_rid()) for p in shader_params: if _api_shader_params.has(p.name): continue @@ -373,7 +404,7 @@ func _get(key: String): return _custom_globalmap_shader elif key.begins_with("shader_params/"): - var param_name = key.right(len("shader_params/")) + var param_name = key.substr(len("shader_params/")) return get_shader_param(param_name) elif key == "chunk_size": @@ -412,7 +443,7 @@ func _set(key: String, value): for ground_texture_type in HTerrainTextureSet.TYPE_COUNT: var type_name = _ground_enum_to_name[ground_texture_type] if key.begins_with(str("ground/", type_name, "_")): - var i = key.right(len(key) - 1).to_int() + var i = key.substr(len(key) - 1).to_int() if _texture_set_migration_textures == null: _texture_set_migration_textures = [] while i >= len(_texture_set_migration_textures): @@ -430,7 +461,7 @@ func _set(key: String, value): _custom_globalmap_shader = value elif key.begins_with("shader_params/"): - var param_name = key.right(len("shader_params/")) + var param_name = key.substr(len("shader_params/")) set_shader_param(param_name, value) elif key == "chunk_size": @@ -466,12 +497,12 @@ func set_texture_set(new_set: HTerrainTextureSet): if _texture_set != null: # TODO This causes `ERROR: Nonexistent signal 'changed' in [Resource:36653]` for some reason - _texture_set.disconnect("changed", self, "_on_texture_set_changed") + _texture_set.changed.disconnect(_on_texture_set_changed) _texture_set = new_set if _texture_set != null: - _texture_set.connect("changed", self, "_on_texture_set_changed") + _texture_set.changed.connect(_on_texture_set_changed) _material_params_need_update = true @@ -482,11 +513,11 @@ func _on_texture_set_changed(): func get_shader_param(param_name: String): - return _material.get_shader_param(param_name) + return _material.get_shader_parameter(param_name) func set_shader_param(param_name: String, v): - _material.set_shader_param(param_name, v) + _material.set_shader_parameter(param_name, v) func set_render_layer_mask(mask: int): @@ -514,9 +545,8 @@ func _set_data_directory(dirpath: String): if dirpath == "": set_data(null) else: - var fpath := dirpath.plus_file(HTerrainData.META_FILENAME) - var f := File.new() - if f.file_exists(fpath): + var fpath := dirpath.path_join(HTerrainData.META_FILENAME) + if FileAccess.file_exists(fpath): # Load existing var d = load(fpath) set_data(d) @@ -536,12 +566,13 @@ func _get_data_directory() -> String: func _check_heightmap_collider_support() -> bool: - var v = Engine.get_version_info() - if v.major == 3 and v.minor == 0 and v.patch < 4: - _logger.error("Heightmap collision shape not supported in this version of Godot," - + " please upgrade to 3.0.4 or later") - return false return true + # var v = Engine.get_version_info() + # if v.major == 3 and v.minor == 0 and v.patch < 4: + # _logger.error("Heightmap collision shape not supported in this version of Godot," + # + " please upgrade to 3.0.4 or later") + # return false + # return true func set_collision_enabled(enabled: bool): @@ -564,11 +595,11 @@ func set_collision_enabled(enabled: bool): func _for_all_chunks(action): - for lod in range(len(_chunks)): + for lod in len(_chunks): var grid = _chunks[lod] - for y in range(len(grid)): + for y in len(grid): var row = grid[y] - for x in range(len(row)): + for x in len(row): var chunk = row[x] if chunk != null: action.exec(chunk) @@ -594,29 +625,22 @@ func set_chunk_size(p_cs: int): _reset_ground_chunks() +# Compat func set_map_scale(p_map_scale: Vector3): - if map_scale == p_map_scale: - return - p_map_scale.x = max(p_map_scale.x, MIN_MAP_SCALE) - p_map_scale.y = max(p_map_scale.y, MIN_MAP_SCALE) - p_map_scale.z = max(p_map_scale.z, MIN_MAP_SCALE) map_scale = p_map_scale - _on_transform_changed() +# Compat func set_centered(p_centered: bool): - if p_centered == centered: - return centered = p_centered - _on_transform_changed() # Gets the global transform to apply to terrain geometry, -# which is different from Spatial.global_transform gives. +# which is different from Node3D.global_transform gives. # global_transform must only have translation and rotation. Scale support is undefined. -func get_internal_transform() -> Transform: +func get_internal_transform() -> Transform3D: var gt = global_transform - var it = Transform(gt.basis * Basis().scaled(map_scale), gt.origin) + var it = Transform3D(gt.basis * Basis().scaled(map_scale), gt.origin) if centered and _data != null: var half_size = 0.5 * (_data.get_resolution() - 1.0) it.origin += it.basis * (-Vector3(half_size, 0, half_size)) @@ -647,8 +671,7 @@ func _notification(what: int): NOTIFICATION_ENTER_WORLD: _logger.debug("Enter world") - if _texture_set_migration_textures != null \ - and _texture_set.get_slots_count() == 0: + if _texture_set_migration_textures != null and _texture_set.get_slots_count() == 0: # Convert from 1.4 textures properties to HTerrainTextureSet # TODO Unfortunately this might not always work, # once again because Godot wants the editor's UndoRedo to have modified the @@ -663,9 +686,9 @@ func _notification(what: int): _texture_set.set_texture(slot_index, type, texs[type]) _texture_set_migration_textures = null - _for_all_chunks(HT_EnterWorldAction.new(get_world())) + _for_all_chunks(HT_EnterWorldAction.new(get_world_3d())) if _collider != null: - _collider.set_world(get_world()) + _collider.set_world(get_world_3d()) _collider.set_transform(get_internal_transform()) NOTIFICATION_EXIT_WORLD: @@ -699,13 +722,13 @@ func _on_transform_changed(): if _collider != null: _collider.set_transform(gt) - emit_signal("transform_changed", gt) + transform_changed.emit(gt) func _enter_tree(): _logger.debug("Enter tree") - if Engine.editor_hint and _normals_baker == null: + if Engine.is_editor_hint() and _normals_baker == null: _normals_baker = load(_NORMAL_BAKER_PATH).new() add_child(_normals_baker) _normals_baker.set_terrain_data(_data) @@ -719,7 +742,7 @@ func _clear_all_chunks(): #_for_all_chunks(DeleteChunkAction.new()) - for i in range(len(_chunks)): + for i in len(_chunks): _chunks[i].clear() @@ -747,11 +770,11 @@ func set_data(new_data: HTerrainData): if has_data(): _logger.debug("Disconnecting old HeightMapData") - _data.disconnect("resolution_changed", self, "_on_data_resolution_changed") - _data.disconnect("region_changed", self, "_on_data_region_changed") - _data.disconnect("map_changed", self, "_on_data_map_changed") - _data.disconnect("map_added", self, "_on_data_map_added") - _data.disconnect("map_removed", self, "_on_data_map_removed") + _data.resolution_changed.disconnect(_on_data_resolution_changed) + _data.region_changed.disconnect(_on_data_region_changed) + _data.map_changed.disconnect(_on_data_map_changed) + _data.map_added.disconnect(_on_data_map_added) + _data.map_removed.disconnect(_on_data_map_removed) if _normals_baker != null: _normals_baker.set_terrain_data(null) @@ -774,11 +797,11 @@ func set_data(new_data: HTerrainData): if _collider != null: _collider.create_from_terrain_data(_data) - _data.connect("resolution_changed", self, "_on_data_resolution_changed") - _data.connect("region_changed", self, "_on_data_region_changed") - _data.connect("map_changed", self, "_on_data_map_changed") - _data.connect("map_added", self, "_on_data_map_added") - _data.connect("map_removed", self, "_on_data_map_removed") + _data.resolution_changed.connect(_on_data_resolution_changed) + _data.region_changed.connect(_on_data_region_changed) + _data.map_changed.connect(_on_data_map_changed) + _data.map_added.connect(_on_data_map_added) + _data.map_removed.connect(_on_data_map_removed) if _normals_baker != null: _normals_baker.set_terrain_data(_data) @@ -821,7 +844,7 @@ func _reset_ground_chunks(): var csize_x := cres var csize_y := cres - for lod in range(_lodder.get_lod_count()): + for lod in _lodder.get_lod_count(): _logger.debug(str("Create grid for lod ", lod, ", ", csize_x, "x", csize_y)) var grid = HT_Grid.create_grid(csize_x, csize_y) _chunks[lod] = grid @@ -837,8 +860,7 @@ func _on_data_region_changed(min_x, min_y, size_x, size_y, channel): set_area_dirty(min_x, min_y, size_x, size_y) if _normals_baker != null: - _normals_baker.request_tiles_in_region( - Vector2(min_x, min_y), Vector2(size_x, size_y)) + _normals_baker.request_tiles_in_region(Vector2(min_x, min_y), Vector2(size_x, size_y)) func _on_data_map_changed(type: int, index: int): @@ -894,8 +916,8 @@ func set_shader_type(type: String): _material_params_need_update = true - if Engine.editor_hint: - property_list_changed_notify() + if Engine.is_editor_hint(): + notify_property_list_changed() func get_custom_shader() -> Shader: @@ -907,16 +929,16 @@ func set_custom_shader(shader: Shader): return if _custom_shader != null: - _custom_shader.disconnect("changed", self, "_on_custom_shader_changed") + _custom_shader.changed.disconnect(_on_custom_shader_changed) if Engine.is_editor_hint() and shader != null and is_inside_tree(): # When the new shader is empty, allow to fork from the previous shader - if shader.get_code().empty(): + if shader.code.is_empty(): _logger.debug("Populating custom shader with default code") var src := _material.shader if src == null: src = load(_builtin_shaders[SHADER_CLASSIC4].path) - shader.set_code(src.code) + shader.code = src.code # TODO If code isn't empty, # verify existing parameters and issue a warning if important ones are missing @@ -926,12 +948,12 @@ func set_custom_shader(shader: Shader): _material.shader = _custom_shader if _custom_shader != null: - _custom_shader.connect("changed", self, "_on_custom_shader_changed") + _custom_shader.changed.connect(_on_custom_shader_changed) if _shader_type == SHADER_CUSTOM: _material_params_need_update = true - if Engine.editor_hint: - property_list_changed_notify() + if Engine.is_editor_hint(): + notify_property_list_changed() func _on_custom_shader_changed(): @@ -941,7 +963,7 @@ func _on_custom_shader_changed(): func _update_material_params(): assert(_material != null) _logger.debug("Updating terrain material params") - + var terrain_textures := {} var res := Vector2(-1, -1) @@ -965,21 +987,21 @@ func _update_material_params(): if is_inside_tree(): var gt = get_internal_transform() var t = gt.affine_inverse() - _material.set_shader_param(SHADER_PARAM_INVERSE_TRANSFORM, t) + _material.set_shader_parameter(SHADER_PARAM_INVERSE_TRANSFORM, t) # This is needed to properly transform normals if the terrain is scaled var normal_basis = gt.basis.inverse().transposed() - _material.set_shader_param(SHADER_PARAM_NORMAL_BASIS, normal_basis) + _material.set_shader_parameter(SHADER_PARAM_NORMAL_BASIS, normal_basis) if lookdev_material != null: - lookdev_material.set_shader_param(SHADER_PARAM_INVERSE_TRANSFORM, t) - lookdev_material.set_shader_param(SHADER_PARAM_NORMAL_BASIS, normal_basis) + lookdev_material.set_shader_parameter(SHADER_PARAM_INVERSE_TRANSFORM, t) + lookdev_material.set_shader_parameter(SHADER_PARAM_NORMAL_BASIS, normal_basis) for param_name in terrain_textures: var tex = terrain_textures[param_name] - _material.set_shader_param(param_name, tex) + _material.set_shader_parameter(param_name, tex) if lookdev_material != null: - lookdev_material.set_shader_param(param_name, tex) + lookdev_material.set_shader_parameter(param_name, tex) if _texture_set != null: match _texture_set.get_mode(): @@ -989,13 +1011,13 @@ func _update_material_params(): for slot_index in slots_count: var texture := _texture_set.get_texture(slot_index, type) var shader_param := _get_ground_texture_shader_param_name(type, slot_index) - _material.set_shader_param(shader_param, texture) + _material.set_shader_parameter(shader_param, texture) HTerrainTextureSet.MODE_TEXTURE_ARRAYS: for type in HTerrainTextureSet.TYPE_COUNT: var texture_array := _texture_set.get_texture_array(type) var shader_params := _get_ground_texture_array_shader_param_name(type) - _material.set_shader_param(shader_params, texture_array) + _material.set_shader_parameter(shader_params, texture_array) _shader_uses_texture_array = false _is_using_indexed_splatmap = false @@ -1003,7 +1025,7 @@ func _update_material_params(): var shader := _material.shader if shader != null: - var param_list := VisualServer.shader_get_param_list(shader.get_rid()) + var param_list := RenderingServer.get_shader_parameter_list(shader.get_rid()) _ground_texture_count_cache = 0 for p in param_list: if _api_shader_ground_albedo_params.has(p.name): @@ -1042,8 +1064,8 @@ static func _get_common_shader_params(shader1: Shader, shader2: Shader) -> Array var shader1_param_names := {} var common_params := [] - var shader1_params := VisualServer.shader_get_param_list(shader1.get_rid()) - var shader2_params := VisualServer.shader_get_param_list(shader2.get_rid()) + var shader1_params := RenderingServer.get_shader_parameter_list(shader1.get_rid()) + var shader2_params := RenderingServer.get_shader_parameter_list(shader2.get_rid()) for p in shader1_params: shader1_param_names[p.name] = true @@ -1064,8 +1086,8 @@ func setup_globalmap_material(mat: ShaderMaterial): # Copy all parameters shaders have in common var common_params = _get_common_shader_params(mat.shader, _material.shader) for param_name in common_params: - var v = _material.get_shader_param(param_name) - mat.set_shader_param(param_name, v) + var v = _material.get_shader_parameter(param_name) + mat.set_shader_parameter(param_name, v) # Gets which shader will be used to bake the globalmap @@ -1081,12 +1103,14 @@ func get_globalmap_shader() -> Shader: return load(_builtin_shaders[_shader_type].global_path) as Shader -func set_lod_scale(lod_scale: float): - _lodder.set_split_scale(lod_scale) +# Compat +func set_lod_scale(p_lod_scale: float): + lod_scale = p_lod_scale +# Compat func get_lod_scale() -> float: - return _lodder.get_split_scale() + return lod_scale func get_lod_count() -> int: @@ -1127,11 +1151,11 @@ const s_rdirs = [ ] -func _edit_update_viewer_position(camera: Camera): +func _edit_update_viewer_position(camera: Camera3D): _update_viewer_position(camera) -func _update_viewer_position(camera: Camera): +func _update_viewer_position(camera: Camera3D): if camera == null: var viewport := get_viewport() if viewport != null: @@ -1140,7 +1164,7 @@ func _update_viewer_position(camera: Camera): if camera == null: return - if camera.projection == Camera.PROJECTION_ORTHOGONAL: + if camera.projection == Camera3D.PROJECTION_ORTHOGONAL: # In this mode, due to the fact Godot does not allow negative near plane, # users have to pull the camera node very far away, but it confuses LOD # into very low detail, while the seen area remains the same. @@ -1192,7 +1216,7 @@ func _process(delta: float): # because they might not needed to update by themselves, but the fact a neighbor # chunk got joined or split requires them to create or revert seams var precount = _pending_chunk_updates.size() - for i in range(precount): + for i in precount: var u: HT_PendingChunkUpdate = _pending_chunk_updates[i] # In case the chunk got split @@ -1222,7 +1246,7 @@ func _process(delta: float): # Update chunks var lvisible := is_visible_in_tree() - for i in range(len(_pending_chunk_updates)): + for i in len(_pending_chunk_updates): var u: HT_PendingChunkUpdate = _pending_chunk_updates[i] var chunk := _get_chunk_at(u.pos_x, u.pos_y, u.lod) assert(chunk != null) @@ -1309,7 +1333,7 @@ func set_area_dirty(origin_in_cells_x: int, origin_in_cells_y: int, \ var csize_y := (size_in_cells_y - 1) / _chunk_size + 1 # For each lod - for lod in range(_lodder.get_lod_count()): + for lod in _lodder.get_lod_count(): # Get grid and chunk size var grid = _chunks[lod] var s : int = _lodder.get_lod_factor(lod) @@ -1387,10 +1411,10 @@ func _cb_get_vertical_bounds(cpos_x: int, cpos_y: int, lod: int): # return Vector2(aabb.position.y, aabb.end.y) -static func _get_height_or_default(im: Image, pos_x: int, pos_y: int): - if pos_x < 0 or pos_y < 0 or pos_x >= im.get_width() or pos_y >= im.get_height(): - return 0.0 - return im.get_pixel(pos_x, pos_y).r +# static func _get_height_or_default(im: Image, pos_x: int, pos_y: int): +# if pos_x < 0 or pos_y < 0 or pos_x >= im.get_width() or pos_y >= im.get_height(): +# return 0.0 +# return im.get_pixel(pos_x, pos_y).r # Performs a raycast to the terrain without using the collision engine. @@ -1412,8 +1436,7 @@ func cell_raycast(origin_world: Vector3, dir_world: Vector3, max_distance: float static func _get_ground_texture_shader_param_name(ground_texture_type: int, slot: int) -> String: assert(typeof(slot) == TYPE_INT and slot >= 0) _check_ground_texture_type(ground_texture_type) - return str(SHADER_PARAM_GROUND_PREFIX, - _ground_enum_to_name[ground_texture_type], "_", slot) + return str(SHADER_PARAM_GROUND_PREFIX, _ground_enum_to_name[ground_texture_type], "_", slot) # @obsolete @@ -1422,7 +1445,7 @@ func get_ground_texture(slot: int, type: int) -> Texture: "HTerrain.get_ground_texture is obsolete, " + "use HTerrain.get_texture_set().get_texture(slot, type) instead") var shader_param = _get_ground_texture_shader_param_name(type, slot) - return _material.get_shader_param(shader_param) + return _material.get_shader_parameter(shader_param) # @obsolete @@ -1432,7 +1455,7 @@ func set_ground_texture(slot: int, type: int, tex: Texture): "use HTerrain.get_texture_set().set_texture(slot, type, texture) instead") assert(tex == null or tex is Texture) var shader_param = _get_ground_texture_shader_param_name(type, slot) - _material.set_shader_param(shader_param, tex) + _material.set_shader_parameter(shader_param, tex) func _get_ground_texture_array_shader_param_name(type: int) -> String: @@ -1454,7 +1477,7 @@ func set_ground_texture_array(type: int, texture_array: TextureArray): "HTerrain.set_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().set_texture_array(type, texarray) instead") var param_name = _get_ground_texture_array_shader_param_name(type) - _material.set_shader_param(param_name, texture_array) + _material.set_shader_parameter(param_name, texture_array) func _internal_add_detail_layer(layer): @@ -1485,12 +1508,9 @@ func get_detail_texture(slot): "HTerrain.get_detail_texture is obsolete, use HTerrainDetailLayer.texture instead") +# Compat func set_ambient_wind(amplitude: float): - if ambient_wind == amplitude: - return ambient_wind = amplitude - for layer in _detail_layers: - layer.update_material() static func _check_ground_texture_type(ground_texture_type: int): @@ -1522,32 +1542,34 @@ func _edit_debug_draw(ci: CanvasItem): _lodder.debug_draw_tree(ci) -func _get_configuration_warning(): +func _get_configuration_warnings() -> PackedStringArray: + var warnings := PackedStringArray() + if _data == null: - return "The terrain is missing data.\n" \ - + "Select the `Data Directory` property in the inspector to assign it." + warnings.append("The terrain is missing data.\n" \ + + "Select the `Data Directory` property in the inspector to assign it.") if _texture_set == null: - return "The terrain does not have a HTerrainTextureSet assigned\n" \ - + "This is required if you want to paint textures on it." + warnings.append("The terrain does not have a HTerrainTextureSet assigned\n" \ + + "This is required if you want to paint textures on it.") else: var mode := _texture_set.get_mode() if mode == HTerrainTextureSet.MODE_TEXTURES and is_using_texture_array(): - return "The current shader needs texture arrays,\n" \ + warnings.append("The current shader needs texture arrays,\n" \ + "but the current HTerrainTextureSet is setup with individual textures.\n" \ + "You may need to switch it to TEXTURE_ARRAYS mode,\n" \ - + "or re-import images in this mode with the import tool." + + "or re-import images in this mode with the import tool.") elif mode == HTerrainTextureSet.MODE_TEXTURE_ARRAYS and not is_using_texture_array(): - return "The current shader needs individual textures,\n" \ + warnings.append("The current shader needs individual textures,\n" \ + "but the current HTerrainTextureSet is setup with texture arrays.\n" \ + "You may need to switch it to TEXTURES mode,\n" \ - + "or re-import images in this mode with the import tool." + + "or re-import images in this mode with the import tool.") # TODO Warn about unused data maps, have a tool to clean them up - return "" + return warnings func set_lookdev_enabled(enable: bool): @@ -1563,7 +1585,7 @@ func set_lookdev_enabled(enable: bool): func set_lookdev_shader_param(param_name: String, value): var mat = _get_lookdev_material() - mat.set_shader_param(param_name, value) + mat.set_shader_parameter(param_name, value) func is_lookdev_enabled() -> bool: @@ -1584,7 +1606,7 @@ class HT_PendingChunkUpdate: class HT_EnterWorldAction: - var world : World = null + var world : World3D = null func _init(w): world = w func exec(chunk): diff --git a/addons/zylann.hterrain/hterrain_chunk.gd b/addons/zylann.hterrain/hterrain_chunk.gd index 5fb99269..09242da1 100644 --- a/addons/zylann.hterrain/hterrain_chunk.gd +++ b/addons/zylann.hterrain/hterrain_chunk.gd @@ -1,4 +1,4 @@ -tool +@tool var cell_origin_x := 0 var cell_origin_y := 0 @@ -18,7 +18,7 @@ var _mesh : Mesh = null # TODO p_parent is HTerrain, can't add type hint due to cyclic reference func _init(p_parent, p_cell_x: int, p_cell_y: int, p_material: Material): - assert(p_parent is Spatial) + assert(p_parent is Node3D) assert(typeof(p_cell_x) == TYPE_INT) assert(typeof(p_cell_y) == TYPE_INT) assert(p_material is Material) @@ -26,20 +26,20 @@ func _init(p_parent, p_cell_x: int, p_cell_y: int, p_material: Material): cell_origin_x = p_cell_x cell_origin_y = p_cell_y - var vs = VisualServer + var rs = RenderingServer - _mesh_instance = vs.instance_create() + _mesh_instance = rs.instance_create() if p_material != null: - vs.instance_geometry_set_material_override(_mesh_instance, p_material.get_rid()) + rs.instance_geometry_set_material_override(_mesh_instance, p_material.get_rid()) - var world = p_parent.get_world() + var world = p_parent.get_world_3d() if world != null: - vs.instance_set_scenario(_mesh_instance, world.get_scenario()) + rs.instance_set_scenario(_mesh_instance, world.get_scenario()) _visible = true # TODO Is this needed? - vs.instance_set_visible(_mesh_instance, _visible) + rs.instance_set_visible(_mesh_instance, _visible) _active = true _pending_update = false @@ -64,44 +64,44 @@ func is_pending_update() -> bool: return _pending_update -func set_pending_update(p): +func set_pending_update(p: bool): _pending_update = p -func enter_world(world): +func enter_world(world: World3D): assert(_mesh_instance != RID()) - VisualServer.instance_set_scenario(_mesh_instance, world.get_scenario()) + RenderingServer.instance_set_scenario(_mesh_instance, world.get_scenario()) func exit_world(): assert(_mesh_instance != RID()) - VisualServer.instance_set_scenario(_mesh_instance, RID()) + RenderingServer.instance_set_scenario(_mesh_instance, RID()) -func parent_transform_changed(parent_transform): +func parent_transform_changed(parent_transform: Transform3D): assert(_mesh_instance != RID()) - var local_transform = Transform(Basis(), Vector3(cell_origin_x, 0, cell_origin_y)) + var local_transform = Transform3D(Basis(), Vector3(cell_origin_x, 0, cell_origin_y)) var world_transform = parent_transform * local_transform - VisualServer.instance_set_transform(_mesh_instance, world_transform) + RenderingServer.instance_set_transform(_mesh_instance, world_transform) func set_mesh(mesh: Mesh): assert(_mesh_instance != RID()) if mesh == _mesh: return - VisualServer.instance_set_base(_mesh_instance, mesh.get_rid() if mesh != null else RID()) + RenderingServer.instance_set_base(_mesh_instance, mesh.get_rid() if mesh != null else RID()) _mesh = mesh func set_material(material: Material): assert(_mesh_instance != RID()) - VisualServer.instance_geometry_set_material_override( \ + RenderingServer.instance_geometry_set_material_override( \ _mesh_instance, material.get_rid() if material != null else RID()) func set_visible(visible: bool): assert(_mesh_instance != RID()) - VisualServer.instance_set_visible(_mesh_instance, visible) + RenderingServer.instance_set_visible(_mesh_instance, visible) _visible = visible @@ -111,15 +111,15 @@ func is_visible() -> bool: func set_aabb(aabb: AABB): assert(_mesh_instance != RID()) - VisualServer.instance_set_custom_aabb(_mesh_instance, aabb) + RenderingServer.instance_set_custom_aabb(_mesh_instance, aabb) func set_render_layer_mask(mask: int): assert(_mesh_instance != RID()) - VisualServer.instance_set_layer_mask(_mesh_instance, mask) + RenderingServer.instance_set_layer_mask(_mesh_instance, mask) func set_cast_shadow_setting(setting: int): assert(_mesh_instance != RID()) - VisualServer.instance_geometry_set_cast_shadows_setting(_mesh_instance, setting) + RenderingServer.instance_geometry_set_cast_shadows_setting(_mesh_instance, setting) diff --git a/addons/zylann.hterrain/hterrain_chunk_debug.gd b/addons/zylann.hterrain/hterrain_chunk_debug.gd index 174d7dd7..6c73bc53 100644 --- a/addons/zylann.hterrain/hterrain_chunk_debug.gd +++ b/addons/zylann.hterrain/hterrain_chunk_debug.gd @@ -1,4 +1,4 @@ -tool +@tool extends "hterrain_chunk.gd" # I wrote this because Godot has no debug option to show AABBs. @@ -11,48 +11,51 @@ const HT_Util = preload("./util/util.gd") var _debug_cube = null var _aabb = AABB() -var _parent_transform = Transform() +var _parent_transform = Transform3D() -func _init(p_parent, p_cell_x, p_cell_y, p_material).(p_parent, p_cell_x, p_cell_y, p_material): +func _init(p_parent, p_cell_x, p_cell_y, p_material): + super(p_parent, p_cell_x, p_cell_y, p_material) + var wirecube if not p_parent.has_meta("debug_wirecube_mesh"): wirecube = HT_Util.create_wirecube_mesh() - var mat = SpatialMaterial.new() - mat.flags_unshaded = true + var mat = StandardMaterial3D.new() + mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED wirecube.surface_set_material(0, mat) + # Cache the debug cube in the parent node to avoid re-creating each time p_parent.set_meta("debug_wirecube_mesh", wirecube) else: wirecube = p_parent.get_meta("debug_wirecube_mesh") _debug_cube = HT_DirectMeshInstance.new() _debug_cube.set_mesh(wirecube) - _debug_cube.set_world(p_parent.get_world()) + _debug_cube.set_world(p_parent.get_world_3d()) -func enter_world(world): - .enter_world(world) +func enter_world(world: World3D): + super(world) _debug_cube.enter_world(world) func exit_world(): - .exit_world() + super() _debug_cube.exit_world() -func parent_transform_changed(parent_transform): - .parent_transform_changed(parent_transform) +func parent_transform_changed(parent_transform: Transform3D): + super(parent_transform) _parent_transform = parent_transform _debug_cube.set_transform(_compute_aabb()) -func set_visible(visible): - .set_visible(visible) +func set_visible(visible: bool): + super(visible) _debug_cube.set_visible(visible) -func set_aabb(aabb): - .set_aabb(aabb) +func set_aabb(aabb: AABB): + super(aabb) #aabb.position.y += 0.2*randf() _aabb = aabb _debug_cube.set_transform(_compute_aabb()) @@ -60,5 +63,5 @@ func set_aabb(aabb): func _compute_aabb(): var pos = Vector3(cell_origin_x, 0, cell_origin_y) - return _parent_transform * Transform(Basis().scaled(_aabb.size), pos + _aabb.position) + return _parent_transform * Transform3D(Basis().scaled(_aabb.size), pos + _aabb.position) diff --git a/addons/zylann.hterrain/hterrain_collider.gd b/addons/zylann.hterrain/hterrain_collider.gd index 8e286406..60f83957 100644 --- a/addons/zylann.hterrain/hterrain_collider.gd +++ b/addons/zylann.hterrain/hterrain_collider.gd @@ -4,7 +4,7 @@ const HT_Logger = preload("./util/logger.gd") var _shape_rid = RID() var _body_rid = RID() -var _terrain_transform = Transform() +var _terrain_transform = Transform3D() var _terrain_data = null var _logger = HT_Logger.get_for(self) @@ -12,55 +12,57 @@ var _logger = HT_Logger.get_for(self) func _init(attached_node: Node, initial_layer: int, initial_mask: int): _logger.debug("HTerrainCollider: creating body") assert(attached_node != null) - _shape_rid = PhysicsServer.shape_create(PhysicsServer.SHAPE_HEIGHTMAP) - _body_rid = PhysicsServer.body_create(PhysicsServer.BODY_MODE_STATIC) + _shape_rid = PhysicsServer3D.shape_create(PhysicsServer3D.SHAPE_HEIGHTMAP) + _body_rid = PhysicsServer3D.body_create() + PhysicsServer3D.body_set_mode(_body_rid, PhysicsServer3D.BODY_MODE_STATIC) - PhysicsServer.body_set_collision_layer(_body_rid, initial_layer) - PhysicsServer.body_set_collision_mask(_body_rid, initial_mask) + PhysicsServer3D.body_set_collision_layer(_body_rid, initial_layer) + PhysicsServer3D.body_set_collision_mask(_body_rid, initial_mask) # TODO This is an attempt to workaround https://github.com/godotengine/godot/issues/24390 - PhysicsServer.body_set_ray_pickable(_body_rid, false) + PhysicsServer3D.body_set_ray_pickable(_body_rid, false) + # Assigng dummy data # TODO This is a workaround to https://github.com/godotengine/godot/issues/25304 - PhysicsServer.shape_set_data(_shape_rid, { + PhysicsServer3D.shape_set_data(_shape_rid, { "width": 2, "depth": 2, - "heights": PoolRealArray([0, 0, 0, 0]), + "heights": PackedFloat32Array([0, 0, 0, 0]), "min_height": -1, "max_height": 1 }) - PhysicsServer.body_add_shape(_body_rid, _shape_rid) + PhysicsServer3D.body_add_shape(_body_rid, _shape_rid) # This makes collision hits report the provided object as `collider` - PhysicsServer.body_attach_object_instance_id(_body_rid, attached_node.get_instance_id()) + PhysicsServer3D.body_attach_object_instance_id(_body_rid, attached_node.get_instance_id()) func set_collision_layer(layer: int): - PhysicsServer.body_set_collision_layer(_body_rid, layer) + PhysicsServer3D.body_set_collision_layer(_body_rid, layer) func set_collision_mask(mask: int): - PhysicsServer.body_set_collision_mask(_body_rid, mask) + PhysicsServer3D.body_set_collision_mask(_body_rid, mask) -func _notification(what): +func _notification(what: int): if what == NOTIFICATION_PREDELETE: _logger.debug("Destroy HTerrainCollider") - PhysicsServer.free_rid(_body_rid) + PhysicsServer3D.free_rid(_body_rid) # The shape needs to be freed after the body, otherwise the engine crashes - PhysicsServer.free_rid(_shape_rid) + PhysicsServer3D.free_rid(_shape_rid) -func set_transform(transform): +func set_transform(transform: Transform3D): assert(_body_rid != RID()) _terrain_transform = transform _update_transform() -func set_world(world): +func set_world(world: World3D): assert(_body_rid != RID()) - PhysicsServer.body_set_space(_body_rid, world.get_space() if world != null else RID()) + PhysicsServer3D.body_set_space(_body_rid, world.get_space() if world != null else RID()) func create_from_terrain_data(terrain_data): @@ -84,7 +86,7 @@ func create_from_terrain_data(terrain_data): "max_height": aabb.end.y } - PhysicsServer.shape_set_data(_shape_rid, shape_data) + PhysicsServer3D.shape_set_data(_shape_rid, shape_data) _update_transform(aabb) @@ -103,20 +105,12 @@ func _update_transform(aabb=null): #_terrain_transform - var trans - var v = Engine.get_version_info() - if v.major == 3 and v.minor <= 1: - # Bullet centers the shape to its overall AABB so we need to move it to match the visuals - trans = Transform(Basis(), 0.5 * Vector3(width, height, depth) + Vector3(0, aabb.position.y, 0)) - else: - # In 3.2, vertical centering changed. - # https://github.com/godotengine/godot/pull/28326 - trans = Transform(Basis(), 0.5 * Vector3(width - 1, 0, depth - 1)) + var trans = Transform3D(Basis(), 0.5 * Vector3(width - 1, 0, depth - 1)) # And then apply the terrain transform trans = _terrain_transform * trans - PhysicsServer.body_set_state(_body_rid, PhysicsServer.BODY_STATE_TRANSFORM, trans) + PhysicsServer3D.body_set_state(_body_rid, PhysicsServer3D.BODY_STATE_TRANSFORM, trans) # Cannot use shape transform when scaling is involved, # because Godot is undoing that scale for some reason. # See https://github.com/Zylann/godot_heightmap_plugin/issues/70 diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index fd4a66cc..f279c120 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -29,7 +29,8 @@ const _map_types = { CHANNEL_HEIGHT: { name = "height", shader_param_name = "u_terrain_heightmap", - texture_flags = Texture.FLAG_FILTER, + filter = true, + mipmaps = false, texture_format = Image.FORMAT_RH, default_fill = null, default_count = 1, @@ -40,7 +41,8 @@ const _map_types = { CHANNEL_NORMAL: { name = "normal", shader_param_name = "u_terrain_normalmap", - texture_flags = Texture.FLAG_FILTER, + filter = true, + mipmaps = false, texture_format = Image.FORMAT_RGB8, default_fill = Color(0.5, 0.5, 1.0), default_count = 1, @@ -56,7 +58,8 @@ const _map_types = { "u_terrain_splatmap_2", "u_terrain_splatmap_3" ], - texture_flags = Texture.FLAG_FILTER, + filter = true, + mipmaps = false, texture_format = Image.FORMAT_RGBA8, default_fill = [Color(1, 0, 0, 0), Color(0, 0, 0, 0)], default_count = 1, @@ -67,7 +70,8 @@ const _map_types = { CHANNEL_COLOR: { name = "color", shader_param_name = "u_terrain_colormap", - texture_flags = Texture.FLAG_FILTER, + filter = true, + mipmaps = false, texture_format = Image.FORMAT_RGBA8, default_fill = Color(1, 1, 1, 1), default_count = 1, @@ -78,7 +82,8 @@ const _map_types = { CHANNEL_DETAIL: { name = "detail", shader_param_name = "u_terrain_detailmap", - texture_flags = Texture.FLAG_FILTER, + filter = true, + mipmaps = false, texture_format = Image.FORMAT_R8, default_fill = Color(0, 0, 0), default_count = 0, @@ -89,7 +94,8 @@ const _map_types = { CHANNEL_GLOBAL_ALBEDO: { name = "global_albedo", shader_param_name = "u_terrain_globalmap", - texture_flags = Texture.FLAG_FILTER | Texture.FLAG_MIPMAPS, + filter = true, + mipmaps = true, texture_format = Image.FORMAT_RGB8, default_fill = null, default_count = 0, @@ -100,7 +106,8 @@ const _map_types = { CHANNEL_SPLAT_INDEX: { name = "splat_index", shader_param_name = "u_terrain_splat_index_map", - texture_flags = 0, + filter = false, + mipmaps = false, texture_format = Image.FORMAT_RGB8, default_fill = Color(0, 0, 0), default_count = 0, @@ -111,7 +118,8 @@ const _map_types = { CHANNEL_SPLAT_WEIGHT: { name = "splat_weight", shader_param_name = "u_terrain_splat_weight_map", - texture_flags = Texture.FLAG_FILTER, + filter = true, + mipmaps = false, texture_format = Image.FORMAT_RG8, default_fill = Color(1, 0, 0), default_count = 0, @@ -123,7 +131,7 @@ const _map_types = { # Resolution is a power of two + 1 const MAX_RESOLUTION = 4097 -const MIN_RESOLUTION = 65 # must be higher than largest minimum chunk size +const MIN_RESOLUTION = 65 # must be higher than largest chunk size const DEFAULT_RESOLUTION = 513 const SUPPORTED_RESOLUTIONS = [65, 129, 257, 513, 1025, 2049, 4097] @@ -185,7 +193,7 @@ func _set_default_maps(): for c in CHANNEL_COUNT: var maps = [] var n = _map_types[c].default_count - for i in range(n): + for i in n: maps.append(HT_Map.new(i)) _maps[c] = maps @@ -257,7 +265,7 @@ func resize(p_res: int, stretch := true, anchor := Vector2(-1, -1)): if p_res == get_resolution(): return - p_res = HT_Util.clamp_int(p_res, MIN_RESOLUTION, MAX_RESOLUTION) + p_res = clampi(p_res, MIN_RESOLUTION, MAX_RESOLUTION) # Power of two is important for LOD. # Also, grid data is off by one, @@ -268,38 +276,36 @@ func resize(p_res: int, stretch := true, anchor := Vector2(-1, -1)): _resolution = p_res; - for channel in range(CHANNEL_COUNT): - var maps := _maps[channel] as Array + for channel in CHANNEL_COUNT: + var maps : Array = _maps[channel] for index in len(maps): _logger.debug(str("Resizing ", get_map_debug_name(channel, index), "...")) - var map := maps[index] as HT_Map + var map : HT_Map = maps[index] var im := map.image if im == null: _logger.debug("Image not in memory, creating it") - im = Image.new() - im.create(_resolution, _resolution, false, get_channel_format(channel)) + im = Image.create(_resolution, _resolution, false, get_channel_format(channel)) var fill_color = _get_map_default_fill_color(channel, index) if fill_color != null: _logger.debug(str("Fill with ", fill_color)) im.fill(fill_color) - map.image = im - else: if stretch and not _map_types[channel].authored: - im.create(_resolution, _resolution, false, get_channel_format(channel)) + im = Image.create(_resolution, _resolution, false, get_channel_format(channel)) else: if stretch: im.resize(_resolution, _resolution) else: var fill_color = _get_map_default_fill_color(channel, index) - map.image = HT_Util.get_cropped_image(im, _resolution, _resolution, \ + im = HT_Util.get_cropped_image(im, _resolution, _resolution, \ fill_color, anchor) + map.image = im map.modified = true _update_all_vertical_bounds() @@ -332,10 +338,7 @@ func get_height_at(x: int, y: int) -> float: # Height data must be loaded in RAM var im = get_image(CHANNEL_HEIGHT) assert(im != null) - - im.lock(); var h = HT_Util.get_pixel_clamped(im, x, y).r; - im.unlock(); return h; @@ -348,29 +351,27 @@ func get_interpolated_height_at(pos: Vector3) -> float: assert(im != null) # The function takes a Vector3 for convenience so it's easier to use in 3D scripting - var x0 := int(floor(pos.x)) - var y0 := int(floor(pos.z)) + var x0 := int(floorf(pos.x)) + var y0 := int(floorf(pos.z)) var xf := pos.x - x0 var yf := pos.z - y0 - im.lock() var h00 = HT_Util.get_pixel_clamped(im, x0, y0).r var h10 = HT_Util.get_pixel_clamped(im, x0 + 1, y0).r var h01 = HT_Util.get_pixel_clamped(im, x0, y0 + 1).r var h11 = HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1).r - im.unlock() # Bilinear filter - var h = lerp(lerp(h00, h10, xf), lerp(h01, h11, xf), yf) + var h = lerpf(lerpf(h00, h10, xf), lerpf(h01, h11, xf), yf) return h; # Gets all heights within the given rectangle in cells. # This height is raw and doesn't account for scaling of the terrain node. -# Data is returned as a PoolRealArray. -func get_heights_region(x0: int, y0: int, w: int, h: int) -> PoolRealArray: +# Data is returned as a PackedFloat32Array. +func get_heights_region(x0: int, y0: int, w: int, h: int) -> PackedFloat32Array: var im = get_image(CHANNEL_HEIGHT) assert(im != null) @@ -379,7 +380,7 @@ func get_heights_region(x0: int, y0: int, w: int, h: int) -> PoolRealArray: var max_x := HT_Util.clamp_int(x0 + w, 0, im.get_width() + 1) var max_y := HT_Util.clamp_int(y0 + h, 0, im.get_height() + 1) - var heights := PoolRealArray() + var heights := PackedFloat32Array() var area = (max_x - min_x) * (max_y - min_y) if area == 0: @@ -388,23 +389,19 @@ func get_heights_region(x0: int, y0: int, w: int, h: int) -> PoolRealArray: heights.resize(area) - im.lock() - var i := 0 for y in range(min_y, max_y): for x in range(min_x, max_x): heights[i] = im.get_pixel(x, y).r i += 1 - im.unlock() - return heights # Gets all heights. # This height is raw and doesn't account for scaling of the terrain node. -# Data is returned as a PoolRealArray. -func get_all_heights() -> PoolRealArray: +# Data is returned as a PackedFloat32Array. +func get_all_heights() -> PackedFloat32Array: return get_heights_region(0, 0, _resolution, _resolution) @@ -453,8 +450,8 @@ func notify_region_change( _maps[p_map_type][p_index].modified = true - emit_signal("region_changed", min_x, min_y, size_x, size_y, p_map_type) - emit_signal("changed") + region_changed.emit(min_x, min_y, size_x, size_y, p_map_type) + changed.emit() func notify_full_change(): @@ -515,8 +512,8 @@ func _edit_apply_undo(undo_data: Dictionary, image_cache: HT_ImageFileCache): if _map_types[map_type].authored: #_logger.debug(str("Apply undo chunk ", cpos, " to ", Vector2(min_x, min_y))) - var src_rect := Rect2(0, 0, data.get_width(), data.get_height()) - dst_image.blit_rect(data, src_rect, Vector2(min_x, min_y)) + var src_rect := Rect2i(0, 0, data.get_width(), data.get_height()) + dst_image.blit_rect(data, src_rect, Vector2i(min_x, min_y)) else: _logger.error( str("Channel ", map_type, " is a calculated channel!, no undo on this one")) @@ -557,8 +554,8 @@ func _edit_apply_maps_from_file_cache(image_file_cache, map_ids: Dictionary): continue var index := 0 var dst_im := get_image(map_type, index) - var rect = Rect2(0, 0, src_im.get_height(), src_im.get_height()) - dst_im.blit_rect(src_im, rect, Vector2()) + var rect = Rect2i(0, 0, src_im.get_height(), src_im.get_height()) + dst_im.blit_rect(src_im, rect, Vector2i()) notify_region_change(rect, map_type, index) @@ -588,8 +585,6 @@ func _upload_region(channel: int, index: int, min_x: int, min_y: int, size_x: in if size_x <= 0 or size_y <= 0: return - var flags = _map_types[channel].texture_flags - var texture = map.texture if texture == null or not (texture is ImageTexture): @@ -603,30 +598,36 @@ func _upload_region(channel: int, index: int, min_x: int, min_y: int, size_x: in "_upload_region was used but the texture is not created yet. ",\ "The map ", channel, "[", index, "] will be uploaded entirely.")) - texture = ImageTexture.new() - texture.create_from_image(image, flags) - - map.texture = texture + map.texture = ImageTexture.create_from_image(image) # Need to notify because other systems may want to grab the new texture object - emit_signal("map_changed", channel, index) + map_changed.emit(channel, index) elif texture.get_size() != image.get_size(): _logger.debug(str( "_upload_region was used but the image size is different. ",\ "The map ", channel, "[", index, "] will be reuploaded entirely.")) - texture.create_from_image(image, flags) + + map.texture = ImageTexture.create_from_image(image) + + # Since Godot 4, need to notify because other systems may want to grab the new texture + # object. In Godot 3 it wasn't necessary because we were able to resize a texture without + # having to recreate it from scratch... + map_changed.emit(channel, index) else: - if VisualServer.has_method("texture_set_data_partial"): - VisualServer.texture_set_data_partial( \ - texture.get_rid(), image, \ - min_x, min_y, \ - size_x, size_y, \ - min_x, min_y, \ - 0, 0) + # TODO Godot 3 had partial texture update, but Godot 4 does not. + # This will affect edition performance. + if RenderingServer.has_method("texture_set_data_partial"): + assert(false) + # RenderingServer.texture_set_data_partial( \ + # texture.get_rid(), image, \ + # min_x, min_y, \ + # size_x, size_y, \ + # min_x, min_y, \ + # 0, 0) else: - # Godot 3.0.6 and earlier... + # Godot 4.0 # It is slow. # ..ooo@@@XXX%%%xx.. @@ -647,7 +648,7 @@ func _upload_region(channel: int, index: int, min_x: int, min_y: int, size_x: in # IX U . V IX # V . . V # - texture.create_from_image(image, flags) + texture.update(image) #_logger.debug(str("Channel updated ", channel)) @@ -680,14 +681,13 @@ func _edit_add_map(map_type: int) -> int: _maps.append([]) var maps = _maps[map_type] var map = HT_Map.new(_get_free_id(map_type)) - map.image = Image.new() - map.image.create(_resolution, _resolution, false, get_channel_format(map_type)) + map.image = Image.create(_resolution, _resolution, false, get_channel_format(map_type)) var index = len(maps) var default_color = _get_map_default_fill_color(map_type, index) if default_color != null: map.image.fill(default_color) maps.append(map) - emit_signal("map_added", map_type, index) + map_added.emit(map_type, index) return index @@ -702,7 +702,7 @@ func _edit_insert_map_from_image_cache(map_type: int, index: int, image_cache, i var map = HT_Map.new(_get_free_id(map_type)) map.image = image_cache.load_image(image_id) maps.insert(index, map) - emit_signal("map_added", map_type, index) + map_added.emit(map_type, index) func _edit_remove_map(map_type: int, index: int): @@ -710,7 +710,7 @@ func _edit_remove_map(map_type: int, index: int): _logger.debug(str("Removing map ", get_channel_name(map_type), " at index ", index)) var maps = _maps[map_type] maps.remove(index) - emit_signal("map_removed", map_type, index) + map_removed.emit(map_type, index) func _get_free_id(map_type: int) -> int: @@ -780,9 +780,7 @@ func get_point_aabb(cell_x: int, cell_y: int) -> Vector2: if cy >= _chunked_vertical_bounds.get_height(): cy = _chunked_vertical_bounds.get_height() - 1 - _chunked_vertical_bounds.lock() var b := _chunked_vertical_bounds.get_pixel(cx, cy) - _chunked_vertical_bounds.unlock() return Vector2(b.r, b.g) @@ -804,23 +802,19 @@ func get_region_aabb(origin_in_cells_x: int, origin_in_cells_y: int, \ var cmax_x := (origin_in_cells_x + size_in_cells_x - 1) / VERTICAL_BOUNDS_CHUNK_SIZE + 1 var cmax_y := (origin_in_cells_y + size_in_cells_y - 1) / VERTICAL_BOUNDS_CHUNK_SIZE + 1 - cmin_x = HT_Util.clamp_int(cmin_x, 0, _chunked_vertical_bounds.get_width() - 1) - cmin_y = HT_Util.clamp_int(cmin_y, 0, _chunked_vertical_bounds.get_height() - 1) - cmax_x = HT_Util.clamp_int(cmax_x, 0, _chunked_vertical_bounds.get_width()) - cmax_y = HT_Util.clamp_int(cmax_y, 0, _chunked_vertical_bounds.get_height()) + cmin_x = clampi(cmin_x, 0, _chunked_vertical_bounds.get_width() - 1) + cmin_y = clampi(cmin_y, 0, _chunked_vertical_bounds.get_height() - 1) + cmax_x = clampi(cmax_x, 0, _chunked_vertical_bounds.get_width()) + cmax_y = clampi(cmax_y, 0, _chunked_vertical_bounds.get_height()) - _chunked_vertical_bounds.lock() - var min_height := _chunked_vertical_bounds.get_pixel(cmin_x, cmin_y).r var max_height = min_height for y in range(cmin_y, cmax_y): for x in range(cmin_x, cmax_x): var b = _chunked_vertical_bounds.get_pixel(x, y) - min_height = min(b.r, min_height) - max_height = max(b.g, max_height) - - _chunked_vertical_bounds.unlock() + min_height = minf(b.r, min_height) + max_height = maxf(b.g, max_height) var aabb = AABB() aabb.position = Vector3(origin_in_cells_x, min_height, origin_in_cells_y) @@ -833,7 +827,7 @@ func _update_all_vertical_bounds(): var csize_x := _resolution / VERTICAL_BOUNDS_CHUNK_SIZE var csize_y := _resolution / VERTICAL_BOUNDS_CHUNK_SIZE _logger.debug(str("Updating all vertical bounds... (", csize_x , "x", csize_y, " chunks)")) - _chunked_vertical_bounds.create(csize_x, csize_y, false, Image.FORMAT_RGF) + _chunked_vertical_bounds = Image.create(csize_x, csize_y, false, Image.FORMAT_RGF) _update_vertical_bounds(0, 0, _resolution - 1, _resolution - 1) @@ -855,18 +849,16 @@ func _update_vertical_bounds(origin_in_cells_x: int, origin_in_cells_y: int, \ var cmax_x := (origin_in_cells_x + size_in_cells_x - 1) / VERTICAL_BOUNDS_CHUNK_SIZE + 1 var cmax_y := (origin_in_cells_y + size_in_cells_y - 1) / VERTICAL_BOUNDS_CHUNK_SIZE + 1 - cmin_x = HT_Util.clamp_int(cmin_x, 0, _chunked_vertical_bounds.get_width() - 1) - cmin_y = HT_Util.clamp_int(cmin_y, 0, _chunked_vertical_bounds.get_height() - 1) - cmax_x = HT_Util.clamp_int(cmax_x, 0, _chunked_vertical_bounds.get_width()) - cmax_y = HT_Util.clamp_int(cmax_y, 0, _chunked_vertical_bounds.get_height()) + cmin_x = clampi(cmin_x, 0, _chunked_vertical_bounds.get_width() - 1) + cmin_y = clampi(cmin_y, 0, _chunked_vertical_bounds.get_height() - 1) + cmax_x = clampi(cmax_x, 0, _chunked_vertical_bounds.get_width()) + cmax_y = clampi(cmax_y, 0, _chunked_vertical_bounds.get_height()) # Note: chunks in _chunked_vertical_bounds share their edge cells and # have an actual size of chunk size + 1. var chunk_size_x := VERTICAL_BOUNDS_CHUNK_SIZE + 1 var chunk_size_y := VERTICAL_BOUNDS_CHUNK_SIZE + 1 - _chunked_vertical_bounds.lock() - for y in range(cmin_y, cmax_y): var pmin_y := y * VERTICAL_BOUNDS_CHUNK_SIZE @@ -875,8 +867,6 @@ func _update_vertical_bounds(origin_in_cells_x: int, origin_in_cells_y: int, \ var b = _compute_vertical_bounds_at(pmin_x, pmin_y, chunk_size_x, chunk_size_y) _chunked_vertical_bounds.set_pixel(x, y, Color(b.x, b.y, 0)) - _chunked_vertical_bounds.unlock() - func _compute_vertical_bounds_at( origin_x: int, origin_y: int, size_x: int, size_y: int) -> Vector2: @@ -886,20 +876,22 @@ func _compute_vertical_bounds_at( return _image_utils.get_red_range(heights, Rect2(origin_x, origin_y, size_x, size_y)) -func save_data(data_dir: String): +func save_data(data_dir: String) -> bool: _logger.debug("Saving terrain data...") _locked = true - _save_metadata(data_dir.plus_file(META_FILENAME)) + _save_metadata(data_dir.path_join(META_FILENAME)) var map_count = _get_total_map_count() + var all_succeeded = true + var pi = 0 - for map_type in range(CHANNEL_COUNT): + for map_type in CHANNEL_COUNT: var maps = _maps[map_type] - for index in range(len(maps)): + for index in len(maps): var map = _maps[map_type][index] if not map.modified: _logger.debug(str( @@ -909,7 +901,7 @@ func save_data(data_dir: String): _logger.debug(str("Saving map ", get_map_debug_name(map_type, index), " as ", _get_map_filename(map_type, index), "...")) - _save_map(data_dir, map_type, index) + all_succeeded = all_succeeded and _save_map(data_dir, map_type, index) map.modified = false pi += 1 @@ -919,6 +911,8 @@ func save_data(data_dir: String): # TODO In editor, trigger reimport on generated assets _locked = false + return all_succeeded + func _is_any_map_modified() -> bool: for maplist in _maps: @@ -936,24 +930,22 @@ func _get_total_map_count() -> int: func _load_metadata(path: String): - var f = File.new() - var err = f.open(path, File.READ) - assert(err == OK) + var f = FileAccess.open(path, FileAccess.READ) + assert(f != null) var text = f.get_as_text() - f.close() + f = null # close file var res = JSON.parse(text) assert(res.error == OK) _deserialize_metadata(res.result) func _save_metadata(path: String): - var f = File.new() var d = _serialize_metadata() var text = JSON.print(d, "\t", true) - var err = f.open(path, File.WRITE) + var f = FileAccess.open(path, FileAccess.WRITE) + var err = f.get_error() assert(err == OK) f.store_string(text) - f.close() func _serialize_metadata() -> Dictionary: @@ -991,14 +983,14 @@ func _deserialize_metadata(dict: Dictionary) -> bool: var data = dict["maps"] assert(len(data) <= len(_maps)) - for i in range(len(data)): + for i in len(data): var maps = _maps[i] var maps_data = data[i] if len(maps) != len(maps_data): maps.resize(len(maps_data)) - for j in range(len(maps)): + for j in len(maps): var map = maps[j] # Cast because the data comes from json, where every number is double var id := int(maps_data[j].id) @@ -1014,7 +1006,7 @@ func _deserialize_metadata(dict: Dictionary) -> bool: func load_data(dir_path: String): _locked = true - _load_metadata(dir_path.plus_file(META_FILENAME)) + _load_metadata(dir_path.path_join(META_FILENAME)) _logger.debug("Loading terrain data...") @@ -1023,10 +1015,10 @@ func load_data(dir_path: String): # Note: if we loaded all maps at once before uploading them to VRAM, # it would take a lot more RAM than if we load them one by one - for map_type in range(len(_maps)): + for map_type in len(_maps): var maps = _maps[map_type] - for index in range(len(maps)): + for index in len(maps): _logger.debug(str("Loading map ", get_map_debug_name(map_type, index), " from ", _get_map_filename(map_type, index), "...")) @@ -1043,7 +1035,7 @@ func load_data(dir_path: String): _logger.debug("Notify resolution change...") _locked = false - emit_signal("resolution_changed") + resolution_changed.emit() func get_data_dir() -> String: @@ -1059,19 +1051,24 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: if im == null: var tex = map.texture if tex != null: - _logger.debug(str("Image not found for map ", map_type, - ", downloading from VRAM")) - im = tex.get_data() + _logger.debug(str("Image not found for map ", map_type, ", downloading from VRAM")) + im = tex.get_image() else: _logger.debug(str("No data in map ", map_type, "[", index, "]")) # This data doesn't have such map return true - var dir = Directory.new() - if not dir.dir_exists(dir_path): - dir.make_dir(dir_path) + # The function says "absolute" but in reality it accepts paths like `res://x`, + # which from a user standpoint are not absolute. Also, `FileAccess.file_exists` exists but + # isn't named "absolute" :shrug: + if not DirAccess.dir_exists_absolute(dir_path): + var err = DirAccess.make_dir_absolute(dir_path) + if err != OK: + _logger.error("Could not create directory '{0}', error {1}" \ + .format([dir_path, HT_Errors.get_message(err)])) + return false - var fpath = dir_path.plus_file(_get_map_filename(map_type, index)) + var fpath = dir_path.path_join(_get_map_filename(map_type, index)) if _channel_can_be_saved_as_png(map_type): fpath += ".png" @@ -1085,42 +1082,39 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: _logger.error("Could not save '{0}', error {1}" \ .format([fpath, HT_Errors.get_message(err)])) return false - _try_delete_0_8_0_heightmap(fpath.get_basename(), _logger) return true static func _try_write_default_import_options(fpath: String, channel: int, logger): var imp_fpath = fpath + ".import" - var f := File.new() - if f.file_exists(imp_fpath): + if FileAccess.file_exists(imp_fpath): # Already exists return var map_info = _map_types[channel] - var texture_flags: int = map_info.texture_flags - var filter := (texture_flags & Texture.FLAG_FILTER) != 0 var srgb: bool = map_info.srgb var defaults = { "remap": { "importer": "texture", - "type": "StreamTexture" + "type": "CompressedTexture2D" }, "deps": { "source_file": fpath }, "params": { - # Don't compress. It ruins quality and makes the editor choke on big textures. + # Use lossless compression. + # Lossy ruins quality and makes the editor choke on big textures. # TODO I would have used ImageTexture.COMPRESS_LOSSLESS, # but apparently what is saved in the .import file does not match, # and rather corresponds TO THE UI IN THE IMPORT DOCK :facepalm: "compress/mode": 0, - "compress/hdr_mode": 0, + "compress/hdr_compression": 0, "compress/normal_map": 0, - "flags/mipmaps": false, - "flags/filter": filter, + # No mipmaps + "mipmaps/limit": 0, # Most textures aren't color. # Same here, this is mapping something from the import dock UI, @@ -1134,7 +1128,7 @@ static func _try_write_default_import_options(fpath: String, channel: int, logge # Don't try to be smart. # This can actually overwrite the settings with defaults... # https://github.com/godotengine/godot/issues/24220 - "detect_3d": false, + "detect_3d/compress_to": 0, } } @@ -1142,7 +1136,7 @@ static func _try_write_default_import_options(fpath: String, channel: int, logge func _load_map(dir: String, map_type: int, index: int) -> bool: - var fpath = dir.plus_file(_get_map_filename(map_type, index)) + var fpath = dir.path_join(_get_map_filename(map_type, index)) # Maps must be configured before being loaded var map = _maps[map_type][index] @@ -1170,32 +1164,28 @@ func _load_map(dir: String, map_type: int, index: int) -> bool: _logger.debug("Map {0} is imported as Image. An ImageTexture will be generated." \ .format([get_map_debug_name(map_type, index)])) map.image = tex - tex = ImageTexture.new() - var map_type_info = _map_types[map_type] - tex.create_from_image(map.image, map_type_info.texture_flags) + tex = ImageTexture.create_from_image(map.image) must_load_image_in_editor = false map.texture = tex - if Engine.editor_hint: + if Engine.is_editor_hint(): if must_load_image_in_editor: # But in the editor we want textures to be editable, # so we have to automatically load the data also in RAM if map.image == null: - map.image = Image.new() - map.image.load(fpath) + map.image = Image.load_from_file(fpath) + else: + map.image.load(fpath) _ensure_map_format(map.image, map_type, index) else: # The heightmap is different. # It has often uses beyond graphics, so we always keep a RAM copy by default. - var im = _try_load_0_8_0_heightmap(fpath, map_type, map.image, _logger) - if typeof(im) == TYPE_BOOL: - return false - if im == null: - fpath += ".res" - im = load(fpath) + fpath += ".res" + im = load(fpath) + if im == null: _logger.error("Could not load '{0}'".format([fpath])) return false @@ -1218,46 +1208,6 @@ func _ensure_map_format(im: Image, map_type: int, index: int): im.convert(expected_format) -# Legacy -# TODO Drop after a few versions -static func _try_load_0_8_0_heightmap(fpath: String, channel: int, existing_image: Image, logger): - fpath += ".bin" - var f = File.new() - if not f.file_exists(fpath): - return null - var err = f.open(fpath, File.READ) - if err != OK: - logger.error("Could not open '{0}' for reading, error {1}" \ - .format([fpath, HT_Errors.get_message(err)])) - return false - - var width = f.get_32() - var height = f.get_32() - var pixel_size = f.get_32() - var data_size = width * height * pixel_size - var data = f.get_buffer(data_size) - if data.size() != data_size: - logger.error("Unexpected end of buffer, expected size {0}, got {1}" \ - .format([data_size, data.size()])) - return false - - var im = existing_image - if im == null: - im = Image.new() - im.create_from_data(width, height, false, get_channel_format(channel), data) - return im - - -static func _try_delete_0_8_0_heightmap(fpath: String, logger): - fpath += ".bin" - var d = Directory.new() - if d.file_exists(fpath): - var err = d.remove(fpath) - if err != OK: - logger.error("Could not erase file '{0}', error {1}" \ - .format([fpath, HT_Errors.get_message(err)])) - - # Imports images into the terrain data by converting them to the internal format. # It is possible to omit some of them, in which case those already setup will be used. # This function is quite permissive, and will only fail if there is really no way to import. @@ -1293,8 +1243,8 @@ func _edit_import_maps(input: Dictionary) -> bool: static func get_adjusted_map_size(width: int, height: int) -> int: var width_po2 = HT_Util.next_power_of_two(width - 1) + 1 var height_po2 = HT_Util.next_power_of_two(height - 1) + 1 - var size_po2 = HT_Util.min_int(width_po2, height_po2) - size_po2 = HT_Util.clamp_int(size_po2, MIN_RESOLUTION, MAX_RESOLUTION) + var size_po2 = mini(width_po2, height_po2) + size_po2 = clampi(size_po2, MIN_RESOLUTION, MAX_RESOLUTION) return size_po2 @@ -1305,9 +1255,9 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo # Godot can only load 8-bit PNG, # so we have to bring it back to float in the wanted range - var src_image := Image.new() - var err := src_image.load(fpath) - if err != OK: + var src_image := Image.load_from_file(fpath) + # TODO No way to access the error code? + if src_image == null: return false var res := get_adjusted_map_size(src_image.get_width(), src_image.get_height()) @@ -1324,28 +1274,22 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo var hrange := max_y - min_y - var width = HT_Util.min_int(im.get_width(), src_image.get_width()) - var height = HT_Util.min_int(im.get_height(), src_image.get_height()) + var width = mini(im.get_width(), src_image.get_width()) + var height = mini(im.get_height(), src_image.get_height()) _logger.debug("Converting to internal format...") - im.lock() - src_image.lock() - # Convert to internal format (from RGBA8 to RH16) with range scaling - for y in range(0, width): - for x in range(0, height): + for y in width: + for x in height: var gs := src_image.get_pixel(x, y).r var h := min_y + hrange * gs im.set_pixel(x, y, Color(h, 0, 0)) - - src_image.unlock() - im.unlock() elif ext == "exr": - var src_image := Image.new() - var err := src_image.load(fpath) - if err != OK: + var src_image := Image.load_from_file(fpath) + # TODO No way to access the error code? + if src_image == null: return false var res := get_adjusted_map_size(src_image.get_width(), src_image.get_height()) @@ -1368,15 +1312,14 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo var height_format = _map_types[CHANNEL_HEIGHT].texture_format src_image.convert(height_format) - im.blit_rect(src_image, Rect2(0, 0, res, res), Vector2()) + im.blit_rect(src_image, Rect2i(0, 0, res, res), Vector2i()) elif ext == "raw": # RAW files don't contain size, so we have to deduce it from 16-bit size. # We also need to bring it back to float in the wanted range. - var f := File.new() - var err := f.open(fpath, File.READ) - if err != OK: + var f := FileAccess.open(fpath, FileAccess.READ) + if f == null: return false var file_len = f.get_len() @@ -1391,7 +1334,7 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo # The editor officially runs on desktop architectures, which are # generally little-endian. if big_endian: - f.endian_swap = true + f.big_endian = true var res := get_adjusted_map_size(file_res, file_res) @@ -1410,15 +1353,13 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo _logger.debug("Converting to internal format...") - im.lock() - - var rw := HT_Util.min_int(res, file_res) - var rh := HT_Util.min_int(res, file_res) + var rw := mini(res, file_res) + var rh := mini(res, file_res) # Convert to internal format (from bytes to RH16) var h := 0.0 - for y in range(0, rh): - for x in range(0, rw): + for y in rh: + for x in rw: var gs := float(f.get_16()) / 65535.0 h = min_y + hrange * float(gs) im.set_pixel(x, y, Color(h, 0, 0)) @@ -1426,12 +1367,9 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo for x in range(rw, file_res): f.get_16() - im.unlock() - elif ext == "xyz": - var f := File.new() - var err := f.open(fpath, File.READ) - if err != OK: + var f := FileAccess.open(fpath, FileAccess.READ) + if f == null: return false var bounds := HT_XYZFormat.load_bounds(f) @@ -1478,9 +1416,9 @@ func _import_map(map_type: int, path: String) -> bool: # Heightmap requires special treatment assert(map_type != CHANNEL_HEIGHT) - var im = Image.new() - var err = im.load(path) - if err != OK: + var im = Image.load_from_file(path) + # TODO No way to get the error code? + if im == null: return false var res = get_resolution() @@ -1515,7 +1453,6 @@ class HT_CellRaycastContext: var vertical_bounds : Image var hit = null # Vector3 var heightmap : Image - var cell_cb_funcref : FuncRef var broad_param_2d_to_3d := 1.0 var cell_param_2d_to_3d := 1.0 #var dbg @@ -1540,7 +1477,7 @@ class HT_CellRaycastContext: _cell_begin_pos_y = begin.y _cell_begin_pos_2d = cell_ray_origin_2d var rhit = HT_Util.grid_raytrace_2d( - cell_ray_origin_2d, dir_2d, cell_cb_funcref, distance_in_chunk_2d) + cell_ray_origin_2d, dir_2d, cell_cb, distance_in_chunk_2d) return rhit != null func cell_cb(cx: int, cz: int, enter_param: float, exit_param: float) -> bool: @@ -1623,24 +1560,16 @@ func cell_raycast(ray_origin: Vector3, ray_direction: Vector3, max_distance: flo ctx.dir_2d = ray_direction_2d ctx.vertical_bounds = _chunked_vertical_bounds ctx.heightmap = heightmap - # We are lucky FuncRef does not keep a strong reference to the object - ctx.cell_cb_funcref = funcref(ctx, "cell_cb") ctx.cell_param_2d_to_3d = max_distance / max_distance_2d ctx.broad_param_2d_to_3d = ctx.cell_param_2d_to_3d * VERTICAL_BOUNDS_CHUNK_SIZE #ctx.dbg = dbg - heightmap.lock() - _chunked_vertical_bounds.lock() - # Broad phase through cached vertical bound chunks var broad_ray_origin = clipped_segment_2d[0] / VERTICAL_BOUNDS_CHUNK_SIZE var broad_max_distance = \ clipped_segment_2d[0].distance_to(clipped_segment_2d[1]) / VERTICAL_BOUNDS_CHUNK_SIZE - var hit_bp = HT_Util.grid_raytrace_2d(broad_ray_origin, ray_direction_2d, - funcref(ctx, "broad_cb"), broad_max_distance) - - heightmap.unlock() - _chunked_vertical_bounds.unlock() + var hit_bp = HT_Util.grid_raytrace_2d(broad_ray_origin, ray_direction_2d, ctx.broad_cb, + broad_max_distance) if hit_bp == null: # No hit diff --git a/addons/zylann.hterrain/hterrain_detail_layer.gd b/addons/zylann.hterrain/hterrain_detail_layer.gd index b100af43..1c62610b 100644 --- a/addons/zylann.hterrain/hterrain_detail_layer.gd +++ b/addons/zylann.hterrain/hterrain_detail_layer.gd @@ -1,5 +1,5 @@ -tool -extends Spatial +@tool +extends Node3D # Child node of the terrain, used to render numerous small objects on the ground # such as grass or rocks. They do so by using a texture covering the terrain @@ -41,38 +41,111 @@ const _API_SHADER_PARAMS = { # TODO Should be renamed `map_index` # Which detail map this layer will use -export(int) var layer_index := 0 setget set_layer_index, get_layer_index +@export var layer_index := 0: + get: + return layer_index + set(v): + if layer_index == v: + return + layer_index = v + if is_inside_tree(): + _update_material() + HT_Util.update_configuration_warning(self, false) + # Texture to render on the detail meshes. -export(Texture) var texture : Texture setget set_texture, get_texture +@export var texture : Texture: + get: + return texture + set(tex): + texture = tex + _material.set_shader_param("u_albedo_alpha", tex) + # How far detail meshes can be seen. # TODO Improve speed of _get_chunk_aabb() so we can increase the limit # See https://github.com/Zylann/godot_heightmap_plugin/issues/155 -export(float, 1.0, 500.0) \ - var view_distance := 100.0 setget set_view_distance, get_view_distance +@export_range(1.0, 500.0) var view_distance := 100.0: + get: + return view_distance + set(v): + if view_distance == v: + return + view_distance = max(v, 1.0) + if is_inside_tree(): + _update_material() + # Custom shader to replace the default one. -export(Shader) \ - var custom_shader : Shader setget set_custom_shader, get_custom_shader +@export var custom_shader : Shader: + get: + return custom_shader + set(shader): + if custom_shader == shader: + return + custom_shader = shader + if custom_shader == null: + _material.shader = load(DEFAULT_SHADER_PATH) + else: + _material.shader = custom_shader + + if Engine.is_editor_hint(): + # Ability to fork default shader + if shader.code == "": + shader.code = _default_shader.code + # Density modifier, to make more or less detail meshes appear overall. -export(float, 0, 10) var density := 4.0 setget set_density, get_density +@export_range(0, 10) var density := 4.0: + get: + return density + set(v): + v = clampf(v, 0, 10) + if v == density: + return + density = v + _multimesh_need_regen = true + # Mesh used for every detail instance (for example, every grass patch). # If not assigned, an internal quad mesh will be used. # I would have called it `mesh` but that's too broad and conflicts with local vars ._. -export(Mesh) var instance_mesh : Mesh setget set_instance_mesh, get_instance_mesh +@export var instance_mesh : Mesh: + get: + return instance_mesh + set(p_mesh): + if p_mesh == instance_mesh: + return + instance_mesh = p_mesh + _multimesh.mesh = _get_used_mesh() + # Exposes rendering layers, similar to `VisualInstance.layers` -export(int, LAYERS_3D_RENDER) \ - var render_layers := 1 setget set_render_layer_mask, get_render_layer_mask +# (IMO this annotation is not specific enough, something might be off...) +@export_flags_3d_render var render_layers := 1: + get: + return render_layers + set: + render_layers = mask + for k in _chunks: + var chunk = _chunks[k] + chunk.set_layer_mask(mask) + # Exposes shadow casting setting. # Possible values are the same as the enum `GeometryInstance.SHADOW_CASTING_SETTING_*`. -export(int, "Off", "On", "DoubleSided", "ShadowsOnly") \ - var cast_shadow := GeometryInstance.SHADOW_CASTING_SETTING_ON \ - setget set_cast_shadow, get_cast_shadow +@export_enum("Off", "On", "DoubleSided", "ShadowsOnly") \ + var cast_shadow := GeometryInstance3D.SHADOW_CASTING_SETTING_ON: + get: + return cast_shadow + set(option): + if option == cast_shadow: + return + cast_shadow = option + for k in _chunks: + var mmi : HT_DirectMultiMeshInstance = _chunks[k] + mmi.set_cast_shadow(option) + var _material: ShaderMaterial = null var _default_shader: Shader = null @@ -84,7 +157,7 @@ var _multimesh: MultiMesh var _multimesh_need_regen = true var _multimesh_instance_pool := [] var _ambient_wind_time := 0.0 -#var _auto_pick_index_on_enter_tree := Engine.editor_hint +#var _auto_pick_index_on_enter_tree := Engine.is_editor_hint() var _debug_wirecube_mesh: Mesh = null var _debug_cubes := [] var _logger := HT_Logger.get_for(self) @@ -97,13 +170,16 @@ func _init(): _multimesh = MultiMesh.new() _multimesh.transform_format = MultiMesh.TRANSFORM_3D - _multimesh.color_format = MultiMesh.COLOR_8BIT + # TODO Godot 3 had the option to specify color format, but Godot 4 no longer does... + # I only need 8-bit, but Godot 4 uses 32-bit components colors... + #_multimesh.color_format = MultiMesh.COLOR_8BIT + _multimesh.use_colors = true func _enter_tree(): var terrain = _get_terrain() if terrain != null: - terrain.connect("transform_changed", self, "_on_terrain_transform_changed") + terrain.transform_changed.connect(_on_terrain_transform_changed) #if _auto_pick_index_on_enter_tree: # _auto_pick_index_on_enter_tree = false @@ -117,7 +193,7 @@ func _enter_tree(): func _exit_tree(): var terrain = _get_terrain() if terrain != null: - terrain.disconnect("transform_changed", self, "_on_terrain_transform_changed") + terrain.transform_changed.connect(_on_terrain_transform_changed) terrain._internal_remove_detail_layer(self) _update_material() for k in _chunks.keys(): @@ -160,7 +236,7 @@ func _get_property_list() -> Array: # Dynamic properties coming from the shader var props := [] if _material != null: - var shader_params = VisualServer.shader_get_param_list(_material.shader.get_rid()) + var shader_params = RenderingServer.shader_get_parameter_list(_material.shader.get_rid()) for p in shader_params: if _API_SHADER_PARAMS.has(p.name): continue @@ -174,22 +250,22 @@ func _get_property_list() -> Array: func _get(key: String): if key.begins_with("shader_params/"): - var param_name = key.right(len("shader_params/")) + var param_name = key.substr(len("shader_params/")) return get_shader_param(param_name) func _set(key: String, v): if key.begins_with("shader_params/"): - var param_name = key.right(len("shader_params/")) + var param_name = key.substr(len("shader_params/")) set_shader_param(param_name, v) func get_shader_param(param_name: String): - return _material.get_shader_param(param_name) + return _material.get_shader_parameter(param_name) func set_shader_param(param_name: String, v): - _material.set_shader_param(param_name, v) + _material.set_shader_parameter(param_name, v) func _get_terrain(): @@ -198,77 +274,62 @@ func _get_terrain(): return null +# Compat func set_texture(tex: Texture): texture = tex - _material.set_shader_param("u_albedo_alpha", tex) +# Compat func get_texture() -> Texture: return texture +# Compat func set_layer_index(v: int): - if layer_index == v: - return layer_index = v - if is_inside_tree(): - _update_material() - HT_Util.update_configuration_warning(self, false) +# Compat func get_layer_index() -> int: return layer_index +# Compat func set_view_distance(v: float): - if view_distance == v: - return - view_distance = max(v, 1.0) - if is_inside_tree(): - _update_material() + return view_distance +# Compat func get_view_distance() -> float: return view_distance +# Compat func set_custom_shader(shader: Shader): - if custom_shader == shader: - return custom_shader = shader - if custom_shader == null: - _material.shader = load(DEFAULT_SHADER_PATH) - else: - _material.shader = custom_shader - - if Engine.editor_hint: - # Ability to fork default shader - if shader.code == "": - shader.code = _default_shader.code +# Compat func get_custom_shader() -> Shader: return custom_shader +# Compat func set_instance_mesh(p_mesh: Mesh): - if p_mesh == instance_mesh: - return instance_mesh = p_mesh - _multimesh.mesh = _get_used_mesh() +# Compat func get_instance_mesh() -> Mesh: return instance_mesh +# Compat func set_render_layer_mask(mask: int): render_layers = mask - for k in _chunks: - var chunk = _chunks[k] - chunk.set_layer_mask(mask) +# Compat func get_render_layer_mask() -> int: return render_layers @@ -282,14 +343,12 @@ func _get_used_mesh() -> Mesh: return instance_mesh +# Compat func set_density(v: float): - v = clamp(v, 0, 10) - if v == density: - return density = v - _multimesh_need_regen = true +# Compat func get_density() -> float: return density @@ -305,7 +364,7 @@ func update_material(): func _notification(what: int): match what: NOTIFICATION_ENTER_WORLD: - _set_world(get_world()) + _set_world(get_world_3d()) NOTIFICATION_EXIT_WORLD: _set_world(null) @@ -320,13 +379,13 @@ func _set_visible(v: bool): chunk.set_visible(v) -func _set_world(w: World): +func _set_world(w: World3D): for k in _chunks: var chunk = _chunks[k] chunk.set_world(w) -func _on_terrain_transform_changed(gt: Transform): +func _on_terrain_transform_changed(gt: Transform3D): _update_material() var terrain = _get_terrain() @@ -334,7 +393,7 @@ func _on_terrain_transform_changed(gt: Transform): _logger.error("Detail layer is not child of a terrain!") return - var terrain_transform : Transform = terrain.get_internal_transform() + var terrain_transform : Transform3D = terrain.get_internal_transform() # Update AABBs and transforms, because scale might have changed for k in _chunks: @@ -363,7 +422,8 @@ func process(delta: float, viewer_pos: Vector3): mmi.set_multimesh(_multimesh) # Detail layers are unaffected by ground map_scale - var terrain_transform_without_map_scale : Transform = terrain.get_internal_transform_unscaled() + var terrain_transform_without_map_scale : Transform3D = \ + terrain.get_internal_transform_unscaled() var local_viewer_pos := terrain_transform_without_map_scale.affine_inverse() * viewer_pos var viewer_cx = local_viewer_pos.x / CHUNK_SIZE @@ -385,14 +445,8 @@ func process(delta: float, viewer_pos: Vector3): var terrain_chunks_x = terrain_size_x / CHUNK_SIZE var terrain_chunks_z = terrain_size_z / CHUNK_SIZE - if cmin_x < 0: - cmin_x = 0 - if cmin_z < 0: - cmin_z = 0 - if cmax_x > terrain_chunks_x: - cmax_x = terrain_chunks_x - if cmax_z > terrain_chunks_z: - cmax_z = terrain_chunks_z + cmin_x = clampi(cmin_x, 0, terrain_chunks_x) + cmin_z = clampi(cmin_z, 0, terrain_chunks_z) if DEBUG and visible: _debug_cubes.clear() @@ -430,7 +484,7 @@ func process(delta: float, viewer_pos: Vector3): var ambient_wind_frequency = 1.0 + 3.0 * terrain.ambient_wind _ambient_wind_time += delta * ambient_wind_frequency var awp = _get_ambient_wind_params() - _material.set_shader_param("u_ambient_wind", awp) + _material.set_shader_parameter("u_ambient_wind", awp) # Gets local-space AABB of a detail chunk. @@ -451,16 +505,16 @@ func _get_chunk_aabb(terrain, lpos: Vector3): return aabb -func _get_chunk_transform(terrain_transform: Transform, cx: int, cz: int) -> Transform: +func _get_chunk_transform(terrain_transform: Transform3D, cx: int, cz: int) -> Transform3D: var lpos := Vector3(cx, 0, cz) * CHUNK_SIZE # `terrain_transform` should be the terrain's internal transform, without `map_scale`. - var trans := Transform( + var trans := Transform3D( terrain_transform.basis, terrain_transform.origin + terrain_transform.basis * lpos) return trans -func _load_chunk(terrain_transform_without_map_scale: Transform, cx: int, cz: int, aabb: AABB): +func _load_chunk(terrain_transform_without_map_scale: Transform3D, cx: int, cz: int, aabb: AABB): aabb.position.x = 0 aabb.position.z = 0 @@ -470,7 +524,7 @@ func _load_chunk(terrain_transform_without_map_scale: Transform, cx: int, cz: in _multimesh_instance_pool.pop_back() else: mmi = HT_DirectMultiMeshInstance.new() - mmi.set_world(get_world()) + mmi.set_world(get_world_3d()) mmi.set_multimesh(_multimesh) var trans := _get_chunk_transform(terrain_transform_without_map_scale, cx, cz) @@ -507,7 +561,7 @@ func _update_material(): var terrain_data = null var terrain = _get_terrain() - var it = Transform() + var it = Transform3D() var normal_basis = Basis() if terrain != null: @@ -521,11 +575,11 @@ func _update_material(): var mat = _material - mat.set_shader_param("u_terrain_inverse_transform", it) - mat.set_shader_param("u_terrain_normal_basis", normal_basis) - mat.set_shader_param("u_albedo_alpha", texture) - mat.set_shader_param("u_view_distance", view_distance) - mat.set_shader_param("u_ambient_wind", _get_ambient_wind_params()) + mat.set_shader_parameter("u_terrain_inverse_transform", it) + mat.set_shader_parameter("u_terrain_normal_basis", normal_basis) + mat.set_shader_parameter("u_albedo_alpha", texture) + mat.set_shader_parameter("u_view_distance", view_distance) + mat.set_shader_parameter("u_ambient_wind", _get_ambient_wind_params()) var heightmap_texture = null var normalmap_texture = null @@ -548,26 +602,26 @@ func _update_material(): else: _logger.error("Terrain data is null, can't update detail layer completely") - mat.set_shader_param("u_terrain_heightmap", heightmap_texture) - mat.set_shader_param("u_terrain_detailmap", detailmap_texture) - mat.set_shader_param("u_terrain_normalmap", normalmap_texture) - mat.set_shader_param("u_terrain_globalmap", globalmap_texture) + mat.set_shader_parameter("u_terrain_heightmap", heightmap_texture) + mat.set_shader_parameter("u_terrain_detailmap", detailmap_texture) + mat.set_shader_parameter("u_terrain_normalmap", normalmap_texture) + mat.set_shader_parameter("u_terrain_globalmap", globalmap_texture) func _add_debug_cube(terrain, aabb: AABB): - var world = terrain.get_world() + var world = terrain.get_world_3d() if _debug_wirecube_mesh == null: _debug_wirecube_mesh = HT_Util.create_wirecube_mesh() - var mat = SpatialMaterial.new() - mat.flags_unshaded = true + var mat = StandardMaterial3D.new() + mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED _debug_wirecube_mesh.surface_set_material(0, mat) var debug_cube = HT_DirectMeshInstance.new() debug_cube.set_mesh(_debug_wirecube_mesh) debug_cube.set_world(world) #aabb.position.y += 0.2*randf() - debug_cube.set_transform(Transform(Basis().scaled(aabb.size), aabb.position)) + debug_cube.set_transform(Transform3D(Basis().scaled(aabb.size), aabb.position)) _debug_cubes.append(debug_cube) @@ -589,46 +643,55 @@ func is_layer_index_valid() -> bool: return layer_index >= 0 and layer_index < data.get_map_count(HTerrainData.CHANNEL_DETAIL) -func _get_configuration_warning() -> String: +func _get_configuration_warnings() -> PackedStringArray: + var warnings = PackedStringArray() + var terrain = _get_terrain() if not (terrain is HTerrain): - return "This node must be child of an HTerrain node" + warnings.append("This node must be child of an HTerrain node") + return warnings + var data = terrain.get_data() if data == null: - return "The terrain has no data" + warnings.append("The terrain has no data") + return warnings + if data.get_map_count(HTerrainData.CHANNEL_DETAIL) == 0: - return "The terrain does not have any detail map" + warnings.append("The terrain does not have any detail map") + return warnings + if layer_index < 0 or layer_index >= data.get_map_count(HTerrainData.CHANNEL_DETAIL): - return "Layer index is out of bounds" + warnings.append("Layer index is out of bounds") + return warnings + var tex = data.get_texture(HTerrainData.CHANNEL_DETAIL, layer_index) if tex == null: - return "The terrain does not have a map assigned in slot {0}".format([layer_index]) - return "" + warnings.append("The terrain does not have a map assigned in slot {0}" \ + .format([layer_index])) + return warnings + +# Compat func set_cast_shadow(option: int): - if option == cast_shadow: - return cast_shadow = option - for k in _chunks: - var mmi : HT_DirectMultiMeshInstance = _chunks[k] - mmi.set_cast_shadow(option) +# Compat func get_cast_shadow() -> int: return cast_shadow static func _generate_multimesh(resolution: int, density: float, mesh: Mesh, multimesh: MultiMesh): assert(multimesh != null) - + var position_randomness = 0.5 var scale_randomness = 0.0 #var color_randomness = 0.5 var cell_count = resolution * resolution var idensity = int(density) - var random_instance_count = int(cell_count * (density - floor(density))) + var random_instance_count = int(cell_count * (density - floorf(density))) var total_instance_count = cell_count * idensity + random_instance_count multimesh.instance_count = total_instance_count @@ -641,29 +704,29 @@ static func _generate_multimesh(resolution: int, density: float, mesh: Mesh, mul for j in idensity: var pos = Vector3(x, 0, z) - pos.x += rand_range(-position_randomness, position_randomness) - pos.z += rand_range(-position_randomness, position_randomness) + pos.x += randf_range(-position_randomness, position_randomness) + pos.z += randf_range(-position_randomness, position_randomness) multimesh.set_instance_color(i, Color(1, 1, 1)) multimesh.set_instance_transform(i, \ - Transform(_get_random_instance_basis(scale_randomness), pos)) + Transform3D(_get_random_instance_basis(scale_randomness), pos)) i += 1 # Second pass adds the rest for j in random_instance_count: - var pos = Vector3(rand_range(0, resolution), 0, rand_range(0, resolution)) + var pos = Vector3(randf_range(0, resolution), 0, randf_range(0, resolution)) multimesh.set_instance_color(i, Color(1, 1, 1)) multimesh.set_instance_transform(i, \ - Transform(_get_random_instance_basis(scale_randomness), pos)) + Transform3D(_get_random_instance_basis(scale_randomness), pos)) i += 1 static func _get_random_instance_basis(scale_randomness: float) -> Basis: - var sr = rand_range(0, scale_randomness) + var sr = randf_range(0, scale_randomness) var s = 1.0 + (sr * sr * sr * sr * sr) * 50.0 var basis = Basis() basis = basis.scaled(Vector3(1, s, 1)) - basis = basis.rotated(Vector3(0, 1, 0), rand_range(0, PI)) + basis = basis.rotated(Vector3(0, 1, 0), randf_range(0, PI)) return basis diff --git a/addons/zylann.hterrain/hterrain_mesher.gd b/addons/zylann.hterrain/hterrain_mesher.gd index 72b847c1..8b52bc0a 100644 --- a/addons/zylann.hterrain/hterrain_mesher.gd +++ b/addons/zylann.hterrain/hterrain_mesher.gd @@ -1,4 +1,4 @@ -tool +@tool #const HT_Logger = preload("./util/logger.gd") @@ -32,13 +32,12 @@ func configure(chunk_size_x: int, chunk_size_y: int, lod_count: int): _chunk_size_y = chunk_size_y # TODO Will reduce the size of this cache, but need index buffer swap feature - for seams in range(SEAM_CONFIG_COUNT): - + for seams in SEAM_CONFIG_COUNT: var slot = [] slot.resize(lod_count) _mesh_cache[seams] = slot - for lod in range(lod_count): + for lod in lod_count: slot[lod] = make_flat_chunk(_chunk_size_x, _chunk_size_y, 1 << lod, seams) @@ -47,13 +46,12 @@ func get_chunk(lod: int, seams: int) -> Mesh: static func make_flat_chunk(quad_count_x: int, quad_count_y: int, stride: int, seams: int) -> Mesh: - - var positions = PoolVector3Array() + var positions = PackedVector3Array() positions.resize((quad_count_x + 1) * (quad_count_y + 1)) var i = 0 - for y in range(quad_count_y + 1): - for x in range(quad_count_x + 1): + for y in quad_count_y + 1: + for x in quad_count_x + 1: positions[i] = Vector3(x * stride, 0, y * stride) i += 1 @@ -72,9 +70,8 @@ static func make_flat_chunk(quad_count_x: int, quad_count_y: int, stride: int, s # size: chunk size in quads (there are N+1 vertices) # seams: Bitfield for which seams are present -static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> PoolIntArray: - - var output_indices := PoolIntArray() +static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> PackedInt32Array: + var output_indices := PackedInt32Array() if seams != 0: # LOD seams can't be made properly on uneven chunk sizes @@ -105,9 +102,8 @@ static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> Po # Regular triangles var ii := reg_origin_x + reg_origin_y * (chunk_size_x + 1) - for y in range(reg_size_y): - for x in range(reg_size_x): - + for y in reg_size_y: + for x in reg_size_x: var i00 := ii var i10 := ii + 1 var i01 := ii + chunk_size_x + 1 @@ -124,7 +120,6 @@ static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> Po var flip = ((x + reg_origin_x) + (y + reg_origin_y) % 2) % 2 != 0 if flip: - output_indices.push_back( i00 ) output_indices.push_back( i10 ) output_indices.push_back( i01 ) @@ -161,8 +156,7 @@ static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> Po var i := 0 var n := chunk_size_y / 2 - for j in range(n): - + for j in n: var i0 := i var i1 := i + 1 var i3 := i + chunk_size_x + 2 @@ -200,7 +194,7 @@ static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> Po var i := chunk_size_x - 1 var n := chunk_size_y / 2 - for j in range(n): + for j in n: var i0 := i var i1 := i + 1 @@ -236,7 +230,7 @@ static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> Po var i := 0; var n := chunk_size_x / 2; - for j in range(n): + for j in n: var i0 := i var i2 := i + 2 @@ -272,7 +266,7 @@ static func make_indices(chunk_size_x: int, chunk_size_y: int, seams: int) -> Po var i := (chunk_size_y - 1) * (chunk_size_x + 1) var n := chunk_size_x / 2 - for j in range(n): + for j in n: var i0 := i var i1 := i + 1 @@ -318,11 +312,9 @@ static func make_heightmap_mesh(heightmap: Image, stride: int, scale: Vector3, assert(size_x >= 2) assert(size_z >= 2) - var positions := PoolVector3Array() + var positions := PackedVector3Array() positions.resize(size_x * size_z) - heightmap.lock() - var i := 0 for mz in size_z: for mx in size_x: @@ -332,8 +324,6 @@ static func make_heightmap_mesh(heightmap: Image, stride: int, scale: Vector3, positions[i] = Vector3(x, y, z) * scale i += 1 - heightmap.unlock() - var indices := make_indices(size_x - 1, size_z - 1, 0) var arrays := [] diff --git a/addons/zylann.hterrain/hterrain_resource_loader.gd b/addons/zylann.hterrain/hterrain_resource_loader.gd index 5c048e87..7f7dce1d 100644 --- a/addons/zylann.hterrain/hterrain_resource_loader.gd +++ b/addons/zylann.hterrain/hterrain_resource_loader.gd @@ -1,4 +1,4 @@ -tool +@tool class_name HTerrainDataLoader extends ResourceFormatLoader @@ -6,22 +6,30 @@ extends ResourceFormatLoader const HTerrainData = preload("./hterrain_data.gd") -func get_recognized_extensions(): - return PoolStringArray([HTerrainData.META_EXTENSION]) +func _get_recognized_extensions() -> PackedStringArray: + return PackedStringArray([HTerrainData.META_EXTENSION]) -func get_resource_type(path): +func _get_resource_type(path: String) -> String: var ext = path.get_extension().to_lower() if ext == HTerrainData.META_EXTENSION: return "Resource" return "" -func handles_type(typename): +# TODO Handle UIDs? +# By default Godot will return INVALID_ID, +# which makes this resource only tracked by path, like scripts +# +# func _get_resource_uid(path: String) -> int: +# return ??? + + +func _handles_type(typename: String) -> bool: return typename == "Resource" -func load(path, original_path): +func _load(path, original_path): var res = HTerrainData.new() res.load_data(path.get_base_dir()) return res diff --git a/addons/zylann.hterrain/hterrain_resource_saver.gd b/addons/zylann.hterrain/hterrain_resource_saver.gd index ba6a17dc..e0660a98 100644 --- a/addons/zylann.hterrain/hterrain_resource_saver.gd +++ b/addons/zylann.hterrain/hterrain_resource_saver.gd @@ -1,4 +1,4 @@ -tool +@tool class_name HTerrainDataSaver extends ResourceFormatSaver @@ -6,15 +6,24 @@ extends ResourceFormatSaver const HTerrainData = preload("./hterrain_data.gd") -func get_recognized_extensions(res): +func _get_recognized_extensions(res: Resource) -> PackedStringArray: if res != null and res is HTerrainData: - return PoolStringArray([HTerrainData.META_EXTENSION]) - return PoolStringArray() + return PackedStringArray([HTerrainData.META_EXTENSION]) + return PackedStringArray() -func recognize(res): +func _recognize(res: Resource) -> bool: return res is HTerrainData -func save(path, resource, flags): - resource.save_data(path.get_base_dir()) +func _save(resource: Resource, path: String, flags: int) -> int: + if resource.save_data(path.get_base_dir()) + return OK + # This can occur if at least one map of the terrain fails to save. + # It doesnt necessarily mean the entire terrain failed to save. + return FAILED + + +# TODO Handle UIDs +# func _set_uid(path: String, uid: int) -> int: +# ??? diff --git a/addons/zylann.hterrain/hterrain_texture_set.gd b/addons/zylann.hterrain/hterrain_texture_set.gd index d322a8df..bd0dda09 100644 --- a/addons/zylann.hterrain/hterrain_texture_set.gd +++ b/addons/zylann.hterrain/hterrain_texture_set.gd @@ -1,4 +1,4 @@ -tool +@tool extends Resource const MODE_TEXTURES = 0 @@ -105,14 +105,19 @@ func _set(key: String, value): func get_slots_count() -> int: if _mode == MODE_TEXTURES: return get_texture_count() - # TODO What if there are two texture arrays of different size? - var texarray = _textures[TYPE_ALBEDO_BUMP][0] - if texarray == null: - var count = 0 - texarray = _textures[TYPE_NORMAL_ROUGHNESS][0] + + elif _mode == MODE_TEXTURE_ARRAYS: + # TODO What if there are two texture arrays of different size? + var texarray = _textures[TYPE_ALBEDO_BUMP][0] if texarray == null: - return 0 - return texarray.get_depth() + var count = 0 + texarray = _textures[TYPE_NORMAL_ROUGHNESS][0] + if texarray == null: + return 0 + return texarray.get_depth() + + else: + assert(false) func get_texture_count() -> int: @@ -121,12 +126,18 @@ func get_texture_count() -> int: func get_texture(slot_index: int, ground_texture_type: int) -> Texture: - if _mode != MODE_TEXTURES: - return null - var texs = _textures[ground_texture_type] - if slot_index >= len(texs): + if _mode == MODE_TEXTURE_ARRAYS: + # Can't get a single texture at once return null - return texs[slot_index] + + elif _mode == MODE_TEXTURES: + var texs = _textures[ground_texture_type] + if slot_index >= len(texs): + return null + return texs[slot_index] + + else: + assert(false) func set_texture(slot_index: int, ground_texture_type: int, texture: Texture): @@ -181,7 +192,9 @@ func clear(): _textures[type] = [] MODE_TEXTURE_ARRAYS: for type in TYPE_COUNT: - _textures[type] = [null] + _textures[type] = [null] + _: + assert(false) emit_changed() @@ -213,10 +226,6 @@ func has_any_textures() -> bool: return false -func emit_changed(): - emit_signal("changed") - - #func set_textures(textures: Array): # _textures = textures diff --git a/addons/zylann.hterrain/native/factory.gd b/addons/zylann.hterrain/native/factory.gd index bd1b1953..1a91c9a3 100644 --- a/addons/zylann.hterrain/native/factory.gd +++ b/addons/zylann.hterrain/native/factory.gd @@ -33,7 +33,7 @@ static func is_native_available() -> bool: return false # API changes can cause binary incompatibility var v = Engine.get_version_info() - return v.major == 3 and v.minor >= 2 and v.minor <= 5 + return v.major == 4 and v.minor == 0 static func get_image_utils(): diff --git a/addons/zylann.hterrain/native/image_utils_generic.gd b/addons/zylann.hterrain/native/image_utils_generic.gd index 0add4ebf..e5fcc18f 100644 --- a/addons/zylann.hterrain/native/image_utils_generic.gd +++ b/addons/zylann.hterrain/native/image_utils_generic.gd @@ -14,8 +14,6 @@ func get_red_range(im: Image, rect: Rect2) -> Vector2: var max_x := min_x + int(rect.size.x) var max_y := min_y + int(rect.size.y) - im.lock() - var min_height := im.get_pixel(min_x, min_y).r var max_height := min_height @@ -27,8 +25,6 @@ func get_red_range(im: Image, rect: Rect2) -> Vector2: elif h > max_height: max_height = h - im.unlock() - return Vector2(min_height, max_height) @@ -41,20 +37,16 @@ func get_red_sum(im: Image, rect: Rect2) -> float: var sum := 0.0 - im.lock() - for y in range(min_y, max_y): for x in range(min_x, max_x): sum += im.get_pixel(x, y).r - im.unlock() - return sum func get_red_sum_weighted(im: Image, brush: Image, pos: Vector2, var factor: float) -> float: - + var min_x = int(pos.x) var min_y = int(pos.y) var max_x = min_x + brush.get_width() @@ -62,16 +54,13 @@ func get_red_sum_weighted(im: Image, brush: Image, pos: Vector2, var min_noclamp_x = min_x var min_noclamp_y = min_y - min_x = HT_Util.clamp_int(min_x, 0, im.get_width()) - min_y = HT_Util.clamp_int(min_y, 0, im.get_height()) - max_x = HT_Util.clamp_int(max_x, 0, im.get_width()) - max_y = HT_Util.clamp_int(max_y, 0, im.get_height()) + min_x = clampi(min_x, 0, im.get_width()) + min_y = clampi(min_y, 0, im.get_height()) + max_x = clampi(max_x, 0, im.get_width()) + max_y = clampi(max_y, 0, im.get_height()) var sum = 0.0 - im.lock() - brush.lock() - for y in range(min_y, max_y): var by = y - min_noclamp_y @@ -81,9 +70,6 @@ func get_red_sum_weighted(im: Image, brush: Image, pos: Vector2, var shape_value = brush.get_pixel(bx, by).r sum += im.get_pixel(x, y).r * shape_value * factor - im.lock() - brush.unlock() - return sum @@ -95,13 +81,10 @@ func add_red_brush(im: Image, brush: Image, pos: Vector2, var factor: float): var min_noclamp_x = min_x var min_noclamp_y = min_y - min_x = HT_Util.clamp_int(min_x, 0, im.get_width()) - min_y = HT_Util.clamp_int(min_y, 0, im.get_height()) - max_x = HT_Util.clamp_int(max_x, 0, im.get_width()) - max_y = HT_Util.clamp_int(max_y, 0, im.get_height()) - - im.lock() - brush.lock() + min_x = clampi(min_x, 0, im.get_width()) + min_y = clampi(min_y, 0, im.get_height()) + max_x = clampi(max_x, 0, im.get_width()) + max_y = clampi(max_y, 0, im.get_height()) for y in range(min_y, max_y): var by = y - min_noclamp_y @@ -113,9 +96,6 @@ func add_red_brush(im: Image, brush: Image, pos: Vector2, var factor: float): var r = im.get_pixel(x, y).r + shape_value * factor im.set_pixel(x, y, Color(r, r, r)) - im.lock() - brush.unlock() - func lerp_channel_brush(im: Image, brush: Image, pos: Vector2, factor: float, target_value: float, channel: int): @@ -127,13 +107,10 @@ func lerp_channel_brush(im: Image, brush: Image, pos: Vector2, var min_noclamp_x = min_x var min_noclamp_y = min_y - min_x = HT_Util.clamp_int(min_x, 0, im.get_width()) - min_y = HT_Util.clamp_int(min_y, 0, im.get_height()) - max_x = HT_Util.clamp_int(max_x, 0, im.get_width()) - max_y = HT_Util.clamp_int(max_y, 0, im.get_height()) - - im.lock() - brush.lock() + min_x = clampi(min_x, 0, im.get_width()) + min_y = clampi(min_y, 0, im.get_height()) + max_x = clampi(max_x, 0, im.get_width()) + max_y = clampi(max_y, 0, im.get_height()) for y in range(min_y, max_y): var by = y - min_noclamp_y @@ -146,9 +123,6 @@ func lerp_channel_brush(im: Image, brush: Image, pos: Vector2, c[channel] = lerp(c[channel], target_value, shape_value * factor) im.set_pixel(x, y, c) - im.lock() - brush.unlock() - func lerp_color_brush(im: Image, brush: Image, pos: Vector2, factor: float, target_value: Color): @@ -160,13 +134,10 @@ func lerp_color_brush(im: Image, brush: Image, pos: Vector2, var min_noclamp_x = min_x var min_noclamp_y = min_y - min_x = HT_Util.clamp_int(min_x, 0, im.get_width()) - min_y = HT_Util.clamp_int(min_y, 0, im.get_height()) - max_x = HT_Util.clamp_int(max_x, 0, im.get_width()) - max_y = HT_Util.clamp_int(max_y, 0, im.get_height()) - - im.lock() - brush.lock() + min_x = clampi(min_x, 0, im.get_width()) + min_y = clampi(min_y, 0, im.get_height()) + max_x = clampi(max_x, 0, im.get_width()) + max_y = clampi(max_y, 0, im.get_height()) for y in range(min_y, max_y): var by = y - min_noclamp_y @@ -175,33 +146,27 @@ func lerp_color_brush(im: Image, brush: Image, pos: Vector2, var bx = x - min_noclamp_x var shape_value = brush.get_pixel(bx, by).r - var c = im.get_pixel(x, y).linear_interpolate(target_value, factor * shape_value) + var c = im.get_pixel(x, y).lerp(target_value, factor * shape_value) im.set_pixel(x, y, c) - im.lock() - brush.unlock() - func generate_gaussian_brush(im: Image) -> float: var sum := 0.0 var center := Vector2(im.get_width() / 2, im.get_height() / 2) var radius := min(im.get_width(), im.get_height()) / 2.0 - im.lock() - for y in im.get_height(): for x in im.get_width(): var d := Vector2(x, y).distance_to(center) / radius - var v := clamp(1.0 - d * d * d, 0.0, 1.0) + var v := clampf(1.0 - d * d * d, 0.0, 1.0) im.set_pixel(x, y, Color(v, v, v)) sum += v; - im.unlock() return sum func blur_red_brush(im: Image, brush: Image, pos: Vector2, factor: float): - factor = clamp(factor, 0.0, 1.0) + factor = clampf(factor, 0.0, 1.0) if _blur_buffer == null: _blur_buffer = Image.new() @@ -213,9 +178,6 @@ func blur_red_brush(im: Image, brush: Image, pos: Vector2, factor: float): if buffer_width != buffer.get_width() or buffer_height != buffer.get_height(): buffer.create(buffer_width, buffer_height, false, Image.FORMAT_RF) - im.lock() - buffer.lock() - var min_x := int(pos.x) - 1 var min_y := int(pos.y) - 1 var max_x := min_x + buffer.get_width() @@ -227,8 +189,8 @@ func blur_red_brush(im: Image, brush: Image, pos: Vector2, factor: float): # Copy pixels to temporary buffer for y in range(min_y, max_y): for x in range(min_x, max_x): - var ix := clamp(x, 0, im_clamp_w) - var iy := clamp(y, 0, im_clamp_h) + var ix := clampi(x, 0, im_clamp_w) + var iy := clampi(y, 0, im_clamp_h) var c = im.get_pixel(ix, iy) buffer.set_pixel(x - min_x, y - min_y, c) @@ -239,12 +201,10 @@ func blur_red_brush(im: Image, brush: Image, pos: Vector2, factor: float): var min_noclamp_x := min_x var min_noclamp_y := min_y - min_x = HT_Util.clamp_int(min_x, 0, im.get_width()) - min_y = HT_Util.clamp_int(min_y, 0, im.get_height()) - max_x = HT_Util.clamp_int(max_x, 0, im.get_width()) - max_y = HT_Util.clamp_int(max_y, 0, im.get_height()) - - brush.lock() + min_x = clampi(min_x, 0, im.get_width()) + min_y = clampi(min_y, 0, im.get_height()) + max_x = clampi(max_x, 0, im.get_width()) + max_y = clampi(max_y, 0, im.get_height()) # Apply blur for y in range(min_y, max_y): @@ -262,13 +222,9 @@ func blur_red_brush(im: Image, brush: Image, pos: Vector2, factor: float): var p12 = buffer.get_pixel(bx + 1, by + 2).r var m = (p10 + p01 + p11 + p21 + p12) * 0.2 - var p = lerp(p11, m, shape_value * factor) + var p = lerpf(p11, m, shape_value * factor) im.set_pixel(x, y, Color(p, p, p)) - - im.unlock() - buffer.unlock() - brush.unlock() func paint_indexed_splat(index_map: Image, weight_map: Image, brush: Image, pos: Vector2, \ @@ -281,10 +237,10 @@ func paint_indexed_splat(index_map: Image, weight_map: Image, brush: Image, pos: var min_noclamp_x := min_x var min_noclamp_y := min_y - min_x = HT_Util.clamp_int(min_x, 0, index_map.get_width()) - min_y = HT_Util.clamp_int(min_y, 0, index_map.get_height()) - max_x = HT_Util.clamp_int(max_x, 0, index_map.get_width()) - max_y = HT_Util.clamp_int(max_y, 0, index_map.get_height()) + min_x = clampi(min_x, 0, index_map.get_width()) + min_y = clampi(min_y, 0, index_map.get_height()) + max_x = clampi(max_x, 0, index_map.get_width()) + max_y = clampi(max_y, 0, index_map.get_height()) var texture_index_f := float(texture_index) / 255.0 var all_texture_index_f := Color(texture_index_f, texture_index_f, texture_index_f) @@ -292,10 +248,6 @@ func paint_indexed_splat(index_map: Image, weight_map: Image, brush: Image, pos: var cm := Color(-1, -1, -1) cm[ci] = 1 - index_map.lock() - weight_map.lock() - brush.lock() - for y in range(min_y, max_y): var by := y - min_noclamp_y @@ -354,16 +306,12 @@ func paint_indexed_splat(index_map: Image, weight_map: Image, brush: Image, pos: i = all_texture_index_f # No `saturate` function in Color?? - w[0] = clamp(w[0], 0.0, 1.0) - w[1] = clamp(w[1], 0.0, 1.0) - w[2] = clamp(w[2], 0.0, 1.0) + w[0] = clampf(w[0], 0.0, 1.0) + w[1] = clampf(w[1], 0.0, 1.0) + w[2] = clampf(w[2], 0.0, 1.0) # Renormalize w /= w[0] + w[1] + w[2] index_map.set_pixel(x, y, i) weight_map.set_pixel(x, y, w) - - index_map.lock() - weight_map.lock() - brush.unlock() diff --git a/addons/zylann.hterrain/native/quad_tree_lod_generic.gd b/addons/zylann.hterrain/native/quad_tree_lod_generic.gd index e3a3e678..da85c386 100644 --- a/addons/zylann.hterrain/native/quad_tree_lod_generic.gd +++ b/addons/zylann.hterrain/native/quad_tree_lod_generic.gd @@ -26,12 +26,12 @@ var _max_depth : int = 0 var _base_size : int = 16 var _split_scale : float = 2.0 -var _make_func : FuncRef = null -var _recycle_func : FuncRef = null -var _vertical_bounds_func : FuncRef = null +var _make_func : Callable +var _recycle_func : Callable +var _vertical_bounds_func : Callable -func set_callbacks(make_cb: FuncRef, recycle_cb: FuncRef, vbounds_cb: FuncRef): +func set_callbacks(make_cb: Callable, recycle_cb: Callable, vbounds_cb: Callable): _make_func = make_cb _recycle_func = recycle_cb _vertical_bounds_func = vbounds_cb @@ -70,7 +70,7 @@ func set_split_scale(p_split_scale: float): # Split scale must be greater than a threshold, # otherwise lods will decimate too fast and it will look messy - _split_scale = clamp(p_split_scale, MIN, MAX) + _split_scale = clampf(p_split_scale, MIN, MAX) func get_split_scale() -> float: @@ -98,8 +98,8 @@ func _update(quad: HT_QTLQuad, lod: int, view_pos: Vector3): var world_center := \ chunk_size * (Vector3(quad.origin_x, 0, quad.origin_y) + Vector3(0.5, 0, 0.5)) - if _vertical_bounds_func != null: - var vbounds = _vertical_bounds_func.call_func(quad.origin_x, quad.origin_y, lod) + if _vertical_bounds_func.is_valid(): + var vbounds = _vertical_bounds_func.call(quad.origin_x, quad.origin_y, lod) world_center.y = (vbounds.x + vbounds.y) / 2.0 var split_distance := _base_size * lod_factor * _split_scale @@ -152,14 +152,14 @@ func _join_all_recursively(quad: HT_QTLQuad, lod: int): func _make_chunk(lod: int, origin_x: int, origin_y: int): var chunk = null - if _make_func != null: - chunk = _make_func.call_func(origin_x, origin_y, lod) + if _make_func.is_valid(): + chunk = _make_func.call(origin_x, origin_y, lod) return chunk func _recycle_chunk(chunk, origin_x: int, origin_y: int, lod: int): - if _recycle_func != null: - _recycle_func.call_func(chunk, origin_x, origin_y, lod) + if _recycle_func.is_valid(): + _recycle_func.call(chunk, origin_x, origin_y, lod) func debug_draw_tree(ci: CanvasItem): diff --git a/addons/zylann.hterrain/plugin.cfg b/addons/zylann.hterrain/plugin.cfg index 4bc8c01c..fe1c7193 100644 --- a/addons/zylann.hterrain/plugin.cfg +++ b/addons/zylann.hterrain/plugin.cfg @@ -3,5 +3,5 @@ name="Heightmap Terrain" description="Heightmap-based terrain" author="Marc Gilleron" -version="1.6.2 dev" +version="1.7.0 dev" script="tools/plugin.gd" diff --git a/addons/zylann.hterrain/shaders/array.shader b/addons/zylann.hterrain/shaders/array.shader index 25a6987f..61d6cd53 100644 --- a/addons/zylann.hterrain/shaders/array.shader +++ b/addons/zylann.hterrain/shaders/array.shader @@ -54,7 +54,7 @@ vec3 get_depth_blended_weights(vec3 splat, vec3 bumps) { } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = (u_terrain_inverse_transform * wpos).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) @@ -68,7 +68,7 @@ void vertex() { VERTEX.y = h; wpos.y = h; - vec3 base_ground_uv = vec3(cell_coords.x, h * WORLD_MATRIX[1][1], cell_coords.y); + vec3 base_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y); v_ground_uv = base_ground_uv.xz / u_ground_uv_scale; // Putting this in vertex saves 2 fetches from the fragment shader, @@ -82,7 +82,7 @@ void vertex() { // Need to use u_terrain_normal_basis to handle scaling. NORMAL = u_terrain_normal_basis * unpack_normal(texture(u_terrain_normalmap, UV)); - v_distance_to_camera = distance(wpos.xyz, CAMERA_MATRIX[3].xyz); + v_distance_to_camera = distance(wpos.xyz, CAMERA_POSITION_WORLD); } void fragment() { @@ -164,5 +164,5 @@ void fragment() { ROUGHNESS = mix(ROUGHNESS, 1.0, globalmap_factor); } - NORMAL = (INV_CAMERA_MATRIX * (vec4(normal, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (vec4(normal, 0.0))).xyz; } diff --git a/addons/zylann.hterrain/shaders/array_global.shader b/addons/zylann.hterrain/shaders/array_global.shader index f8675eca..8e710a2f 100644 --- a/addons/zylann.hterrain/shaders/array_global.shader +++ b/addons/zylann.hterrain/shaders/array_global.shader @@ -37,7 +37,7 @@ vec3 get_depth_blended_weights(vec3 splat, vec3 bumps) { } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = wpos.xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) diff --git a/addons/zylann.hterrain/shaders/detail.shader b/addons/zylann.hterrain/shaders/detail.shader index 7ef88798..62293708 100644 --- a/addons/zylann.hterrain/shaders/detail.shader +++ b/addons/zylann.hterrain/shaders/detail.shader @@ -43,7 +43,7 @@ vec3 get_ambient_wind_displacement(vec2 uv, float hash) { } void vertex() { - vec4 obj_pos = WORLD_MATRIX * vec4(0, 1, 0, 1); + vec4 obj_pos = MODEL_MATRIX * vec4(0, 1, 0, 1); vec3 cell_coords = (u_terrain_inverse_transform * obj_pos).xyz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) @@ -68,8 +68,8 @@ void vertex() { VERTEX += get_ambient_wind_displacement(UV, hash); // Fade alpha with distance - vec3 wpos = (WORLD_MATRIX * vec4(VERTEX, 1)).xyz; - float dr = distance(wpos, CAMERA_MATRIX[3].xyz) / u_view_distance; + vec3 wpos = (MODEL_MATRIX * vec4(VERTEX, 1)).xyz; + float dr = distance(wpos, CAMERA_POSITION_WORLD) / u_view_distance; COLOR.a = clamp(1.0 - dr * dr * dr, 0.0, 1.0); // When using billboards, @@ -83,7 +83,7 @@ void vertex() { } void fragment() { - NORMAL = (INV_CAMERA_MATRIX * (WORLD_MATRIX * vec4(v_normal, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (MODEL_MATRIX * vec4(v_normal, 0.0))).xyz; ALPHA_SCISSOR = 0.5; ROUGHNESS = u_roughness; diff --git a/addons/zylann.hterrain/shaders/lookdev.shader b/addons/zylann.hterrain/shaders/lookdev.shader index 94585b20..fa82a654 100644 --- a/addons/zylann.hterrain/shaders/lookdev.shader +++ b/addons/zylann.hterrain/shaders/lookdev.shader @@ -24,7 +24,7 @@ vec3 unpack_normal(vec4 rgba) { } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = (u_terrain_inverse_transform * wpos).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) @@ -65,5 +65,5 @@ void fragment() { ALBEDO = value.rgb; ROUGHNESS = 0.5; - NORMAL = (INV_CAMERA_MATRIX * (vec4(normal, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (vec4(normal, 0.0))).xyz; } diff --git a/addons/zylann.hterrain/shaders/low_poly.shader b/addons/zylann.hterrain/shaders/low_poly.shader index 3b372d8d..3c605ad9 100644 --- a/addons/zylann.hterrain/shaders/low_poly.shader +++ b/addons/zylann.hterrain/shaders/low_poly.shader @@ -22,7 +22,7 @@ vec3 unpack_normal(vec4 rgba) { } void vertex() { - vec2 cell_coords = (u_terrain_inverse_transform * WORLD_MATRIX * vec4(VERTEX, 1)).xz; + vec2 cell_coords = (u_terrain_inverse_transform * MODEL_MATRIX * vec4(VERTEX, 1)).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) cell_coords += vec2(0.5); @@ -56,6 +56,6 @@ void fragment() { ALBEDO = v_tint.rgb; ROUGHNESS = 1.0; - NORMAL = normalize(cross(dFdx(VERTEX), dFdy(VERTEX))); + NORMAL = normalize(cross(dFdy(VERTEX), dFdx(VERTEX))); } diff --git a/addons/zylann.hterrain/shaders/multisplat16.shader b/addons/zylann.hterrain/shaders/multisplat16.shader index e6f0ec60..24d2091b 100644 --- a/addons/zylann.hterrain/shaders/multisplat16.shader +++ b/addons/zylann.hterrain/shaders/multisplat16.shader @@ -214,7 +214,7 @@ vec4 texture_array_antitile(sampler2DArray albedo_tex, sampler2DArray normal_tex } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = (u_terrain_inverse_transform * wpos).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) @@ -228,7 +228,7 @@ void vertex() { VERTEX.y = h; wpos.y = h; - vec3 base_ground_uv = vec3(cell_coords.x, h * WORLD_MATRIX[1][1], cell_coords.y); + vec3 base_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y); v_ground_uv = base_ground_uv / u_ground_uv_scale; // Putting this in vertex saves a fetch from the fragment shader, @@ -242,7 +242,7 @@ void vertex() { // Need to use u_terrain_normal_basis to handle scaling. NORMAL = u_terrain_normal_basis * unpack_normal(texture(u_terrain_normalmap, UV)); - v_distance_to_camera = distance(wpos.xyz, CAMERA_MATRIX[3].xyz); + v_distance_to_camera = distance(wpos.xyz, CAMERA_POSITION_WORLD); } void fragment() { @@ -367,5 +367,5 @@ void fragment() { // ALBEDO = vec3(1.0, 0.0, 0.0); // } - NORMAL = (INV_CAMERA_MATRIX * (vec4(normal, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (vec4(normal, 0.0))).xyz; } diff --git a/addons/zylann.hterrain/shaders/multisplat16_lite.shader b/addons/zylann.hterrain/shaders/multisplat16_lite.shader index ecf9168f..5e5cfc94 100644 --- a/addons/zylann.hterrain/shaders/multisplat16_lite.shader +++ b/addons/zylann.hterrain/shaders/multisplat16_lite.shader @@ -153,7 +153,7 @@ void get_splat_weights(vec2 uv, out vec4 out_high_indices, out vec4 out_high_wei } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = (u_terrain_inverse_transform * wpos).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) @@ -167,7 +167,7 @@ void vertex() { VERTEX.y = h; wpos.y = h; - vec3 base_ground_uv = vec3(cell_coords.x, h * WORLD_MATRIX[1][1], cell_coords.y); + vec3 base_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y); v_ground_uv = base_ground_uv / u_ground_uv_scale; // Putting this in vertex saves a fetch from the fragment shader, @@ -181,7 +181,7 @@ void vertex() { // Need to use u_terrain_normal_basis to handle scaling. NORMAL = u_terrain_normal_basis * unpack_normal(texture(u_terrain_normalmap, UV)); - v_distance_to_camera = distance(wpos.xyz, CAMERA_MATRIX[3].xyz); + v_distance_to_camera = distance(wpos.xyz, CAMERA_POSITION_WORLD); } void fragment() { @@ -248,5 +248,5 @@ void fragment() { // ALBEDO = vec3(1.0, 0.0, 0.0); // } - NORMAL = (INV_CAMERA_MATRIX * (vec4(terrain_normal_world, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (vec4(terrain_normal_world, 0.0))).xyz; } diff --git a/addons/zylann.hterrain/shaders/simple4.shader b/addons/zylann.hterrain/shaders/simple4.shader index a9cc9ca2..4044a012 100644 --- a/addons/zylann.hterrain/shaders/simple4.shader +++ b/addons/zylann.hterrain/shaders/simple4.shader @@ -153,7 +153,7 @@ vec4 texture_antitile(sampler2D albedo_tex, sampler2D normal_tex, vec2 uv, out v } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = (u_terrain_inverse_transform * wpos).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) @@ -167,7 +167,7 @@ void vertex() { VERTEX.y = h; wpos.y = h; - vec3 base_ground_uv = vec3(cell_coords.x, h * WORLD_MATRIX[1][1], cell_coords.y); + vec3 base_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y); v_ground_uv0 = base_ground_uv.xz / u_ground_uv_scale_per_texture.x; v_ground_uv1 = base_ground_uv.xz / u_ground_uv_scale_per_texture.y; v_ground_uv2 = base_ground_uv.xz / u_ground_uv_scale_per_texture.z; @@ -188,7 +188,7 @@ void vertex() { // Need to use u_terrain_normal_basis to handle scaling. NORMAL = u_terrain_normal_basis * unpack_normal(texture(u_terrain_normalmap, UV)); - v_distance_to_camera = distance(wpos.xyz, CAMERA_MATRIX[3].xyz); + v_distance_to_camera = distance(wpos.xyz, CAMERA_POSITION_WORLD); } void fragment() { @@ -323,5 +323,5 @@ void fragment() { // ALBEDO = vec3(1.0, 0.0, 0.0); // } - NORMAL = (INV_CAMERA_MATRIX * (vec4(normal, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (vec4(normal, 0.0))).xyz; } diff --git a/addons/zylann.hterrain/shaders/simple4_lite.shader b/addons/zylann.hterrain/shaders/simple4_lite.shader index bb0403ac..c0e6004c 100644 --- a/addons/zylann.hterrain/shaders/simple4_lite.shader +++ b/addons/zylann.hterrain/shaders/simple4_lite.shader @@ -116,7 +116,7 @@ void vertex() { float h = texture(u_terrain_heightmap, UV).r; VERTEX.y = h; - v_ground_uv = vec3(cell_coords.x, h * WORLD_MATRIX[1][1], cell_coords.y) / u_ground_uv_scale; + v_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y) / u_ground_uv_scale; // Putting this in vertex saves 2 fetches from the fragment shader, // which is good for performance at a negligible quality cost, @@ -201,7 +201,7 @@ void fragment() { ROUGHNESS = 1.0; - NORMAL = (INV_CAMERA_MATRIX * (vec4(terrain_normal_world, 0.0))).xyz; + NORMAL = (VIEW_MATRIX * (vec4(terrain_normal_world, 0.0))).xyz; //ALBEDO = w.rgb; //ALBEDO = v_ground_uv.xyz; diff --git a/addons/zylann.hterrain/tools/about/about_dialog.gd b/addons/zylann.hterrain/tools/about/about_dialog.gd index a6480a24..421a8a2c 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.gd +++ b/addons/zylann.hterrain/tools/about/about_dialog.gd @@ -1,5 +1,5 @@ -tool -extends WindowDialog +@tool +extends AcceptDialog const HT_Util = preload("../../util/util.gd") const HT_Logger = preload("../../util/logger.gd") @@ -8,7 +8,7 @@ const HT_Errors = preload("../../util/errors.gd") const PLUGIN_CFG_PATH = "res://addons/zylann.hterrain/plugin.cfg" -onready var _about_rich_text_label = $VB/HB2/TC/About +@onready var _about_rich_text_label = $VB/HB2/TC/About var _logger = HT_Logger.get_for(self) @@ -27,7 +27,3 @@ func _ready(): _about_rich_text_label.bbcode_text = _about_rich_text_label.bbcode_text \ .format({"version": version}) - - -func _on_Ok_pressed(): - hide() diff --git a/addons/zylann.hterrain/tools/about/about_dialog.tscn b/addons/zylann.hterrain/tools/about/about_dialog.tscn index b4d435e9..2fe162b1 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.tscn +++ b/addons/zylann.hterrain/tools/about/about_dialog.tscn @@ -4,7 +4,7 @@ [ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg" type="Texture" id=2] [ext_resource path="res://addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd" type="Script" id=3] -[node name="AboutDialog" type="WindowDialog"] +[node name="AboutDialog" type="AcceptDialog"] margin_right = 630.0 margin_bottom = 250.0 rect_min_size = Vector2( 630, 250 ) @@ -138,9 +138,3 @@ margin_right = 614.0 margin_bottom = 234.0 alignment = 1 -[node name="Ok" type="Button" parent="VB/HB"] -margin_left = 292.0 -margin_right = 322.0 -margin_bottom = 20.0 -text = "Ok" -[connection signal="pressed" from="VB/HB/Ok" to="." method="_on_Ok_pressed"] diff --git a/addons/zylann.hterrain/tools/brush/brush.gd b/addons/zylann.hterrain/tools/brush/brush.gd index 84ccfcd2..265323bf 100644 --- a/addons/zylann.hterrain/tools/brush/brush.gd +++ b/addons/zylann.hterrain/tools/brush/brush.gd @@ -1,4 +1,4 @@ -tool +@tool # Brush properties (shape, transform, timing and opacity). # Other attributes like color, height or texture index are tool-specific, @@ -39,7 +39,7 @@ func set_size(size: int): size = 1 if size != _size: _size = size - emit_signal("size_changed", _size) + size_changed.emit(_size) func get_size() -> int: @@ -47,7 +47,7 @@ func get_size() -> int: func set_opacity(opacity: float): - _opacity = clamp(opacity, 0.0, 1.0) + _opacity = clampf(opacity, 0.0, 1.0) func get_opacity() -> float: @@ -71,7 +71,7 @@ func is_pressure_enabled() -> bool: func set_pressure_over_scale(amount: float): - _pressure_over_scale = clamp(amount, 0.0, 1.0) + _pressure_over_scale = clampf(amount, 0.0, 1.0) func get_pressure_over_scale() -> float: @@ -79,7 +79,7 @@ func get_pressure_over_scale() -> float: func set_pressure_over_opacity(amount: float): - _pressure_over_opacity = clamp(amount, 0.0, 1.0) + _pressure_over_opacity = clampf(amount, 0.0, 1.0) func get_pressure_over_opacity() -> float: @@ -87,7 +87,7 @@ func get_pressure_over_opacity() -> float: func set_frequency_distance(d: float): - _frequency_distance = max(d, 0.0) + _frequency_distance = maxf(d, 0.0) func get_frequency_distance() -> float: @@ -112,7 +112,7 @@ func set_shapes(shapes: Array): _shapes = shapes.duplicate(false) if _shape_index >= len(_shapes): _shape_index = len(_shapes) - 1 - emit_signal("shapes_changed") + shapes_changed.emit() func get_shapes() -> Array: @@ -124,9 +124,8 @@ func get_shape(i: int) -> Texture: static func load_shape_from_image_file(fpath: String, logger, retries = 1) -> Texture: - var im := Image.new() - var err := im.load(fpath) - if err != OK: + var im := Image.load_from_file(fpath) + if im == null: if retries > 0: # TODO There is a bug with Godot randomly being unable to load images. # See https://github.com/Zylann/godot_heightmap_plugin/issues/219 @@ -139,8 +138,7 @@ static func load_shape_from_image_file(fpath: String, logger, retries = 1) -> Te logger.error("Could not load image at '{0}', error {1}" \ .format([fpath, HT_Errors.get_message(err)])) return null - var tex := ImageTexture.new() - tex.create_from_image(im, Texture.FLAG_FILTER) + var tex = ImageTexture.create_from_image(im) return tex @@ -154,7 +152,7 @@ func configure_paint_input(painters: Array, position: Vector2, pressure: float) if position.distance_to(_prev_position) < _frequency_distance: return false - var now = OS.get_ticks_msec() + var now = Time.get_ticks_msec() if (now - _prev_time_ms) < _frequency_time_ms: return false _prev_position = position @@ -162,7 +160,7 @@ func configure_paint_input(painters: Array, position: Vector2, pressure: float) for painter in painters: if _random_rotation: - painter.set_brush_rotation(rand_range(-PI, PI)) + painter.set_brush_rotation(randf_range(-PI, PI)) else: painter.set_brush_rotation(0.0) @@ -170,8 +168,8 @@ func configure_paint_input(painters: Array, position: Vector2, pressure: float) painter.set_brush_size(_size) if _pressure_enabled: - painter.set_brush_scale(lerp(1.0, pressure, _pressure_over_scale)) - painter.set_brush_opacity(_opacity * lerp(1.0, pressure, _pressure_over_opacity)) + painter.set_brush_scale(lerpf(1.0, pressure, _pressure_over_scale)) + painter.set_brush_opacity(_opacity * lerpf(1.0, pressure, _pressure_over_opacity)) else: painter.set_brush_scale(1.0) painter.set_brush_opacity(_opacity) diff --git a/addons/zylann.hterrain/tools/brush/brush_editor.gd b/addons/zylann.hterrain/tools/brush/brush_editor.gd index 1f37465e..13b64b15 100644 --- a/addons/zylann.hterrain/tools/brush/brush_editor.gd +++ b/addons/zylann.hterrain/tools/brush/brush_editor.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const HT_TerrainPainter = preload("./terrain_painter.gd") @@ -11,33 +11,33 @@ const HT_BrushSettingsDialogScene = preload("./settings_dialog/brush_settings_di const HT_BrushSettingsDialog = preload("./settings_dialog/brush_settings_dialog.gd") -onready var _size_slider := $GridContainer/BrushSizeControl/Slider as Slider -onready var _size_value_label := $GridContainer/BrushSizeControl/Label as Label +@onready var _size_slider : Slider = $GridContainer/BrushSizeControl/Slider +@onready var _size_value_label : Label = $GridContainer/BrushSizeControl/Label #onready var _size_label = _params_container.get_node("BrushSizeLabel") -onready var _opacity_slider = $GridContainer/BrushOpacityControl/Slider -onready var _opacity_value_label = $GridContainer/BrushOpacityControl/Label -onready var _opacity_control = $GridContainer/BrushOpacityControl -onready var _opacity_label = $GridContainer/BrushOpacityLabel +@onready var _opacity_slider = $GridContainer/BrushOpacityControl/Slider +@onready var _opacity_value_label = $GridContainer/BrushOpacityControl/Label +@onready var _opacity_control = $GridContainer/BrushOpacityControl +@onready var _opacity_label = $GridContainer/BrushOpacityLabel -onready var _flatten_height_container = $GridContainer/HB -onready var _flatten_height_box = $GridContainer/HB/FlattenHeightControl -onready var _flatten_height_label = $GridContainer/FlattenHeightLabel -onready var _flatten_height_pick_button = $GridContainer/HB/FlattenHeightPickButton +@onready var _flatten_height_container = $GridContainer/HB +@onready var _flatten_height_box = $GridContainer/HB/FlattenHeightControl +@onready var _flatten_height_label = $GridContainer/FlattenHeightLabel +@onready var _flatten_height_pick_button = $GridContainer/HB/FlattenHeightPickButton -onready var _color_picker = $GridContainer/ColorPickerButton -onready var _color_label = $GridContainer/ColorLabel +@onready var _color_picker = $GridContainer/ColorPickerButton +@onready var _color_label = $GridContainer/ColorLabel -onready var _density_slider = $GridContainer/DensitySlider -onready var _density_label = $GridContainer/DensityLabel +@onready var _density_slider = $GridContainer/DensitySlider +@onready var _density_label = $GridContainer/DensityLabel -onready var _holes_label = $GridContainer/HoleLabel -onready var _holes_checkbox = $GridContainer/HoleCheckbox +@onready var _holes_label = $GridContainer/HoleLabel +@onready var _holes_checkbox = $GridContainer/HoleCheckbox -onready var _slope_limit_label = $GridContainer/SlopeLimitLabel -onready var _slope_limit_control = $GridContainer/SlopeLimit +@onready var _slope_limit_label = $GridContainer/SlopeLimitLabel +@onready var _slope_limit_control = $GridContainer/SlopeLimit -onready var _shape_texture_rect = get_node("BrushShapeButton/TextureRect") +@onready var _shape_texture_rect = get_node("BrushShapeButton/TextureRect") var _terrain_painter : HT_TerrainPainter var _load_image_dialog = null @@ -57,13 +57,13 @@ func _set_visibility_of(node: Control, v: bool): func _ready(): - _size_slider.connect("value_changed", self, "_on_size_slider_value_changed") - _opacity_slider.connect("value_changed", self, "_on_opacity_slider_value_changed") - _flatten_height_box.connect("value_changed", self, "_on_flatten_height_box_value_changed") - _color_picker.connect("color_changed", self, "_on_color_picker_color_changed") - _density_slider.connect("value_changed", self, "_on_density_slider_changed") - _holes_checkbox.connect("toggled", self, "_on_holes_checkbox_toggled") - _slope_limit_control.connect("changed", self, "_on_slope_limit_changed") + _size_slider.value_changed.connect(_on_size_slider_value_changed) + _opacity_slider.value_changed.connect(_on_opacity_slider_value_changed) + _flatten_height_box.value_changed.connect(_on_flatten_height_box_value_changed) + _color_picker.color_changed.connect(_on_color_picker_color_changed) + _density_slider.value_changed.connect(_on_density_slider_changed) + _holes_checkbox.toggled.connect(_on_holes_checkbox_toggled) + _slope_limit_control.changed.connect(_on_slope_limit_changed) _size_slider.max_value = HT_Brush.MAX_SIZE_FOR_SLIDERS #if NativeFactory.is_native_available(): @@ -74,7 +74,7 @@ func _ready(): func setup_dialogs(base_control: Control): assert(_brush_settings_dialog == null) - _brush_settings_dialog = HT_BrushSettingsDialogScene.instance() + _brush_settings_dialog = HT_BrushSettingsDialogScene.instantiate() base_control.add_child(_brush_settings_dialog) # That dialog has sub-dialogs @@ -99,8 +99,8 @@ func _exit_tree(): func set_terrain_painter(terrain_painter: HT_TerrainPainter): if _terrain_painter != null: - _terrain_painter.disconnect("flatten_height_changed", self, "_on_flatten_height_changed") - _terrain_painter.get_brush().disconnect("shapes_changed", self, "_on_brush_shapes_changed") + _terrain_painter.flatten_height_changed.disconnect(_on_flatten_height_changed) + _terrain_painter.get_brush().shapes_changed.disconnect(_on_brush_shapes_changed) _terrain_painter = terrain_painter @@ -119,8 +119,8 @@ func set_terrain_painter(terrain_painter: HT_TerrainPainter): _density_slider.value = _terrain_painter.get_detail_density() _holes_checkbox.pressed = not _terrain_painter.get_mask_flag() - var low = rad2deg(_terrain_painter.get_slope_limit_low_angle()) - var high = rad2deg(_terrain_painter.get_slope_limit_high_angle()) + var low = rad_to_deg(_terrain_painter.get_slope_limit_low_angle()) + var high = rad_to_deg(_terrain_painter.get_slope_limit_high_angle()) _slope_limit_control.set_values(low, high) set_display_mode(_terrain_painter.get_mode()) @@ -132,8 +132,8 @@ func set_terrain_painter(terrain_painter: HT_TerrainPainter): brush.set_shapes([default_shape]) _shape_texture_rect.texture = brush.get_shape(0) - _terrain_painter.connect("flatten_height_changed", self, "_on_flatten_height_changed") - brush.connect("shapes_changed", self, "_on_brush_shapes_changed") + _terrain_painter.flatten_height_changed.connect(_on_flatten_height_changed) + brush.shapes_changed.connect(_on_brush_shapes_changed) func _on_flatten_height_changed(): @@ -216,6 +216,6 @@ func _on_FlattenHeightPickButton_pressed(): func _on_slope_limit_changed(): - var low = deg2rad(_slope_limit_control.get_low_value()) - var high = deg2rad(_slope_limit_control.get_high_value()) + var low = deg_to_rad(_slope_limit_control.get_low_value()) + var high = deg_to_rad(_slope_limit_control.get_high_value()) _terrain_painter.set_slope_limit_angles(low, high) diff --git a/addons/zylann.hterrain/tools/brush/decal.gd b/addons/zylann.hterrain/tools/brush/decal.gd index 42c86d5c..d0b6f3e4 100644 --- a/addons/zylann.hterrain/tools/brush/decal.gd +++ b/addons/zylann.hterrain/tools/brush/decal.gd @@ -1,6 +1,8 @@ -tool +@tool # Shows a cursor on top of the terrain to preview where the brush will paint +# TODO Use an actual decal node, it wasn't available in Godot 3 + const HT_DirectMeshInstance = preload("../../util/direct_mesh_instance.gd") const HTerrainData = preload("../../hterrain_data.gd") const HT_Util = preload("../../util/util.gd") @@ -42,7 +44,7 @@ func set_size(size: float): # set_size(shape_image.get_width()) -func _on_terrain_transform_changed(terrain_global_trans): +func _on_terrain_transform_changed(terrain_global_trans: Transform3D): var inv = terrain_global_trans.affine_inverse() _material.set_shader_param("u_terrain_inverse_transform", inv) @@ -55,16 +57,16 @@ func set_terrain(terrain): return if _terrain != null: - _terrain.disconnect("transform_changed", self, "_on_terrain_transform_changed") + _terrain.transform_changed.connect(_on_terrain_transform_changed) _mesh_instance.exit_world() #_debug_mesh_instance.exit_world() _terrain = terrain if _terrain != null: - _terrain.connect("transform_changed", self, "_on_terrain_transform_changed") + _terrain.transform_changed.connect(_on_terrain_transform_changed) _on_terrain_transform_changed(_terrain.get_internal_transform()) - _mesh_instance.enter_world(terrain.get_world()) + _mesh_instance.enter_world(terrain.get_world_3d()) #_debug_mesh_instance.enter_world(terrain.get_world()) update_visibility() @@ -87,7 +89,7 @@ func set_position(p_local_pos: Vector3): _mesh.custom_aabb = aabb #_debug_mesh.size = aabb.size - var trans = Transform(Basis(), p_local_pos) + var trans = Transform3D(Basis(), p_local_pos) var terrain_gt = _terrain.get_internal_transform() trans = terrain_gt * trans _mesh_instance.set_transform(trans) @@ -99,11 +101,11 @@ func update_visibility(): var heightmap = _get_heightmap(_terrain) if heightmap == null: # I do this for refcounting because heightmaps are large resources - _material.set_shader_param("u_terrain_heightmap", null) + _material.set_shader_parameter("u_terrain_heightmap", null) _mesh_instance.set_visible(false) #_debug_mesh_instance.set_visible(false) else: - _material.set_shader_param("u_terrain_heightmap", heightmap) + _material.set_shader_parameter("u_terrain_heightmap", heightmap) _mesh_instance.set_visible(true) #_debug_mesh_instance.set_visible(true) diff --git a/addons/zylann.hterrain/tools/brush/decal.shader b/addons/zylann.hterrain/tools/brush/decal.shader index 8de0ca11..96155e01 100644 --- a/addons/zylann.hterrain/tools/brush/decal.shader +++ b/addons/zylann.hterrain/tools/brush/decal.shader @@ -6,7 +6,7 @@ uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; void vertex() { - vec2 cell_coords = (u_terrain_inverse_transform * WORLD_MATRIX * vec4(VERTEX, 1)).xz; + vec2 cell_coords = (u_terrain_inverse_transform * MODEL_MATRIX * vec4(VERTEX, 1)).xz; vec2 ps = vec2(1.0) / vec2(textureSize(u_terrain_heightmap, 0)); vec2 uv = ps * cell_coords; diff --git a/addons/zylann.hterrain/tools/brush/painter.gd b/addons/zylann.hterrain/tools/brush/painter.gd index 62d77b50..729a309f 100644 --- a/addons/zylann.hterrain/tools/brush/painter.gd +++ b/addons/zylann.hterrain/tools/brush/painter.gd @@ -8,7 +8,7 @@ # Example: when painting a heightmap, it would be doable to output height in R, normalmap in GB, and # then separate channels in two images at the end. -tool +@tool extends Node const HT_Logger = preload("../../util/logger.gd") @@ -60,9 +60,9 @@ const _supported_formats = [ # Size of actual brush, scaled/rotated, modifies source image. # Assigned texture is the brush texture, src image is a shader param -var _viewport : Viewport -var _viewport_bg_sprite : Sprite -var _viewport_brush_sprite : Sprite +var _viewport : SubViewport +var _viewport_bg_sprite : Sprite2D +var _viewport_brush_sprite : Sprite2D var _brush_size := 32 var _brush_scale := 1.0 var _brush_position := Vector2() @@ -82,12 +82,13 @@ var _logger = HT_Logger.get_for(self) func _init(): - _viewport = Viewport.new() + _viewport = SubViewport.new() _viewport.size = Vector2(_brush_size, _brush_size) - _viewport.render_target_update_mode = Viewport.UPDATE_ONCE - _viewport.render_target_v_flip = true - _viewport.render_target_clear_mode = Viewport.CLEAR_MODE_ONLY_NEXT_FRAME - _viewport.hdr = false + _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE + # No longer available in Godot 4... + #_viewport.render_target_v_flip = true + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONLY_NEXT_FRAME + #_viewport.hdr = false _viewport.transparent_bg = true # Apparently HDR doesn't work if this is set to 2D... so let's waste a depth buffer :/ #_viewport.usage = Viewport.USAGE_2D @@ -96,12 +97,12 @@ func _init(): # There is no "blend_disabled" option on standard CanvasItemMaterial... var no_blend_material := ShaderMaterial.new() no_blend_material.shader = HT_NoBlendShader - _viewport_bg_sprite = Sprite.new() + _viewport_bg_sprite = Sprite2D.new() _viewport_bg_sprite.centered = false _viewport_bg_sprite.material = no_blend_material _viewport.add_child(_viewport_bg_sprite) - _viewport_brush_sprite = Sprite.new() + _viewport_brush_sprite = Sprite2D.new() _viewport_brush_sprite.centered = true _viewport_brush_sprite.material = _brush_material _viewport_brush_sprite.position = _viewport.size / 2.0 @@ -120,9 +121,13 @@ func set_image(image: Image, texture: ImageTexture): _image = image _texture = texture _viewport_bg_sprite.texture = _texture - _brush_material.set_shader_param(SHADER_PARAM_SRC_TEXTURE, _texture) + _brush_material.set_shader_parameter(SHADER_PARAM_SRC_TEXTURE, _texture) if image != null: - _viewport.hdr = image.get_format() in _hdr_formats + # TODO HDR is required in order to paint heightmaps. + # Seems Godot 4.0 does not support it, so we have to wait for Godot 4.1... + #_viewport.hdr = image.get_format() in _hdr_formats + if image.get_format() in _hdr_formats: + push_error("Godot 4.0 does not support HDR viewports for GPU-editing heightmaps!") #print("PAINTER VIEWPORT HDR: ", _viewport.hdr) @@ -149,7 +154,7 @@ func get_brush_rotation() -> float: # Scale is also a lot cheaper to change, so you may prefer changing it instead of size if that # happens often during a painting stroke. func set_brush_scale(s: float): - _brush_scale = clamp(s, 0.0, 1.0) + _brush_scale = clampf(s, 0.0, 1.0) #_viewport_brush_sprite.scale = Vector2(s, s) @@ -158,7 +163,7 @@ func get_brush_scale() -> float: func set_brush_opacity(opacity: float): - _brush_opacity = clamp(opacity, 0.0, 1.0) + _brush_opacity = clampf(opacity, 0.0, 1.0) func get_brush_opacity() -> float: @@ -177,19 +182,19 @@ func set_brush_shader(shader: Shader): func set_brush_shader_param(p: String, v): assert(not _API_SHADER_PARAMS.has(p)) _modified_shader_params[p] = true - _brush_material.set_shader_param(p, v) + _brush_material.set_shader_parameter(p, v) func clear_brush_shader_params(): for key in _modified_shader_params: - _brush_material.set_shader_param(key, null) + _brush_material.set_shader_parameter(key, null) _modified_shader_params.clear() # If we want to be able to rotate the brush quad every frame, # we must prepare a bigger viewport otherwise the quad will not fit inside static func _get_size_fit_for_rotation(src_size: Vector2) -> Vector2: - var d = int(ceil(src_size.length())) + var d = int(ceilf(src_size.length())) return Vector2(d, d) @@ -204,8 +209,8 @@ func paint_input(center_pos: Vector2): # Need to floor the position in case the brush has an odd size var brush_pos := (center_pos - _viewport.size * 0.5).round() - _viewport.render_target_update_mode = Viewport.UPDATE_ONCE - _viewport.render_target_clear_mode = Viewport.CLEAR_MODE_ONLY_NEXT_FRAME + _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONLY_NEXT_FRAME _viewport_bg_sprite.position = -brush_pos _brush_position = brush_pos _cmd_paint = true @@ -231,8 +236,8 @@ func paint_input(center_pos: Vector2): # rect.g = brush_LL.y / _texture.get_height() # rect.b = (brush_UR.x - brush_LL.x) / _texture.get_width() # rect.a = (brush_UR.y - brush_LL.y) / _texture.get_height() - _brush_material.set_shader_param(SHADER_PARAM_SRC_RECT, rect) - _brush_material.set_shader_param(SHADER_PARAM_OPACITY, _brush_opacity) + _brush_material.set_shader_parameter(SHADER_PARAM_SRC_RECT, rect) + _brush_material.set_shader_parameter(SHADER_PARAM_OPACITY, _brush_opacity) # Don't commit until this is false @@ -256,24 +261,27 @@ func _process(delta: float): _pending_paint_render = false #print("Paint result at frame ", Engine.get_frames_drawn()) - var data := _viewport.get_texture().get_data() + var data := _viewport.get_texture().get_image() data.convert(_image.get_format()) + + # Flipping on the CPU since the v-flip was removed from viewports in Godot 4... + data.flip_y() var brush_pos = _last_brush_position var dst_x : int = clamp(brush_pos.x, 0, _texture.get_width()) var dst_y : int = clamp(brush_pos.y, 0, _texture.get_height()) - var src_x : int = max(-brush_pos.x, 0) - var src_y : int = max(-brush_pos.y, 0) - var src_w : int = min(max(_viewport.size.x - src_x, 0), _texture.get_width() - dst_x) - var src_h : int = min(max(_viewport.size.y - src_y, 0), _texture.get_height() - dst_y) + var src_x : int = maxf(-brush_pos.x, 0) + var src_y : int = maxf(-brush_pos.y, 0) + var src_w : int = minf(maxf(_viewport.size.x - src_x, 0), _texture.get_width() - dst_x) + var src_h : int = minf(maxf(_viewport.size.y - src_y, 0), _texture.get_height() - dst_y) if src_w != 0 and src_h != 0: _mark_modified_chunks(dst_x, dst_y, src_w, src_h) - VisualServer.texture_set_data_partial( + RenderingServer.texture_set_data_partial( _texture.get_rid(), data, src_x, src_y, src_w, src_h, dst_x, dst_y, 0, 0) - emit_signal("texture_region_changed", Rect2(dst_x, dst_y, src_w, src_h)) + texture_region_changed.emit_signal(Rect2(dst_x, dst_y, src_w, src_h)) # Input is handled just before process, so we still have to wait till next frame if _cmd_paint: @@ -298,7 +306,7 @@ func _mark_modified_chunks(bx: int, by: int, bw: int, bh: int): func _commit_modified_chunks() -> Dictionary: - var time_before := OS.get_ticks_msec() + var time_before := Time.get_ticks_msec() var cs := UNDO_CHUNK_SIZE var chunks_positions := [] @@ -315,10 +323,10 @@ func _commit_modified_chunks() -> Dictionary: var x := cx * cs var y := cy * cs - var w : int = min(cs, _image.get_width() - x) - var h : int = min(cs, _image.get_height() - y) + var w : int = mini(cs, _image.get_width() - x) + var h : int = mini(cs, _image.get_height() - y) - var rect := Rect2(x, y, w, h) + var rect := Rect2i(x, y, w, h) var initial_data := _image.get_rect(rect) var final_data := final_image.get_rect(rect) @@ -333,7 +341,7 @@ func _commit_modified_chunks() -> Dictionary: _modified_chunks.clear() - var time_spent := OS.get_ticks_msec() - time_before + var time_spent := Time.get_ticks_msec() - time_before _logger.debug("Spent {0} ms to commit paint operation".format([time_spent])) return { diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd index 3b21dce0..9f868334 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd @@ -1,4 +1,4 @@ -tool +@tool extends AcceptDialog const HT_Util = preload("../../../util/util.gd") @@ -6,20 +6,20 @@ const HT_Brush = preload("../brush.gd") const HT_Logger = preload("../../../util/logger.gd") const HT_EditorUtil = preload("../../util/editor_util.gd") -onready var _scratchpad = $VB/HB/VB3/PreviewScratchpad +@onready var _scratchpad = $VB/HB/VB3/PreviewScratchpad -onready var _shape_list = $VB/HB/VB/ShapeList -onready var _remove_shape_button = $VB/HB/VB/HBoxContainer/RemoveShape -onready var _change_shape_button = $VB/HB/VB/ChangeShape +@onready var _shape_list = $VB/HB/VB/ShapeList +@onready var _remove_shape_button = $VB/HB/VB/HBoxContainer/RemoveShape +@onready var _change_shape_button = $VB/HB/VB/ChangeShape -onready var _size_slider = $VB/HB/VB2/Settings/Size -onready var _opacity_slider = $VB/HB/VB2/Settings/Opacity -onready var _pressure_enabled_checkbox = $VB/HB/VB2/Settings/PressureEnabled -onready var _pressure_over_size_slider = $VB/HB/VB2/Settings/PressureOverSize -onready var _pressure_over_opacity_slider = $VB/HB/VB2/Settings/PressureOverOpacity -onready var _frequency_distance_slider = $VB/HB/VB2/Settings/FrequencyDistance -onready var _frequency_time_slider = $VB/HB/VB2/Settings/FrequencyTime -onready var _random_rotation_checkbox = $VB/HB/VB2/Settings/RandomRotation +@onready var _size_slider = $VB/HB/VB2/Settings/Size +@onready var _opacity_slider = $VB/HB/VB2/Settings/Opacity +@onready var _pressure_enabled_checkbox = $VB/HB/VB2/Settings/PressureEnabled +@onready var _pressure_over_size_slider = $VB/HB/VB2/Settings/PressureOverSize +@onready var _pressure_over_opacity_slider = $VB/HB/VB2/Settings/PressureOverOpacity +@onready var _frequency_distance_slider = $VB/HB/VB2/Settings/FrequencyDistance +@onready var _frequency_time_slider = $VB/HB/VB2/Settings/FrequencyTime +@onready var _random_rotation_checkbox = $VB/HB/VB2/Settings/RandomRotation var _brush : HT_Brush # This is a `EditorFileDialog`, @@ -39,7 +39,7 @@ func _ready(): _size_slider.set_greater_max_value(HT_Brush.MAX_SIZE) # TESTING - if not Engine.editor_hint: + if not Engine.is_editor_hint(): setup_dialogs(self) call_deferred("popup") @@ -58,8 +58,8 @@ func setup_dialogs(base_control: Control): _load_image_dialog.resizable = true _load_image_dialog.access = EditorFileDialog.ACCESS_FILESYSTEM _load_image_dialog.current_dir = HT_Brush.SHAPES_DIR - _load_image_dialog.connect("file_selected", self, "_on_LoadImageDialog_file_selected") - _load_image_dialog.connect("files_selected", self, "_on_LoadImageDialog_files_selected") + _load_image_dialog.file_selected.connect(_on_LoadImageDialog_file_selected) + _load_image_dialog.files_selected.connect(_on_LoadImageDialog_files_selected) base_control.add_child(_load_image_dialog) @@ -183,7 +183,7 @@ func _update_controls_from_brush(): _pressure_over_size_slider.set_value(brush.get_pressure_over_scale() * 100.0, false) _pressure_over_opacity_slider.set_value(brush.get_pressure_over_opacity() * 100.0, false) _frequency_distance_slider.set_value(brush.get_frequency_distance(), false) - _frequency_time_slider.set_value(1000.0 / max(0.1, float(brush.get_frequency_time_ms())), false) + _frequency_time_slider.set_value(1000.0 / maxf(0.1, float(brush.get_frequency_time_ms())), false) _random_rotation_checkbox.pressed = brush.is_random_rotation_enabled() diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd index 1e7c70cc..69fd4755 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd @@ -1,4 +1,4 @@ -tool +@tool extends Node const HT_Painter = preload("./../painter.gd") diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd index e1872c5b..8daa16d4 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const HT_PreviewPainter = preload("./preview_painter.gd") @@ -8,8 +8,8 @@ const HT_Brush = preload("../brush.gd") const HT_Logger = preload("../../../util/logger.gd") const HT_EditorUtil = preload("../../util/editor_util.gd") -onready var _texture_rect : TextureRect = $TextureRect -onready var _painter : HT_PreviewPainter = $Painter +@onready var _texture_rect : TextureRect = $TextureRect +@onready var _painter : HT_PreviewPainter = $Painter var _logger := HT_Logger.get_for(self) @@ -38,12 +38,12 @@ func get_painter() -> HT_PreviewPainter: func _gui_input(event): if event is InputEventMouseMotion: - if Input.is_mouse_button_pressed(BUTTON_LEFT): + if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): _painter.paint_input(event.position, event.pressure) update() elif event is InputEventMouseButton: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: if event.pressed: # TODO `pressure` is not available on button events # So I have to assume zero... which means clicks do not paint anything? diff --git a/addons/zylann.hterrain/tools/brush/terrain_painter.gd b/addons/zylann.hterrain/tools/brush/terrain_painter.gd index 04a46018..bada8dbe 100644 --- a/addons/zylann.hterrain/tools/brush/terrain_painter.gd +++ b/addons/zylann.hterrain/tools/brush/terrain_painter.gd @@ -1,3 +1,4 @@ +@tool extends Node const HT_Painter = preload("./painter.gd") @@ -98,7 +99,7 @@ func set_flatten_height(h: float): if h == _flatten_height: return _flatten_height = h - emit_signal("flatten_height_changed") + flatten_height_changed.emit() func get_flatten_height() -> float: @@ -122,7 +123,7 @@ func get_mask_flag() -> bool: func set_detail_density(d: float): - _detail_density = clamp(d, 0.0, 1.0) + _detail_density = clampf(d, 0.0, 1.0) func get_detail_density() -> float: diff --git a/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd b/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd index 8db2ef80..b38bf77f 100644 --- a/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd +++ b/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const HTerrainData = preload("../../hterrain_data.gd") @@ -16,8 +16,8 @@ signal detail_selected(index) # Emitted when the tool added or removed a detail map signal detail_list_changed -onready var _item_list = $ItemList -onready var _confirmation_dialog = $ConfirmationDialog +@onready var _item_list = $ItemList +@onready var _confirmation_dialog = $ConfirmationDialog var _terrain = null var _dialog_target = -1 @@ -34,6 +34,7 @@ func set_terrain(terrain): func set_undo_redo(ur: UndoRedo): + assert(ur != null) _undo_redo = ur @@ -41,7 +42,7 @@ func set_image_cache(image_cache: HT_ImageFileCache): _image_cache = image_cache -func set_layer_index(i): +func set_layer_index(i: int): _item_list.select(i, true) @@ -52,7 +53,7 @@ func _update_list(): return var layer_nodes = _terrain.get_detail_layers() - var layer_nodes_by_index = {} + var layer_nodes_by_index := {} for layer in layer_nodes: if not layer_nodes_by_index.has(layer.layer_index): layer_nodes_by_index[layer.layer_index] = [] @@ -71,7 +72,7 @@ func _update_list(): if layer_nodes_by_index.has(i): # TODO How to keep names updated with node names? - var names = PoolStringArray(layer_nodes_by_index[i]).join(", ") + var names := PackedStringArray(layer_nodes_by_index[i]).join(", ") if len(names) == 1: _item_list.set_item_tooltip(i, "Used by " + names) else: @@ -142,12 +143,12 @@ func _add_layer(): terrain_data._edit_set_disable_apply_undo(false) #_update_list() - emit_signal("detail_list_changed") + detail_list_changed.emit() var index = node.layer_index _item_list.select(index) # select() doesn't trigger the signal - emit_signal("detail_selected", index) + detail_selected.emit(index) func _remove_layer(map_index: int): @@ -182,11 +183,11 @@ func _remove_layer(map_index: int): _undo_redo.commit_action() #_update_list() - emit_signal("detail_list_changed") + detail_list_changed.emit() func _on_ItemList_item_selected(index): - emit_signal("detail_selected", index) + detail_selected.emit(index) diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 9b07cee6..5bd238f8 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -1,6 +1,7 @@ -tool +@tool extends WindowDialog +const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") const HT_Errors = preload("../../util/errors.gd") const HT_Util = preload("../../util/util.gd") @@ -12,12 +13,12 @@ const FORMAT_PNG8 = 2 const FORMAT_EXRH = 3 const FORMAT_COUNT = 4 -onready var _output_path_line_edit := $VB/Grid/OutputPath/HeightmapPathLineEdit as LineEdit -onready var _format_selector := $VB/Grid/FormatSelector as OptionButton -onready var _height_range_min_spinbox := $VB/Grid/HeightRange/HeightRangeMin as SpinBox -onready var _height_range_max_spinbox := $VB/Grid/HeightRange/HeightRangeMax as SpinBox -onready var _export_button := $VB/Buttons/ExportButton as Button -onready var _show_in_explorer_checkbox := $VB/ShowInExplorerCheckbox as CheckBox +@onready var _output_path_line_edit := $VB/Grid/OutputPath/HeightmapPathLineEdit as LineEdit +@onready var _format_selector := $VB/Grid/FormatSelector as OptionButton +@onready var _height_range_min_spinbox := $VB/Grid/HeightRange/HeightRangeMin as SpinBox +@onready var _height_range_max_spinbox := $VB/Grid/HeightRange/HeightRangeMax as SpinBox +@onready var _export_button := $VB/Buttons/ExportButton as Button +@onready var _show_in_explorer_checkbox := $VB/ShowInExplorerCheckbox as CheckBox var _terrain = null var _file_dialog : EditorFileDialog = null @@ -45,20 +46,20 @@ func _ready(): _format_selector.get_popup().add_item(_format_names[i], i) -func setup_dialogs(base_control): +func setup_dialogs(base_control: Control): assert(_file_dialog == null) var fd := EditorFileDialog.new() fd.mode = EditorFileDialog.MODE_SAVE_FILE fd.resizable = true fd.access = EditorFileDialog.ACCESS_FILESYSTEM - fd.connect("file_selected", self, "_on_FileDialog_file_selected") + fd.file_selected.connect(_on_FileDialog_file_selected) base_control.add_child(fd) _file_dialog = fd _update_file_extension() -func set_terrain(terrain): +func set_terrain(terrain: HTerrain): _terrain = terrain @@ -68,7 +69,7 @@ func _exit_tree(): _file_dialog = null -func _on_FileDialog_file_selected(fpath): +func _on_FileDialog_file_selected(fpath: String): _output_path_line_edit.text = fpath @@ -104,28 +105,21 @@ func _export() -> bool: if format == FORMAT_PNG8: var hscale = 1.0 / (height_max - height_min) - var im = Image.new() - im.create(heightmap.get_width(), heightmap.get_height(), false, Image.FORMAT_R8) - - im.lock() - heightmap.lock() + var im := Image.create(heightmap.get_width(), heightmap.get_height(), false, Image.FORMAT_R8) for y in heightmap.get_height(): for x in heightmap.get_width(): - var h = clamp((heightmap.get_pixel(x, y).r - height_min) * hscale, 0.0, 1.0) + var h := clampf((heightmap.get_pixel(x, y).r - height_min) * hscale, 0.0, 1.0) im.set_pixel(x, y, Color(h, h, h)) - im.unlock() - heightmap.unlock() - save_error = im.save_png(fpath) elif format == FORMAT_EXRH: save_error = heightmap.save_exr(fpath, true) else: - var f = File.new() - var err = f.open(fpath, File.WRITE) + var f := FileAccess.open(fpath, File.WRITE) + var err := FileAccess.get_open_error() if err != OK: _print_file_error(fpath, err) return false @@ -136,7 +130,6 @@ func _export() -> bool: elif format == FORMAT_R16: var hscale = 65535.0 / (height_max - height_min) - heightmap.lock() for y in heightmap.get_height(): for x in heightmap.get_width(): var h = int((heightmap.get_pixel(x, y).r - height_min) * hscale) @@ -147,9 +140,6 @@ func _export() -> bool: if x % 50 == 0: _logger.debug(str(h)) f.store_16(h) - heightmap.unlock() - - f.close() if save_error == OK: _logger.debug("Exported heightmap as \"{0}\"".format([fpath])) @@ -177,7 +167,7 @@ func _update_file_extension(): _output_path_line_edit.text = str(fpath.get_basename(), ".", ext) -func _print_file_error(fpath, err): +func _print_file_error(fpath: String, err: int): _logger.error("Could not save path {0}, error: {1}" \ .format([fpath, HT_Errors.get_message(err)])) @@ -193,7 +183,7 @@ func _on_ExportButton_pressed(): OS.shell_open(_output_path_line_edit.text.strip_edges().get_base_dir()) -func _on_HeightmapPathLineEdit_text_changed(new_text): +func _on_HeightmapPathLineEdit_text_changed(new_text: String): _export_button.disabled = (new_text.strip_edges() == "") @@ -201,7 +191,7 @@ func _on_HeightmapPathBrowseButton_pressed(): _file_dialog.popup_centered_ratio() -func _on_FormatSelector_item_selected(ID): +func _on_FormatSelector_item_selected(id): _update_file_extension() diff --git a/addons/zylann.hterrain/tools/generate_mesh_dialog.gd b/addons/zylann.hterrain/tools/generate_mesh_dialog.gd index c8ce4873..be81b962 100644 --- a/addons/zylann.hterrain/tools/generate_mesh_dialog.gd +++ b/addons/zylann.hterrain/tools/generate_mesh_dialog.gd @@ -1,4 +1,4 @@ -tool +@tool extends WindowDialog signal generate_selected(lod) @@ -6,8 +6,8 @@ signal generate_selected(lod) const HTerrainMesher = preload("../hterrain_mesher.gd") const HT_Util = preload("../util/util.gd") -onready var _preview_label = $VBoxContainer/PreviewLabel -onready var _lod_spinbox = $VBoxContainer/HBoxContainer/LODSpinBox +@onready var _preview_label : Label = $VBoxContainer/PreviewLabel +@onready var _lod_spinbox : SpinBox = $VBoxContainer/HBoxContainer/LODSpinBox var _terrain = null @@ -40,7 +40,7 @@ func _update_preview(): func _on_Generate_pressed(): var stride = int(_lod_spinbox.value) - emit_signal("generate_selected", stride) + generate_selected.emit(stride) hide() diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 190ce36b..1727d404 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -1,4 +1,4 @@ -tool +@tool extends WindowDialog const HTerrain = preload("../../hterrain.gd") @@ -8,6 +8,7 @@ const HT_Util = preload("../../util/util.gd") const HT_TextureGenerator = preload("./texture_generator.gd") const HT_TextureGeneratorPass = preload("./texture_generator_pass.gd") const HT_Logger = preload("../../util/logger.gd") +const HT_ImageFileCache = preload("../../util/image_file_cache.gd") # TODO Power of two is assumed here. # I wonder why it doesn't have the off by one terrain textures usually have @@ -15,10 +16,10 @@ const MAX_VIEWPORT_RESOLUTION = 512 signal progress_notified(info) # { "progress": real, "message": string, "finished": bool } -onready var _inspector_container = $VBoxContainer/Editor/Settings -onready var _inspector = $VBoxContainer/Editor/Settings/Inspector -onready var _preview = $VBoxContainer/Editor/Preview/TerrainPreview -onready var _progress_bar = $VBoxContainer/Editor/Preview/ProgressBar +@onready var _inspector_container = $VBoxContainer/Editor/Settings +@onready var _inspector = $VBoxContainer/Editor/Settings/Inspector +@onready var _preview = $VBoxContainer/Editor/Preview/TerrainPreview +@onready var _progress_bar = $VBoxContainer/Editor/Preview/ProgressBar var _dummy_texture = load("res://addons/zylann.hterrain/tools/icons/empty.png") var _terrain : HTerrain = null @@ -27,7 +28,7 @@ var _generator : HT_TextureGenerator var _generated_textures := [null, null] var _dialog_visible := false var _undo_map_ids := {} -var _image_cache = null +var _image_cache : HT_ImageFileCache = null var _undo_redo : UndoRedo var _logger := HT_Logger.get_for(self) var _viewport_resolution := MAX_VIEWPORT_RESOLUTION @@ -35,7 +36,7 @@ var _viewport_resolution := MAX_VIEWPORT_RESOLUTION static func get_shader(shader_name: String) -> Shader: var path := "res://addons/zylann.hterrain/tools/generator/shaders"\ - .plus_file(str(shader_name, ".shader")) + .path_join(str(shader_name, ".shader")) return load(path) as Shader @@ -51,27 +52,27 @@ func _ready(): "type": TYPE_VECTOR2 }, "base_height": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": -500.0, "max": 500.0, "step": 0.1 }, "default_value": -50.0 }, "height_range": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": 0.0, "max": 2000.0, "step": 0.1 }, "default_value": 150.0 }, "scale": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": 1.0, "max": 1000.0, "step": 1.0}, "default_value": 100.0 }, "roughness": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": 0.0, "max": 1.0, "step": 0.01}, "default_value": 0.4 }, "curve": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": 1.0, "max": 10.0, "step": 0.1}, "default_value": 1.0 }, @@ -86,12 +87,12 @@ func _ready(): "default_value": 0 }, "erosion_weight": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": 0.0, "max": 1.0 }, "default_value": 0.5 }, "erosion_slope_factor": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": 0.0, "max": 1.0 }, "default_value": 0.0 }, @@ -104,27 +105,27 @@ func _ready(): "default_value": false }, "dilation": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": 0.0, "max": 1.0 }, "default_value": 0.0 }, "island_weight": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": 0.0, "max": 1.0, "step": 0.01 }, "default_value": 0.0 }, "island_sharpness": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": 0.0, "max": 1.0, "step": 0.01 }, "default_value": 0.0 }, "island_height_ratio": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": -1.0, "max": 1.0, "step": 0.01 }, "default_value": -1.0 }, "island_shape": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": { "min": 0.0, "max": 1.0, "step": 0.01 }, "default_value": 0.0 }, @@ -148,26 +149,26 @@ func _ready(): # TODO I wonder if it's not better to let the generator shaders work in pixels # instead of NDC, rather than putting a padding system there _generator.set_output_padding([0, 1, 0, 1]) - _generator.connect("output_generated", self, "_on_TextureGenerator_output_generated") - _generator.connect("completed", self, "_on_TextureGenerator_completed") - _generator.connect("progress_reported", self, "_on_TextureGenerator_progress_reported") + _generator.output_generated.connect(_on_TextureGenerator_output_generated) + _generator.completed.connect(_on_TextureGenerator_completed) + _generator.progress_reported.connect(_on_TextureGenerator_progress_reported) add_child(_generator) func apply_dpi_scale(dpi_scale: float): - rect_min_size *= dpi_scale - _inspector_container.rect_min_size *= dpi_scale + custom_minimum_size *= dpi_scale + _inspector_container.custom_minimum_size *= dpi_scale # TEST #func _input(event): -# if Engine.editor_hint: +# if Engine.is_editor_hint(): # return # if event is InputEventKey and event.pressed and not visible: # call_deferred("popup_centered") -func set_terrain(terrain): +func set_terrain(terrain: HTerrain): _terrain = terrain _adjust_viewport_resolution() @@ -190,7 +191,7 @@ func _adjust_viewport_resolution(): _viewport_resolution = vp_res -func set_image_cache(image_cache): +func set_image_cache(image_cache: HT_ImageFileCache): _image_cache = image_cache @@ -230,7 +231,7 @@ func _notification(what: int): func _update_generator(preview: bool): var scale = _inspector.get_value("scale") # Scale is inverted in the shader - if abs(scale) < 0.01: + if absf(scale) < 0.01: scale = 0.0 else: scale = 1.0 / scale @@ -380,7 +381,7 @@ func _on_Inspector_property_changed(key, value): func _on_TerrainPreview_dragged(relative, button_mask): - if button_mask & BUTTON_MASK_LEFT: + if button_mask & MOUSE_BUTTON_MASK_LEFT: var offset = _inspector.get_value("offset") offset += relative _inspector.set_value("offset", offset) @@ -430,9 +431,10 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): # TODO Improve TextureGenerator so we can get a ViewportTexture per output? var tex = _generated_textures[info.maptype] if tex == null: - tex = ImageTexture.new() - tex.create_from_image(image, Texture.FLAG_FILTER) - _generated_textures[info.maptype] = tex + tex = ImageTexture.create_from_image(image) + _generated_textures[info.maptype] = tex + else: + tex.update(image) var num_set := 0 for v in _generated_textures: @@ -452,10 +454,10 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): image.convert(dst.get_format()) dst.blit_rect(image, \ - Rect2(0, 0, image.get_width(), image.get_height()), \ + Rect2i(0, 0, image.get_width(), image.get_height()), \ info.sector * _viewport_resolution) - emit_signal("progress_notified", { + progress_notified.emit({ "progress": info.progress, "message": "Calculating sector (" + str(info.sector.x) + ", " + str(info.sector.y) + ")" @@ -490,6 +492,6 @@ func _on_TextureGenerator_completed(): _undo_redo.commit_action() data._edit_set_disable_apply_undo(false) - emit_signal("progress_notified", { "finished": true }) + progress_notified.emit({ "finished": true }) _logger.debug("Done") diff --git a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.shader b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.shader index b07d01f6..9054e930 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.shader +++ b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.shader @@ -1,5 +1,7 @@ shader_type canvas_item; +uniform sampler2D u_screen_texture : hint_screen_texture; + vec4 pack_normal(vec3 n) { return vec4((0.5 * (n + 1.0)).xzy, 1.0); } @@ -7,10 +9,10 @@ vec4 pack_normal(vec3 n) { void fragment() { vec2 uv = SCREEN_UV; vec2 ps = SCREEN_PIXEL_SIZE; - float left = texture(SCREEN_TEXTURE, uv + vec2(-ps.x, 0)).r; - float right = texture(SCREEN_TEXTURE, uv + vec2(ps.x, 0)).r; - float back = texture(SCREEN_TEXTURE, uv + vec2(0, -ps.y)).r; - float fore = texture(SCREEN_TEXTURE, uv + vec2(0, ps.y)).r; + float left = texture(u_screen_texture, uv + vec2(-ps.x, 0)).r; + float right = texture(u_screen_texture, uv + vec2(ps.x, 0)).r; + float back = texture(u_screen_texture, uv + vec2(0, -ps.y)).r; + float fore = texture(u_screen_texture, uv + vec2(0, ps.y)).r; vec3 n = normalize(vec3(left - right, 2.0, fore - back)); COLOR = pack_normal(n); } diff --git a/addons/zylann.hterrain/tools/generator/shaders/erode.shader b/addons/zylann.hterrain/tools/generator/shaders/erode.shader index 96a81686..00dd4497 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/erode.shader +++ b/addons/zylann.hterrain/tools/generator/shaders/erode.shader @@ -5,6 +5,7 @@ uniform float u_slope_factor = 1.0; uniform bool u_slope_invert = false; uniform float u_weight = 0.5; uniform float u_dilation = 0.0; +uniform sampler2D u_screen_texture : hint_screen_texture; void fragment() { float r = 3.0; @@ -14,7 +15,7 @@ void fragment() { vec2 eps = SCREEN_PIXEL_SIZE / (0.99 * r); vec2 uv = SCREEN_UV; - float h = texture(SCREEN_TEXTURE, uv).r; + float h = texture(u_screen_texture, uv).r; float eh = h; float dh = h; @@ -23,7 +24,7 @@ void fragment() { for (float x = -r; x <= r; ++x) { vec2 p = vec2(float(x), float(y)); - float nh = texture(SCREEN_TEXTURE, uv + p * eps).r; + float nh = texture(u_screen_texture, uv + p * eps).r; float s = max(length(p) - r, 0); eh = min(eh, nh + s); @@ -41,10 +42,10 @@ void fragment() { if (u_slope_factor > 0.0) { vec2 ps = SCREEN_PIXEL_SIZE; - float left = texture(SCREEN_TEXTURE, uv + vec2(-ps.x, 0.0)).r; - float right = texture(SCREEN_TEXTURE, uv + vec2(ps.x, 0.0)).r; - float top = texture(SCREEN_TEXTURE, uv + vec2(0.0, ps.y)).r; - float bottom = texture(SCREEN_TEXTURE, uv + vec2(0.0, -ps.y)).r; + float left = texture(u_screen_texture, uv + vec2(-ps.x, 0.0)).r; + float right = texture(u_screen_texture, uv + vec2(ps.x, 0.0)).r; + float top = texture(u_screen_texture, uv + vec2(0.0, ps.y)).r; + float bottom = texture(u_screen_texture, uv + vec2(0.0, -ps.y)).r; vec3 normal = normalize(vec3(left - right, ps.x + ps.y, bottom - top)); vec3 up = normalize(vec3(u_slope_up.x, 1.0, u_slope_up.y)); diff --git a/addons/zylann.hterrain/tools/generator/texture_generator.gd b/addons/zylann.hterrain/tools/generator/texture_generator.gd index 852e8f1b..2618c173 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator.gd @@ -2,7 +2,7 @@ # Passes can have different shaders and re-use what was drawn by a previous pass. # TODO I'd like to make such a system working as a graph of passes for more possibilities. -tool +@tool extends Node const HT_Util = preload("res://addons/zylann.hterrain/util/util.gd") @@ -20,7 +20,7 @@ signal completed var _passes := [] var _resolution := Vector2(512, 512) var _output_padding := [0, 0, 0, 0] -var _viewport : Viewport = null +var _viewport : SubViewport = null var _ci : TextureRect = null var _dummy_texture : Texture var _running := false @@ -40,10 +40,11 @@ func _ready(): assert(_viewport == null) assert(_ci == null) - _viewport = Viewport.new() + _viewport = SubViewport.new() _viewport.own_world = true _viewport.world = World.new() - _viewport.render_target_v_flip = true + # Godot 4 no longer supports this... + # _viewport.render_target_v_flip = true _viewport.render_target_update_mode = Viewport.UPDATE_DISABLED add_child(_viewport) @@ -137,8 +138,8 @@ func run(): _ci.rect_size = padded_size _viewport.size = padded_size - _viewport.render_target_update_mode = Viewport.UPDATE_ALWAYS - _viewport.render_target_clear_mode = Viewport.CLEAR_MODE_ONLY_NEXT_FRAME + _viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONLY_NEXT_FRAME _running_pass_index = 0 _running_iteration = 0 @@ -159,7 +160,7 @@ func _process(delta: float): if _running_pass_index >= len(_running_passes): _running = false - emit_signal("completed") + completed.emit_signal() if _rerun: # run() was requested again before we complete... @@ -168,7 +169,7 @@ func _process(delta: float): _rerun = false run() else: - _viewport.render_target_update_mode = Viewport.UPDATE_DISABLED + _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED set_process(false) return @@ -204,7 +205,7 @@ func _setup_pass(p: HT_TextureGeneratorPass): if p.params != null: for param_name in p.params: - _shader_material.set_shader_param(param_name, p.params[param_name]) + _shader_material.set_shader_parameter(param_name, p.params[param_name]) var scale_ndc = _viewport.size / _resolution var pad_offset_ndc = ((_viewport.size - _resolution) / 2) / _viewport.size @@ -216,10 +217,10 @@ func _setup_pass(p: HT_TextureGeneratorPass): # vec2 uv = (SCREEN_UV + u_uv_offset) * u_uv_scale; if p.params == null or not p.params.has("u_uv_scale"): - _shader_material.set_shader_param("u_uv_scale", scale_ndc) + _shader_material.set_shader_parameter("u_uv_scale", scale_ndc) if p.params == null or not p.params.has("u_uv_offset"): - _shader_material.set_shader_param("u_uv_offset", offset_ndc) + _shader_material.set_shader_parameter("u_uv_offset", offset_ndc) else: _ci.material = null @@ -230,10 +231,13 @@ func _setup_pass(p: HT_TextureGeneratorPass): func _create_output_image(metadata): var tex := _viewport.get_texture() - var src := tex.get_data() + var src := tex.get_image() + # TODO Optimize: Godot 3 used to be able to render flipped viewports, Godot 4 no longer... + # So we have to flip on the CPU instead, which is slower + src.flip_y() # Pick the center of the image - var subrect := Rect2( \ + var subrect := Rect2i( \ (src.get_width() - _resolution.x) / 2, \ (src.get_height() - _resolution.y) / 2, \ _resolution.x, _resolution.y) @@ -248,25 +252,24 @@ func _create_output_image(metadata): subrect.size.y += _output_padding[2] + _output_padding[3] var dst - if subrect == Rect2(0, 0, src.get_width(), src.get_height()): + if subrect == Rect2i(0, 0, src.get_width(), src.get_height()): dst = src else: - dst = Image.new() # Note: size MUST match at this point. # If it doesn't, the viewport has not been configured properly, # or padding has been modified while the generator was running - dst.create( \ + dst = Image.create( \ _resolution.x + _output_padding[0] + _output_padding[1], \ _resolution.y + _output_padding[2] + _output_padding[3], \ false, src.get_format()) - dst.blit_rect(src, subrect, Vector2()) + dst.blit_rect(src, subrect, Vector2i()) - emit_signal("output_generated", dst, metadata) + output_generated.emit(dst, metadata) func _report_progress(passes: Array, pass_index: int, iteration: int): var p = passes[pass_index] - emit_signal("progress_reported", { + progress_reported.emit({ "name": p.debug_name, "pass_index": pass_index, "pass_count": len(passes), diff --git a/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd b/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd index b2791a97..86bf8856 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd @@ -1,31 +1,31 @@ # Name of the pass, for debug purposes -var debug_name = "" +var debug_name := "" # The viewport will be cleared at this pass -var clear = false +var clear := false # Which main texture should be drawn. # If not set, a default texture will be drawn. # Note that it won't matter if the shader disregards it, # and will only serve to provide UVs, due to https://github.com/godotengine/godot/issues/7298. var texture = null # Which shader to use -var shader = null +var shader : Shader = null # Parameters for the shader var params = null # How many pixels to pad the viewport on all edges, in case neighboring matters. # Outputs won't have that padding, but can pick part of it in case output padding is used. -var padding = 0 +var padding := 0 # How many times this pass must be run -var iterations = 1 +var iterations := 1 # If not empty, the viewport will be downloaded as an image before the next pass -var output = false +var output := false # Sent along the output var metadata = null # Used for tiled rendering, where each tile has the base resolution, # in case the viewport cannot be made big enough to cover the final image, # of if you are generating a pseudo-infinite terrain. # TODO Have an API for this? -var tile_pos = Vector2() +var tile_pos := Vector2() func duplicate(): var p = get_script().new() diff --git a/addons/zylann.hterrain/tools/globalmap_baker.gd b/addons/zylann.hterrain/tools/globalmap_baker.gd index 36012d0c..26e3d31a 100644 --- a/addons/zylann.hterrain/tools/globalmap_baker.gd +++ b/addons/zylann.hterrain/tools/globalmap_baker.gd @@ -2,7 +2,7 @@ # Bakes a global albedo map using the same shader the terrain uses, # but renders top-down in orthographic mode. -tool +@tool extends Node const HTerrain = preload("../hterrain.gd") @@ -16,10 +16,10 @@ signal progress_notified(info) signal permanent_change_performed(message) var _terrain : HTerrain = null -var _viewport : Viewport = null +var _viewport : SubViewport = null var _viewport_size := DEFAULT_VIEWPORT_SIZE -var _plane : MeshInstance = null -var _camera : Camera = null +var _plane : MeshInstance3D = null +var _camera : Camera3D = null var _sectors := [] var _sector_index := 0 @@ -62,18 +62,18 @@ func _setup_scene(terrain_size: int): while _viewport_size > terrain_size: _viewport_size /= 2 - _viewport = Viewport.new() + _viewport = SubViewport.new() _viewport.size = Vector2(_viewport_size + 1, _viewport_size + 1) - _viewport.render_target_update_mode = Viewport.UPDATE_ALWAYS - _viewport.render_target_clear_mode = Viewport.CLEAR_MODE_ALWAYS - _viewport.render_target_v_flip = true - _viewport.world = World.new() + _viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ALWAYS + # _viewport.render_target_v_flip = true + _viewport.world = World3D.new() _viewport.own_world = true _viewport.debug_draw = Viewport.DEBUG_DRAW_UNSHADED var mat := ShaderMaterial.new() - _plane = MeshInstance.new() + _plane = MeshInstance3D.new() # Make a very small mesh, vertex precision isn't required var plane_res := 4 _plane.mesh = \ @@ -81,13 +81,13 @@ func _setup_scene(terrain_size: int): _plane.material_override = mat _viewport.add_child(_plane) - _camera = Camera.new() - _camera.projection = Camera.PROJECTION_ORTHOGONAL + _camera = Camera3D.new() + _camera.projection = Camera3D.PROJECTION_ORTHOGONAL _camera.size = _viewport.size.x _camera.near = 0.1 _camera.far = 10.0 _camera.current = true - _camera.rotation_degrees = Vector3(-90, 0, 0) + _camera.rotation = Vector3(deg_to_rad(-90), 0, 0) _viewport.add_child(_camera) add_child(_viewport) @@ -110,7 +110,7 @@ func _process(delta): if _sector_index >= len(_sectors): set_process(false) _finish() - emit_signal("progress_notified", { "finished": true }) + progress_notified.emit({ "finished": true }) else: _setup_pass(_sectors[_sector_index]) _report_progress() @@ -119,7 +119,7 @@ func _process(delta): func _report_progress(): var sector = _sectors[_sector_index] - emit_signal("progress_notified", { + progress_notified.emit({ "progress": float(_sector_index) / len(_sectors), "message": "Calculating sector (" + str(sector.x) + ", " + str(sector.y) + ")" }) @@ -137,7 +137,10 @@ func _setup_pass(sector: Vector2): func _grab_image(sector: Vector2): var tex := _viewport.get_texture() - var src := tex.get_data() + var src := tex.get_image() + # TODO Optimize: In Godot 3 viewports could render flipped, but in Godot 4 it was removed... + # so we have to flip on the CPU + src.flip_y() assert(_terrain != null) var data := _terrain.get_data() @@ -150,7 +153,7 @@ func _grab_image(sector: Vector2): src.convert(dst.get_format()) var origin = sector * _viewport_size - dst.blit_rect(src, Rect2(0, 0, src.get_width(), src.get_height()), origin) + dst.blit_rect(src, Rect2i(0, 0, src.get_width(), src.get_height()), origin) func _finish(): @@ -161,7 +164,7 @@ func _finish(): data.notify_region_change(Rect2(0, 0, dst.get_width(), dst.get_height()), HTerrainData.CHANNEL_GLOBAL_ALBEDO) - emit_signal("permanent_change_performed", "Bake globalmap") + permanent_change_performed.emit("Bake globalmap") _cleanup_scene() _terrain = null diff --git a/addons/zylann.hterrain/tools/importer/importer_dialog.gd b/addons/zylann.hterrain/tools/importer/importer_dialog.gd index d154339c..a8511350 100644 --- a/addons/zylann.hterrain/tools/importer/importer_dialog.gd +++ b/addons/zylann.hterrain/tools/importer/importer_dialog.gd @@ -1,4 +1,4 @@ -tool +@tool extends WindowDialog const HT_Util = preload("../../util/util.gd") @@ -10,9 +10,9 @@ const HT_XYZFormat = preload("../../util/xyz_format.gd") signal permanent_change_performed(message) -onready var _inspector = $VBoxContainer/Inspector -onready var _errors_label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Errors -onready var _warnings_label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Warnings +@onready var _inspector = $VBoxContainer/Inspector +@onready var _errors_label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Errors +@onready var _warnings_label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Warnings const RAW_LITTLE_ENDIAN = 0 const RAW_BIG_ENDIAN = 1 @@ -35,12 +35,12 @@ func _ready(): "enabled": false }, "min_height": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": -2000.0, "max": 2000.0, "step": 0.01}, "default_value": 0.0 }, "max_height": { - "type": TYPE_REAL, + "type": TYPE_FLOAT, "range": {"min": -2000.0, "max": 2000.0, "step": 0.01}, "default_value": 400.0 }, @@ -75,7 +75,7 @@ static func _format_feedbacks(feed): var a = [] for s in feed: a.append("- " + s) - return PoolStringArray(a).join("\n") + return PackedStringArray(a).join("\n") func _clear_feedback(): @@ -83,7 +83,7 @@ func _clear_feedback(): _warnings_label.text = "" -func _show_feedback(res): +func _show_feedback(res: Dictionary): for e in res.errors: _logger.error(e) @@ -100,7 +100,7 @@ func _show_feedback(res): func _on_CheckButton_pressed(): - var res = _validate_form() + var res := _validate_form() _show_feedback(res) @@ -108,7 +108,7 @@ func _on_ImportButton_pressed(): assert(_terrain != null and _terrain.get_data() != null) # Verify input to inform the user of potential issues - var res = _validate_form() + var res := _validate_form() _show_feedback(res) if len(res.errors) != 0: @@ -157,7 +157,7 @@ func _on_Inspector_property_changed(key: String, value): _inspector.set_property_enabled("raw_endianess", is_raw) -func _validate_form(): +func _validate_form() -> Dictionary: var res := { "errors": [], "warnings": [] @@ -243,8 +243,8 @@ static func _load_image_size(path: String, logger) -> Dictionary: return { "width": im.get_width(), "height": im.get_height() } elif ext == "raw": - var f := File.new() - var err := f.open(path, File.READ) + var f := FileAccess.open(path, File.READ) + var err := FileAccess.get_open_error() if err != OK: logger.error("Error opening file {0}".format([path])) return { "error": err } @@ -252,7 +252,7 @@ static func _load_image_size(path: String, logger) -> Dictionary: # Assume the raw data is square in 16-bit format, # so its size is function of file length var flen := f.get_len() - f.close() + f = null var size = HT_Util.integer_square_root(flen / 2) if size == -1: return { "error": "RAW image is not square" } @@ -263,8 +263,8 @@ static func _load_image_size(path: String, logger) -> Dictionary: return { "width": size, "height": size } elif ext == "xyz": - var f := File.new() - var err := f.open(path, File.READ) + var f := FileAccess.open(path, File.READ) + var err := FileAccess.get_open_error() if err != OK: logger.error("Error opening file {0}".format([path])) return { "error": err } diff --git a/addons/zylann.hterrain/tools/inspector/inspector.gd b/addons/zylann.hterrain/tools/inspector/inspector.gd index b060fb77..ac0718e9 100644 --- a/addons/zylann.hterrain/tools/inspector/inspector.gd +++ b/addons/zylann.hterrain/tools/inspector/inspector.gd @@ -3,7 +3,7 @@ # It generates controls for a provided list of properties, # which is easier to maintain than placing them by hand and connecting things in the editor. -tool +@tool extends Control const USAGE_FILE = "file" @@ -14,8 +14,8 @@ signal property_changed(key, value) # Used for most simple types class HT_InspectorEditor: var control = null - var getter = null - var setter = null + var getter := Callable() + var setter := Callable() var key_label : Label @@ -49,7 +49,7 @@ class HT_InspectorVectorEditor extends HT_InspectorEditor: func _component_changed(v, i): value[i] = v - emit_signal("value_changed", value) + value_changed.emit(value) # TODO Rename _schema @@ -59,8 +59,8 @@ var _edit_signal := true var _editors := {} # Had to separate the container because otherwise I can't open dialogs properly... -onready var _grid_container = get_node("GridContainer") -onready var _file_dialog = get_node("OpenFileDialog") +@onready var _grid_container = get_node("GridContainer") +@onready var _file_dialog = get_node("OpenFileDialog") # Test @@ -103,20 +103,20 @@ func clear_prototype(): func get_value(key: String): var editor = _editors[key] - return editor.getter.call_func() + return editor.getter.call() func get_values(): var values = {} for key in _editors: var editor = _editors[key] - values[key] = editor.getter.call_func() + values[key] = editor.getter.call() return values func set_value(key: String, value): var editor = _editors[key] - editor.setter.call_func(value) + editor.setter.call(value) func set_values(values: Dictionary): @@ -124,7 +124,7 @@ func set_values(values: Dictionary): if _editors.has(key): var editor = _editors[key] var v = values[key] - editor.setter.call_func(v) + editor.setter.call(v) # TODO Rename set_schema @@ -142,7 +142,7 @@ func set_prototype(proto: Dictionary): editor.key_label = label if prop.has("default_value"): - editor.setter.call_func(prop.default_value) + editor.setter.call(prop.default_value) _editors[key] = editor @@ -157,7 +157,7 @@ func set_prototype(proto: Dictionary): func trigger_all_modified(): for key in _prototype: var value = _editors[key].getter.call_func() - emit_signal("property_changed", key, value) + property_changed.emit(key, value) func set_property_enabled(prop_name: String, enabled: bool): @@ -183,51 +183,51 @@ func set_property_enabled(prop_name: String, enabled: bool): func _make_editor(key: String, prop: Dictionary): - var ed = null + var ed : HT_InspectorEditor = null - var editor = null - var getter = null - var setter = null + var editor : Control = null + var getter : Callable + var setter : Callable var extra = null match prop.type: TYPE_INT, \ - TYPE_REAL: + TYPE_FLOAT: var pre = null if prop.has("randomizable") and prop.randomizable: editor = HBoxContainer.new() pre = Button.new() - pre.connect("pressed", self, "_randomize_property_pressed", [key]) + pre.pressed.connect(_randomize_property_pressed.bind(key)) pre.text = "Randomize" editor.add_child(pre) if prop.type == TYPE_INT and prop.has("usage") and prop.usage == USAGE_ENUM: # Enumerated value assert(prop.has("enum_items")) - var option_button = OptionButton.new() + var option_button := OptionButton.new() for i in len(prop.enum_items): var item = prop.enum_items[i] option_button.add_item(item) # TODO We assume index, actually - getter = funcref(option_button, "get_selected_id") - setter = funcref(option_button, "select") - option_button.connect("item_selected", self, "_property_edited", [key]) + getter = option_button.get_selected_id + setter = option_button.select + option_button.item_selected.connect(_property_edited.bind(key)) editor = option_button else: # Numeric value - var spinbox = SpinBox.new() + var spinbox := SpinBox.new() # Spinboxes have shit UX when not expanded... - spinbox.rect_min_size = Vector2(120, 16) + spinbox.custom_minimum_size = Vector2(120, 16) _setup_range_control(spinbox, prop) - spinbox.connect("value_changed", self, "_property_edited", [key]) + spinbox.value_changed.connect(_property_edited.bind(key)) # TODO In case the type is INT, the getter should return an integer! - getter = funcref(spinbox, "get_value") - setter = funcref(spinbox, "set_value") + getter = spinbox.get_value + setter = spinbox.set_value var show_slider = prop.has("range") \ and not (prop.has("slidable") \ @@ -236,9 +236,9 @@ func _make_editor(key: String, prop: Dictionary): if show_slider: if editor == null: editor = HBoxContainer.new() - var slider = HSlider.new() + var slider := HSlider.new() # Need to give some size because otherwise the slider is hard to click... - slider.rect_min_size = Vector2(32, 16) + slider.custom_minimum_size = Vector2(32, 16) _setup_range_control(slider, prop) slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL spinbox.share(slider) @@ -255,7 +255,7 @@ func _make_editor(key: String, prop: Dictionary): if prop.has("usage") and prop.usage == USAGE_FILE: editor = HBoxContainer.new() - var line_edit = LineEdit.new() + var line_edit := LineEdit.new() line_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL editor.add_child(line_edit) @@ -263,78 +263,78 @@ func _make_editor(key: String, prop: Dictionary): if prop.has("exts"): exts = prop.exts - var load_button = Button.new() + var load_button := Button.new() load_button.text = "..." - load_button.connect("pressed", self, "_on_ask_load_file", [key, exts]) + load_button.pressed.connect(_on_ask_load_file.bind(key, exts)) editor.add_child(load_button) - line_edit.connect("text_entered", self, "_property_edited", [key]) - getter = funcref(line_edit, "get_text") - setter = funcref(line_edit, "set_text") + line_edit.text_entered.connect(_property_edited.bind(key)) + getter = line_edit.get_text + setter = line_edit.set_text else: editor = LineEdit.new() - editor.connect("text_entered", self, "_property_edited", [key]) - getter = funcref(editor, "get_text") - setter = funcref(editor, "set_text") + editor.text_entered.connect(_property_edited.bind(key)) + getter = editor.get_text + setter = editor.set_text TYPE_COLOR: editor = ColorPickerButton.new() - editor.connect("color_changed", self, "_property_edited", [key]) - getter = funcref(editor, "get_pick_color") - setter = funcref(editor, "set_pick_color") + editor.color_changed.connect(_property_edited.bind(key)) + getter = editor.get_pick_color + setter = editor.set_pick_color TYPE_BOOL: editor = CheckBox.new() - editor.connect("toggled", self, "_property_edited", [key]) - getter = funcref(editor, "is_pressed") - setter = funcref(editor, "set_pressed") + editor.toggled.connect(_property_edited.bind(key)) + getter = editor.is_pressed + setter = editor.set_pressed TYPE_OBJECT: # TODO How do I even check inheritance if I work on the class themselves, not instances? if prop.object_type == Resource: editor = HBoxContainer.new() - var label = Label.new() + var label := Label.new() label.text = "null" label.size_flags_horizontal = Control.SIZE_EXPAND_FILL label.clip_text = true - label.align = Label.ALIGN_RIGHT + label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT editor.add_child(label) - var load_button = Button.new() + var load_button := Button.new() load_button.text = "Load..." - load_button.connect("pressed", self, "_on_ask_load_texture", [key]) + load_button.pressed.connect(_on_ask_load_texture.bind(key)) editor.add_child(load_button) - var clear_button = Button.new() + var clear_button := Button.new() clear_button.text = "Clear" - clear_button.connect("pressed", self, "_on_ask_clear_texture", [key]) + clear_button.pressed.connect(_on_ask_clear_texture.bind(key)) editor.add_child(clear_button) ed = HT_InspectorResourceEditor.new() ed.label = label - getter = funcref(ed, "get_value") - setter = funcref(ed, "set_value") + getter = ed.get_value + setter = ed.set_value TYPE_VECTOR2: editor = HBoxContainer.new() ed = HT_InspectorVectorEditor.new() - var xlabel = Label.new() + var xlabel := Label.new() xlabel.text = "x" editor.add_child(xlabel) - var xed = SpinBox.new() + var xed := SpinBox.new() xed.size_flags_horizontal = Control.SIZE_EXPAND_FILL xed.step = 0.01 xed.min_value = -10000 xed.max_value = 10000 # TODO This will fire twice (for each coordinate), hmmm... - xed.connect("value_changed", ed, "_component_changed", [0]) + xed.value_changed.connect(ed._component_changed.bind(0)) editor.add_child(xed) - var ylabel = Label.new() + var ylabel := Label.new() ylabel.text = "y" editor.add_child(ylabel) var yed = SpinBox.new() @@ -342,20 +342,20 @@ func _make_editor(key: String, prop: Dictionary): yed.step = 0.01 yed.min_value = -10000 yed.max_value = 10000 - yed.connect("value_changed", ed, "_component_changed", [1]) + yed.value_changed.connect(ed._component_changed.bind(1)) editor.add_child(yed) ed.xed = xed ed.yed = yed - ed.connect("value_changed", self, "_property_edited", [key]) - getter = funcref(ed, "get_value") - setter = funcref(ed, "set_value") + ed.value_changed.connect(_property_edited.bind(key)) + getter = ed.get_value + setter = ed.set_value _: editor = Label.new() editor.text = "" - getter = funcref(self, "_dummy_getter") - setter = funcref(self, "_dummy_setter") + getter = _dummy_getter + setter = _dummy_setter if not(editor is CheckButton): editor.size_flags_horizontal = Control.SIZE_EXPAND_FILL @@ -370,7 +370,7 @@ func _make_editor(key: String, prop: Dictionary): return ed -static func _setup_range_control(range_control, prop): +static func _setup_range_control(range_control: Range, prop): if prop.type == TYPE_INT: range_control.step = 1 range_control.rounded = true @@ -389,7 +389,7 @@ static func _setup_range_control(range_control, prop): func _property_edited(value, key): if _edit_signal: - emit_signal("property_changed", key, value) + property_changed.emit(key, value) func _randomize_property_pressed(key): @@ -407,9 +407,9 @@ func _randomize_property_pressed(key): if prop.has("range"): v = rand_range(prop.range.min, prop.range.max) else: - v = randf() + v = randf() - _editors[key].setter.call_func(v) + _editors[key].setter.call(v) func _dummy_getter(): @@ -422,18 +422,18 @@ func _dummy_setter(v): func _on_ask_load_texture(key): - _open_file_dialog(["*.png ; PNG files"], "_on_texture_selected", [key], + _open_file_dialog(["*.png ; PNG files"], _on_texture_selected.bind(key), FileDialog.ACCESS_RESOURCES) -func _open_file_dialog(filters, callback, binds, access): +func _open_file_dialog(filters: Array, callback: Callable, access: int): _file_dialog.access = access _file_dialog.clear_filters() for filter in filters: _file_dialog.add_filter(filter) - _file_dialog.connect("popup_hide", self, "call_deferred", ["_on_file_dialog_close"], - CONNECT_ONESHOT) - _file_dialog.connect("file_selected", self, callback, binds) + _file_dialog.popup_hide.connect(call_deferred.bind("_on_file_dialog_close"), CONNECT_ONE_SHOT) + + _file_dialog.file_selected.connect(callback) _file_dialog.popup_centered_ratio(0.7) @@ -445,18 +445,18 @@ func _on_file_dialog_close(): _file_dialog.disconnect("file_selected", con.target, con.method) -func _on_texture_selected(path, key): +func _on_texture_selected(path: String, key): var tex = load(path) if tex == null: return var ed = _editors[key] - ed.setter.call_func(tex) + ed.setter.call(tex) _property_edited(tex, key) func _on_ask_clear_texture(key): var ed = _editors[key] - ed.setter.call_func(null) + ed.setter.call(null) _property_edited(null, key) @@ -464,10 +464,10 @@ func _on_ask_load_file(key, exts): var filters = [] for ext in exts: filters.append(str("*.", ext, " ; ", ext.to_upper(), " files")) - _open_file_dialog(filters, "_on_file_selected", [key], FileDialog.ACCESS_FILESYSTEM) + _open_file_dialog(filters, _on_file_selected.bind(key), FileDialog.ACCESS_FILESYSTEM) func _on_file_selected(path, key): var ed = _editors[key] - ed.setter.call_func(path) + ed.setter.call(path) _property_edited(path, key) diff --git a/addons/zylann.hterrain/tools/load_texture_dialog.gd b/addons/zylann.hterrain/tools/load_texture_dialog.gd index aaf22987..ecd63d55 100644 --- a/addons/zylann.hterrain/tools/load_texture_dialog.gd +++ b/addons/zylann.hterrain/tools/load_texture_dialog.gd @@ -1,4 +1,4 @@ -tool +@tool extends EditorFileDialog @@ -10,7 +10,7 @@ func _init(): add_filter("*.jpg ; JPG files") resizable = true access = EditorFileDialog.ACCESS_RESOURCES - connect("popup_hide", self, "call_deferred", ["_on_close"]) + popup_hide.connect(call_deferred.bind("_on_close")) func _on_close(): diff --git a/addons/zylann.hterrain/tools/minimap/minimap.gd b/addons/zylann.hterrain/tools/minimap/minimap.gd index bdf7bb71..6bce291b 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap.gd +++ b/addons/zylann.hterrain/tools/minimap/minimap.gd @@ -1,7 +1,8 @@ -tool +@tool extends Control const HT_Util = preload("../../util/util.gd") +const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") const HT_MinimapShader = preload("./minimap_normal.shader") @@ -12,13 +13,13 @@ const WHITE_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/white.png" const MODE_QUADTREE = 0 const MODE_NORMAL = 1 -onready var _popup_menu = $PopupMenu -onready var _color_rect = $ColorRect -onready var _overlay = $Overlay +@onready var _popup_menu = $PopupMenu +@onready var _color_rect = $ColorRect +@onready var _overlay = $Overlay -var _terrain = null +var _terrain : HTerrain = null var _mode := MODE_NORMAL -var _camera_transform := Transform() +var _camera_transform := Transform3D() func _ready(): @@ -31,13 +32,13 @@ func _ready(): _popup_menu.add_item("Normal mode", MODE_NORMAL) -func set_terrain(node): +func set_terrain(node: HTerrain): if _terrain != node: _terrain = node set_process(_terrain != null) -func set_camera_transform(ct: Transform): +func set_camera_transform(ct: Transform3D): if _camera_transform == ct: return if _terrain == null: @@ -73,7 +74,7 @@ func _gui_input(event: InputEvent): func _process(delta): if _terrain != null: if _mode == MODE_QUADTREE: - update() + queue_redraw() else: _update_normal_material() @@ -88,7 +89,7 @@ func _set_mode(mode: int): _color_rect.show() _update_normal_material() _mode = mode - update() + queue_redraw() func _update_normal_material(): @@ -122,7 +123,7 @@ func _draw(): return if _mode == MODE_QUADTREE: - var lod_count = _terrain.get_lod_count() + var lod_count := _terrain.get_lod_count() if lod_count > 0: # Fit drawing to rect diff --git a/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd b/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd index 38af6f98..82607a10 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd +++ b/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd @@ -1,11 +1,11 @@ -tool +@tool extends Control export(Texture) var cursor_texture export(Texture) var out_of_range_texture -onready var _sprite = $Cursor +@onready var _sprite = $Cursor var _pos := Vector2() var _rot := 0.0 @@ -15,8 +15,8 @@ func set_cursor_position_normalized(pos_norm: Vector2, dir: Vector2): if Rect2(0, 0, 1, 1).has_point(pos_norm): _sprite.texture = cursor_texture else: - pos_norm.x = clamp(pos_norm.x, 0.0, 1.0) - pos_norm.y = clamp(pos_norm.y, 0.0, 1.0) + pos_norm.x = clampf(pos_norm.x, 0.0, 1.0) + pos_norm.y = clampf(pos_norm.y, 0.0, 1.0) _sprite.texture = out_of_range_texture _sprite.position = pos_norm * rect_size diff --git a/addons/zylann.hterrain/tools/minimap/ratio_container.gd b/addons/zylann.hterrain/tools/minimap/ratio_container.gd index 4f9bae82..fa22f1e3 100644 --- a/addons/zylann.hterrain/tools/minimap/ratio_container.gd +++ b/addons/zylann.hterrain/tools/minimap/ratio_container.gd @@ -1,10 +1,10 @@ # Simple container keeping its children under the same aspect ratio -tool +@tool extends Container -export(float) var ratio := 1.0 +@export var ratio := 1.0 func _notification(what: int): @@ -19,11 +19,11 @@ func _sort_children2(): var child = get_child(i) if not (child is Control): continue - var w = rect_size.x - var h = rect_size.x / ratio + var w = size.x + var h = size.x / ratio - if h > rect_size.y: - h = rect_size.y + if h > size.y: + h = size.y w = h * ratio var rect := Rect2(0, 0, w, h) diff --git a/addons/zylann.hterrain/tools/normalmap_baker.gd b/addons/zylann.hterrain/tools/normalmap_baker.gd index 4d63b268..ec062e00 100644 --- a/addons/zylann.hterrain/tools/normalmap_baker.gd +++ b/addons/zylann.hterrain/tools/normalmap_baker.gd @@ -3,7 +3,7 @@ # It uses the heightmap texture to change the normalmap image, which is then uploaded like an edit. # This is probably not a nice method GPU-wise, but it's way faster than GDScript. -tool +@tool extends Node const HTerrainData = preload("../hterrain_data.gd") @@ -13,29 +13,29 @@ const VIEWPORT_SIZE = 64 const STATE_PENDING = 0 const STATE_PROCESSING = 1 -var _viewport = null -var _ci = null -var _pending_tiles_grid = {} -var _pending_tiles_queue = [] +var _viewport : SubViewport = null +var _ci : Sprite2D = null +var _pending_tiles_grid := {} +var _pending_tiles_queue := [] var _processing_tile = null -var _terrain_data = null +var _terrain_data : HTerrainData = null func _init(): assert(VIEWPORT_SIZE <= HTerrainData.MIN_RESOLUTION) - _viewport = Viewport.new() + _viewport = SubViewport.new() _viewport.size = Vector2(VIEWPORT_SIZE + 2, VIEWPORT_SIZE + 2) - _viewport.render_target_update_mode = Viewport.UPDATE_DISABLED - _viewport.render_target_clear_mode = Viewport.CLEAR_MODE_ALWAYS - _viewport.render_target_v_flip = true - _viewport.world = World.new() + _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ALWAYS + # _viewport.render_target_v_flip = true + _viewport.world = World3D.new() _viewport.own_world = true add_child(_viewport) var mat = ShaderMaterial.new() mat.shader = load("res://addons/zylann.hterrain/tools/bump2normal_tex.shader") - _ci = Sprite.new() + _ci = Sprite2D.new() _ci.centered = false _ci.material = mat _viewport.add_child(_ci) @@ -43,7 +43,7 @@ func _init(): set_process(false) -func set_terrain_data(data): +func set_terrain_data(data: HTerrainData): if data == _terrain_data: return @@ -54,28 +54,29 @@ func set_terrain_data(data): set_process(false) if data == null: - _terrain_data.disconnect("map_changed", self, "_on_terrain_data_map_changed") - _terrain_data.disconnect("resolution_changed", self, "_on_terrain_data_resolution_changed") + _terrain_data.map_changed.disconnect(_on_terrain_data_map_changed) + _terrain_data.resolution_changed.disconnect(_on_terrain_data_resolution_changed) _terrain_data = data if _terrain_data != null: - _terrain_data.connect("map_changed", self, "_on_terrain_data_map_changed") - _terrain_data.connect("resolution_changed", self, "_on_terrain_data_resolution_changed") + _terrain_data.map_changed.connect(_on_terrain_data_map_changed) + _terrain_data.resolution_changed.connect(_on_terrain_data_resolution_changed) _ci.texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT) -func _on_terrain_data_map_changed(maptype, index): +func _on_terrain_data_map_changed(maptype: int, index: int): if maptype == HTerrainData.CHANNEL_HEIGHT: _ci.texture = _terrain_data.get_texture(HTerrainData.CHANNEL_HEIGHT) func _on_terrain_data_resolution_changed(): # TODO Workaround issue https://github.com/godotengine/godot/issues/24463 - _ci.update() + _ci.queue_redraw() -func request_tiles_in_region(min_pos, size): +# TODO Use Vector2i +func request_tiles_in_region(min_pos: Vector2, size: Vector2): assert(is_inside_tree()) assert(_terrain_data != null) var res = _terrain_data.get_resolution() @@ -96,7 +97,8 @@ func request_tiles_in_region(min_pos, size): request_tile(Vector2(x, y)) -func request_tile(tpos): +# TODO Use Vector2i +func request_tile(tpos: Vector2): assert(tpos == tpos.round()) if _pending_tiles_grid.has(tpos): var state = _pending_tiles_grid[tpos] @@ -112,7 +114,7 @@ func _process(delta): return if _processing_tile != null and _terrain_data != null: - var src = _viewport.get_texture().get_data() + var src = _viewport.get_texture().get_image() var dst = _terrain_data.get_image(HTerrainData.CHANNEL_NORMAL) src.convert(dst.get_format()) @@ -120,7 +122,7 @@ func _process(delta): var pos = _processing_tile * VIEWPORT_SIZE var w = src.get_width() - 1 var h = src.get_height() - 1 - dst.blit_rect(src, Rect2(1, 1, w, h), pos) + dst.blit_rect(src, Rect2i(1, 1, w, h), pos) _terrain_data.notify_region_change(Rect2(pos.x, pos.y, w, h), HTerrainData.CHANNEL_NORMAL) if _pending_tiles_grid[_processing_tile] == STATE_PROCESSING: diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd index cfe6ffff..b6e69b6e 100644 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd @@ -1,4 +1,4 @@ -tool +@tool extends EditorImportPlugin const HT_TextureLayeredImporter = preload("./texture_layered_importer.gd") @@ -13,36 +13,37 @@ const RESOURCE_TYPE = "TextureArray" var _logger = HT_Logger.get_for(self) -func get_importer_name() -> String: +func _get_importer_name() -> String: return IMPORTER_NAME -func get_visible_name() -> String: +func _get_visible_name() -> String: # This shows up next to "Import As:" return "HTerrainPackedTextureArray" -func get_recognized_extensions() -> Array: - return ["packed_texarr"] +func _get_recognized_extensions() -> PackedStringArray: + return PackedStringArray(["packed_texarr"]) -func get_save_extension() -> String: - return "texarr" +func _get_save_extension() -> String: + # Same as Godot's default TextureArray importer + return "ctexarray" -func get_resource_type() -> String: +func _get_resource_type() -> String: return RESOURCE_TYPE -func get_preset_count() -> int: +func _get_preset_count() -> int: return 1 -func get_preset_name(preset_index: int) -> String: +func _get_preset_name(preset_index: int) -> String: return "" -func get_import_options(preset_index: int) -> Array: +func _get_import_options(preset_index: int) -> Array: return [ { "name": "compress/mode", @@ -50,35 +51,22 @@ func get_import_options(preset_index: int) -> Array: "property_hint": PROPERTY_HINT_ENUM, "hint_string": HT_TextureLayeredImporter.COMPRESS_HINT_STRING }, - { - "name": "flags/repeat", - "default_value": HT_TextureLayeredImporter.REPEAT_ENABLED, - "property_hint": PROPERTY_HINT_ENUM, - "hint_string": HT_TextureLayeredImporter.REPEAT_HINT_STRING - }, - { - "name": "flags/filter", - "default_value": true - }, { "name": "flags/mipmaps", "default_value": true - }, - { - "name": "flags/anisotropic", - "default_value": false } ] -func get_option_visibility(option: String, options: Dictionary) -> bool: +func _get_option_visibility(path: String, option_name: StringName, options: Dictionary) -> bool: return true -func import(p_source_path: String, p_save_path: String, options: Dictionary, +func _import(p_source_path: String, p_save_path: String, options: Dictionary, r_platform_variants: Array, r_gen_files: Array) -> int: - var result := _import(p_source_path, p_save_path, options, r_platform_variants, r_gen_files) + var result := _import_internal( + p_source_path, p_save_path, options, r_platform_variants, r_gen_files) if not result.success: _logger.error(result.get_message()) @@ -88,30 +76,31 @@ func import(p_source_path: String, p_save_path: String, options: Dictionary, return code -func _import(p_source_path: String, p_save_path: String, options: Dictionary, +func _import_internal(p_source_path: String, p_save_path: String, options: Dictionary, r_platform_variants: Array, r_gen_files: Array) -> HT_Result: - var f := File.new() - var err := f.open(p_source_path, File.READ) + var f := FileAccess.open(p_source_path, File.READ) + var err := FileAccess.get_open_error() if err != OK: return HT_Result.new(false, "Could not open file {0}: {1}" \ .format([p_source_path, HT_Errors.get_message(err)])) \ .with_value(err) var text := f.get_as_text() - f.close() + f = null - var json_result := JSON.parse(text) - if json_result.error != OK: + var json = JSON.new() + var json_err := json.parse(text) + if json_err != OK: return HT_Result.new(false, "Failed to parse file {0}: {1}" \ - .format([p_source_path, json_result.error_string])) \ - .with_value(json_result.error) - var json_data : Dictionary = json_result.result + .format([p_source_path, json.get_error_message()])) \ + .with_value(json_err) + var json_data : Dictionary = json.data var resolution : int = int(json_data.resolution) var contains_albedo : bool = json_data.get("contains_albedo", false) - var layers = json_data.get("layers") + var layers : Array = json_data.get("layers") - var images = [] + var images := [] for layer_index in len(layers): var sources = layers[layer_index] @@ -134,10 +123,7 @@ func _import(p_source_path: String, p_save_path: String, options: Dictionary, contains_albedo, get_visible_name(), options["compress/mode"], - options["flags/repeat"], - options["flags/filter"], - options["flags/mipmaps"], - options["flags/anisotropic"]) + options["flags/mipmaps"]) if not result.success: return HT_Result.new(false, diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd index d7ad36c1..eaf0a8ea 100644 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd @@ -1,4 +1,4 @@ -tool +@tool extends EditorImportPlugin const HT_StreamTextureImporter = preload("./stream_texture_importer.gd") @@ -13,36 +13,37 @@ const RESOURCE_TYPE = "StreamTexture" var _logger = HT_Logger.get_for(self) -func get_importer_name() -> String: +func _get_importer_name() -> String: return IMPORTER_NAME -func get_visible_name() -> String: +func _get_visible_name() -> String: # This shows up next to "Import As:" return "HTerrainPackedTexture" -func get_recognized_extensions() -> Array: - return ["packed_tex"] +func _get_recognized_extensions() -> Array: + return PackedStringArray(["packed_tex"]) -func get_save_extension() -> String: - return "stex" +func _get_save_extension() -> String: + # Same as Godot's default CompressedTexture importer + return "ctex" -func get_resource_type() -> String: +func _get_resource_type() -> String: return RESOURCE_TYPE -func get_preset_count() -> int: +func _get_preset_count() -> int: return 1 -func get_preset_name(preset_index: int) -> String: +func _get_preset_name(preset_index: int) -> String: return "" -func get_import_options(preset_index: int) -> Array: +func _get_import_options(preset_index: int) -> Array: return [ { "name": "compress/mode", @@ -71,14 +72,15 @@ func get_import_options(preset_index: int) -> Array: ] -func get_option_visibility(option: String, options: Dictionary) -> bool: +func _get_option_visibility(path: String, option_name: String, options: Dictionary) -> bool: return true -func import(p_source_path: String, p_save_path: String, options: Dictionary, +func _import(p_source_path: String, p_save_path: String, options: Dictionary, r_platform_variants: Array, r_gen_files: Array) -> int: - var result := _import(p_source_path, p_save_path, options, r_platform_variants, r_gen_files) + var result := _import_internal( + p_source_path, p_save_path, options, r_platform_variants, r_gen_files) if not result.success: _logger.error(result.get_message()) @@ -88,24 +90,25 @@ func import(p_source_path: String, p_save_path: String, options: Dictionary, return code -func _import(p_source_path: String, p_save_path: String, options: Dictionary, +func _import_internal(p_source_path: String, p_save_path: String, options: Dictionary, r_platform_variants: Array, r_gen_files: Array) -> HT_Result: - var f := File.new() - var err := f.open(p_source_path, File.READ) + var f := FileAccess.open(p_source_path, File.READ) + var err := FileAccess.get_open_error() if err != OK: return HT_Result.new(false, "Could not open file {0}: {1}" \ .format([p_source_path, HT_Errors.get_message(err)])) \ .with_value(err) var text := f.get_as_text() - f.close() + f = null - var json_result := JSON.parse(text) - if json_result.error != OK: + var json = JSON.new() + var json_err := json.parse(text) + if json_err != OK: return HT_Result.new(false, "Failed to parse file {0}: {1}" \ - .format([p_source_path, json_result.error_string])) \ - .with_value(json_result.error) - var json_data : Dictionary = json_result.result + .format([p_source_path, json.get_error_message()])) \ + .with_value(json_err) + var json_data : Dictionary = json.data var resolution : int = int(json_data.resolution) var contains_albedo : bool = json_data.get("contains_albedo", false) @@ -130,10 +133,7 @@ func _import(p_source_path: String, p_save_path: String, options: Dictionary, contains_albedo, get_visible_name(), options["compress/mode"], - options["flags/repeat"], - options["flags/filter"], - options["flags/mipmaps"], - options["flags/anisotropic"]) + options["flags/mipmaps"]) if not result.success: return HT_Result.new(false, diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd index b8eb3531..15d5ac1b 100644 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd +++ b/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd @@ -1,4 +1,4 @@ -tool +@tool const HT_Logger = preload("../../util/logger.gd") const HT_Errors = preload("../../util/errors.gd") @@ -10,11 +10,8 @@ const _transform_params = [ static func generate_image(sources: Dictionary, resolution: int, logger) -> HT_Result: - var image := Image.new() - image.create(resolution, resolution, true, Image.FORMAT_RGBA8) + var image := Image.create(resolution, resolution, true, Image.FORMAT_RGBA8) - image.lock() - var flip_normalmap_y := false # TODO Accelerate with GDNative @@ -26,15 +23,16 @@ static func generate_image(sources: Dictionary, resolution: int, logger) -> HT_R logger.debug(str("Processing source \"", src_path, "\"")) - var src_image := Image.new() + var src_image : Image if src_path.begins_with("#"): # Plain color var col = Color(src_path) - src_image.create(resolution, resolution, false, Image.FORMAT_RGBA8) + src_image = Image.create(resolution, resolution, false, Image.FORMAT_RGBA8) src_image.fill(col) else: # File + src_image = Image.new() var err := src_image.load(src_path) if err != OK: return HT_Result.new(false, "Could not open file \"{0}\": {1}" \ @@ -43,7 +41,6 @@ static func generate_image(sources: Dictionary, resolution: int, logger) -> HT_R src_image.decompress() src_image.resize(image.get_width(), image.get_height()) - src_image.lock() # TODO Support more channel configurations if key == "rgb": @@ -65,12 +62,8 @@ static func generate_image(sources: Dictionary, resolution: int, logger) -> HT_R elif key == "rgba": # Meh image.blit_rect(src_image, - Rect2(0, 0, image.get_width(), image.get_height()), Vector2()) - - src_image.unlock() + Rect2i(0, 0, image.get_width(), image.get_height()), Vector2i()) - image.unlock() - if sources.has("normalmap_flip_y") and sources.normalmap_flip_y: _flip_normalmap_y(image) @@ -78,11 +71,9 @@ static func generate_image(sources: Dictionary, resolution: int, logger) -> HT_R static func _flip_normalmap_y(image: Image): - image.lock() for y in image.get_height(): for x in image.get_width(): var col := image.get_pixel(x, y) col.g = 1.0 - col.g image.set_pixel(x, y, col) - image.unlock() diff --git a/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd b/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd index 2999ffd0..5823bc38 100644 --- a/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd @@ -1,4 +1,6 @@ -tool +@tool + +# TODO Port API usage to Godot 4 # TODO Godot does not have an API to make custom texture importers easier. # So we have to re-implement the entire logic of `ResourceImporterTexture`. @@ -15,12 +17,6 @@ const COMPRESS_UNCOMPRESSED = 3 const COMPRESS_HINT_STRING = "Lossless,Lossy,VRAM,Uncompressed" -const REPEAT_NONE = 0 -const REPEAT_ENABLED = 1 -const REPEAT_MIRRORED = 2 - -const REPEAT_HINT_STRING = "None,Enabled,Mirrored" - # StreamTexture.FormatBits, not exposed to GDScript const StreamTexture_FORMAT_MASK_IMAGE_FORMAT = (1 << 20) - 1 const StreamTexture_FORMAT_BIT_LOSSLESS = 1 << 20 diff --git a/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd b/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd index f317dfcd..a53acb47 100644 --- a/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd @@ -1,4 +1,6 @@ -tool +@tool + +# TODO Port API usage to Godot 4 # TODO Godot does not have an API to make custom texture importers easier. # So we have to re-implement the entire logic of `ResourceImporterLayeredTexture`. @@ -15,12 +17,6 @@ const COMPRESS_UNCOMPRESSED = 2 const COMPRESS_HINT_STRING = "Lossless,VRAM,Uncompressed" -const REPEAT_NONE = 0 -const REPEAT_ENABLED = 1 -const REPEAT_MIRRORED = 2 - -const REPEAT_HINT_STRING = "None,Enabled,Mirrored" - # TODO COMPRESS_SOURCE_LAYERED is not exposed # https://github.com/godotengine/godot/issues/43387 const Image_COMPRESS_SOURCE_LAYERED = 3 diff --git a/addons/zylann.hterrain/tools/panel.gd b/addons/zylann.hterrain/tools/panel.gd index d50ec2b3..3c9c8529 100644 --- a/addons/zylann.hterrain/tools/panel.gd +++ b/addons/zylann.hterrain/tools/panel.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control @@ -12,13 +12,13 @@ signal detail_selected(index) signal detail_list_changed -onready var _minimap = $HSplitContainer/HSplitContainer/MinimapContainer/Minimap -onready var _brush_editor = $HSplitContainer/BrushEditor -onready var _texture_editor = $HSplitContainer/HSplitContainer/HSplitContainer/TextureEditor -onready var _detail_editor = $HSplitContainer/HSplitContainer/HSplitContainer/DetailEditor +@onready var _minimap = $HSplitContainer/HSplitContainer/MinimapContainer/Minimap +@onready var _brush_editor = $HSplitContainer/BrushEditor +@onready var _texture_editor = $HSplitContainer/HSplitContainer/HSplitContainer/TextureEditor +@onready var _detail_editor = $HSplitContainer/HSplitContainer/HSplitContainer/DetailEditor -func setup_dialogs(base_control): +func setup_dialogs(base_control: Control): _brush_editor.setup_dialogs(base_control) @@ -36,7 +36,7 @@ func set_image_cache(image_cache): _detail_editor.set_image_cache(image_cache) -func set_camera_transform(cam_transform: Transform): +func set_camera_transform(cam_transform: Transform3D): _minimap.set_camera_transform(cam_transform) @@ -45,11 +45,11 @@ func set_terrain_painter(terrain_painter): func _on_TextureEditor_texture_selected(index): - emit_signal("texture_selected", index) + texture_selected.emit(index) func _on_DetailEditor_detail_selected(index): - emit_signal("detail_selected", index) + detail_selected.emit(index) func set_brush_editor_display_mode(mode): @@ -61,12 +61,12 @@ func set_detail_layer_index(index): func _on_DetailEditor_detail_list_changed(): - emit_signal("detail_list_changed") + detail_list_changed.emit() func _on_TextureEditor_import_pressed(): - emit_signal("import_textures_pressed") + import_textures_pressed.emit() func _on_TextureEditor_edit_pressed(index: int): - emit_signal("edit_texture_pressed", index) + edit_texture_pressed.emit(index) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 92bf5836..179794ce 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -1,4 +1,4 @@ -tool # https://www.youtube.com/watch?v=Y7JG63IuaWs +@tool # https://www.youtube.com/watch?v=Y7JG63IuaWs extends EditorPlugin @@ -51,7 +51,7 @@ var _node : HTerrain = null # GUI var _panel = null var _toolbar = null -var _toolbar_brush_buttons = {} +var _toolbar_brush_buttons := {} var _generator_dialog = null # TODO Rename _import_terrain_dialog var _import_dialog = null @@ -66,8 +66,8 @@ var _lookdev_menu : PopupMenu var _texture_set_editor = null var _texture_set_import_editor = null -var _globalmap_baker = null -var _terrain_had_data_previous_frame = false +var _globalmap_baker : HT_GlobalMapBaker = null +var _terrain_had_data_previous_frame := false var _image_cache : HT_ImageFileCache # Import @@ -91,7 +91,7 @@ func get_icon(icon_name: String) -> Texture: func _enter_tree(): _logger.debug("HTerrain plugin Enter tree") - var dpi_scale = HT_EditorUtil.get_dpi_scale(get_editor_interface().get_editor_settings()) + var dpi_scale = get_editor_interface().get_editor_scale() _logger.debug(str("DPI scale: ", dpi_scale)) add_custom_type("HTerrain", "Spatial", HTerrain, get_icon("heightmap_node")) @@ -109,7 +109,7 @@ func _enter_tree(): _terrain_painter = HT_TerrainPainter.new() _terrain_painter.set_brush_size(5) - _terrain_painter.get_brush().connect("size_changed", self, "_on_brush_size_changed") + _terrain_painter.get_brush().size_changed.connect(_on_brush_size_changed) add_child(_terrain_painter) _brush_decal = HT_BrushDecal.new() @@ -129,11 +129,11 @@ func _enter_tree(): _panel.call_deferred("setup_dialogs", base_control) _panel.set_undo_redo(get_undo_redo()) _panel.set_image_cache(_image_cache) - _panel.connect("detail_selected", self, "_on_detail_selected") - _panel.connect("texture_selected", self, "_on_texture_selected") - _panel.connect("detail_list_changed", self, "_update_brush_buttons_availability") - _panel.connect("edit_texture_pressed", self, "_on_Panel_edit_texture_pressed") - _panel.connect("import_textures_pressed", self, "_on_Panel_import_textures_pressed") + _panel.detail_selected.connect(_on_detail_selected) + _panel.texture_selected.connect(_on_texture_selected) + _panel.detail_list_changed.connect(_update_brush_buttons_availability) + _panel.edit_texture_pressed.connect(_on_Panel_edit_texture_pressed) + _panel.import_textures_pressed.connect(_on_Panel_import_textures_pressed) _toolbar = HBoxContainer.new() add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_MENU, _toolbar) @@ -154,11 +154,11 @@ func _enter_tree(): menu.get_popup().add_separator() _lookdev_menu = PopupMenu.new() _lookdev_menu.name = "LookdevMenu" - _lookdev_menu.connect("about_to_show", self, "_on_lookdev_menu_about_to_show") - _lookdev_menu.connect("id_pressed", self, "_on_lookdev_menu_id_pressed") + _lookdev_menu.about_to_show.connect(_on_lookdev_menu_about_to_show) + _lookdev_menu.id_pressed.connect(_on_lookdev_menu_id_pressed) menu.get_popup().add_child(_lookdev_menu) menu.get_popup().add_submenu_item("Lookdev", _lookdev_menu.name, MENU_LOOKDEV) - menu.get_popup().connect("id_pressed", self, "_menu_item_selected") + menu.get_popup().id_pressed.connect(_menu_item_selected) menu.get_popup().add_separator() menu.get_popup().add_item("Documentation", MENU_DOCUMENTATION) menu.get_popup().add_item("About HTerrain...", MENU_ABOUT) @@ -208,29 +208,30 @@ func _enter_tree(): var mode_group := ButtonGroup.new() for mode in ordered_brush_modes: - var button := ToolButton.new() + var button := Button.new() + button.flat = true button.icon = mode_icons[mode] - button.set_tooltip(mode_tooltips[mode]) + button.tooltip_text = mode_tooltips[mode] button.set_toggle_mode(true) button.set_button_group(mode_group) if mode == _terrain_painter.get_mode(): - button.set_pressed(true) + button.button_pressed = true - button.connect("pressed", self, "_on_mode_selected", [mode]) + button.pressed.connect(_on_mode_selected.bind(mode)) _toolbar.add_child(button) _toolbar_brush_buttons[mode] = button _generator_dialog = HT_GeneratorDialogScene.instance() - _generator_dialog.connect("progress_notified", self, "_terrain_progress_notified") + _generator_dialog.progress_notified.connect(_terrain_progress_notified) _generator_dialog.set_image_cache(_image_cache) _generator_dialog.set_undo_redo(get_undo_redo()) base_control.add_child(_generator_dialog) _generator_dialog.apply_dpi_scale(dpi_scale) _import_dialog = HT_ImportDialogScene.instance() - _import_dialog.connect("permanent_change_performed", self, "_on_permanent_change_performed") + _import_dialog.permanent_change_performed.connect(_on_permanent_change_performed) HT_Util.apply_dpi_scale(_import_dialog, dpi_scale) base_control.add_child(_import_dialog) @@ -238,19 +239,18 @@ func _enter_tree(): base_control.add_child(_progress_window) _generate_mesh_dialog = HT_GenerateMeshDialogScene.instance() - _generate_mesh_dialog.connect( - "generate_selected", self, "_on_GenerateMeshDialog_generate_selected") + _generate_mesh_dialog.generate_selected.connect(_on_GenerateMeshDialog_generate_selected) HT_Util.apply_dpi_scale(_generate_mesh_dialog, dpi_scale) base_control.add_child(_generate_mesh_dialog) _resize_dialog = HT_ResizeDialogScene.instance() - _resize_dialog.connect("permanent_change_performed", self, "_on_permanent_change_performed") + _resize_dialog.permanent_change_performed.connect(_on_permanent_change_performed) HT_Util.apply_dpi_scale(_resize_dialog, dpi_scale) base_control.add_child(_resize_dialog) _globalmap_baker = HT_GlobalMapBaker.new() - _globalmap_baker.connect("progress_notified", self, "_terrain_progress_notified") - _globalmap_baker.connect("permanent_change_performed", self, "_on_permanent_change_performed") + _globalmap_baker.progress_notified.connect(_terrain_progress_notified) + _globalmap_baker.permanent_change_performed.connect(_on_permanent_change_performed) add_child(_globalmap_baker) _export_image_dialog = HT_ExportImageDialogScene.instance() @@ -278,7 +278,7 @@ func _enter_tree(): base_control.add_child(_texture_set_import_editor) _texture_set_import_editor.call_deferred("setup_dialogs", base_control) - _texture_set_editor.connect("import_selected", self, "_on_TextureSetEditor_import_selected") + _texture_set_editor.import_selected.connect(_on_TextureSetEditor_import_selected) func _exit_tree(): @@ -340,22 +340,22 @@ func _exit_tree(): _packed_texture_array_importer = null -func handles(object): +func _handles(object): return _get_terrain_from_object(object) != null -func edit(object): +func _edit(object): _logger.debug(str("Edit ", object)) var node = _get_terrain_from_object(object) if _node != null: - _node.disconnect("tree_exited", self, "_terrain_exited_scene") + _node.tree_exited.disconnect(_terrain_exited_scene) _node = node if _node != null: - _node.connect("tree_exited", self, "_terrain_exited_scene") + _node.tree_exited.connect(_terrain_exited_scene) _update_brush_buttons_availability() @@ -378,7 +378,7 @@ func edit(object): static func _get_terrain_from_object(object): - if object != null and object is Spatial: + if object != null and object is Node3D: if not object.is_inside_tree(): return null if object is HTerrain: @@ -421,7 +421,7 @@ func _update_toolbar_menu_availability(): popup.set_item_tooltip(i, "Terrain has no data") -func make_visible(visible: bool): +func _make_visible(visible: bool): _panel.set_visible(visible) _toolbar.set_visible(visible) _brush_decal.update_visibility() @@ -450,7 +450,7 @@ func _get_pointed_cell_position(mouse_position: Vector2, p_camera: Camera):# -> return _node.cell_raycast(origin, dir, ray_distance) -func forward_spatial_gui_input(p_camera: Camera, p_event: InputEvent) -> bool: +func _forward_3d_gui_input(p_camera: Camera3D, p_event: InputEvent) -> bool: if _node == null || _node.get_data() == null: return false @@ -462,13 +462,13 @@ func forward_spatial_gui_input(p_camera: Camera, p_event: InputEvent) -> bool: if p_event is InputEventMouseButton: var mb = p_event - if mb.button_index == BUTTON_LEFT or mb.button_index == BUTTON_RIGHT: + if mb.button_index == MOUSE_BUTTON_LEFT or mb.button_index == MOUSE_BUTTON_RIGHT: if mb.pressed == false: _mouse_pressed = false # Need to check modifiers before capturing the event, # because they are used in navigation schemes - if (not mb.control) and (not mb.alt) and mb.button_index == BUTTON_LEFT: + if (not mb.ctrl_pressed) and (not mb.alt_pressed) and mb.button_index == MOUSE_BUTTON_LEFT: if mb.pressed: # TODO Allow to paint on click # TODO `pressure` is not available in button press events @@ -502,7 +502,7 @@ func forward_spatial_gui_input(p_camera: Camera, p_event: InputEvent) -> bool: _brush_decal.set_position(Vector3(hit_pos_in_cells.x, 0, hit_pos_in_cells.y)) if _mouse_pressed: - if Input.is_mouse_button_pressed(BUTTON_LEFT): + if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): _terrain_painter.paint_input(hit_pos_in_cells, mm.pressure) captured_event = true @@ -537,7 +537,7 @@ func _process(delta: float): func _paint_completed(changes: Dictionary): - var time_before = OS.get_ticks_msec() + var time_before = Time.get_ticks_msec() var heightmap_data = _node.get_data() assert(heightmap_data != null) @@ -618,7 +618,7 @@ func _paint_completed(changes: Dictionary): ur.commit_action() heightmap_data._edit_set_disable_apply_undo(false) - var time_spent = OS.get_ticks_msec() - time_before + var time_spent = Time.get_ticks_msec() - time_before _logger.debug(str(action_name, " | ", len(chunk_positions), " chunks | ", time_spent, " ms")) @@ -741,7 +741,7 @@ func _select_brush_mode(mode: int): static func get_size_from_raw_length(flen: int): - var side_len = round(sqrt(float(flen/2))) + var side_len = roundf(sqrt(float(flen/2))) return int(side_len) @@ -770,7 +770,7 @@ func _on_GenerateMeshDialog_generate_selected(lod: int): var heightmap := data.get_image(HTerrainData.CHANNEL_HEIGHT) var scale := _node.map_scale var mesh := HTerrainMesher.make_heightmap_mesh(heightmap, lod, scale, _logger) - var mi := MeshInstance.new() + var mi := MeshInstance3D.new() mi.name = str(_node.name, "_FullMesh") mi.mesh = mesh mi.transform = _node.transform @@ -831,16 +831,16 @@ func _debug_spawn_collider_indicators(): if terrain == null: return - var test_root : Spatial + var test_root : Node3D if not terrain.has_node("__DEBUG"): - test_root = Spatial.new() + test_root = Node3D.new() test_root.name = "__DEBUG" terrain.add_child(test_root) else: test_root = terrain.get_node("__DEBUG") - var space_state := terrain.get_world().direct_space_state - var hit_material = SpatialMaterial.new() + var space_state := terrain.get_world_3d().direct_space_state + var hit_material = StandardMaterial3D.new() hit_material.albedo_color = Color(0, 1, 1) var cube = CubeMesh.new() @@ -848,10 +848,16 @@ func _debug_spawn_collider_indicators(): for xi in 16: var hit_name = str(xi, "_", zi) var pos = Vector3(xi * 16, 1000, zi * 16) - var hit = space_state.intersect_ray(pos, pos + Vector3(0, -2000, 0)) - var mi : MeshInstance + + var query := PhysicsRayQueryParameters3D.new() + query.from = pos + query.to = pos + Vector3(0, -2000, 0) + + var hit = space_state.intersect_ray(query) + + var mi : MeshInstance3D if not test_root.has_node(hit_name): - mi = MeshInstance.new() + mi = MeshInstance3D.new() mi.name = hit_name mi.material_override = hit_material mi.mesh = cube @@ -869,17 +875,16 @@ func _spawn_vertical_bound_boxes(): var data = _node.get_data() # var sy = data._chunked_vertical_bounds_size_y # var sx = data._chunked_vertical_bounds_size_x - var mat = SpatialMaterial.new() - mat.flags_transparent = true + var mat = StandardMaterial3D.new() + mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA mat.albedo_color = Color(1,1,1,0.2) - data._chunked_vertical_bounds.lock() for cy in range(30, 60): for cx in range(30, 60): var vb = data._chunked_vertical_bounds.get_pixel(cx, cy) var minv = vb.r var maxv = vb.g - var mi = MeshInstance.new() - mi.mesh = CubeMesh.new() + var mi = MeshInstance3D.new() + mi.mesh = BoxMesh.new() var cs = HTerrainData.VERTICAL_BOUNDS_CHUNK_SIZE mi.mesh.size = Vector3(cs, maxv - minv, cs) mi.translation = Vector3( @@ -891,8 +896,6 @@ func _spawn_vertical_bound_boxes(): mi.material_override = mat _node.add_child(mi) mi.owner = get_editor_interface().get_edited_scene_root() - - data._chunked_vertical_bounds.unlock() # if p_event is InputEventKey: # if p_event.pressed == false: diff --git a/addons/zylann.hterrain/tools/preview_generator.gd b/addons/zylann.hterrain/tools/preview_generator.gd index d3172faf..77439496 100644 --- a/addons/zylann.hterrain/tools/preview_generator.gd +++ b/addons/zylann.hterrain/tools/preview_generator.gd @@ -1,4 +1,4 @@ -tool +@tool extends EditorResourcePreviewGenerator const HTerrainData = preload("../hterrain_data.gd") @@ -8,40 +8,36 @@ const HT_Logger = preload("../util/logger.gd") var _logger = HT_Logger.get_for(self) -func generate(res: Resource, size: Vector2) -> Texture: +func _generate(res: Resource, size: Vector2) -> Texture: if res == null or not (res is HTerrainData): return null var normalmap = res.get_image(HTerrainData.CHANNEL_NORMAL) if normalmap == null: return null - return _generate(normalmap, size) + return _generate_internal(normalmap, size) -func generate_from_path(path: String, size: Vector2) -> Texture: +func _generate_from_path(path: String, size: Vector2) -> Texture: if not path.ends_with("." + HTerrainData.META_EXTENSION): return null var data_dir := path.get_base_dir() var normals_fname := str(HTerrainData.get_channel_name(HTerrainData.CHANNEL_NORMAL), ".png") - var normals_path := data_dir.plus_file(normals_fname) + var normals_path := data_dir.path_join(normals_fname) var normals := Image.new() var err := normals.load(normals_path) if err != OK: _logger.error("Could not load '{0}', error {1}" \ .format([normals_path, HT_Errors.get_message(err)])) return null - return _generate(normals, size) + return _generate_internal(normals, size) -func handles(type: String) -> bool: +func _handles(type: String) -> bool: return type == "Resource" -static func _generate(normals: Image, size: Vector2) -> Texture: - var im := Image.new() - im.create(size.x, size.y, false, Image.FORMAT_RGB8) - - im.lock() - normals.lock() +static func _generate_internal(normals: Image, size: Vector2) -> Texture: + var im := Image.create(size.x, size.y, false, Image.FORMAT_RGB8) var light_dir = Vector3(-1, -0.5, -1).normalized() @@ -56,17 +52,12 @@ static func _generate(normals: Image, size: Vector2) -> Texture: var n := _decode_normal(normals.get_pixel(mx, my)) var ndot := -n.dot(light_dir) - var gs := clamp(0.5 * ndot + 0.5, 0.0, 1.0) + var gs := clampf(0.5 * ndot + 0.5, 0.0, 1.0) var col := Color(gs, gs, gs, 1.0) im.set_pixel(x, y, col) - im.unlock(); - normals.unlock(); - - var tex = ImageTexture.new() - tex.create_from_image(im, 0) - + var tex = ImageTexture.create_from_image(im) return tex diff --git a/addons/zylann.hterrain/tools/progress_window.gd b/addons/zylann.hterrain/tools/progress_window.gd index e50c332b..a8c63f61 100644 --- a/addons/zylann.hterrain/tools/progress_window.gd +++ b/addons/zylann.hterrain/tools/progress_window.gd @@ -1,12 +1,12 @@ -tool -extends Control +@tool +extends WindowDialog #onready var _label = get_node("VBoxContainer/Label") -onready var _progress_bar = $VBoxContainer/ProgressBar +@onready var _progress_bar = $VBoxContainer/ProgressBar func show_progress(message, progress): - self.window_title = message + self.title = message _progress_bar.ratio = progress diff --git a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd index 9e695dc5..32b973bd 100644 --- a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd +++ b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd @@ -1,8 +1,9 @@ -tool +@tool extends WindowDialog const HT_Util = preload("../../util/util.gd") const HT_Logger = preload("../../util/logger.gd") +const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") const ANCHOR_TOP_LEFT = 0 @@ -42,9 +43,9 @@ const _anchor_icon_names = [ signal permanent_change_performed(message) -onready var _resolution_dropdown = $VBoxContainer/GridContainer/ResolutionDropdown -onready var _stretch_checkbox = $VBoxContainer/GridContainer/StretchCheckBox -onready var _anchor_control = $VBoxContainer/GridContainer/HBoxContainer/AnchorControl +@onready var _resolution_dropdown = $VBoxContainer/GridContainer/ResolutionDropdown +@onready var _stretch_checkbox = $VBoxContainer/GridContainer/StretchCheckBox +@onready var _anchor_control = $VBoxContainer/GridContainer/HBoxContainer/AnchorControl const _resolutions = HTerrainData.SUPPORTED_RESOLUTIONS @@ -54,10 +55,10 @@ var _anchor_button_group = null var _selected_anchor = ANCHOR_TOP_LEFT var _logger = HT_Logger.get_for(self) -var _terrain = null +var _terrain : HTerrain = null -func set_terrain(terrain): +func set_terrain(terrain: HTerrain): _terrain = terrain @@ -82,9 +83,9 @@ func _ready(): var child = _anchor_control.get_child(i) assert(child is Button) child.toggle_mode = true - child.rect_min_size = child.rect_size + child.custom_minimum_size = child.rect_size child.icon = null - child.connect("pressed", self, "_on_AnchorButton_pressed", [i, x, y]) + child.pressed.connect(_on_AnchorButton_pressed.bind(i, x, y)) child.group = _anchor_button_group _anchor_buttons[i] = child _anchor_buttons_grid[Vector2(x, y)] = child @@ -93,12 +94,12 @@ func _ready(): x = 0 y += 1 - _anchor_buttons[_selected_anchor].pressed = true + _anchor_buttons[_selected_anchor].button_pressed = true # The signal apparently doesn't trigger in this case _on_AnchorButton_pressed(_selected_anchor, 0, 0) -func _notification(what): +func _notification(what: int): if what == NOTIFICATION_VISIBILITY_CHANGED: if visible: # Select current resolution @@ -110,7 +111,7 @@ func _notification(what): break -func _on_AnchorButton_pressed(anchor0, x0, y0): +func _on_AnchorButton_pressed(anchor0: int, x0: int, y0: int): _selected_anchor = anchor0 for button in _anchor_buttons: @@ -128,7 +129,7 @@ func _on_AnchorButton_pressed(anchor0, x0, y0): button.icon = icon -func _set_anchor_control_active(active): +func _set_anchor_control_active(active: bool): for button in _anchor_buttons: button.disabled = not active @@ -137,7 +138,7 @@ func _on_ResolutionDropdown_item_selected(id): pass -func _on_StretchCheckBox_toggled(button_pressed): +func _on_StretchCheckBox_toggled(button_pressed: bool): _set_anchor_control_active(not button_pressed) @@ -153,7 +154,7 @@ func _on_CancelButton_pressed(): hide() -func _apply(p_resolution, p_stretch, p_anchor): +func _apply(p_resolution: int, p_stretch: bool, p_anchor: Vector2): if _terrain == null: _logger.error("Cannot apply resize, terrain is not set") return @@ -165,4 +166,4 @@ func _apply(p_resolution, p_stretch, p_anchor): data.resize(p_resolution, p_stretch, p_anchor) data.notify_full_change() - emit_signal("permanent_change_performed", "Resize terrain") + permanent_change_performed.emit("Resize terrain") diff --git a/addons/zylann.hterrain/tools/terrain_preview.gd b/addons/zylann.hterrain/tools/terrain_preview.gd index 216cee07..fc1d1cf6 100644 --- a/addons/zylann.hterrain/tools/terrain_preview.gd +++ b/addons/zylann.hterrain/tools/terrain_preview.gd @@ -1,4 +1,4 @@ -tool +@tool extends ViewportContainer const PREVIEW_MESH_LOD = 2 @@ -8,13 +8,13 @@ const HT_Util = preload("../util/util.gd") signal dragged(relative, button_mask) -onready var _viewport = $Viewport -onready var _mesh_instance = $Viewport/MeshInstance -onready var _camera = $Viewport/Camera -onready var _light = $Viewport/DirectionalLight +@onready var _viewport : SubViewport = $Viewport +@onready var _mesh_instance : MeshInstance3D = $Viewport/MeshInstance +@onready var _camera : Camera3D = $Viewport/Camera +@onready var _light : DirectionalLight3D = $Viewport/DirectionalLight # Use the simplest shader -var _shader = load("res://addons/zylann.hterrain/shaders/simple4_lite.shader") +var _shader : Shader = load("res://addons/zylann.hterrain/shaders/simple4_lite.shader") var _yaw := 0.0 var _pitch := -PI / 6.0 var _distance := 0.0 @@ -27,23 +27,23 @@ var _mesh_resolution := 0 func _ready(): if _sea_outline == null: var mesh = HT_Util.create_wirecube_mesh() - var mat2 = SpatialMaterial.new() - mat2.flags_unshaded = true + var mat2 = StandardMaterial3D.new() + mat2.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED mat2.albedo_color = Color(0, 0.5, 1) mesh.surface_set_material(0, mat2) - _sea_outline = MeshInstance.new() + _sea_outline = MeshInstance3D.new() _sea_outline.mesh = mesh _viewport.add_child(_sea_outline) if _sea_plane == null: var mesh = PlaneMesh.new() mesh.size = Vector2(1, 1) - var mat2 = SpatialMaterial.new() - mat2.flags_unshaded = true + var mat2 = StandardMaterial3D.new() + mat2.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED mat2.albedo_color = Color(0, 0.5, 1, 0.5) - mat2.flags_transparent = true + mat2.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA mesh.material = mat2 - _sea_plane = MeshInstance.new() + _sea_plane = MeshInstance3D.new() _sea_plane.mesh = mesh _sea_plane.hide() _viewport.add_child(_sea_plane) @@ -70,10 +70,10 @@ func setup(heights_texture: Texture, normals_texture: Texture): mat.shader = _shader _mesh_instance.mesh.surface_set_material(0, mat) - mat.set_shader_param("u_terrain_heightmap", heights_texture) - mat.set_shader_param("u_terrain_normalmap", normals_texture) - mat.set_shader_param("u_terrain_inverse_transform", Transform()) - mat.set_shader_param("u_terrain_normal_basis", Basis()) + mat.set_shader_parameter("u_terrain_heightmap", heights_texture) + mat.set_shader_parameter("u_terrain_normalmap", normals_texture) + mat.set_shader_parameter("u_terrain_inverse_transform", Transform3D()) + mat.set_shader_parameter("u_terrain_normal_basis", Basis()) var aabb = _mesh_instance.get_aabb() _sea_outline.scale = aabb.size @@ -94,8 +94,8 @@ func set_shadows_enabled(enabled: bool): func _update_camera(): var aabb = _mesh_instance.get_aabb() var target = aabb.position + 0.5 * aabb.size - var trans = Transform() - trans.basis = Basis(Quat(Vector3(0, 1, 0), _yaw) * Quat(Vector3(1, 0, 0), _pitch)) + var trans = Transform3D() + trans.basis = Basis(Quaternion(Vector3(0, 1, 0), _yaw) * Quaternion(Vector3(1, 0, 0), _pitch)) var back = trans.basis.z trans.origin = target + back * _distance _camera.transform = trans @@ -105,8 +105,8 @@ func cleanup(): if _mesh_instance != null: var mat = _mesh_instance.mesh.surface_get_material(0) assert(mat != null) - mat.set_shader_param("u_terrain_heightmap", null) - mat.set_shader_param("u_terrain_normalmap", null) + mat.set_shader_parameter("u_terrain_heightmap", null) + mat.set_shader_parameter("u_terrain_normalmap", null) func _gui_input(event: InputEvent): @@ -114,7 +114,7 @@ func _gui_input(event: InputEvent): return if event is InputEventMouseMotion: - if event.button_mask & BUTTON_MASK_MIDDLE: + if event.button_mask & MOUSE_BUTTON_MASK_MIDDLE: var d = 0.01 * event.relative _yaw -= d.x _pitch -= d.y @@ -123,7 +123,7 @@ func _gui_input(event: InputEvent): var rel = 0.01 * event.relative # Align dragging to view rotation rel = -rel.rotated(-_yaw) - emit_signal("dragged", rel, event.button_mask) + dragged.emit(rel, event.button_mask) elif event is InputEventMouseButton: if event.pressed: @@ -134,10 +134,10 @@ func _gui_input(event: InputEvent): var max_distance = _default_distance # Zoom in/out - if event.button_index == BUTTON_WHEEL_DOWN: - _distance = clamp(_distance * factor, min_distance, max_distance) + if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + _distance = clampf(_distance * factor, min_distance, max_distance) _update_camera() - elif event.button_index == BUTTON_WHEEL_UP: - _distance = clamp(_distance / factor, min_distance, max_distance) + elif event.button_index == MOUSE_BUTTON_WHEEL_UP: + _distance = clampf(_distance / factor, min_distance, max_distance) _update_camera() diff --git a/addons/zylann.hterrain/tools/texture_editor/flow_container.gd b/addons/zylann.hterrain/tools/texture_editor/flow_container.gd index 61e5dcd8..04b89f6d 100644 --- a/addons/zylann.hterrain/tools/texture_editor/flow_container.gd +++ b/addons/zylann.hterrain/tools/texture_editor/flow_container.gd @@ -1,4 +1,4 @@ -tool +@tool extends Container const SEPARATION = 2 @@ -36,5 +36,5 @@ func _sort_children2(): pos.x += rect.size.x + SEPARATION - rect_min_size.y = pos.y + line_height + custom_minimum_size.y = pos.y + line_height diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd index 13263207..4f45691d 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control # TODO Can't preload because it causes the plugin to fail loading if assets aren't imported @@ -9,16 +9,16 @@ signal load_pressed signal clear_pressed -onready var _label = $Label -onready var _texture_rect = $TextureRect +@onready var _label : Label = $Label +@onready var _texture_rect : TextureRect = $TextureRect -onready var _buttons = [ +@onready var _buttons = [ $LoadButton, $ClearButton ] var _material : Material -var _is_empty = true +var _is_empty := true func set_label(text: String): @@ -41,11 +41,11 @@ func set_texture_tooltip(msg: String): func _on_LoadButton_pressed(): - emit_signal("load_pressed") + load_pressed.emit() func _on_ClearButton_pressed(): - emit_signal("clear_pressed") + clear_pressed.emit() func set_material(mat: Material): diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd index ea84b3ab..7e1ce8cd 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const HTerrainTextureSet = preload("../../../hterrain_texture_set.gd") @@ -16,18 +16,18 @@ const EMPTY_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/empty.png" signal import_selected -onready var _slots_list = $VB/HS/VB/SlotsList -onready var _albedo_preview = $VB/HS/VB2/GC/AlbedoPreview -onready var _bump_preview = $VB/HS/VB2/GC/BumpPreview -onready var _normal_preview = $VB/HS/VB2/GC/NormalPreview -onready var _roughness_preview = $VB/HS/VB2/GC/RoughnessPreview -onready var _load_albedo_button = $VB/HS/VB2/GC/LoadAlbedo -onready var _load_normal_button = $VB/HS/VB2/GC/LoadNormal -onready var _clear_albedo_button = $VB/HS/VB2/GC/ClearAlbedo -onready var _clear_normal_button = $VB/HS/VB2/GC/ClearNormal -onready var _mode_selector = $VB/HS/VB2/GC2/ModeSelector -onready var _add_slot_button = $VB/HS/VB/HB/AddSlot -onready var _remove_slot_button = $VB/HS/VB/HB/RemoveSlot +@onready var _slots_list : ItemList = $VB/HS/VB/SlotsList +@onready var _albedo_preview : TextureRect = $VB/HS/VB2/GC/AlbedoPreview +@onready var _bump_preview : TextureRect = $VB/HS/VB2/GC/BumpPreview +@onready var _normal_preview : TextureRect = $VB/HS/VB2/GC/NormalPreview +@onready var _roughness_preview : TextureRect = $VB/HS/VB2/GC/RoughnessPreview +@onready var _load_albedo_button : Button = $VB/HS/VB2/GC/LoadAlbedo +@onready var _load_normal_button : Button = $VB/HS/VB2/GC/LoadNormal +@onready var _clear_albedo_button : Button = $VB/HS/VB2/GC/ClearAlbedo +@onready var _clear_normal_button : Button = $VB/HS/VB2/GC/ClearNormal +@onready var _mode_selector : OptionButton = $VB/HS/VB2/GC2/ModeSelector +@onready var _add_slot_button : Button = $VB/HS/VB/HB/AddSlot +@onready var _remove_slot_button : Button = $VB/HS/VB/HB/RemoveSlot var _texture_set : HTerrainTextureSet var _undo_redo : UndoRedo @@ -51,17 +51,17 @@ func _ready(): func setup_dialogs(parent: Node): var d = HT_EditorUtil.create_open_texture_dialog() - d.connect("file_selected", self, "_on_LoadTextureDialog_file_selected") + d.file_selected.connect(_on_LoadTextureDialog_file_selected) _load_texture_dialog = d parent.add_child(d) d = HT_EditorUtil.create_open_texture_array_dialog() - d.connect("file_selected", self, "_on_LoadTextureArrayDialog_file_selected") + d.file_selected.connect(_on_LoadTextureArrayDialog_file_selected) _load_texture_array_dialog = d parent.add_child(d) d = ConfirmationDialog.new() - d.connect("confirmed", self, "_on_ModeConfirmationDialog_confirmed") + d.confirmed.connect(_on_ModeConfirmationDialog_confirmed) # This is ridiculous. # See https://github.com/godotengine/godot/issues/17460 # d.connect("modal_closed", self, "_on_ModeConfirmationDialog_cancelled") @@ -97,12 +97,12 @@ func set_texture_set(texture_set: HTerrainTextureSet): return if _texture_set != null: - _texture_set.disconnect("changed", self, "_on_texture_set_changed") + _texture_set.changed.disconnect(_on_texture_set_changed) _texture_set = texture_set if _texture_set != null: - _texture_set.connect("changed", self, "_on_texture_set_changed") + _texture_set.changed.connect(_on_texture_set_changed) _update_ui_from_data() @@ -136,7 +136,7 @@ func _update_ui_from_data(): _add_slot_button.disabled = slots_count >= max_slots _remove_slot_button.disabled = slots_count == 0 - var buttons = [ + var buttons := [ _load_albedo_button, _load_normal_button, _clear_albedo_button, @@ -150,7 +150,7 @@ func _update_ui_from_data(): _load_normal_button.text = "Load..." for b in buttons: - b.disabled = slots_count == 0 + b.disabled = (slots_count == 0) else: _add_slot_button.visible = false @@ -187,10 +187,10 @@ func _clear_previews(): _normal_preview.texture = empty_texture _roughness_preview.texture = empty_texture - _albedo_preview.hint_tooltip = _get_resource_path_or_empty(null) - _bump_preview.hint_tooltip = _get_resource_path_or_empty(null) - _normal_preview.hint_tooltip = _get_resource_path_or_empty(null) - _roughness_preview.hint_tooltip = _get_resource_path_or_empty(null) + _albedo_preview.tooltip_text = _get_resource_path_or_empty(null) + _bump_preview.tooltip_text = _get_resource_path_or_empty(null) + _normal_preview.tooltip_text = _get_resource_path_or_empty(null) + _roughness_preview.tooltip_text = _get_resource_path_or_empty(null) func _select_slot(slot_index: int): @@ -212,20 +212,20 @@ func _select_slot(slot_index: int): _normal_preview.texture = normal_tex if normal_tex != null else empty_texture _roughness_preview.texture = normal_tex if normal_tex != null else empty_texture - _albedo_preview.hint_tooltip = _get_resource_path_or_empty(albedo_tex) - _bump_preview.hint_tooltip = _get_resource_path_or_empty(albedo_tex) - _normal_preview.hint_tooltip = _get_resource_path_or_empty(normal_tex) - _roughness_preview.hint_tooltip = _get_resource_path_or_empty(normal_tex) + _albedo_preview.tooltip_text = _get_resource_path_or_empty(albedo_tex) + _bump_preview.tooltip_text = _get_resource_path_or_empty(albedo_tex) + _normal_preview.tooltip_text = _get_resource_path_or_empty(normal_tex) + _roughness_preview.tooltip_text = _get_resource_path_or_empty(normal_tex) _albedo_preview.material.shader = HT_ColorShader _bump_preview.material.shader = HT_AlphaShader _normal_preview.material.shader = HT_ColorShader _roughness_preview.material.shader = HT_AlphaShader - _albedo_preview.material.set_shader_param("u_texture_array", null) - _bump_preview.material.set_shader_param("u_texture_array", null) - _normal_preview.material.set_shader_param("u_texture_array", null) - _roughness_preview.material.set_shader_param("u_texture_array", null) + _albedo_preview.material.set_shader_parameter("u_texture_array", null) + _bump_preview.material.set_shader_parameter("u_texture_array", null) + _normal_preview.material.set_shader_parameter("u_texture_array", null) + _roughness_preview.material.set_shader_parameter("u_texture_array", null) else: var albedo_tex := _texture_set.get_texture_array(HTerrainTextureSet.TYPE_ALBEDO_BUMP) @@ -236,10 +236,10 @@ func _select_slot(slot_index: int): _normal_preview.texture = empty_texture _roughness_preview.texture = empty_texture - _albedo_preview.hint_tooltip = _get_resource_path_or_empty(albedo_tex) - _bump_preview.hint_tooltip = _get_resource_path_or_empty(albedo_tex) - _normal_preview.hint_tooltip = _get_resource_path_or_empty(normal_tex) - _roughness_preview.hint_tooltip = _get_resource_path_or_empty(normal_tex) + _albedo_preview.tooltip_text = _get_resource_path_or_empty(albedo_tex) + _bump_preview.tooltip_text = _get_resource_path_or_empty(albedo_tex) + _normal_preview.tooltip_text = _get_resource_path_or_empty(normal_tex) + _roughness_preview.tooltip_text = _get_resource_path_or_empty(normal_tex) _albedo_preview.material.shader = HT_ColorSliceShader _bump_preview.material.shader = HT_AlphaSliceShader @@ -248,15 +248,15 @@ func _select_slot(slot_index: int): _roughness_preview.material.shader = \ HT_AlphaSliceShader if normal_tex != null else HT_AlphaShader - _albedo_preview.material.set_shader_param("u_texture_array", albedo_tex) - _bump_preview.material.set_shader_param("u_texture_array", albedo_tex) - _normal_preview.material.set_shader_param("u_texture_array", normal_tex) - _roughness_preview.material.set_shader_param("u_texture_array", normal_tex) + _albedo_preview.material.set_shader_parameter("u_texture_array", albedo_tex) + _bump_preview.material.set_shader_parameter("u_texture_array", albedo_tex) + _normal_preview.material.set_shader_parameter("u_texture_array", normal_tex) + _roughness_preview.material.set_shader_parameter("u_texture_array", normal_tex) - _albedo_preview.material.set_shader_param("u_index", slot_index) - _bump_preview.material.set_shader_param("u_index", slot_index) - _normal_preview.material.set_shader_param("u_index", slot_index) - _roughness_preview.material.set_shader_param("u_index", slot_index) + _albedo_preview.material.set_shader_parameter("u_index", slot_index) + _bump_preview.material.set_shader_parameter("u_index", slot_index) + _normal_preview.material.set_shader_parameter("u_index", slot_index) + _roughness_preview.material.set_shader_parameter("u_index", slot_index) _slots_list.select(slot_index) @@ -268,7 +268,7 @@ static func _get_resource_path_or_empty(res: Resource) -> String: func _on_ImportButton_pressed(): - emit_signal("import_selected") + import_selected.emit() func _on_CloseButton_pressed(): diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index 39ed6507..9f57c43c 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const HTerrainTextureSet = preload("../../../hterrain_texture_set.gd") @@ -36,14 +36,14 @@ const _smart_pick_file_keywords = [ signal import_finished -onready var _texture_editors = [ +@onready var _texture_editors = [ $Import/HS/VB2/HB/Albedo, $Import/HS/VB2/HB/Bump, $Import/HS/VB2/HB/Normal, $Import/HS/VB2/HB/Roughness ] -onready var _slots_list = $Import/HS/VB/SlotsList +@onready var _slots_list : ItemList = $Import/HS/VB/SlotsList # TODO Some shortcuts to import options were disabled in the GUI because of Godot issues. # If users want to customize that, they need to do it on the files directly. @@ -58,15 +58,14 @@ onready var _slots_list = $Import/HS/VB/SlotsList # Godot needs an API to import specific files and choose settings before the first import. const _WRITE_IMPORT_FILES = false -onready var _import_mode_selector = $Import/GC/ImportModeSelector -onready var _compression_selector = $Import/GC/CompressionSelector -onready var _resolution_spinbox = $Import/GC/ResolutionSpinBox -onready var _mipmaps_checkbox = $Import/GC/MipmapsCheckbox -onready var _filter_checkbox = $Import/GC/FilterCheckBox -onready var _add_slot_button = $Import/HS/VB/HB/AddSlotButton -onready var _remove_slot_button = $Import/HS/VB/HB/RemoveSlotButton -onready var _import_directory_line_edit : LineEdit = $Import/HB2/ImportDirectoryLineEdit -onready var _normalmap_flip_checkbox = $Import/HS/VB2/HB/Normal/NormalMapFlipY +@onready var _import_mode_selector : OptionButton = $Import/GC/ImportModeSelector +@onready var _compression_selector : OptionButton = $Import/GC/CompressionSelector +@onready var _resolution_spinbox : SpinBox = $Import/GC/ResolutionSpinBox +@onready var _mipmaps_checkbox : CheckBox = $Import/GC/MipmapsCheckbox +@onready var _add_slot_button : Button = $Import/HS/VB/HB/AddSlotButton +@onready var _remove_slot_button : Button = $Import/HS/VB/HB/RemoveSlotButton +@onready var _import_directory_line_edit : LineEdit = $Import/HB2/ImportDirectoryLineEdit +@onready var _normalmap_flip_checkbox : CheckBox = $Import/HS/VB2/HB/Normal/NormalMapFlipY var _texture_set : HTerrainTextureSet var _undo_redo : UndoRedo @@ -98,9 +97,8 @@ class HT_TextureSetImportEditorSlot: # Array of HT_TextureSetImportEditorSlot var _slots_data = [] -var _import_settings = { +var _import_settings := { "mipmaps": true, - "filter": true, "compression": COMPRESS_VRAM, "resolution": 512 } @@ -121,8 +119,8 @@ func _ready(): var ed = _texture_editors[src_type] var typename = HTerrainTextureSet.get_source_texture_type_name(src_type) ed.set_label(typename.capitalize()) - ed.connect("load_pressed", self, "_on_texture_load_pressed", [src_type]) - ed.connect("clear_pressed", self, "_on_texture_clear_pressed", [src_type]) + ed.load_pressed.connect(_on_texture_load_pressed.bind(src_type)) + ed.clear_pressed.connect(_on_texture_clear_pressed.bind(src_type)) for import_mode in HTerrainTextureSet.MODE_COUNT: var n = HTerrainTextureSet.get_import_mode_name(import_mode) @@ -139,28 +137,28 @@ func _ready(): func setup_dialogs(parent: Node): var d = HT_EditorUtil.create_open_image_dialog() - d.connect("file_selected", self, "_on_LoadTextureDialog_file_selected") + d.file_selected.connect(_on_LoadTextureDialog_file_selected) _load_texture_dialog = d parent.add_child(d) d = AcceptDialog.new() - d.window_title = "Import error" + d.title = "Import error" _error_popup = d parent.add_child(_error_popup) d = AcceptDialog.new() - d.window_title = "Info" + d.title = "Info" _info_popup = d parent.add_child(_info_popup) d = ConfirmationDialog.new() - d.connect("confirmed", self, "_on_delete_confirmation_popup_confirmed") + d.confirmed.connect(_on_delete_confirmation_popup_confirmed) _delete_confirmation_popup = d parent.add_child(_delete_confirmation_popup) d = HT_EditorUtil.create_open_dir_dialog() - d.window_title = "Choose import directory" - d.connect("dir_selected", self, "_on_OpenDirDialog_dir_selected") + d.title = "Choose import directory" + d.dir_selected.connect(_on_OpenDirDialog_dir_selected) _open_dir_dialog = d parent.add_child(_open_dir_dialog) @@ -272,23 +270,24 @@ func set_texture_set(texture_set: HTerrainTextureSet): func _parse_json_file(fpath: String) -> Dictionary: - var f := File.new() - var err := f.open(fpath, File.READ) + var f := FileAccess.open(fpath, File.READ) + var err := FileAccess.get_open_error() if err != OK: _logger.error("Could not load {0}: {1}".format([fpath, HT_Errors.get_message(err)])) return {} var json_text := f.get_as_text() - var json_result := JSON.parse(json_text) - if json_result.error != OK: - _logger.error("Failed to parse {0}: {1}".format([fpath, json_result.error_string])) + var json := JSON.new() + var json_err := json.parse(json_text) + if json_err != OK: + _logger.error("Failed to parse {0}: {1}".format([fpath, json.get_error_message()])) return {} - return json_result.result + return json.data func _update_ui_from_data(): - var prev_selected_items = _slots_list.get_selected_items() + var prev_selected_items := _slots_list.get_selected_items() _slots_list.clear() @@ -297,7 +296,6 @@ func _update_ui_from_data(): _resolution_spinbox.value = _import_settings.resolution _mipmaps_checkbox.pressed = _import_settings.mipmaps - _filter_checkbox.pressed = _import_settings.filter _set_selected_id(_compression_selector, _import_settings.compression) _set_selected_id(_import_mode_selector, _import_mode) @@ -320,8 +318,8 @@ func _update_ui_from_data(): _set_ui_slot_texture_from_path("", type) var max_slots := HTerrainTextureSet.get_max_slots_for_mode(_import_mode) - _add_slot_button.disabled = len(_slots_data) >= max_slots - _remove_slot_button.disabled = len(_slots_data) == 0 + _add_slot_button.disabled = (len(_slots_data) >= max_slots) + _remove_slot_button.disabled = (len(_slots_data) == 0) static func _set_selected_id(ob: OptionButton, id: int): @@ -343,7 +341,7 @@ func _select_slot(slot_index: int): _slots_list.select(slot_index) _normalmap_flip_checkbox.pressed = slot.flip_normalmap_y - _normalmap_material.set_shader_param("u_flip_y", slot.flip_normalmap_y) + _normalmap_material.set_shader_parameter("u_flip_y", slot.flip_normalmap_y) func _set_ui_slot_texture_from_path(im_path: String, type: int): @@ -354,18 +352,19 @@ func _set_ui_slot_texture_from_path(im_path: String, type: int): ed.set_texture_tooltip("") return - var im := Image.new() + var im : Image if im_path.begins_with("#") and im_path.find(".") == -1: # The path is actually a preset for a uniform color. # This is a feature of packed texture descriptor files. # Make a small placeholder image. var color := Color(im_path) - im.create(4, 4, false, Image.FORMAT_BPTC_RGBA) + im = Image.create(4, 4, false, Image.FORMAT_RGBA8) im.fill(color) else: # Regular path + im = Image.new() var err := im.load(im_path) if err != OK: _logger.error(str("Unable to load image from ", im_path)) @@ -422,7 +421,7 @@ func _smart_pick_files(albedo_fpath: String): for albedo_word in albedo_words: var i = albedo_fname_lower.find(albedo_word, 0) if i != -1: - fname_pattern = albedo_fname.left(i) + "{0}" + albedo_fname.right(i + len(albedo_word)) + fname_pattern = albedo_fname.substr(0, i) + "{0}" + albedo_fname.substr(i + len(albedo_word)) break if fname_pattern == "": @@ -457,7 +456,7 @@ func _smart_pick_files(albedo_fpath: String): # TODO We should probably ignore extensions? if fname.to_lower() == expected_fname.to_lower(): - var fpath = dirpath.plus_file(fname) + var fpath = dirpath.path_join(fname) _set_source_image(fpath, type) found = true break @@ -467,14 +466,17 @@ func _smart_pick_files(albedo_fpath: String): static func _get_files_in_directory(dirpath: String, logger) -> Array: - var dir := Directory.new() - var err := dir.open(dirpath) + var dir := DirAccess.open(dirpath) + var err := DirAccess.get_open_error() if err != OK: logger.error("Could not open directory {0}: {1}" \ .format([dirpath, HT_Errors.get_message(err)])) return [] - err = dir.list_dir_begin(true, true) + dir.include_hidden = false + dir.include_navigational = false + + err = dir.list_dir_begin() if err != OK: logger.error("Could not probe directory {0}: {1}" \ .format([dirpath, HT_Errors.get_message(err)])) @@ -534,7 +536,7 @@ func _on_RemoveSlotButton_pressed(): if _slots_list.get_item_count() == 0: return var selected_item = _slots_list.get_selected_items()[0] - _delete_confirmation_popup.window_title = "Delete slot {0}".format([selected_item]) + _delete_confirmation_popup.title = "Delete slot {0}".format([selected_item]) _delete_confirmation_popup.dialog_text = "Delete import slot {0}?".format([selected_item]) _delete_confirmation_popup.popup_centered() @@ -545,10 +547,6 @@ func _on_delete_confirmation_popup_confirmed(): _update_ui_from_data() -func _on_FilterCheckBox_toggled(button_pressed: bool): - _set_import_property("filter", button_pressed) - - func _on_CancelButton_pressed(): hide() @@ -574,7 +572,7 @@ func _on_NormalMapFlipY_toggled(button_pressed: bool): var slot_index : int = _slots_list.get_selected_items()[0] var slot : HT_TextureSetImportEditorSlot = _slots_data[slot_index] slot.flip_normalmap_y = button_pressed - _normalmap_material.set_shader_param("u_flip_y", slot.flip_normalmap_y) + _normalmap_material.set_shader_parameter("u_flip_y", slot.flip_normalmap_y) # class ButtonDisabler: @@ -608,40 +606,39 @@ func _on_ImportButton_pressed(): if not files_data_result.success: _show_error(files_data_result.get_message()) - return + return var files_data : Array = files_data_result.value if len(files_data) == 0: _show_error("There are no files to save.\nYou must setup at least one slot of textures.") return - var dir := Directory.new() for fd in files_data: var dir_path : String = fd.path.get_base_dir() - if not dir.dir_exists(dir_path): + if not DirAccess.dir_exists_absolute(dir_path): _show_error("The directory {0} could not be found.".format([dir_path])) return for fd in files_data: - var json := JSON.print(fd.data, "\t", true) + var json := JSON.stringify(fd.data, "\t", true) if json == "": _show_error("A problem occurred while serializing data for {0}".format([fd.path])) return - var f := File.new() - var err := f.open(fd.path, File.WRITE) + var f := FileAccess.open(fd.path, File.WRITE) + var err := FileAccess.get_open_error() if err != OK: _show_error("Could not write file {0}: {1}".format([fd.path])) return f.store_string(json) - f.close() + f = null if _WRITE_IMPORT_FILES: var import_fpath = fd.path + ".import" if not HT_Util.write_import_file(fd.import_data, import_fpath, _logger): _show_error("Failed to write file {0}: {1}".format([import_fpath])) - return + return if _editor_file_system == null: _show_error("EditorFileSystem is not setup, can't trigger import system.") @@ -669,7 +666,7 @@ func _on_ImportButton_pressed(): _editor_file_system.scan() while _editor_file_system.is_scanning(): _logger.debug("Waiting for scan to complete...") - yield(get_tree(), "idle_frame") + await get_tree().process_frame if not is_inside_tree(): # oops? return @@ -677,7 +674,7 @@ func _on_ImportButton_pressed(): # Looks like import takes place AFTER scanning, so let's yield some more... for fd in len(files_data) * 2: _logger.debug("Yielding some more") - yield(get_tree(), "idle_frame") + await get_tree().process_frame var failed_resource_paths := [] @@ -704,7 +701,7 @@ func _on_ImportButton_pressed(): fd["texture_array"] = texture_array if len(failed_resource_paths) > 0: - var failed_list = PoolStringArray(failed_resource_paths).join("\n") + var failed_list = PackedStringArray(failed_resource_paths).join("\n") _show_error("Some resources failed to load:\n" + failed_list) else: @@ -741,7 +738,7 @@ func _on_ImportButton_pressed(): _info_popup.dialog_text = "Importing complete!" _info_popup.popup_centered() - emit_signal("import_finished") + import_finished.emit() func _generate_packed_textures_files_data(import_dir: String, prefix: String) -> HT_Result: @@ -791,7 +788,7 @@ func _generate_packed_textures_files_data(import_dir: String, prefix: String) -> json_data.src["normalmap_flip_y"] = true var type_name := HTerrainTextureSet.get_texture_type_name(type) - var fpath = import_dir.plus_file( + var fpath = import_dir.path_join( str(prefix, "slot", slot_index, "_", type_name, ".packed_tex")) files.append({ @@ -801,6 +798,8 @@ func _generate_packed_textures_files_data(import_dir: String, prefix: String) -> "data": json_data, # This is for .import files + # TODO There is similar stuff in HTerrainData, we should make a common utility, + # because this had to be reverse-engineered and it's not fun "import_data": { "remap": { "importer": HT_PackedTextureImporter.IMPORTER_NAME, @@ -811,9 +810,7 @@ func _generate_packed_textures_files_data(import_dir: String, prefix: String) -> }, "params": { "compress/mode": importer_compress_mode, - "flags/mipmaps": _import_settings.mipmaps, - "flags/filter": _import_settings.filter, - "flags/repeat": HT_StreamTextureImporter.REPEAT_ENABLED + "mipmaps/limit": -1 if _import_settings.mipmaps else 0 } } }) @@ -885,7 +882,7 @@ func _generate_save_packed_texture_arrays_files_data( json_data["layers"] = layers_data var type_name := HTerrainTextureSet.get_texture_type_name(type) - var fpath := import_dir.plus_file(str(prefix, type_name, ".packed_texarr")) + var fpath := import_dir.path_join(str(prefix, type_name, ".packed_texarr")) files.append({ "type": type, @@ -903,9 +900,7 @@ func _generate_save_packed_texture_arrays_files_data( }, "params": { "compress/mode": importer_compress_mode, - "flags/mipmaps": _import_settings.mipmaps, - "flags/filter": _import_settings.filter, - "flags/repeat": HT_TextureLayeredImporter.REPEAT_ENABLED + "mipmaps/limit": -1 if _import_settings.mipmaps else 0 } } }) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd b/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd index 1e53244f..f331458d 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const HTerrain = preload("../../hterrain.gd") @@ -12,8 +12,8 @@ signal texture_selected(index) signal edit_pressed(index) signal import_pressed -onready var _textures_list: HT_TextureList = $TextureList -onready var _buttons_container = $HBoxContainer +@onready var _textures_list: HT_TextureList = $TextureList +@onready var _buttons_container : HBoxContainer = $HBoxContainer var _terrain : HTerrain = null var _texture_set : HTerrainTextureSet = null @@ -53,12 +53,12 @@ func _process(delta: float): if _texture_set != texture_set: if _texture_set != null: - _texture_set.disconnect("changed", self, "_on_texture_set_changed") + _texture_set.changed.disconnect(_on_texture_set_changed) _texture_set = texture_set if _texture_set != null: - _texture_set.connect("changed", self, "_on_texture_set_changed") + _texture_set.changed.connect(_on_texture_set_changed) _update_texture_list() @@ -116,19 +116,19 @@ static func _get_slot_hint_name(i: int, stype: String) -> String: func _on_TextureList_item_selected(index: int): - emit_signal("texture_selected", index) + texture_selected.emit(index) func _on_TextureList_item_activated(index: int): - emit_signal("edit_pressed", index) + edit_pressed.emit(index) func _on_EditButton_pressed(): var selected_slot := _textures_list.get_selected_item() if selected_slot == -1: selected_slot = 0 - emit_signal("edit_pressed", selected_slot) + edit_pressed.emit(selected_slot) func _on_ImportButton_pressed(): - emit_signal("import_pressed") + import_pressed.emit() diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list.gd b/addons/zylann.hterrain/tools/texture_editor/texture_list.gd index d7ac816a..5eddd854 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list.gd @@ -5,7 +5,7 @@ # and items cannot have individual shaders. # I could create new textures just for that but it would be expensive. -tool +@tool extends ScrollContainer const HT_TextureListItemScene = preload("./texture_list_item.tscn") @@ -14,7 +14,7 @@ const HT_TextureListItem = preload("./texture_list_item.gd") signal item_selected(index) signal item_activated(index) -onready var _container = $Container +@onready var _container : Container = $Container var _selected_item := -1 @@ -66,11 +66,11 @@ func _on_item_selected(item: HT_TextureListItem): var child = _container.get_child(i) if child is HT_TextureListItem and child != item: child.set_selected(false, false) - emit_signal("item_selected", _selected_item) + item_selected.emit(_selected_item) func _on_item_activated(item: HT_TextureListItem): - emit_signal("item_activated", item.get_index()) + item_activated.emit(item.get_index()) func _draw(): diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd index f4a25287..ed5cd6db 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd @@ -1,4 +1,4 @@ -tool +@tool extends PanelContainer # Had to use PanelContainer, because due to variable font sizes in the editor, # the contents of the VBoxContainer can vary in size, and so in height. @@ -11,8 +11,8 @@ const HT_ColorSliceShader = preload("./display_color_slice.shader") #const HT_DummyTexture = preload("../icons/empty.png") const DUMMY_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/empty.png" -onready var _texture_rect = $VB/TextureRect -onready var _label = $VB/Label +@onready var _texture_rect = $VB/TextureRect +@onready var _label = $VB/Label var _selected := false @@ -29,8 +29,8 @@ func set_texture(texture: Resource, texture_layer: int): mat = ShaderMaterial.new() mat.shader = HT_ColorSliceShader _texture_rect.material = mat - mat.set_shader_param("u_texture_array", texture) - mat.set_shader_param("u_index", texture_layer) + mat.set_shader_parameter("u_texture_array", texture) + mat.set_shader_parameter("u_index", texture_layer) _texture_rect.texture = load(DUMMY_TEXTURE_PATH) else: _texture_rect.texture = texture @@ -40,10 +40,10 @@ func set_texture(texture: Resource, texture_layer: int): func _gui_input(event: InputEvent): if event is InputEventMouseButton: if event.pressed: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: grab_focus() set_selected(true, true) - if event.doubleclick: + if event.double_click: # Don't do this at home. # I do it here because this script is very related to its container anyways. get_parent().get_parent()._on_item_activated(self) @@ -53,7 +53,7 @@ func set_selected(selected: bool, notify: bool): if selected == _selected: return _selected = selected - update() + queue_redraw() if _selected: _label.modulate = Color(0,0,0) else: @@ -65,7 +65,7 @@ func set_selected(selected: bool, notify: bool): func _draw(): var color : Color if _selected: - color = get_color("accent_color", "Editor") + color = get_theme_color("accent_color", "Editor") else: color = Color(0.0, 0.0, 0.0, 0.5) # Draw background diff --git a/addons/zylann.hterrain/tools/util/dialog_fitter.gd b/addons/zylann.hterrain/tools/util/dialog_fitter.gd index d3e77b54..e1aeffd8 100644 --- a/addons/zylann.hterrain/tools/util/dialog_fitter.gd +++ b/addons/zylann.hterrain/tools/util/dialog_fitter.gd @@ -5,7 +5,7 @@ # This script adjusts the size of the parent WindowDialog based on the first Container it finds # when the node becomes visible. -tool +@tool # Needs to be a Control, otherwise we don't receive the notification... extends Control @@ -31,7 +31,7 @@ func _fit_to_contents(): var margin : Vector2 = child.get_rect().position #print("Fitting ", dialog.get_path(), " from ", dialog.rect_size, # " to ", child_rect.size + margin * 2.0) - dialog.rect_min_size = child_rect.size + margin * 2.0 + dialog.custom_minimum_size = child_rect.size + margin * 2.0 #func _process(delta): diff --git a/addons/zylann.hterrain/tools/util/editor_util.gd b/addons/zylann.hterrain/tools/util/editor_util.gd index 1c6528e0..f40df5a6 100644 --- a/addons/zylann.hterrain/tools/util/editor_util.gd +++ b/addons/zylann.hterrain/tools/util/editor_util.gd @@ -2,45 +2,14 @@ # Editor-specific utilities. # This script cannot be loaded in an exported game. -tool - -# TODO There is no script API to access editor scale -# Ported from https://github.com/godotengine/godot/blob/ -# 5fede4a81c67961c6fb2309b9b0ceb753d143566/editor/editor_node.cpp#L5515-L5554 -static func get_dpi_scale(editor_settings: EditorSettings) -> float: - var display_scale = editor_settings.get("interface/editor/display_scale") - var custom_display_scale = editor_settings.get("interface/editor/custom_display_scale") - var edscale := 0.0 - - match display_scale: - 0: - # Try applying a suitable display scale automatically - var screen = OS.current_screen - var large = OS.get_screen_dpi(screen) >= 192 and OS.get_screen_size(screen).x > 2000 - edscale = 2.0 if large else 1.0 - 1: - edscale = 0.75 - 2: - edscale = 1.0 - 3: - edscale = 1.25 - 4: - edscale = 1.5 - 5: - edscale = 1.75 - 6: - edscale = 2.0 - _: - edscale = custom_display_scale - - return edscale +@tool # This is normally an `EditorFileDialog`. I can't type-hint this one properly, # because when I test UI in isolation, I can't use `EditorFileDialog`. static func create_open_file_dialog() -> ConfirmationDialog: var d - if Engine.editor_hint: + if Engine.is_editor_hint(): d = EditorFileDialog.new() d.mode = EditorFileDialog.MODE_OPEN_FILE d.access = EditorFileDialog.ACCESS_RESOURCES @@ -55,7 +24,7 @@ static func create_open_file_dialog() -> ConfirmationDialog: static func create_open_dir_dialog() -> ConfirmationDialog: var d - if Engine.editor_hint: + if Engine.is_editor_hint(): d = EditorFileDialog.new() d.mode = EditorFileDialog.MODE_OPEN_DIR d.access = EditorFileDialog.ACCESS_RESOURCES @@ -98,13 +67,17 @@ static func _add_image_filters(file_dialog): static func _add_texture_filters(file_dialog): _add_image_filters(file_dialog) - file_dialog.add_filter("*.stex ; StreamTexture files") + # Godot + file_dialog.add_filter("*.ctex ; CompressedTexture files") + # Packed textures file_dialog.add_filter("*.packed_tex ; HTerrainPackedTexture files") static func _add_texture_array_filters(file_dialog): _add_image_filters(file_dialog) - file_dialog.add_filter("*.texarr ; TextureArray files") + # Godot + file_dialog.add_filter("*.ctexarray ; TextureArray files") + # Packed textures file_dialog.add_filter("*.packed_texarr ; HTerrainPackedTextureArray files") @@ -122,7 +95,6 @@ static func load_texture(path: String, logger) -> Texture: if err != OK: logger.error(str("Failed to load image ", path)) return null - var itex := ImageTexture.new() - itex.create_from_image(im, Texture.FLAG_FILTER) + var itex := ImageTexture.create_from_image(im) return itex diff --git a/addons/zylann.hterrain/tools/util/interval_slider.gd b/addons/zylann.hterrain/tools/util/interval_slider.gd index 5e77cfee..8b4e2aff 100644 --- a/addons/zylann.hterrain/tools/util/interval_slider.gd +++ b/addons/zylann.hterrain/tools/util/interval_slider.gd @@ -1,7 +1,7 @@ # Slider with two handles representing an interval. -tool +@tool extends Control const VALUE_LOW = 0 @@ -22,12 +22,12 @@ func _get_property_list(): return [ { "name": "min_value", - "type": TYPE_REAL, + "type": TYPE_FLOAT, "usage": PROPERTY_USAGE_EDITOR }, { "name": "max_value", - "type": TYPE_REAL, + "type": TYPE_FLOAT, "usage": PROPERTY_USAGE_EDITOR }, { @@ -83,12 +83,12 @@ func set_value(i: int, v: float, notify_change: bool): _: assert(false) - v = clamp(v, min_value, max_value) + v = clampf(v, min_value, max_value) if v != _values[i]: _values[i] = v - update() + queue_redraw() if notify_change: - emit_signal("changed") + changed.emit() func get_value(i: int) -> float: @@ -126,8 +126,8 @@ func _value_to_ratio(v: float) -> float: func _get_closest_index(ratio: float) -> int: - var distance_low := abs(ratio - get_low_ratio()) - var distance_high := abs(ratio - get_high_ratio()) + var distance_low := absf(ratio - get_low_ratio()) + var distance_high := absf(ratio - get_high_ratio()) if distance_low < distance_high: return VALUE_LOW return VALUE_HIGH @@ -140,14 +140,14 @@ func _set_from_pixel(px: float): set_value(i, v, true) -func _gui_input(event): +func _gui_input(event: InputEvent): if event is InputEventMouseButton: if event.pressed: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: _grabbing = true _set_from_pixel(event.position.x) else: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: _grabbing = false elif event is InputEventMouseMotion: diff --git a/addons/zylann.hterrain/tools/util/result.gd b/addons/zylann.hterrain/tools/util/result.gd index c76a6688..5e897f11 100644 --- a/addons/zylann.hterrain/tools/util/result.gd +++ b/addons/zylann.hterrain/tools/util/result.gd @@ -3,7 +3,7 @@ # instead of forgetting them to the console or having the script break on an assertion. # This is a C-like way of things, where the result can bubble, and does not require globals. -tool +@tool # Replace `success` with `error : int`? var success := false diff --git a/addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd b/addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd index abf7ae10..242fe6e6 100644 --- a/addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd +++ b/addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd @@ -1,9 +1,9 @@ -tool +@tool extends RichTextLabel -func _ready(): - connect("meta_clicked", self, "_on_meta_clicked") +func _init(): + meta_clicked.connect(_on_meta_clicked) func _on_meta_clicked(meta): diff --git a/addons/zylann.hterrain/tools/util/spin_slider.gd b/addons/zylann.hterrain/tools/util/spin_slider.gd index ea444f6a..2d798c87 100644 --- a/addons/zylann.hterrain/tools/util/spin_slider.gd +++ b/addons/zylann.hterrain/tools/util/spin_slider.gd @@ -1,4 +1,4 @@ -tool +@tool extends Control const FG_MARGIN = 2 @@ -6,18 +6,81 @@ const MAX_DECIMALS_VISUAL = 3 signal value_changed(value) -export var _value := 0.0 setget set_value_no_notify -export var _min_value := 0.0 setget set_min_value -export var _max_value := 100.0 setget set_max_value -export var _prefix := "" setget set_prefix -export var _suffix := "" setget set_suffix -export var _rounded := false setget set_rounded -export var _centered := true setget set_centered -export var _allow_greater := false setget set_allow_greater + +var _value := 0.0 +@export var value: float: + get: + return _value + set(v): + set_value_no_notify(v) + + +var _min_value := 0.0 +@export var min_value: float: + get: + return _min_value + set(v): + set_min_value(v) + + +var _max_value := 100.0 +@export var max_value: float: + get: + return _max_value + set(v): + set_max_value(v) + + +var _prefix := "" +@export var prefix: String: + get: + return _prefix + set(v): + set_prefix(v) + + +var _suffix := "" +@export var suffix: String: + get: + return _suffix + set(v): + set_suffix(v) + + +var _rounded := false +@export var rounded: bool: + get: + return _rounded + set(v): + set_rounded(v) + + +var _centered := true +@export var centered: bool: + get: + return _centered + set: + set_centered(v) + + +var _allow_greater := false +@export var allow_greater: bool: + get: + return _allow_greater + set(v): + set_allow_greater(v) + + # There is still a limit when typing a larger value, but this one is to prevent software # crashes or freezes. The regular min and max values are for slider UX. Exceeding it should be # a corner case. -export var _greater_max_value := 10000.0 setget set_greater_max_value +var _greater_max_value := 10000.0 +@export var greater_max_value: float: + get: + return _greater_max_value + set(v): + set_greater_max_value(v) + var _label : Label var _label2 : Label @@ -29,11 +92,11 @@ var _press_pos := Vector2() func _init(): - rect_min_size = Vector2(32, 28) + custom_minimum_size = Vector2(32, 28) _label = Label.new() - _label.align = Label.ALIGN_CENTER - _label.valign = Label.VALIGN_CENTER + _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + _label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER _label.clip_text = true #_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL _label.anchor_top = 0 @@ -41,37 +104,37 @@ func _init(): _label.anchor_right = 1 _label.anchor_bottom = 1 _label.mouse_filter = Control.MOUSE_FILTER_IGNORE - _label.add_color_override("font_color_shadow", Color(0,0,0,0.5)) - _label.add_constant_override("shadow_offset_x", 1) - _label.add_constant_override("shadow_offset_y", 1) + _label.add_theme_color_override("font_color_shadow", Color(0,0,0,0.5)) + _label.add_theme_constant_override("shadow_offset_x", 1) + _label.add_theme_constant_override("shadow_offset_y", 1) add_child(_label) _label2 = Label.new() - _label2.align = Label.ALIGN_LEFT - _label2.valign = Label.VALIGN_CENTER + _label2.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT + _label2.vertical_alignment = VERTICAL_ALIGNMENT_CENTER _label2.clip_text = true #_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL _label2.anchor_top = 0 _label2.anchor_left = 0 _label2.anchor_right = 1 _label2.anchor_bottom = 1 - _label2.margin_left = 8 + _label2.offset_left = 8 _label2.mouse_filter = Control.MOUSE_FILTER_IGNORE - _label2.add_color_override("font_color_shadow", Color(0,0,0,0.5)) - _label2.add_constant_override("shadow_offset_x", 1) - _label2.add_constant_override("shadow_offset_y", 1) + _label2.add_theme_color_override("font_color_shadow", Color(0,0,0,0.5)) + _label2.add_theme_constant_override("shadow_offset_x", 1) + _label2.add_theme_constant_override("shadow_offset_y", 1) _label2.hide() add_child(_label2) _line_edit = LineEdit.new() - _line_edit.align = LineEdit.ALIGN_CENTER + _line_edit.alignment = HORIZONTAL_ALIGNMENT_CENTER _line_edit.anchor_top = 0 _line_edit.anchor_left = 0 _line_edit.anchor_right = 1 _line_edit.anchor_bottom = 1 - _line_edit.connect("gui_input", self, "_on_LineEdit_gui_input") - _line_edit.connect("focus_exited", self, "_on_LineEdit_focus_exited") - _line_edit.connect("text_entered", self, "_on_LineEdit_text_entered") + _line_edit.gui_input.connect(_on_LineEdit_gui_input) + _line_edit.focus_exited.connect(_on_LineEdit_focus_exited) + _line_edit.text_entered.connect(_on_LineEdit_text_entered) _line_edit.hide() add_child(_line_edit) @@ -82,15 +145,15 @@ func _ready(): pass # Replace with function body. -func set_centered(centered: bool): - _centered = centered +func set_centered(p_centered: bool): + _centered = p_centered if _centered: - _label.align = Label.ALIGN_CENTER - _label.margin_right = 0 + _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + _label.offset_right = 0 _label2.hide() else: - _label.align = Label.ALIGN_RIGHT - _label.margin_right = -8 + _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT + _label.offset_right = -8 _label2.show() update() @@ -105,28 +168,28 @@ func set_value_no_notify(v: float): func set_value(v: float, notify_change: bool, use_slider_maximum: bool = false): if _allow_greater and not use_slider_maximum: - v = clamp(v, _min_value, _greater_max_value) + v = clampf(v, _min_value, _greater_max_value) else: - v = clamp(v, _min_value, _max_value) + v = clampf(v, _min_value, _max_value) if v != _value: _value = v - update() + queue_redraw() if notify_change: - emit_signal("value_changed", get_value()) + value_changed.emit(get_value()) func get_value(): if _rounded: - return int(round(_value)) + return int(roundf(_value)) return _value func set_min_value(minv: float): _min_value = minv - #update() + #queue_redraw() func get_min_value() -> float: @@ -135,7 +198,7 @@ func get_min_value() -> float: func set_max_value(maxv: float): _max_value = maxv - #update() + #queue_redraw() func get_max_value() -> float: @@ -152,25 +215,25 @@ func get_greater_max_value() -> float: func set_rounded(b: bool): _rounded = b - update() + queue_redraw() func is_rounded() -> bool: return _rounded -func set_prefix(prefix: String): - _prefix = prefix - update() +func set_prefix(p_prefix: String): + _prefix = p_prefix + queue_redraw() func get_prefix() -> String: return _prefix -func set_suffix(suffix: String): - _suffix = suffix - update() +func set_suffix(p_suffix: String): + _suffix = p_suffix + queue_redraw() func get_suffix() -> String: @@ -205,10 +268,10 @@ func _value_to_ratio(v: float) -> float: return (v - _min_value) / (_max_value - _min_value) -func _on_LineEdit_gui_input(event): +func _on_LineEdit_gui_input(event: InputEvent): if event is InputEventKey: if event.pressed: - if event.scancode == KEY_ESCAPE: + if event.keycode == KEY_ESCAPE: _ignore_line_edit = true _hide_line_edit() grab_focus() @@ -230,7 +293,7 @@ func _enter_text(): if s.is_valid_float(): var v = s.to_float() if not _allow_greater: - v = min(v, _max_value) + v = minf(v, _max_value) set_value(v, true, false) _hide_line_edit() @@ -238,7 +301,7 @@ func _enter_text(): func _hide_line_edit(): _line_edit.hide() _label.show() - update() + queue_redraw() func _show_line_edit(): @@ -247,24 +310,24 @@ func _show_line_edit(): _line_edit.select_all() _line_edit.grab_focus() _label.hide() - update() + queue_redraw() -func _gui_input(event): +func _gui_input(event: InputEvent): if event is InputEventMouseButton: if event.pressed: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: _press_pos = event.position _pressing = true else: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: _pressing = false if _grabbing: _grabbing = false _set_from_pixel(event.position.x) else: _show_line_edit() - + elif event is InputEventMouseMotion: if _pressing and _press_pos.distance_to(event.position) > 2.0: _grabbing = true @@ -294,7 +357,7 @@ func _draw(): var fg_rect := control_rect.grow(-foreground_margin) # Clamping the ratio because the value can be allowed to exceed the slider's boundaries - var ratio := clamp(get_ratio(), 0.0, 1.0) + var ratio := clampf(get_ratio(), 0.0, 1.0) fg_rect.size.x *= ratio draw_rect(fg_rect, interval_color) diff --git a/addons/zylann.hterrain/util/direct_mesh_instance.gd b/addons/zylann.hterrain/util/direct_mesh_instance.gd index 62395d82..adb7eead 100644 --- a/addons/zylann.hterrain/util/direct_mesh_instance.gd +++ b/addons/zylann.hterrain/util/direct_mesh_instance.gd @@ -1,4 +1,4 @@ -tool +@tool # Implementation of MeshInstance which doesn't use the scene tree @@ -8,58 +8,58 @@ var _mesh = null func _init(): - var vs = VisualServer - _mesh_instance = vs.instance_create() - vs.instance_set_visible(_mesh_instance, true) + var rs = RenderingServer + _mesh_instance = rs.instance_create() + rs.instance_set_visible(_mesh_instance, true) -func _notification(p_what): +func _notification(p_what: int): if p_what == NOTIFICATION_PREDELETE: if _mesh_instance != RID(): - VisualServer.free_rid(_mesh_instance) + RenderingServer.free_rid(_mesh_instance) _mesh_instance = RID() -func enter_world(world): +func enter_world(world: World3D): assert(_mesh_instance != RID()) - VisualServer.instance_set_scenario(_mesh_instance, world.get_scenario()) + RenderingServer.instance_set_scenario(_mesh_instance, world.get_scenario()) func exit_world(): assert(_mesh_instance != RID()) - VisualServer.instance_set_scenario(_mesh_instance, RID()) + RenderingServer.instance_set_scenario(_mesh_instance, RID()) -func set_world(world): +func set_world(world: World3D): if world != null: enter_world(world) else: exit_world() -func set_transform(world_transform): +func set_transform(world_transform: Transform3D): assert(_mesh_instance != RID()) - VisualServer.instance_set_transform(_mesh_instance, world_transform) + RenderingServer.instance_set_transform(_mesh_instance, world_transform) -func set_mesh(mesh): +func set_mesh(mesh: Mesh): assert(_mesh_instance != RID()) - VisualServer.instance_set_base(_mesh_instance, mesh.get_rid() if mesh != null else RID()) + RenderingServer.instance_set_base(_mesh_instance, mesh.get_rid() if mesh != null else RID()) _mesh = mesh -func set_material(material): +func set_material(material: Material): assert(_mesh_instance != RID()) - VisualServer.instance_geometry_set_material_override( \ + RenderingServer.instance_geometry_set_material_override( \ _mesh_instance, material.get_rid() if material != null else RID()) -func set_visible(visible): +func set_visible(visible: bool): assert(_mesh_instance != RID()) - VisualServer.instance_set_visible(_mesh_instance, visible) + RenderingServer.instance_set_visible(_mesh_instance, visible) -func set_aabb(aabb): +func set_aabb(aabb: AABB): assert(_mesh_instance != RID()) - VisualServer.instance_set_custom_aabb(_mesh_instance, aabb) + RenderingServer.instance_set_custom_aabb(_mesh_instance, aabb) diff --git a/addons/zylann.hterrain/util/direct_multimesh_instance.gd b/addons/zylann.hterrain/util/direct_multimesh_instance.gd index 55b9b551..dbb899b9 100644 --- a/addons/zylann.hterrain/util/direct_multimesh_instance.gd +++ b/addons/zylann.hterrain/util/direct_multimesh_instance.gd @@ -1,3 +1,4 @@ +@tool # Implementation of MultiMeshInstance which doesn't use the scene tree @@ -5,43 +6,43 @@ var _multimesh_instance := RID() func _init(): - _multimesh_instance = VisualServer.instance_create() + _multimesh_instance = RenderingServer.instance_create() func _notification(what: int): if what == NOTIFICATION_PREDELETE: - VisualServer.free_rid(_multimesh_instance) + RenderingServer.free_rid(_multimesh_instance) -func set_world(world: World): - VisualServer.instance_set_scenario( +func set_world(world: World3D): + RenderingServer.instance_set_scenario( _multimesh_instance, world.get_scenario() if world != null else RID()) func set_visible(visible: bool): - VisualServer.instance_set_visible(_multimesh_instance, visible) + RenderingServer.instance_set_visible(_multimesh_instance, visible) -func set_transform(trans: Transform): - VisualServer.instance_set_transform(_multimesh_instance, trans) +func set_transform(trans: Transform3D): + RenderingServer.instance_set_transform(_multimesh_instance, trans) func set_multimesh(mm: MultiMesh): - VisualServer.instance_set_base(_multimesh_instance, mm.get_rid() if mm != null else RID()) + RenderingServer.instance_set_base(_multimesh_instance, mm.get_rid() if mm != null else RID()) func set_material_override(material: Material): - VisualServer.instance_geometry_set_material_override( \ + RenderingServer.instance_geometry_set_material_override( \ _multimesh_instance, material.get_rid() if material != null else RID()) func set_aabb(aabb: AABB): - VisualServer.instance_set_custom_aabb(_multimesh_instance, aabb) + RenderingServer.instance_set_custom_aabb(_multimesh_instance, aabb) func set_layer_mask(mask: int): - VisualServer.instance_set_layer_mask(_multimesh_instance, mask) + RenderingServer.instance_set_layer_mask(_multimesh_instance, mask) func set_cast_shadow(cast_shadow: int): - VisualServer.instance_geometry_set_cast_shadows_setting(_multimesh_instance, cast_shadow) + RenderingServer.instance_geometry_set_cast_shadows_setting(_multimesh_instance, cast_shadow) diff --git a/addons/zylann.hterrain/util/errors.gd b/addons/zylann.hterrain/util/errors.gd index 344d4cda..9595479c 100644 --- a/addons/zylann.hterrain/util/errors.gd +++ b/addons/zylann.hterrain/util/errors.gd @@ -1,4 +1,4 @@ -tool +@tool # Taken from https://docs.godotengine.org/en/3.0/classes/class_@globalscope.html#enum-globalscope-error const _names = { @@ -23,12 +23,15 @@ const _names = { ERR_FILE_EOF: "File End of file (EOF) error", ERR_CANT_OPEN: "Can't open error", ERR_CANT_CREATE: "Can't create error", - ERR_PARSE_ERROR: "Parse error", ERR_QUERY_FAILED: "Query failed error", ERR_ALREADY_IN_USE: "Already in use error", ERR_LOCKED: "Locked error", ERR_TIMEOUT: "Timeout error", + ERR_CANT_CONNECT: "Can't connect", + ERR_CANT_RESOLVE: "Can't resolve", + ERR_CONNECTION_ERROR: "Connection error", ERR_CANT_ACQUIRE_RESOURCE: "Can't acquire resource error", + ERR_CANT_FORK: "Can't fork", ERR_INVALID_DATA: "Invalid data error", ERR_INVALID_PARAMETER: "Invalid parameter error", ERR_ALREADY_EXISTS: "Already exists error", @@ -40,9 +43,14 @@ const _names = { ERR_LINK_FAILED: "Linking failed error", ERR_SCRIPT_FAILED: "Script failed error", ERR_CYCLIC_LINK: "Cycling link (import cycle) error", + ERR_INVALID_DECLARATION: "Invalid declaration", + ERR_DUPLICATE_SYMBOL: "Duplicate symbol", + ERR_PARSE_ERROR: "Parse error", ERR_BUSY: "Busy error", + ERR_SKIP: "Skip error", ERR_HELP: "Help error", - ERR_BUG: "Bug error" + ERR_BUG: "Bug error", + ERR_PRINTER_ON_FIRE: "The printer is on fire" } static func get_message(err_code): diff --git a/addons/zylann.hterrain/util/grid.gd b/addons/zylann.hterrain/util/grid.gd index 41a168fa..ed62485b 100644 --- a/addons/zylann.hterrain/util/grid.gd +++ b/addons/zylann.hterrain/util/grid.gd @@ -1,6 +1,6 @@ # Note: `tool` is optional but without it there are no error reporting in the editor -tool +@tool # TODO Remove grid_ prefixes, context is already given by the script itself @@ -16,7 +16,7 @@ static func up_div(a, b): # if v is provided, all cells will contain the same value. # if v is a funcref, it will be executed to fill the grid cell per cell. static func create_grid(w, h, v=null): - var is_create_func = typeof(v) == TYPE_OBJECT and v is FuncRef + var is_create_func = typeof(v) == TYPE_CALLABLE var grid = [] grid.resize(h) for y in range(grid.size()): @@ -24,7 +24,7 @@ static func create_grid(w, h, v=null): row.resize(w) if is_create_func: for x in range(row.size()): - row[x] = v.call_func(x,y) + row[x] = v.call(x, y) else: for x in range(row.size()): row[x] = v @@ -53,9 +53,10 @@ static func resize_grid(grid, new_width, new_height, create_func=null, delete_fu assert(new_width >= 0 and new_height >= 0) assert(grid != null) if delete_func != null: - assert(typeof(delete_func) == TYPE_OBJECT and delete_func is FuncRef) - var is_create_func = typeof(create_func) == TYPE_OBJECT and create_func is FuncRef - + assert(typeof(delete_func) == TYPE_CALLABLE) + # `create_func` can also be a default value + var is_create_func = typeof(create_func) == TYPE_CALLABLE + # Get old size (supposed to be rectangular!) var old_height = grid.size() var old_width = 0 @@ -67,29 +68,29 @@ static func resize_grid(grid, new_width, new_height, create_func=null, delete_fu if delete_func != null: for y in range(new_height, grid.size()): var row = grid[y] - for x in range(0, row.size()): + for x in len(row): var elem = row[x] - delete_func.call_func(elem) + delete_func.call(elem) grid.resize(new_height) # Delete old columns if new_width < old_width: - for y in range(0, grid.size()): + for y in len(grid): var row = grid[y] if delete_func != null: for x in range(new_width, row.size()): var elem = row[x] - delete_func.call_func(elem) + delete_func.call(elem) row.resize(new_width) # Create new columns if new_width > old_width: - for y in range(0, grid.size()): + for y in len(grid): var row = grid[y] row.resize(new_width) if is_create_func: for x in range(old_width, new_width): - row[x] = create_func.call_func(x,y) + row[x] = create_func.call(x,y) else: for x in range(old_width, new_width): row[x] = create_func @@ -102,16 +103,16 @@ static func resize_grid(grid, new_width, new_height, create_func=null, delete_fu row.resize(new_width) grid[y] = row if is_create_func: - for x in range(0, new_width): - row[x] = create_func.call_func(x,y) + for x in new_width: + row[x] = create_func.call(x,y) else: - for x in range(0, new_width): + for x in new_width: row[x] = create_func # Debug test check assert(grid.size() == new_height) - for y in range(0, grid.size()): - assert(grid[y].size() == new_width) + for y in len(grid): + assert(len(grid[y]) == new_width) # Retrieves the minimum and maximum values from a grid @@ -120,9 +121,9 @@ static func grid_min_max(grid): return [0,0] var vmin = grid[0][0] var vmax = vmin - for y in range(0, grid.size()): + for y in len(grid): var row = grid[y] - for x in range(0, row.size()): + for x in len(row): var v = row[x] if v > vmax: vmax = v @@ -134,10 +135,10 @@ static func grid_min_max(grid): # Copies a sub-region of a grid as a new grid. No boundary check! static func grid_extract_area(src_grid, x0, y0, w, h): var dst = create_grid(w, h) - for y in range(0, h): + for y in h: var dst_row = dst[y] var src_row = src_grid[y0+y] - for x in range(0, w): + for x in w: dst_row[x] = src_row[x0+x] return dst @@ -182,12 +183,12 @@ static func grid_paste(src_grid, dst_grid, x0, y0): static func grid_equals(a, b): if a.size() != b.size(): return false - for y in range(0, a.size()): + for y in a.size(): var a_row = a[y] var b_row = b[y] if a_row.size() != b_row.size(): return false - for x in range(0, b_row.size()): + for x in b_row.size(): if a_row[x] != b_row[x]: return false return true diff --git a/addons/zylann.hterrain/util/image_file_cache.gd b/addons/zylann.hterrain/util/image_file_cache.gd index b7062284..2f56166a 100644 --- a/addons/zylann.hterrain/util/image_file_cache.gd +++ b/addons/zylann.hterrain/util/image_file_cache.gd @@ -1,3 +1,4 @@ +@tool # Used to store temporary images on disk. # This is useful for undo/redo as image edition can quickly fill up memory. @@ -36,12 +37,10 @@ func _init(cache_dir: String): for i in 16: _session_id += str(rng.randi() % 10) _logger.debug(str("Image cache session ID: ", _session_id)) - var dir := Directory.new() - if not dir.dir_exists(_cache_dir): - var err = dir.make_dir(_cache_dir) + if not DirAccess.dir_exists_absolute(_cache_dir): + var err = DirAccess.make_dir_absolute(_cache_dir) if err != OK: - _logger.error("Could not create directory {0}, error {1}" \ - .format([_cache_dir, err])) + _logger.error("Could not create directory {0}, error {1}".format([_cache_dir, err])) _save_thread_running = true _saving_thread.start(self, "_save_thread_func") @@ -58,16 +57,15 @@ func _notification(what: int): func _create_new_cache_file(fpath: String): - var f := File.new() - var err := f.open(fpath, File.WRITE) - if err != OK: + var f := FileAccess.open(fpath, File.WRITE) + if f == null: + var err = FileAccess.get_open_error() _logger.error("Failed to create new cache file {0}, error {1}".format([fpath, err])) return - f.close() func _get_current_cache_file_name() -> String: - return _cache_dir.plus_file(str(_session_id, "_", _current_cache_file_index, ".cache")) + return _cache_dir.path_join(str(_session_id, "_", _current_cache_file_index, ".cache")) func save_image(im: Image) -> int: @@ -114,23 +112,22 @@ static func _get_image_data_size(im: Image) -> int: return 1 + 4 + 4 + 4 + len(im.get_data()) -static func _write_image(f: File, im: Image): +static func _write_image(f: FileAccess, im: Image): f.store_8(im.get_format()) f.store_32(im.get_width()) f.store_32(im.get_height()) - var data := im.get_data() + var data : PackedByteArray = im.get_data() f.store_32(len(data)) f.store_buffer(data) -static func _read_image(f: File) -> Image: +static func _read_image(f: FileAccess) -> Image: var format := f.get_8() var width := f.get_32() var height := f.get_32() var data_size := f.get_32() var data := f.get_buffer(data_size) - var im = Image.new() - im.create_from_data(width, height, false, format, data) + var im = Image.create_from_data(width, height, false, format, data) return im @@ -138,29 +135,29 @@ func load_image(id: int) -> Image: var info := _cache_image_info[id] as Dictionary var timeout = 5.0 - var time_before = OS.get_ticks_msec() + var time_before = Time.get_ticks_msec() # We could just grab `image`, because the thread only reads it. # However it's still not safe to do that if we write or even lock it, # so we have to assume it still has ownership of it. while not info.saved: OS.delay_msec(8.0) _logger.debug("Waiting for cached image {0}...".format([id])) - if OS.get_ticks_msec() - time_before > timeout: + if Time.get_ticks_msec() - time_before > timeout: _logger.error("Could not get image {0} from cache. Something went wrong.".format([id])) return null var fpath := info.path as String - var f := File.new() - var err = f.open(fpath, File.READ) - if err != OK: + var f = FileAccess.open(fpath, File.READ) + if f == null: + var err = FileAccess.get_open_error() _logger.error("Could not load cached image from {0}, error {1}" \ .format([fpath, err])) return null f.seek(info.data_offset) var im = _read_image(f) - f.close() + f = null # close file assert(im != null) return im @@ -169,14 +166,17 @@ func load_image(id: int) -> Image: func clear(): _logger.debug("Clearing image cache") - var dir := Directory.new() - var err := dir.open(_cache_dir) - if err != OK: + var dir := DirAccess.open(_cache_dir) + if dir == null: + #var err = DirAccess.get_open_error() _logger.error("Could not open image file cache directory '{0}'" \ .format([_cache_dir])) return - err = dir.list_dir_begin(true, true) + dir.include_hidden = false + dir.include_navigational = false + + var err = dir.list_dir_begin() if err != OK: _logger.error("Could not start list_dir_begin in '{0}'".format([_cache_dir])) return @@ -191,7 +191,7 @@ func clear(): err = dir.remove(fpath) if err != OK: _logger.error("Failed to delete cache file '{0}'" \ - .format([_cache_dir.plus_file(fpath)])) + .format([_cache_dir.path_join(fpath)])) _cache_image_info.clear() @@ -216,21 +216,24 @@ func _save_thread_func(_unused_userdata): _save_semaphore.wait() continue - var f := File.new() + var f : FileAccess var path := "" for item in to_save: # Keep re-using the same file if we did not change path. # It makes I/Os faster. if item.path != path: - path = item.path - if f.is_open(): - f.close() - var err := f.open(path, File.READ_WRITE) - if err != OK: + f = null + path = "" + + f = FileAccess.open(path, File.READ_WRITE) + if f == null: + var err = FileAccess.get_open_error() call_deferred("_on_error", "Could not open file {0}, error {1}" \ .format([path, err])) continue + + path = item.path f.seek(item.data_offset) _write_image(f, item.image) diff --git a/addons/zylann.hterrain/util/logger.gd b/addons/zylann.hterrain/util/logger.gd index 94c239d5..de0c2aea 100644 --- a/addons/zylann.hterrain/util/logger.gd +++ b/addons/zylann.hterrain/util/logger.gd @@ -1,3 +1,4 @@ +@tool class HT_LoggerBase: var _context := "" diff --git a/addons/zylann.hterrain/util/util.gd b/addons/zylann.hterrain/util/util.gd index eb9c2588..8f2754a7 100644 --- a/addons/zylann.hterrain/util/util.gd +++ b/addons/zylann.hterrain/util/util.gd @@ -1,4 +1,4 @@ -tool +@tool const HT_Errors = preload("./errors.gd") @@ -15,41 +15,9 @@ static func next_power_of_two(x: int) -> int: return x -# Godot doesn't expose Vector2i, and Vector2 has float limitations -#static func encode_v2i(x: int, y: int): -# return (x & 0xffff) | ((y << 16) & 0xffff0000) - - -# Godot doesn't expose Vector2i, and Vector2 has float limitations -#static func decode_v2i(k: int) -> Array: -# return [ -# k & 0xffff, -# (k >> 16) & 0xffff -# ] - - -# `min` turns numbers into float -static func min_int(a: int, b: int) -> int: - return a if a < b else b - - -# `max` turns numbers into float -static func max_int(a: int, b: int) -> int: - return a if a > b else b - - -# `clamp` turns numbers into float -static func clamp_int(x: int, a: int, b: int) -> int: - if x < a: - return a - if x > b: - return b - return x - - # CubeMesh doesn't have a wireframe option static func create_wirecube_mesh(color = Color(1,1,1)) -> Mesh: - var positions := PoolVector3Array([ + var positions := PackedVector3Array([ Vector3(0, 0, 0), Vector3(1, 0, 0), Vector3(1, 0, 1), @@ -59,11 +27,11 @@ static func create_wirecube_mesh(color = Color(1,1,1)) -> Mesh: Vector3(1, 1, 1), Vector3(0, 1, 1), ]) - var colors := PoolColorArray([ + var colors := PackedColorArray([ color, color, color, color, color, color, color, color, ]) - var indices := PoolIntArray([ + var indices := PackedInt32Array([ 0, 1, 1, 2, 2, 3, @@ -91,7 +59,7 @@ static func create_wirecube_mesh(color = Color(1,1,1)) -> Mesh: static func integer_square_root(x: int) -> int: assert(typeof(x) == TYPE_INT) - var r = int(round(sqrt(x))) + var r = int(roundf(sqrt(x))) if r * r == x: return r # Does not exist @@ -158,8 +126,7 @@ static func get_cropped_image(src: Image, width: int, height: int, height = int(height) if width == src.get_width() and height == src.get_height(): return src - var im = Image.new() - im.create(width, height, false, src.get_format()) + var im = Image.create(width, height, false, src.get_format()) if fill_color != null: im.fill(fill_color) var p = get_cropped_image_params( @@ -170,7 +137,7 @@ static func get_cropped_image(src: Image, width: int, height: int, static func get_cropped_image_params(src_w: int, src_h: int, dst_w: int, dst_h: int, anchor: Vector2) -> Dictionary: - + var rel_anchor := (anchor + Vector2(1, 1)) / 2.0 var dst_x := (dst_w - src_w) * rel_anchor.x @@ -196,8 +163,8 @@ static func get_cropped_image_params(src_w: int, src_h: int, dst_w: int, dst_h: src_h = dst_h - dst_y return { - "src_rect": Rect2(src_x, src_y, src_w, src_h), - "dst_pos": Vector2(dst_x, dst_y) + "src_rect": Rect2i(src_x, src_y, src_w, src_h), + "dst_pos": Vector2i(dst_x, dst_y) } # TODO Workaround for https://github.com/godotengine/godot/issues/24488 @@ -239,18 +206,18 @@ static func apply_dpi_scale(root: Control, dpi_scale: float): while len(to_process) > 0: var node : Node = to_process[-1] to_process.pop_back() - if node is Viewport: + if node is Viewport or node is SubViewport: continue if node is Control: - if node.rect_min_size != Vector2(0, 0): - node.rect_min_size *= dpi_scale + if node.custom_minimum_size != Vector2(0, 0): + node.custom_minimum_size = node.custom_minimum_size * dpi_scale var parent = node.get_parent() if parent != null: if not (parent is Container): - node.margin_bottom *= dpi_scale - node.margin_left *= dpi_scale - node.margin_top *= dpi_scale - node.margin_right *= dpi_scale + node.offset_bottom *= dpi_scale + node.offset_left *= dpi_scale + node.offset_top *= dpi_scale + node.offset_right *= dpi_scale for i in node.get_child_count(): to_process.append(node.get_child(i)) @@ -336,7 +303,7 @@ class HT_GridRaytraceResult2D: # btHeightfieldTerrainShape.cpp#L418 # static func grid_raytrace_2d(ray_origin: Vector2, ray_direction: Vector2, - quad_predicate: FuncRef, max_distance: float) -> HT_GridRaytraceResult2D: + quad_predicate: Callable, max_distance: float) -> HT_GridRaytraceResult2D: if max_distance < 0.0001: # Consider the ray is too small to hit anything @@ -358,11 +325,11 @@ static func grid_raytrace_2d(ray_origin: Vector2, ray_direction: Vector2, var param_delta_x := infinite if xi_step != 0: - param_delta_x = 1.0 / abs(ray_direction.x) + param_delta_x = 1.0 / absf(ray_direction.x) var param_delta_y := infinite if yi_step != 0: - param_delta_y = 1.0 / abs(ray_direction.y) + param_delta_y = 1.0 / absf(ray_direction.y) # pos = param * dir # At which value of `param` we will cross a x-axis lane? @@ -374,9 +341,9 @@ static func grid_raytrace_2d(ray_origin: Vector2, ray_direction: Vector2, # X initialization if xi_step != 0: if xi_step == 1: - param_cross_x = (ceil(ray_origin.x) - ray_origin.x) * param_delta_x + param_cross_x = (ceilf(ray_origin.x) - ray_origin.x) * param_delta_x else: - param_cross_x = (ray_origin.x - floor(ray_origin.x)) * param_delta_x + param_cross_x = (ray_origin.x - floorf(ray_origin.x)) * param_delta_x else: # Will never cross on X param_cross_x = infinite @@ -384,15 +351,15 @@ static func grid_raytrace_2d(ray_origin: Vector2, ray_direction: Vector2, # Y initialization if yi_step != 0: if yi_step == 1: - param_cross_y = (ceil(ray_origin.y) - ray_origin.y) * param_delta_y + param_cross_y = (ceilf(ray_origin.y) - ray_origin.y) * param_delta_y else: - param_cross_y = (ray_origin.y - floor(ray_origin.y)) * param_delta_y + param_cross_y = (ray_origin.y - floorf(ray_origin.y)) * param_delta_y else: # Will never cross on Y param_cross_y = infinite - var x := int(floor(ray_origin.x)) - var y := int(floor(ray_origin.y)) + var x := int(floorf(ray_origin.x)) + var y := int(floorf(ray_origin.y)) # Workaround cases where the ray starts at an integer position if param_cross_x == 0.0: @@ -434,7 +401,7 @@ static func grid_raytrace_2d(ray_origin: Vector2, ray_direction: Vector2, if param > max_distance: param = max_distance # quad coordinates, enter param, exit/end param - if quad_predicate.call_func(prev_x, prev_y, prev_param, param): + if quad_predicate.call(prev_x, prev_y, prev_param, param): var res := HT_GridRaytraceResult2D.new() res.hit_cell_pos = Vector2(x, y) res.prev_cell_pos = Vector2(prev_x, prev_y) @@ -442,7 +409,7 @@ static func grid_raytrace_2d(ray_origin: Vector2, ray_direction: Vector2, else: break - elif quad_predicate.call_func(prev_x, prev_y, prev_param, param): + elif quad_predicate.call(prev_x, prev_y, prev_param, param): var res := HT_GridRaytraceResult2D.new() res.hit_cell_pos = Vector2(x, y) res.prev_cell_pos = Vector2(prev_x, prev_y) @@ -469,10 +436,10 @@ static func get_segment_clipped_by_rect(rect: Rect2, var c := Vector2(rect.position.x, rect.end.y) var d := rect.end - var ab = Geometry.segment_intersects_segment_2d(segment_begin, segment_end, a, b) - var cd = Geometry.segment_intersects_segment_2d(segment_begin, segment_end, c, d) - var ac = Geometry.segment_intersects_segment_2d(segment_begin, segment_end, a, c) - var bd = Geometry.segment_intersects_segment_2d(segment_begin, segment_end, b, d) + var ab = Geometry2D.segment_intersects_segment(segment_begin, segment_end, a, b) + var cd = Geometry2D.segment_intersects_segment(segment_begin, segment_end, c, d) + var ac = Geometry2D.segment_intersects_segment(segment_begin, segment_end, a, c) + var bd = Geometry2D.segment_intersects_segment(segment_begin, segment_end, b, d) var hits = [] if ab != null: @@ -506,36 +473,26 @@ static func get_segment_clipped_by_rect(rect: Rect2, static func get_pixel_clamped(im: Image, x: int, y: int) -> Color: - if x < 0: - x = 0 - elif x >= im.get_width(): - x = im.get_width() - 1 - - if y < 0: - y = 0 - elif y >= im.get_height(): - y = im.get_height() - 1 - + x = clampi(x, 0, im.get_width() - 1) + y = clampi(y, 0, im.get_height() - 1) return im.get_pixel(x, y) static func update_configuration_warning(node: Node, recursive: bool): - if not Engine.editor_hint: + if not Engine.is_editor_hint(): return - # Godot 3.1 and older doesn't have this function - if node.has_method("update_configuration_warning"): - node.call("update_configuration_warning") - if recursive: - for i in node.get_child_count(): - var child = node.get_child(i) - update_configuration_warning(child, true) + node.update_configuration_warnings() + if recursive: + for i in node.get_child_count(): + var child = node.get_child(i) + update_configuration_warning(child, true) static func write_import_file(settings: Dictionary, imp_fpath: String, logger) -> bool: # TODO Should use ConfigFile instead - var f := File.new() - var err := f.open(imp_fpath, File.WRITE) - if err != OK: + var f := FileAccess.open(imp_fpath, File.WRITE) + if f == null: + var err = FileAccess.get_open_error() logger.error("Could not open '{0}' for write, error {1}" \ .format([imp_fpath, HT_Errors.get_message(err)])) return false @@ -557,5 +514,4 @@ static func write_import_file(settings: Dictionary, imp_fpath: String, logger) - f.store_line(str(key, "=", sv)) f.store_line("") - f.close() return true diff --git a/addons/zylann.hterrain/util/xyz_format.gd b/addons/zylann.hterrain/util/xyz_format.gd index 78f7e2e0..d912aa20 100644 --- a/addons/zylann.hterrain/util/xyz_format.gd +++ b/addons/zylann.hterrain/util/xyz_format.gd @@ -1,4 +1,4 @@ -tool +@tool # XYZ files are text files containing a list of 3D points. # They can be found in GIS software as an export format for heightmaps. @@ -25,7 +25,7 @@ class HT_XYZBounds: # Despite that, I still use it here because it doesn't seem to cause issues and is faster. # If it becomes an issue, we'll have to switch to `split` and casting to `float`. -static func load_bounds(f: File) -> HT_XYZBounds: +static func load_bounds(f: FileAccess) -> HT_XYZBounds: # It is faster to get line and split floats than using CSV functions var line := f.get_line() var floats = line.split_floats(" ") @@ -54,11 +54,11 @@ static func load_bounds(f: File) -> HT_XYZBounds: var pos_x = floats[0] var pos_y = floats[1] - min_pos_x = min(min_pos_x, pos_x) - min_pos_y = min(min_pos_y, pos_y) + min_pos_x = minf(min_pos_x, pos_x) + min_pos_y = minf(min_pos_y, pos_y) - max_pos_x = max(max_pos_x, pos_x) - max_pos_y = max(max_pos_y, pos_y) + max_pos_x = maxf(max_pos_x, pos_x) + max_pos_y = maxf(max_pos_y, pos_y) line_count += 1 @@ -76,7 +76,7 @@ static func load_bounds(f: File) -> HT_XYZBounds: # Loads points into an image with existing dimensions and format. # `f` must be positionned at the beginning of the series of points. # If `bounds` is `null`, it will be computed. -static func load_heightmap(f: File, dst_image: Image, bounds: HT_XYZBounds): +static func load_heightmap(f: FileAccess, dst_image: Image, bounds: HT_XYZBounds): # We are not going to read the entire file directly in memory, because it can be really big. # Instead we'll parse it directly and the only thing we retain in memory is the heightmap. # This can be really slow on big files. If we can assume the file is square and points @@ -94,8 +94,6 @@ static func load_heightmap(f: File, dst_image: Image, bounds: HT_XYZBounds): var min_pos_y := bounds.min_y var line_count := bounds.line_count - dst_image.lock() - for i in line_count: var line := f.get_line() var floats := line.split_floats(" ") @@ -108,6 +106,4 @@ static func load_heightmap(f: File, dst_image: Image, bounds: HT_XYZBounds): # `Rect2i` would be better but is only available in Godot 4. if x >= 0 and y >= 0 and x < dst_image.get_width() and y < dst_image.get_height(): dst_image.set_pixel(x, y, Color(floats[2], 0, 0)) - - dst_image.unlock() From c34dbb16c9241647119853f0c26bac714beb2b40 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 18 Mar 2023 02:35:49 +0000 Subject: [PATCH 03/94] Forgot file in last commit --- addons/zylann.hterrain/shaders/simple4_global.shader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/shaders/simple4_global.shader b/addons/zylann.hterrain/shaders/simple4_global.shader index ad1c728e..e6d43abd 100644 --- a/addons/zylann.hterrain/shaders/simple4_global.shader +++ b/addons/zylann.hterrain/shaders/simple4_global.shader @@ -35,7 +35,7 @@ vec4 get_depth_blended_weights(vec4 splat, vec4 bumps) { } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = wpos.xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) From fc58a83ced3baa3cf0926e9c2af06fc8ab39a298 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 18 Mar 2023 17:58:08 +0000 Subject: [PATCH 04/94] The import folder was renamed in Godot 4 --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b2f04edd..2781a4df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Godot-specific ignores -.import/ +.godot/ export.cfg export_presets.cfg From 18a58fd14314c490784104fea511050e1d280020 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 18 Mar 2023 17:59:19 +0000 Subject: [PATCH 05/94] Shaders must now have the .gdshader extension --- addons/zylann.hterrain/shaders/{array.shader => array.gdshader} | 0 .../shaders/{array_global.shader => array_global.gdshader} | 0 addons/zylann.hterrain/shaders/{detail.shader => detail.gdshader} | 0 .../zylann.hterrain/shaders/{lookdev.shader => lookdev.gdshader} | 0 .../shaders/{low_poly.shader => low_poly.gdshader} | 0 .../shaders/{multisplat16.shader => multisplat16.gdshader} | 0 .../{multisplat16_global.shader => multisplat16_global.gdshader} | 0 .../{multisplat16_lite.shader => multisplat16_lite.gdshader} | 0 .../zylann.hterrain/shaders/{simple4.shader => simple4.gdshader} | 0 .../shaders/{simple4_global.shader => simple4_global.gdshader} | 0 .../shaders/{simple4_lite.shader => simple4_lite.gdshader} | 0 .../tools/brush/shaders/{alpha.shader => alpha.gdshader} | 0 .../tools/brush/shaders/{color.shader => color.gdshader} | 0 .../tools/brush/shaders/{erode.shader => erode.gdshader} | 0 .../tools/brush/shaders/{flatten.shader => flatten.gdshader} | 0 .../tools/brush/shaders/{level.shader => level.gdshader} | 0 .../tools/brush/shaders/{raise.shader => raise.gdshader} | 0 .../tools/brush/shaders/{smooth.shader => smooth.gdshader} | 0 .../tools/brush/shaders/{splat16.shader => splat16.gdshader} | 0 .../tools/brush/shaders/{splat4.shader => splat4.gdshader} | 0 .../shaders/{splat_indexed.shader => splat_indexed.gdshader} | 0 .../shaders/{bump2normal.shader => bump2normal.gdshader} | 0 .../tools/generator/shaders/{erode.shader => erode.gdshader} | 0 .../shaders/{perlin_noise.shader => perlin_noise.gdshader} | 0 24 files changed, 0 insertions(+), 0 deletions(-) rename addons/zylann.hterrain/shaders/{array.shader => array.gdshader} (100%) rename addons/zylann.hterrain/shaders/{array_global.shader => array_global.gdshader} (100%) rename addons/zylann.hterrain/shaders/{detail.shader => detail.gdshader} (100%) rename addons/zylann.hterrain/shaders/{lookdev.shader => lookdev.gdshader} (100%) rename addons/zylann.hterrain/shaders/{low_poly.shader => low_poly.gdshader} (100%) rename addons/zylann.hterrain/shaders/{multisplat16.shader => multisplat16.gdshader} (100%) rename addons/zylann.hterrain/shaders/{multisplat16_global.shader => multisplat16_global.gdshader} (100%) rename addons/zylann.hterrain/shaders/{multisplat16_lite.shader => multisplat16_lite.gdshader} (100%) rename addons/zylann.hterrain/shaders/{simple4.shader => simple4.gdshader} (100%) rename addons/zylann.hterrain/shaders/{simple4_global.shader => simple4_global.gdshader} (100%) rename addons/zylann.hterrain/shaders/{simple4_lite.shader => simple4_lite.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{alpha.shader => alpha.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{color.shader => color.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{erode.shader => erode.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{flatten.shader => flatten.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{level.shader => level.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{raise.shader => raise.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{smooth.shader => smooth.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{splat16.shader => splat16.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{splat4.shader => splat4.gdshader} (100%) rename addons/zylann.hterrain/tools/brush/shaders/{splat_indexed.shader => splat_indexed.gdshader} (100%) rename addons/zylann.hterrain/tools/generator/shaders/{bump2normal.shader => bump2normal.gdshader} (100%) rename addons/zylann.hterrain/tools/generator/shaders/{erode.shader => erode.gdshader} (100%) rename addons/zylann.hterrain/tools/generator/shaders/{perlin_noise.shader => perlin_noise.gdshader} (100%) diff --git a/addons/zylann.hterrain/shaders/array.shader b/addons/zylann.hterrain/shaders/array.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/array.shader rename to addons/zylann.hterrain/shaders/array.gdshader diff --git a/addons/zylann.hterrain/shaders/array_global.shader b/addons/zylann.hterrain/shaders/array_global.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/array_global.shader rename to addons/zylann.hterrain/shaders/array_global.gdshader diff --git a/addons/zylann.hterrain/shaders/detail.shader b/addons/zylann.hterrain/shaders/detail.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/detail.shader rename to addons/zylann.hterrain/shaders/detail.gdshader diff --git a/addons/zylann.hterrain/shaders/lookdev.shader b/addons/zylann.hterrain/shaders/lookdev.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/lookdev.shader rename to addons/zylann.hterrain/shaders/lookdev.gdshader diff --git a/addons/zylann.hterrain/shaders/low_poly.shader b/addons/zylann.hterrain/shaders/low_poly.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/low_poly.shader rename to addons/zylann.hterrain/shaders/low_poly.gdshader diff --git a/addons/zylann.hterrain/shaders/multisplat16.shader b/addons/zylann.hterrain/shaders/multisplat16.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/multisplat16.shader rename to addons/zylann.hterrain/shaders/multisplat16.gdshader diff --git a/addons/zylann.hterrain/shaders/multisplat16_global.shader b/addons/zylann.hterrain/shaders/multisplat16_global.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/multisplat16_global.shader rename to addons/zylann.hterrain/shaders/multisplat16_global.gdshader diff --git a/addons/zylann.hterrain/shaders/multisplat16_lite.shader b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/multisplat16_lite.shader rename to addons/zylann.hterrain/shaders/multisplat16_lite.gdshader diff --git a/addons/zylann.hterrain/shaders/simple4.shader b/addons/zylann.hterrain/shaders/simple4.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/simple4.shader rename to addons/zylann.hterrain/shaders/simple4.gdshader diff --git a/addons/zylann.hterrain/shaders/simple4_global.shader b/addons/zylann.hterrain/shaders/simple4_global.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/simple4_global.shader rename to addons/zylann.hterrain/shaders/simple4_global.gdshader diff --git a/addons/zylann.hterrain/shaders/simple4_lite.shader b/addons/zylann.hterrain/shaders/simple4_lite.gdshader similarity index 100% rename from addons/zylann.hterrain/shaders/simple4_lite.shader rename to addons/zylann.hterrain/shaders/simple4_lite.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/alpha.shader b/addons/zylann.hterrain/tools/brush/shaders/alpha.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/alpha.shader rename to addons/zylann.hterrain/tools/brush/shaders/alpha.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/color.shader b/addons/zylann.hterrain/tools/brush/shaders/color.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/color.shader rename to addons/zylann.hterrain/tools/brush/shaders/color.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/erode.shader b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/erode.shader rename to addons/zylann.hterrain/tools/brush/shaders/erode.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/flatten.shader b/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/flatten.shader rename to addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/level.shader b/addons/zylann.hterrain/tools/brush/shaders/level.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/level.shader rename to addons/zylann.hterrain/tools/brush/shaders/level.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/raise.shader b/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/raise.shader rename to addons/zylann.hterrain/tools/brush/shaders/raise.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/smooth.shader b/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/smooth.shader rename to addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat16.shader b/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/splat16.shader rename to addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat4.shader b/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/splat4.shader rename to addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat_indexed.shader b/addons/zylann.hterrain/tools/brush/shaders/splat_indexed.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/brush/shaders/splat_indexed.shader rename to addons/zylann.hterrain/tools/brush/shaders/splat_indexed.gdshader diff --git a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.shader b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/generator/shaders/bump2normal.shader rename to addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader diff --git a/addons/zylann.hterrain/tools/generator/shaders/erode.shader b/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/generator/shaders/erode.shader rename to addons/zylann.hterrain/tools/generator/shaders/erode.gdshader diff --git a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.shader b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/generator/shaders/perlin_noise.shader rename to addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader From 228fa64b562a5392543bfc35fa305ba08ab1bd98 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 18 Mar 2023 18:01:51 +0000 Subject: [PATCH 06/94] New project.godot format --- project.godot | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/project.godot b/project.godot index 2cc260ad..5c41d6ad 100644 --- a/project.godot +++ b/project.godot @@ -6,46 +6,38 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=4 - -_global_script_classes=[ { -"base": "ResourceFormatLoader", -"class": "HTerrainDataLoader", -"language": "GDScript", -"path": "res://addons/zylann.hterrain/hterrain_resource_loader.gd" -}, { -"base": "ResourceFormatSaver", -"class": "HTerrainDataSaver", -"language": "GDScript", -"path": "res://addons/zylann.hterrain/hterrain_resource_saver.gd" -} ] -_global_script_class_icons={ -"HTerrainDataLoader": "", -"HTerrainDataSaver": "" -} +config_version=5 [application] config/name="Heightmap Terrain" +config/features=PackedStringArray("4.0") name="Heightmap GDNative" icon="res://icon.png" -[display] +[debug] -stretch/mode="viewport" +settings/stdout/print_fps=true +gdscript/warnings/unused_variable=false -[editor_plugins] +[display] -enabled=PoolStringArray( "zylann.hterrain" ) +window/size/width=800 +window/vsync/use_vsync=false +stretch/mode="viewport" [gdnative] -singletons=[ ] +singletons=[] [memory] multithread/thread_rid_pool_prealloc=60 +[physics] + +common/physics_interpolation=true + [rendering] -viewport/default_clear_color=Color( 0.407806, 0.628906, 0.618542, 1 ) +viewport/default_clear_color=Color(0.407806, 0.628906, 0.618542, 1) From 080452fd6263d8e4822b2faa544c3c71cedc591d Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 18 Mar 2023 18:07:55 +0000 Subject: [PATCH 07/94] Import files changes --- .../models/grass_quad.obj.import | 15 ++++---- .../models/grass_quad_x2.obj.import | 15 ++++---- .../models/grass_quad_x3.obj.import | 15 ++++---- .../models/grass_quad_x4.obj.import | 15 ++++---- .../tools/brush/shapes/acrylic1.exr.import | 31 ++++++++------- .../tools/brush/shapes/round0.exr.import | 31 ++++++++------- .../tools/brush/shapes/round1.exr.import | 31 ++++++++------- .../tools/brush/shapes/round2.exr.import | 31 ++++++++------- .../tools/brush/shapes/round3.exr.import | 31 ++++++++------- .../tools/brush/shapes/smoke.exr.import | 31 ++++++++------- .../tools/brush/shapes/texture1.exr.import | 31 ++++++++------- .../tools/brush/shapes/thing.exr.import | 31 ++++++++------- .../tools/brush/shapes/vegetation1.exr.import | 31 ++++++++------- .../tools/icons/empty.png.import | 31 ++++++++------- .../tools/icons/icon_anchor_bottom.svg.import | 32 ++++++++-------- .../icons/icon_anchor_bottom_left.svg.import | 32 ++++++++-------- .../icons/icon_anchor_bottom_right.svg.import | 32 ++++++++-------- .../tools/icons/icon_anchor_center.svg.import | 32 ++++++++-------- .../tools/icons/icon_anchor_left.svg.import | 32 ++++++++-------- .../tools/icons/icon_anchor_right.svg.import | 32 ++++++++-------- .../tools/icons/icon_anchor_top.svg.import | 32 ++++++++-------- .../icons/icon_anchor_top_left.svg.import | 32 ++++++++-------- .../icons/icon_anchor_top_right.svg.import | 32 ++++++++-------- .../icons/icon_detail_layer_node.svg.import | 32 ++++++++-------- .../tools/icons/icon_grass.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_color.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_data.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_erode.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_flatten.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_level.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_lower.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_mask.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_node.svg.import | 32 ++++++++-------- .../icon_heightmap_node_large.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_paint.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_raise.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_smooth.svg.import | 32 ++++++++-------- .../icons/icon_heightmap_unmask.svg.import | 32 ++++++++-------- .../icons/icon_long_arrow_down.svg.import | 32 ++++++++-------- .../icons/icon_long_arrow_right.svg.import | 32 ++++++++-------- ...n_minimap_out_of_range_position.svg.import | 32 ++++++++-------- .../icons/icon_minimap_position.svg.import | 32 ++++++++-------- .../tools/icons/icon_small_circle.svg.import | 32 ++++++++-------- .../tools/icons/white.png.import | 31 ++++++++------- icon.png.import | 38 +++++++++---------- 45 files changed, 708 insertions(+), 659 deletions(-) diff --git a/addons/zylann.hterrain/models/grass_quad.obj.import b/addons/zylann.hterrain/models/grass_quad.obj.import index 5d4ebb5d..fe93f306 100644 --- a/addons/zylann.hterrain/models/grass_quad.obj.import +++ b/addons/zylann.hterrain/models/grass_quad.obj.import @@ -1,20 +1,21 @@ [remap] importer="wavefront_obj" +importer_version=1 type="Mesh" -path="res://.import/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh" +uid="uid://c1k6wgnjlvxpm" +path="res://.godot/imported/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh" [deps] -files=[ "res://.import/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh" ] +files=["res://.godot/imported/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh"] source_file="res://addons/zylann.hterrain/models/grass_quad.obj" -dest_files=[ "res://.import/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh", "res://.import/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh" ] +dest_files=["res://.godot/imported/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh", "res://.godot/imported/grass_quad.obj-da067750350fe98ec466261b2aeaf486.mesh"] [params] generate_tangents=true -scale_mesh=Vector3( 1, 1, 1 ) -offset_mesh=Vector3( 0, 0, 0 ) -octahedral_compression=true -optimize_mesh_flags=4286 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +optimize_mesh=true diff --git a/addons/zylann.hterrain/models/grass_quad_x2.obj.import b/addons/zylann.hterrain/models/grass_quad_x2.obj.import index 65be768e..926711a2 100644 --- a/addons/zylann.hterrain/models/grass_quad_x2.obj.import +++ b/addons/zylann.hterrain/models/grass_quad_x2.obj.import @@ -1,20 +1,21 @@ [remap] importer="wavefront_obj" +importer_version=1 type="Mesh" -path="res://.import/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh" +uid="uid://dpef2d0qcn5d4" +path="res://.godot/imported/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh" [deps] -files=[ "res://.import/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh" ] +files=["res://.godot/imported/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh"] source_file="res://addons/zylann.hterrain/models/grass_quad_x2.obj" -dest_files=[ "res://.import/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh", "res://.import/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh" ] +dest_files=["res://.godot/imported/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh", "res://.godot/imported/grass_quad_x2.obj-2054c140f543f2a80e2eb921f865ea49.mesh"] [params] generate_tangents=true -scale_mesh=Vector3( 1, 1, 1 ) -offset_mesh=Vector3( 0, 0, 0 ) -octahedral_compression=true -optimize_mesh_flags=4286 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +optimize_mesh=true diff --git a/addons/zylann.hterrain/models/grass_quad_x3.obj.import b/addons/zylann.hterrain/models/grass_quad_x3.obj.import index 3c6931cd..f358c1e2 100644 --- a/addons/zylann.hterrain/models/grass_quad_x3.obj.import +++ b/addons/zylann.hterrain/models/grass_quad_x3.obj.import @@ -1,20 +1,21 @@ [remap] importer="wavefront_obj" +importer_version=1 type="Mesh" -path="res://.import/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh" +uid="uid://bhjb8bijf1ql3" +path="res://.godot/imported/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh" [deps] -files=[ "res://.import/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh" ] +files=["res://.godot/imported/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh"] source_file="res://addons/zylann.hterrain/models/grass_quad_x3.obj" -dest_files=[ "res://.import/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh", "res://.import/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh" ] +dest_files=["res://.godot/imported/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh", "res://.godot/imported/grass_quad_x3.obj-8691724bc5006b6f65d4e8742ffc84dc.mesh"] [params] generate_tangents=true -scale_mesh=Vector3( 1, 1, 1 ) -offset_mesh=Vector3( 0, 0, 0 ) -octahedral_compression=true -optimize_mesh_flags=4286 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +optimize_mesh=true diff --git a/addons/zylann.hterrain/models/grass_quad_x4.obj.import b/addons/zylann.hterrain/models/grass_quad_x4.obj.import index b2009a0a..79a4caa7 100644 --- a/addons/zylann.hterrain/models/grass_quad_x4.obj.import +++ b/addons/zylann.hterrain/models/grass_quad_x4.obj.import @@ -1,20 +1,21 @@ [remap] importer="wavefront_obj" +importer_version=1 type="Mesh" -path="res://.import/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh" +uid="uid://cism8qe63t4tk" +path="res://.godot/imported/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh" [deps] -files=[ "res://.import/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh" ] +files=["res://.godot/imported/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh"] source_file="res://addons/zylann.hterrain/models/grass_quad_x4.obj" -dest_files=[ "res://.import/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh", "res://.import/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh" ] +dest_files=["res://.godot/imported/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh", "res://.godot/imported/grass_quad_x4.obj-c449a7d6c810ba1595ed30df9fbf3d28.mesh"] [params] generate_tangents=true -scale_mesh=Vector3( 1, 1, 1 ) -offset_mesh=Vector3( 0, 0, 0 ) -octahedral_compression=true -optimize_mesh_flags=4286 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +optimize_mesh=true diff --git a/addons/zylann.hterrain/tools/brush/shapes/acrylic1.exr.import b/addons/zylann.hterrain/tools/brush/shapes/acrylic1.exr.import index 0efe210a..c547891f 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/acrylic1.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/acrylic1.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/acrylic1.exr-8a4b622f104c607118d296791ee118f3.stex" +type="CompressedTexture2D" +uid="uid://cua2gxgj2pum5" +path="res://.godot/imported/acrylic1.exr-8a4b622f104c607118d296791ee118f3.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/acrylic1.exr" -dest_files=[ "res://.import/acrylic1.exr-8a4b622f104c607118d296791ee118f3.stex" ] +dest_files=["res://.godot/imported/acrylic1.exr-8a4b622f104c607118d296791ee118f3.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/round0.exr.import b/addons/zylann.hterrain/tools/brush/shapes/round0.exr.import index ff5ec6d8..6308ee64 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/round0.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/round0.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/round0.exr-fc6d691e8892911b1b4496769ee75dbb.stex" +type="CompressedTexture2D" +uid="uid://dekau2j7fx14d" +path="res://.godot/imported/round0.exr-fc6d691e8892911b1b4496769ee75dbb.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/round0.exr" -dest_files=[ "res://.import/round0.exr-fc6d691e8892911b1b4496769ee75dbb.stex" ] +dest_files=["res://.godot/imported/round0.exr-fc6d691e8892911b1b4496769ee75dbb.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/round1.exr.import b/addons/zylann.hterrain/tools/brush/shapes/round1.exr.import index f4e81529..e64db1ae 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/round1.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/round1.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/round1.exr-8050cfbed31968e6ce8bd055fbaa6897.stex" +type="CompressedTexture2D" +uid="uid://bbo5hotdg6mg7" +path="res://.godot/imported/round1.exr-8050cfbed31968e6ce8bd055fbaa6897.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/round1.exr" -dest_files=[ "res://.import/round1.exr-8050cfbed31968e6ce8bd055fbaa6897.stex" ] +dest_files=["res://.godot/imported/round1.exr-8050cfbed31968e6ce8bd055fbaa6897.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/round2.exr.import b/addons/zylann.hterrain/tools/brush/shapes/round2.exr.import index 8d0a9f95..6038a8e6 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/round2.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/round2.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/round2.exr-2a843db3bf131f2b2f5964ce65600f42.stex" +type="CompressedTexture2D" +uid="uid://tn1ww3c47pwy" +path="res://.godot/imported/round2.exr-2a843db3bf131f2b2f5964ce65600f42.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/round2.exr" -dest_files=[ "res://.import/round2.exr-2a843db3bf131f2b2f5964ce65600f42.stex" ] +dest_files=["res://.godot/imported/round2.exr-2a843db3bf131f2b2f5964ce65600f42.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/round3.exr.import b/addons/zylann.hterrain/tools/brush/shapes/round3.exr.import index 53e73fef..e8f2107b 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/round3.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/round3.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/round3.exr-77a9cdd9a592eb6010dc1db702d42c3a.stex" +type="CompressedTexture2D" +uid="uid://baim7e27k13r4" +path="res://.godot/imported/round3.exr-77a9cdd9a592eb6010dc1db702d42c3a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/round3.exr" -dest_files=[ "res://.import/round3.exr-77a9cdd9a592eb6010dc1db702d42c3a.stex" ] +dest_files=["res://.godot/imported/round3.exr-77a9cdd9a592eb6010dc1db702d42c3a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/smoke.exr.import b/addons/zylann.hterrain/tools/brush/shapes/smoke.exr.import index 415d961d..85151ffd 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/smoke.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/smoke.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/smoke.exr-0061a0a2acdf1ca295ec547e4b8c920d.stex" +type="CompressedTexture2D" +uid="uid://cl6pxk6wr4hem" +path="res://.godot/imported/smoke.exr-0061a0a2acdf1ca295ec547e4b8c920d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/smoke.exr" -dest_files=[ "res://.import/smoke.exr-0061a0a2acdf1ca295ec547e4b8c920d.stex" ] +dest_files=["res://.godot/imported/smoke.exr-0061a0a2acdf1ca295ec547e4b8c920d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/texture1.exr.import b/addons/zylann.hterrain/tools/brush/shapes/texture1.exr.import index cb6d4908..9226d03f 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/texture1.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/texture1.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/texture1.exr-0fac1840855f814972ea5666743101fc.stex" +type="CompressedTexture2D" +uid="uid://dqdkxiq52oo0j" +path="res://.godot/imported/texture1.exr-0fac1840855f814972ea5666743101fc.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/texture1.exr" -dest_files=[ "res://.import/texture1.exr-0fac1840855f814972ea5666743101fc.stex" ] +dest_files=["res://.godot/imported/texture1.exr-0fac1840855f814972ea5666743101fc.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/thing.exr.import b/addons/zylann.hterrain/tools/brush/shapes/thing.exr.import index 692a844c..90ba164a 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/thing.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/thing.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/thing.exr-8e88d861fe83e5e870fa01faee694c73.stex" +type="CompressedTexture2D" +uid="uid://blljfgdlwdae5" +path="res://.godot/imported/thing.exr-8e88d861fe83e5e870fa01faee694c73.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/thing.exr" -dest_files=[ "res://.import/thing.exr-8e88d861fe83e5e870fa01faee694c73.stex" ] +dest_files=["res://.godot/imported/thing.exr-8e88d861fe83e5e870fa01faee694c73.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/brush/shapes/vegetation1.exr.import b/addons/zylann.hterrain/tools/brush/shapes/vegetation1.exr.import index 315b2c8c..2a1c46a9 100644 --- a/addons/zylann.hterrain/tools/brush/shapes/vegetation1.exr.import +++ b/addons/zylann.hterrain/tools/brush/shapes/vegetation1.exr.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/vegetation1.exr-0573f4c73944e2dd8f3202b8930ac625.stex" +type="CompressedTexture2D" +uid="uid://ca5nk2h4ukm0g" +path="res://.godot/imported/vegetation1.exr-0573f4c73944e2dd8f3202b8930ac625.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/brush/shapes/vegetation1.exr" -dest_files=[ "res://.import/vegetation1.exr-0573f4c73944e2dd8f3202b8930ac625.stex" ] +dest_files=["res://.godot/imported/vegetation1.exr-0573f4c73944e2dd8f3202b8930ac625.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/icons/empty.png.import b/addons/zylann.hterrain/tools/icons/empty.png.import index a663cdac..267b65d5 100644 --- a/addons/zylann.hterrain/tools/icons/empty.png.import +++ b/addons/zylann.hterrain/tools/icons/empty.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/empty.png-31363f083c9c4e2e8e54cf64f3716737.stex" +type="CompressedTexture2D" +uid="uid://vo2brkj3udel" +path="res://.godot/imported/empty.png-31363f083c9c4e2e8e54cf64f3716737.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/empty.png" -dest_files=[ "res://.import/empty.png-31363f083c9c4e2e8e54cf64f3716737.stex" ] +dest_files=["res://.godot/imported/empty.png-31363f083c9c4e2e8e54cf64f3716737.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_bottom.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_bottom.svg.import index 321be5ee..a5e84798 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_bottom.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_bottom.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_bottom.svg-963f115d31a41c38349ab03453cf2ef5.stex" +type="CompressedTexture2D" +uid="uid://l16qrsohg7jj" +path="res://.godot/imported/icon_anchor_bottom.svg-963f115d31a41c38349ab03453cf2ef5.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_bottom.svg" -dest_files=[ "res://.import/icon_anchor_bottom.svg-963f115d31a41c38349ab03453cf2ef5.stex" ] +dest_files=["res://.godot/imported/icon_anchor_bottom.svg-963f115d31a41c38349ab03453cf2ef5.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_left.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_left.svg.import index 48e66da6..861cc99d 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_left.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_left.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_bottom_left.svg-c59f20ff71f725e47b5fc556b5ef93c4.stex" +type="CompressedTexture2D" +uid="uid://30wsjmeemngg" +path="res://.godot/imported/icon_anchor_bottom_left.svg-c59f20ff71f725e47b5fc556b5ef93c4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_bottom_left.svg" -dest_files=[ "res://.import/icon_anchor_bottom_left.svg-c59f20ff71f725e47b5fc556b5ef93c4.stex" ] +dest_files=["res://.godot/imported/icon_anchor_bottom_left.svg-c59f20ff71f725e47b5fc556b5ef93c4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_right.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_right.svg.import index 0a425271..b24ab206 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_right.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_bottom_right.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_bottom_right.svg-23dd5f1d1c7021fe105f8bde603dcc4d.stex" +type="CompressedTexture2D" +uid="uid://cwb02kd3gr5v1" +path="res://.godot/imported/icon_anchor_bottom_right.svg-23dd5f1d1c7021fe105f8bde603dcc4d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_bottom_right.svg" -dest_files=[ "res://.import/icon_anchor_bottom_right.svg-23dd5f1d1c7021fe105f8bde603dcc4d.stex" ] +dest_files=["res://.godot/imported/icon_anchor_bottom_right.svg-23dd5f1d1c7021fe105f8bde603dcc4d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_center.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_center.svg.import index 372cc726..a0d694c2 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_center.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_center.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_center.svg-d48605c4035ec4a02ae8159aea6db85f.stex" +type="CompressedTexture2D" +uid="uid://bkphpwgf3vlqy" +path="res://.godot/imported/icon_anchor_center.svg-d48605c4035ec4a02ae8159aea6db85f.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_center.svg" -dest_files=[ "res://.import/icon_anchor_center.svg-d48605c4035ec4a02ae8159aea6db85f.stex" ] +dest_files=["res://.godot/imported/icon_anchor_center.svg-d48605c4035ec4a02ae8159aea6db85f.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_left.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_left.svg.import index 53f97801..9d5b1496 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_left.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_left.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_left.svg-77f3e03e6fbadfd7e4dc1ab3661e6e7c.stex" +type="CompressedTexture2D" +uid="uid://cmydngdawudhq" +path="res://.godot/imported/icon_anchor_left.svg-77f3e03e6fbadfd7e4dc1ab3661e6e7c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_left.svg" -dest_files=[ "res://.import/icon_anchor_left.svg-77f3e03e6fbadfd7e4dc1ab3661e6e7c.stex" ] +dest_files=["res://.godot/imported/icon_anchor_left.svg-77f3e03e6fbadfd7e4dc1ab3661e6e7c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_right.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_right.svg.import index c89a0d0d..42b5b1ca 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_right.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_right.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_right.svg-90e3a37e8d38587bac01703849f8b9f7.stex" +type="CompressedTexture2D" +uid="uid://cut3xadorcxqt" +path="res://.godot/imported/icon_anchor_right.svg-90e3a37e8d38587bac01703849f8b9f7.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_right.svg" -dest_files=[ "res://.import/icon_anchor_right.svg-90e3a37e8d38587bac01703849f8b9f7.stex" ] +dest_files=["res://.godot/imported/icon_anchor_right.svg-90e3a37e8d38587bac01703849f8b9f7.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_top.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_top.svg.import index 4c3f87ba..50e96dcb 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_top.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_top.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_top.svg-f1dcf93e569fe43b280b5dc072ee78e5.stex" +type="CompressedTexture2D" +uid="uid://cprd188dc3fc7" +path="res://.godot/imported/icon_anchor_top.svg-f1dcf93e569fe43b280b5dc072ee78e5.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_top.svg" -dest_files=[ "res://.import/icon_anchor_top.svg-f1dcf93e569fe43b280b5dc072ee78e5.stex" ] +dest_files=["res://.godot/imported/icon_anchor_top.svg-f1dcf93e569fe43b280b5dc072ee78e5.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_top_left.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_top_left.svg.import index 79351b63..832b11ef 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_top_left.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_top_left.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_top_left.svg-aea4438056394f9967bf74b13799fedc.stex" +type="CompressedTexture2D" +uid="uid://bugm51ryp0urq" +path="res://.godot/imported/icon_anchor_top_left.svg-aea4438056394f9967bf74b13799fedc.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_top_left.svg" -dest_files=[ "res://.import/icon_anchor_top_left.svg-aea4438056394f9967bf74b13799fedc.stex" ] +dest_files=["res://.godot/imported/icon_anchor_top_left.svg-aea4438056394f9967bf74b13799fedc.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_anchor_top_right.svg.import b/addons/zylann.hterrain/tools/icons/icon_anchor_top_right.svg.import index f3c8ab1f..146b0575 100644 --- a/addons/zylann.hterrain/tools/icons/icon_anchor_top_right.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_anchor_top_right.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_anchor_top_right.svg-e9f520f41c9c20cc5e64aca56427ca01.stex" +type="CompressedTexture2D" +uid="uid://bebc1xsqguspq" +path="res://.godot/imported/icon_anchor_top_right.svg-e9f520f41c9c20cc5e64aca56427ca01.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_anchor_top_right.svg" -dest_files=[ "res://.import/icon_anchor_top_right.svg-e9f520f41c9c20cc5e64aca56427ca01.stex" ] +dest_files=["res://.godot/imported/icon_anchor_top_right.svg-e9f520f41c9c20cc5e64aca56427ca01.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_detail_layer_node.svg.import b/addons/zylann.hterrain/tools/icons/icon_detail_layer_node.svg.import index 577cd62e..941c747d 100644 --- a/addons/zylann.hterrain/tools/icons/icon_detail_layer_node.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_detail_layer_node.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_detail_layer_node.svg-70daba484432569847b1d2fe22768af3.stex" +type="CompressedTexture2D" +uid="uid://6jmdwj3vn6m0" +path="res://.godot/imported/icon_detail_layer_node.svg-70daba484432569847b1d2fe22768af3.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_detail_layer_node.svg" -dest_files=[ "res://.import/icon_detail_layer_node.svg-70daba484432569847b1d2fe22768af3.stex" ] +dest_files=["res://.godot/imported/icon_detail_layer_node.svg-70daba484432569847b1d2fe22768af3.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_grass.svg.import b/addons/zylann.hterrain/tools/icons/icon_grass.svg.import index e7cf1f59..ad48667d 100644 --- a/addons/zylann.hterrain/tools/icons/icon_grass.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_grass.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_grass.svg-6a20eb11bc23d46b8a4c0f365f95554b.stex" +type="CompressedTexture2D" +uid="uid://coicfqoi4spg0" +path="res://.godot/imported/icon_grass.svg-6a20eb11bc23d46b8a4c0f365f95554b.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_grass.svg" -dest_files=[ "res://.import/icon_grass.svg-6a20eb11bc23d46b8a4c0f365f95554b.stex" ] +dest_files=["res://.godot/imported/icon_grass.svg-6a20eb11bc23d46b8a4c0f365f95554b.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_color.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_color.svg.import index c6a5f422..a72fade1 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_color.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_color.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_color.svg-2b3375697cab4a6c7b8d933fc7f2b982.stex" +type="CompressedTexture2D" +uid="uid://t1m58v6iitwb" +path="res://.godot/imported/icon_heightmap_color.svg-2b3375697cab4a6c7b8d933fc7f2b982.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_color.svg" -dest_files=[ "res://.import/icon_heightmap_color.svg-2b3375697cab4a6c7b8d933fc7f2b982.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_color.svg-2b3375697cab4a6c7b8d933fc7f2b982.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_data.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_data.svg.import index 4dde8a45..9db362d7 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_data.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_data.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_data.svg-00236b6035ce13dd687a19d98237bdbd.stex" +type="CompressedTexture2D" +uid="uid://cd13q0qxqt8cd" +path="res://.godot/imported/icon_heightmap_data.svg-00236b6035ce13dd687a19d98237bdbd.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_data.svg" -dest_files=[ "res://.import/icon_heightmap_data.svg-00236b6035ce13dd687a19d98237bdbd.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_data.svg-00236b6035ce13dd687a19d98237bdbd.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_erode.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_erode.svg.import index 192aa136..c1424e69 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_erode.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_erode.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_erode.svg-fad285f0810d69bec16027ac0257c223.stex" +type="CompressedTexture2D" +uid="uid://ci3jif8wx2tig" +path="res://.godot/imported/icon_heightmap_erode.svg-fad285f0810d69bec16027ac0257c223.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_erode.svg" -dest_files=[ "res://.import/icon_heightmap_erode.svg-fad285f0810d69bec16027ac0257c223.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_erode.svg-fad285f0810d69bec16027ac0257c223.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_flatten.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_flatten.svg.import index 65725911..9c1c4bf9 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_flatten.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_flatten.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_flatten.svg-3d183c33fce9f34c419c53418ef26264.stex" +type="CompressedTexture2D" +uid="uid://6bnt8lvvabf1" +path="res://.godot/imported/icon_heightmap_flatten.svg-3d183c33fce9f34c419c53418ef26264.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_flatten.svg" -dest_files=[ "res://.import/icon_heightmap_flatten.svg-3d183c33fce9f34c419c53418ef26264.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_flatten.svg-3d183c33fce9f34c419c53418ef26264.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_level.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_level.svg.import index 38be6d56..29294ec1 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_level.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_level.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_level.svg-0abbb78afcf28f4da15188c85861a768.stex" +type="CompressedTexture2D" +uid="uid://c6trw4wyo86x4" +path="res://.godot/imported/icon_heightmap_level.svg-0abbb78afcf28f4da15188c85861a768.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_level.svg" -dest_files=[ "res://.import/icon_heightmap_level.svg-0abbb78afcf28f4da15188c85861a768.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_level.svg-0abbb78afcf28f4da15188c85861a768.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_lower.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_lower.svg.import index dc18e4ef..97163b30 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_lower.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_lower.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_lower.svg-5bb5cae46ea03f9d65d6c497a65882db.stex" +type="CompressedTexture2D" +uid="uid://da02ckrgusaoe" +path="res://.godot/imported/icon_heightmap_lower.svg-5bb5cae46ea03f9d65d6c497a65882db.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_lower.svg" -dest_files=[ "res://.import/icon_heightmap_lower.svg-5bb5cae46ea03f9d65d6c497a65882db.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_lower.svg-5bb5cae46ea03f9d65d6c497a65882db.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_mask.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_mask.svg.import index efc0f533..7305e92b 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_mask.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_mask.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_mask.svg-3fad663c59a229c1c6c17c4e8d5bad09.stex" +type="CompressedTexture2D" +uid="uid://btb4kkafvn67j" +path="res://.godot/imported/icon_heightmap_mask.svg-3fad663c59a229c1c6c17c4e8d5bad09.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_mask.svg" -dest_files=[ "res://.import/icon_heightmap_mask.svg-3fad663c59a229c1c6c17c4e8d5bad09.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_mask.svg-3fad663c59a229c1c6c17c4e8d5bad09.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_node.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_node.svg.import index efb1a571..aa38f33c 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_node.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_node.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_node.svg-0b776ad0015c7d9d9553b161b36e70fe.stex" +type="CompressedTexture2D" +uid="uid://ofs3osrmxfi" +path="res://.godot/imported/icon_heightmap_node.svg-0b776ad0015c7d9d9553b161b36e70fe.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_node.svg" -dest_files=[ "res://.import/icon_heightmap_node.svg-0b776ad0015c7d9d9553b161b36e70fe.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_node.svg-0b776ad0015c7d9d9553b161b36e70fe.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg.import index 08329b15..3478c922 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_node_large.svg-4b8ff9077cb0d8dc06efcf638cce1edb.stex" +type="CompressedTexture2D" +uid="uid://sdaddk8wxjin" +path="res://.godot/imported/icon_heightmap_node_large.svg-4b8ff9077cb0d8dc06efcf638cce1edb.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg" -dest_files=[ "res://.import/icon_heightmap_node_large.svg-4b8ff9077cb0d8dc06efcf638cce1edb.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_node_large.svg-4b8ff9077cb0d8dc06efcf638cce1edb.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=8.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_paint.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_paint.svg.import index 750a3f30..8d325c13 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_paint.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_paint.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_paint.svg-ad4c1d13ab344959f8e60b793d52d80d.stex" +type="CompressedTexture2D" +uid="uid://cgw6r4eg1msvn" +path="res://.godot/imported/icon_heightmap_paint.svg-ad4c1d13ab344959f8e60b793d52d80d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_paint.svg" -dest_files=[ "res://.import/icon_heightmap_paint.svg-ad4c1d13ab344959f8e60b793d52d80d.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_paint.svg-ad4c1d13ab344959f8e60b793d52d80d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_raise.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_raise.svg.import index 83f7725e..b856d272 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_raise.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_raise.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_raise.svg-16ae516b9460ce83d04d965ed6b9989a.stex" +type="CompressedTexture2D" +uid="uid://0polw88tpkl4" +path="res://.godot/imported/icon_heightmap_raise.svg-16ae516b9460ce83d04d965ed6b9989a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_raise.svg" -dest_files=[ "res://.import/icon_heightmap_raise.svg-16ae516b9460ce83d04d965ed6b9989a.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_raise.svg-16ae516b9460ce83d04d965ed6b9989a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_smooth.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_smooth.svg.import index 29d7cc95..a7bff5da 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_smooth.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_smooth.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_smooth.svg-1216ccdd3a408b8769b0a0964b7bd3f9.stex" +type="CompressedTexture2D" +uid="uid://b6hlgjb4fa31c" +path="res://.godot/imported/icon_heightmap_smooth.svg-1216ccdd3a408b8769b0a0964b7bd3f9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_smooth.svg" -dest_files=[ "res://.import/icon_heightmap_smooth.svg-1216ccdd3a408b8769b0a0964b7bd3f9.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_smooth.svg-1216ccdd3a408b8769b0a0964b7bd3f9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg.import b/addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg.import index dd0db1b6..48dc9ea4 100644 --- a/addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_heightmap_unmask.svg-f88c0addb6f444beecc364dd218d67e9.stex" +type="CompressedTexture2D" +uid="uid://b4ya0po3a4nqa" +path="res://.godot/imported/icon_heightmap_unmask.svg-f88c0addb6f444beecc364dd218d67e9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg" -dest_files=[ "res://.import/icon_heightmap_unmask.svg-f88c0addb6f444beecc364dd218d67e9.stex" ] +dest_files=["res://.godot/imported/icon_heightmap_unmask.svg-f88c0addb6f444beecc364dd218d67e9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg.import b/addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg.import index 6fe7d51f..70f4a552 100644 --- a/addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_long_arrow_down.svg-baa34c94eaf2f9f3533b079350dd260b.stex" +type="CompressedTexture2D" +uid="uid://b6l5dys0awbwd" +path="res://.godot/imported/icon_long_arrow_down.svg-baa34c94eaf2f9f3533b079350dd260b.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg" -dest_files=[ "res://.import/icon_long_arrow_down.svg-baa34c94eaf2f9f3533b079350dd260b.stex" ] +dest_files=["res://.godot/imported/icon_long_arrow_down.svg-baa34c94eaf2f9f3533b079350dd260b.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg.import b/addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg.import index 7639722a..4d77e3df 100644 --- a/addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_long_arrow_right.svg-2e9c5428ca49af0df04372d4de12fdd2.stex" +type="CompressedTexture2D" +uid="uid://d3vie0tj3ry6k" +path="res://.godot/imported/icon_long_arrow_right.svg-2e9c5428ca49af0df04372d4de12fdd2.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg" -dest_files=[ "res://.import/icon_long_arrow_right.svg-2e9c5428ca49af0df04372d4de12fdd2.stex" ] +dest_files=["res://.godot/imported/icon_long_arrow_right.svg-2e9c5428ca49af0df04372d4de12fdd2.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg.import b/addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg.import index 6085be9e..0e73229e 100644 --- a/addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_minimap_out_of_range_position.svg-be0d8e592b6594137b0f40434b64f771.stex" +type="CompressedTexture2D" +uid="uid://cc47smy24m368" +path="res://.godot/imported/icon_minimap_out_of_range_position.svg-be0d8e592b6594137b0f40434b64f771.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg" -dest_files=[ "res://.import/icon_minimap_out_of_range_position.svg-be0d8e592b6594137b0f40434b64f771.stex" ] +dest_files=["res://.godot/imported/icon_minimap_out_of_range_position.svg-be0d8e592b6594137b0f40434b64f771.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_minimap_position.svg.import b/addons/zylann.hterrain/tools/icons/icon_minimap_position.svg.import index f5cb8ccd..5b864e39 100644 --- a/addons/zylann.hterrain/tools/icons/icon_minimap_position.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_minimap_position.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_minimap_position.svg-09c3263e8852c7010dcfa0a85245403d.stex" +type="CompressedTexture2D" +uid="uid://c1el0dmyvaaij" +path="res://.godot/imported/icon_minimap_position.svg-09c3263e8852c7010dcfa0a85245403d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_minimap_position.svg" -dest_files=[ "res://.import/icon_minimap_position.svg-09c3263e8852c7010dcfa0a85245403d.stex" ] +dest_files=["res://.godot/imported/icon_minimap_position.svg-09c3263e8852c7010dcfa0a85245403d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/icon_small_circle.svg.import b/addons/zylann.hterrain/tools/icons/icon_small_circle.svg.import index 91da8d06..92cf8937 100644 --- a/addons/zylann.hterrain/tools/icons/icon_small_circle.svg.import +++ b/addons/zylann.hterrain/tools/icons/icon_small_circle.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_small_circle.svg-758362406034e77f78350899f9b2cf34.stex" +type="CompressedTexture2D" +uid="uid://bdkcgtv1r5j31" +path="res://.godot/imported/icon_small_circle.svg-758362406034e77f78350899f9b2cf34.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/icon_small_circle.svg" -dest_files=[ "res://.import/icon_small_circle.svg-758362406034e77f78350899f9b2cf34.stex" ] +dest_files=["res://.godot/imported/icon_small_circle.svg-758362406034e77f78350899f9b2cf34.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/zylann.hterrain/tools/icons/white.png.import b/addons/zylann.hterrain/tools/icons/white.png.import index b003f095..53fbf121 100644 --- a/addons/zylann.hterrain/tools/icons/white.png.import +++ b/addons/zylann.hterrain/tools/icons/white.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/white.png-06b7d7f95e74cd7f8357ec25a73870fb.stex" +type="CompressedTexture2D" +uid="uid://dnee27oabcvy2" +path="res://.godot/imported/white.png-06b7d7f95e74cd7f8357ec25a73870fb.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://addons/zylann.hterrain/tools/icons/white.png" -dest_files=[ "res://.import/white.png-06b7d7f95e74cd7f8357ec25a73870fb.stex" ] +dest_files=["res://.godot/imported/white.png-06b7d7f95e74cd7f8357ec25a73870fb.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/icon.png.import b/icon.png.import index e4a26a94..110cdc82 100644 --- a/icon.png.import +++ b/icon.png.import @@ -1,37 +1,35 @@ [remap] importer="texture" -type="StreamTexture" -path.s3tc="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.stex" -path.etc2="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.etc2.stex" +type="CompressedTexture2D" +uid="uid://ca6b6cye7m3it" +path.s3tc="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.ctex" metadata={ -"imported_formats": [ "s3tc", "etc2" ], +"imported_formats": ["s3tc_bptc"], "vram_texture": true } [deps] source_file="res://icon.png" -dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.stex", "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.etc2.stex" ] +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.s3tc.ctex"] [params] compress/mode=2 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=1 -flags/repeat=true -flags/filter=true -flags/mipmaps=true -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true +compress/hdr_compression=1 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=1 +roughness/src_normal="" +process/fix_alpha_border=false process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 From 31a2e8b54da503097d34750bac8f5be29ebc6ecb Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sun, 19 Mar 2023 01:36:09 +0000 Subject: [PATCH 08/94] More shader renames --- .../minimap/{minimap_normal.shader => minimap_normal.gdshader} | 0 .../{display_alpha.shader => display_alpha.gdshader} | 0 .../tools/texture_editor/display_alpha_material.tres | 2 +- ...{display_alpha_slice.shader => display_alpha_slice.gdshader} | 0 .../{display_color.shader => display_color.gdshader} | 0 .../tools/texture_editor/display_color_material.tres | 2 +- ...{display_color_slice.shader => display_color_slice.gdshader} | 0 .../{display_normal.shader => display_normal.gdshader} | 0 8 files changed, 2 insertions(+), 2 deletions(-) rename addons/zylann.hterrain/tools/minimap/{minimap_normal.shader => minimap_normal.gdshader} (100%) rename addons/zylann.hterrain/tools/texture_editor/{display_alpha.shader => display_alpha.gdshader} (100%) rename addons/zylann.hterrain/tools/texture_editor/{display_alpha_slice.shader => display_alpha_slice.gdshader} (100%) rename addons/zylann.hterrain/tools/texture_editor/{display_color.shader => display_color.gdshader} (100%) rename addons/zylann.hterrain/tools/texture_editor/{display_color_slice.shader => display_color_slice.gdshader} (100%) rename addons/zylann.hterrain/tools/texture_editor/{display_normal.shader => display_normal.gdshader} (100%) diff --git a/addons/zylann.hterrain/tools/minimap/minimap_normal.shader b/addons/zylann.hterrain/tools/minimap/minimap_normal.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/minimap/minimap_normal.shader rename to addons/zylann.hterrain/tools/minimap/minimap_normal.gdshader diff --git a/addons/zylann.hterrain/tools/texture_editor/display_alpha.shader b/addons/zylann.hterrain/tools/texture_editor/display_alpha.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/texture_editor/display_alpha.shader rename to addons/zylann.hterrain/tools/texture_editor/display_alpha.gdshader diff --git a/addons/zylann.hterrain/tools/texture_editor/display_alpha_material.tres b/addons/zylann.hterrain/tools/texture_editor/display_alpha_material.tres index de32b596..34ef863e 100644 --- a/addons/zylann.hterrain/tools/texture_editor/display_alpha_material.tres +++ b/addons/zylann.hterrain/tools/texture_editor/display_alpha_material.tres @@ -1,6 +1,6 @@ [gd_resource type="ShaderMaterial" load_steps=2 format=2] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_alpha.shader" type="Shader" id=1] +[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_alpha.gdshader" type="Shader" id=1] [resource] diff --git a/addons/zylann.hterrain/tools/texture_editor/display_alpha_slice.shader b/addons/zylann.hterrain/tools/texture_editor/display_alpha_slice.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/texture_editor/display_alpha_slice.shader rename to addons/zylann.hterrain/tools/texture_editor/display_alpha_slice.gdshader diff --git a/addons/zylann.hterrain/tools/texture_editor/display_color.shader b/addons/zylann.hterrain/tools/texture_editor/display_color.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/texture_editor/display_color.shader rename to addons/zylann.hterrain/tools/texture_editor/display_color.gdshader diff --git a/addons/zylann.hterrain/tools/texture_editor/display_color_material.tres b/addons/zylann.hterrain/tools/texture_editor/display_color_material.tres index 793dab4e..094400f1 100644 --- a/addons/zylann.hterrain/tools/texture_editor/display_color_material.tres +++ b/addons/zylann.hterrain/tools/texture_editor/display_color_material.tres @@ -1,6 +1,6 @@ [gd_resource type="ShaderMaterial" load_steps=2 format=2] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_color.shader" type="Shader" id=1] +[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_color.gdshader" type="Shader" id=1] [resource] shader = ExtResource( 1 ) diff --git a/addons/zylann.hterrain/tools/texture_editor/display_color_slice.shader b/addons/zylann.hterrain/tools/texture_editor/display_color_slice.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/texture_editor/display_color_slice.shader rename to addons/zylann.hterrain/tools/texture_editor/display_color_slice.gdshader diff --git a/addons/zylann.hterrain/tools/texture_editor/display_normal.shader b/addons/zylann.hterrain/tools/texture_editor/display_normal.gdshader similarity index 100% rename from addons/zylann.hterrain/tools/texture_editor/display_normal.shader rename to addons/zylann.hterrain/tools/texture_editor/display_normal.gdshader From a54fae7ed5d0a700cb307c9dbb3506ab1f855be3 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sun, 19 Mar 2023 01:36:17 +0000 Subject: [PATCH 09/94] Reassign icon --- project.godot | 1 + 1 file changed, 1 insertion(+) diff --git a/project.godot b/project.godot index 5c41d6ad..aaf38f54 100644 --- a/project.godot +++ b/project.godot @@ -12,6 +12,7 @@ config_version=5 config/name="Heightmap Terrain" config/features=PackedStringArray("4.0") +config/icon="res://icon.png" name="Heightmap GDNative" icon="res://icon.png" From d0e616528cb6c893a824a303ba59d64ee91d149b Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sun, 19 Mar 2023 01:39:04 +0000 Subject: [PATCH 10/94] More script fixes --- addons/zylann.hterrain/hterrain.gd | 118 ++++---- addons/zylann.hterrain/hterrain_chunk.gd | 10 +- .../zylann.hterrain/hterrain_chunk_debug.gd | 12 +- addons/zylann.hterrain/hterrain_collider.gd | 35 +-- addons/zylann.hterrain/hterrain_data.gd | 146 ++++------ .../zylann.hterrain/hterrain_detail_layer.gd | 60 ++-- addons/zylann.hterrain/hterrain_mesher.gd | 12 +- .../hterrain_resource_loader.gd | 8 +- .../hterrain_resource_saver.gd | 4 +- .../zylann.hterrain/hterrain_texture_set.gd | 22 +- addons/zylann.hterrain/native/factory.gd | 1 + .../native/image_utils_generic.gd | 13 +- .../native/quad_tree_lod_generic.gd | 12 +- .../tools/about/about_dialog.gd | 4 +- .../tools/about/about_dialog.tscn | 98 ++----- addons/zylann.hterrain/tools/brush/brush.gd | 24 +- .../tools/brush/brush_editor.gd | 57 ++-- addons/zylann.hterrain/tools/brush/decal.gd | 11 +- addons/zylann.hterrain/tools/brush/painter.gd | 20 +- .../settings_dialog/brush_settings_dialog.gd | 75 ++--- .../brush_settings_dialog.tscn | 270 +++++++----------- .../brush/settings_dialog/preview_painter.gd | 2 +- .../settings_dialog/preview_scratchpad.gd | 9 +- .../settings_dialog/preview_scratchpad.tscn | 21 +- .../tools/brush/terrain_painter.gd | 80 +++--- .../tools/detail_editor/detail_editor.gd | 47 +-- .../tools/exporter/export_image_dialog.gd | 30 +- .../tools/generate_mesh_dialog.gd | 21 +- .../tools/generator/generator_dialog.gd | 39 +-- .../tools/generator/texture_generator.gd | 26 +- .../tools/generator/texture_generator_pass.gd | 3 +- .../zylann.hterrain/tools/globalmap_baker.gd | 4 +- .../tools/importer/importer_dialog.gd | 135 +++++---- .../tools/inspector/inspector.gd | 8 +- .../tools/load_texture_dialog.gd | 8 +- .../zylann.hterrain/tools/minimap/minimap.gd | 27 +- .../tools/minimap/minimap_overlay.gd | 8 +- .../tools/minimap/ratio_container.gd | 4 +- .../zylann.hterrain/tools/normalmap_baker.gd | 2 +- .../packed_texture_array_importer.gd | 12 +- .../packed_texture_importer.gd | 31 +- .../stream_texture_importer.gd | 16 +- .../texture_layered_importer.gd | 15 +- addons/zylann.hterrain/tools/plugin.gd | 50 ++-- .../tools/preview_generator.gd | 10 +- .../zylann.hterrain/tools/progress_window.gd | 8 +- .../tools/resize_dialog/resize_dialog.gd | 35 +-- .../zylann.hterrain/tools/terrain_preview.gd | 50 ++-- .../tools/texture_editor/flow_container.gd | 9 +- .../set_editor/source_file_item_editor.gd | 2 +- .../set_editor/texture_set_editor.gd | 76 ++--- .../set_editor/texture_set_import_editor.gd | 57 ++-- .../tools/texture_editor/texture_editor.gd | 6 +- .../tools/texture_editor/texture_list.gd | 8 +- .../tools/texture_editor/texture_list_item.gd | 12 +- .../tools/util/dialog_fitter.gd | 6 +- .../zylann.hterrain/tools/util/editor_util.gd | 8 +- .../tools/util/interval_slider.gd | 28 +- .../zylann.hterrain/tools/util/spin_slider.gd | 20 +- .../util/direct_mesh_instance.gd | 4 +- addons/zylann.hterrain/util/errors.gd | 2 +- addons/zylann.hterrain/util/grid.gd | 12 +- .../zylann.hterrain/util/image_file_cache.gd | 20 +- addons/zylann.hterrain/util/logger.gd | 7 +- addons/zylann.hterrain/util/util.gd | 66 +++-- addons/zylann.hterrain/util/xyz_format.gd | 10 +- 66 files changed, 993 insertions(+), 1073 deletions(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index 7e67a317..ee189ff6 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -22,15 +22,16 @@ const SHADER_CUSTOM = "Custom" const MIN_MAP_SCALE = 0.01 -const _SHADER_TYPE_HINT_STRING = str( - "Classic4", ",", - "Classic4Lite", ",", - "LowPoly", ",", - "Array", ",", - "MultiSplat16", ",", - "MultiSplat16Lite", ",", +# Note, the `str()` syntax is no longer accepted in constants in Godot 4 +const _SHADER_TYPE_HINT_STRING = \ + "Classic4," + \ + "Classic4Lite," + \ + "LowPoly," + \ + "Array," + \ + "MultiSplat16," + \ + "MultiSplat16Lite," + \ "Custom" -) + # TODO Had to downgrade this to support Godot 3.1. # Referring to other constants with this syntax isn't working... #const _SHADER_TYPE_HINT_STRING = str( @@ -143,7 +144,7 @@ signal transform_changed(global_transform) @export_range(0.0, 1.0) var ambient_wind : float: get: return ambient_wind - set(value): + set(amplitude): if ambient_wind == amplitude: return ambient_wind = amplitude @@ -164,13 +165,13 @@ signal transform_changed(global_transform) # TODO Replace with `size` in world units? @export var map_scale := Vector3(1, 1, 1): get: - return map_scale: + return map_scale set(p_map_scale): if map_scale == p_map_scale: return - p_map_scale.x = max(p_map_scale.x, MIN_MAP_SCALE) - p_map_scale.y = max(p_map_scale.y, MIN_MAP_SCALE) - p_map_scale.z = max(p_map_scale.z, MIN_MAP_SCALE) + p_map_scale.x = maxf(p_map_scale.x, MIN_MAP_SCALE) + p_map_scale.y = maxf(p_map_scale.y, MIN_MAP_SCALE) + p_map_scale.z = maxf(p_map_scale.z, MIN_MAP_SCALE) map_scale = p_map_scale _on_transform_changed() @@ -197,7 +198,7 @@ var _cast_shadow_setting := GeometryInstance3D.SHADOW_CASTING_SETTING_ON var _render_layer_mask := 1 # Actual number of textures supported by the shader currently selected -var _ground_texture_count_cache = 0 +var _ground_texture_count_cache := 0 var _used_splatmaps_count_cache := 0 var _is_using_indexed_splatmap := false @@ -379,11 +380,11 @@ func _get_property_list(): return props -func _get(key: String): - if key == "data_directory": +func _get(key: StringName): + if key == &"data_directory": return _get_data_directory() - if key == "_terrain_data": + if key == &"_terrain_data": if _data == null or _data.resource_path == "": # Consider null if the data is not set or has no path, # because in those cases we can't save the terrain properly @@ -391,59 +392,60 @@ func _get(key: String): else: return _data - if key == "texture_set": + if key == &"texture_set": return get_texture_set() - elif key == "shader_type": + elif key == &"shader_type": return get_shader_type() - elif key == "custom_shader": + elif key == &"custom_shader": return get_custom_shader() - elif key == "custom_globalmap_shader": + elif key == &"custom_globalmap_shader": return _custom_globalmap_shader elif key.begins_with("shader_params/"): - var param_name = key.substr(len("shader_params/")) + var param_name := key.substr(len("shader_params/")) return get_shader_param(param_name) - elif key == "chunk_size": + elif key == &"chunk_size": return _chunk_size - elif key == "collision_enabled": + elif key == &"collision_enabled": return _collision_enabled - elif key == "collision_layer": + elif key == &"collision_layer": return _collision_layer - elif key == "collision_mask": + elif key == &"collision_mask": return _collision_mask - elif key == "render_layers": + elif key == &"render_layers": return get_render_layer_mask() - elif key == "cast_shadow": + elif key == &"cast_shadow": return _cast_shadow_setting -func _set(key: String, value): - if key == "data_directory": +func _set(key: StringName, value): + if key == &"data_directory": _set_data_directory(value) # Can't use setget when the exported type is custom, # because we were also are forced to use _get_property_list... - elif key == "_terrain_data": + elif key == &"_terrain_data": set_data(value) - elif key == "texture_set": + elif key == &"texture_set": set_texture_set(value) # Legacy, left for migration from 1.4 - if key.begins_with("ground/"): + var key_str := String(key) + if key_str.begins_with("ground/"): for ground_texture_type in HTerrainTextureSet.TYPE_COUNT: var type_name = _ground_enum_to_name[ground_texture_type] - if key.begins_with(str("ground/", type_name, "_")): - var i = key.substr(len(key) - 1).to_int() + if key_str.begins_with(str("ground/", type_name, "_")): + var i = key_str.substr(len(key_str) - 1).to_int() if _texture_set_migration_textures == null: _texture_set_migration_textures = [] while i >= len(_texture_set_migration_textures): @@ -451,39 +453,39 @@ func _set(key: String, value): var texs = _texture_set_migration_textures[i] texs[ground_texture_type] = value - elif key == "shader_type": + elif key == &"shader_type": set_shader_type(value) - elif key == "custom_shader": + elif key == &"custom_shader": set_custom_shader(value) - elif key == "custom_globalmap_shader": + elif key == &"custom_globalmap_shader": _custom_globalmap_shader = value elif key.begins_with("shader_params/"): - var param_name = key.substr(len("shader_params/")) + var param_name := String(key).substr(len("shader_params/")) set_shader_param(param_name, value) - elif key == "chunk_size": + elif key == &"chunk_size": set_chunk_size(value) - elif key == "collision_enabled": + elif key == &"collision_enabled": set_collision_enabled(value) - elif key == "collision_layer": + elif key == &"collision_layer": _collision_layer = value if _collider != null: _collider.set_collision_layer(value) - elif key == "collision_mask": + elif key == &"collision_mask": _collision_mask = value if _collider != null: _collider.set_collision_mask(value) - elif key == "render_layers": + elif key == &"render_layers": return set_render_layer_mask(value) - elif key == "cast_shadow": + elif key == &"cast_shadow": set_cast_shadow(value) @@ -612,7 +614,7 @@ func get_chunk_size() -> int: func set_chunk_size(p_cs: int): assert(typeof(p_cs) == TYPE_INT) _logger.debug(str("Setting chunk size to ", p_cs)) - var cs = HT_Util.next_power_of_two(p_cs) + var cs := HT_Util.next_power_of_two(p_cs) if cs < MIN_CHUNK_SIZE: cs = MIN_CHUNK_SIZE if cs > MAX_CHUNK_SIZE: @@ -639,18 +641,18 @@ func set_centered(p_centered: bool): # which is different from Node3D.global_transform gives. # global_transform must only have translation and rotation. Scale support is undefined. func get_internal_transform() -> Transform3D: - var gt = global_transform - var it = Transform3D(gt.basis * Basis().scaled(map_scale), gt.origin) + var gt := global_transform + var it := Transform3D(gt.basis * Basis().scaled(map_scale), gt.origin) if centered and _data != null: - var half_size = 0.5 * (_data.get_resolution() - 1.0) + var half_size := 0.5 * (_data.get_resolution() - 1.0) it.origin += it.basis * (-Vector3(half_size, 0, half_size)) return it func get_internal_transform_unscaled(): - var gt = global_transform + var gt := global_transform if centered and _data != null: - var half_size = 0.5 * (_data.get_resolution() - 1.0) + var half_size := 0.5 * (_data.get_resolution() - 1.0) gt.origin += gt.basis * (-Vector3(half_size, 0, half_size)) return gt @@ -985,8 +987,8 @@ func _update_material_params(): # Set all parameters from the terrain sytem. if is_inside_tree(): - var gt = get_internal_transform() - var t = gt.affine_inverse() + var gt := get_internal_transform() + var t := gt.affine_inverse() _material.set_shader_parameter(SHADER_PARAM_INVERSE_TRANSFORM, t) # This is needed to properly transform normals if the terrain is scaled @@ -1428,8 +1430,8 @@ func cell_raycast(origin_world: Vector3, dir_world: Vector3, max_distance: float return null # Transform to local (takes map scale into account) var to_local := get_internal_transform().affine_inverse() - var origin = to_local.xform(origin_world) - var dir = to_local.basis.xform(dir_world) + var origin = to_local * origin_world + var dir = to_local.basis * dir_world return _data.cell_raycast(origin, dir, max_distance) @@ -1463,7 +1465,7 @@ func _get_ground_texture_array_shader_param_name(type: int) -> String: # @obsolete -func get_ground_texture_array(type: int) -> TextureArray: +func get_ground_texture_array(type: int) -> Texture2DArray: _logger.error( "HTerrain.get_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().get_texture_array(type) instead") @@ -1472,7 +1474,7 @@ func get_ground_texture_array(type: int) -> TextureArray: # @obsolete -func set_ground_texture_array(type: int, texture_array: TextureArray): +func set_ground_texture_array(type: int, texture_array: Texture2DArray): _logger.error( "HTerrain.set_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().set_texture_array(type, texarray) instead") @@ -1619,7 +1621,7 @@ class HT_ExitWorldAction: class HT_TransformChangedAction: - var transform : Transform + var transform : Transform3D func _init(t): transform = t func exec(chunk): diff --git a/addons/zylann.hterrain/hterrain_chunk.gd b/addons/zylann.hterrain/hterrain_chunk.gd index 09242da1..28d06a40 100644 --- a/addons/zylann.hterrain/hterrain_chunk.gd +++ b/addons/zylann.hterrain/hterrain_chunk.gd @@ -17,7 +17,7 @@ var _mesh : Mesh = null # TODO p_parent is HTerrain, can't add type hint due to cyclic reference -func _init(p_parent, p_cell_x: int, p_cell_y: int, p_material: Material): +func _init(p_parent: Node3D, p_cell_x: int, p_cell_y: int, p_material: Material): assert(p_parent is Node3D) assert(typeof(p_cell_x) == TYPE_INT) assert(typeof(p_cell_y) == TYPE_INT) @@ -33,7 +33,7 @@ func _init(p_parent, p_cell_x: int, p_cell_y: int, p_material: Material): if p_material != null: rs.instance_geometry_set_material_override(_mesh_instance, p_material.get_rid()) - var world = p_parent.get_world_3d() + var world := p_parent.get_world_3d() if world != null: rs.instance_set_scenario(_mesh_instance, world.get_scenario()) @@ -48,7 +48,7 @@ func _init(p_parent, p_cell_x: int, p_cell_y: int, p_material: Material): func _notification(p_what: int): if p_what == NOTIFICATION_PREDELETE: if _mesh_instance != RID(): - VisualServer.free_rid(_mesh_instance) + RenderingServer.free_rid(_mesh_instance) _mesh_instance = RID() @@ -80,8 +80,8 @@ func exit_world(): func parent_transform_changed(parent_transform: Transform3D): assert(_mesh_instance != RID()) - var local_transform = Transform3D(Basis(), Vector3(cell_origin_x, 0, cell_origin_y)) - var world_transform = parent_transform * local_transform + var local_transform := Transform3D(Basis(), Vector3(cell_origin_x, 0, cell_origin_y)) + var world_transform := parent_transform * local_transform RenderingServer.instance_set_transform(_mesh_instance, world_transform) diff --git a/addons/zylann.hterrain/hterrain_chunk_debug.gd b/addons/zylann.hterrain/hterrain_chunk_debug.gd index 6c73bc53..7bf3d416 100644 --- a/addons/zylann.hterrain/hterrain_chunk_debug.gd +++ b/addons/zylann.hterrain/hterrain_chunk_debug.gd @@ -9,18 +9,18 @@ const HT_DirectMeshInstance = preload("./util/direct_mesh_instance.gd") const HT_Util = preload("./util/util.gd") -var _debug_cube = null -var _aabb = AABB() -var _parent_transform = Transform3D() +var _debug_cube : HT_DirectMeshInstance = null +var _aabb := AABB() +var _parent_transform := Transform3D() -func _init(p_parent, p_cell_x, p_cell_y, p_material): +func _init(p_parent: Node3D, p_cell_x: int, p_cell_y: int, p_material: Material): super(p_parent, p_cell_x, p_cell_y, p_material) - var wirecube + var wirecube : Mesh if not p_parent.has_meta("debug_wirecube_mesh"): wirecube = HT_Util.create_wirecube_mesh() - var mat = StandardMaterial3D.new() + var mat := StandardMaterial3D.new() mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED wirecube.surface_set_material(0, mat) # Cache the debug cube in the parent node to avoid re-creating each time diff --git a/addons/zylann.hterrain/hterrain_collider.gd b/addons/zylann.hterrain/hterrain_collider.gd index 60f83957..7abb95f6 100644 --- a/addons/zylann.hterrain/hterrain_collider.gd +++ b/addons/zylann.hterrain/hterrain_collider.gd @@ -1,18 +1,19 @@ -tool +@tool const HT_Logger = preload("./util/logger.gd") +const HTerrainData = preload("./hterrain_data.gd") -var _shape_rid = RID() -var _body_rid = RID() -var _terrain_transform = Transform3D() -var _terrain_data = null +var _shape_rid := RID() +var _body_rid := RID() +var _terrain_transform := Transform3D() +var _terrain_data : HTerrainData = null var _logger = HT_Logger.get_for(self) func _init(attached_node: Node, initial_layer: int, initial_mask: int): _logger.debug("HTerrainCollider: creating body") assert(attached_node != null) - _shape_rid = PhysicsServer3D.shape_create(PhysicsServer3D.SHAPE_HEIGHTMAP) + _shape_rid = PhysicsServer3D.heightmap_shape_create() _body_rid = PhysicsServer3D.body_create() PhysicsServer3D.body_set_mode(_body_rid, PhysicsServer3D.BODY_MODE_STATIC) @@ -65,18 +66,18 @@ func set_world(world: World3D): PhysicsServer3D.body_set_space(_body_rid, world.get_space() if world != null else RID()) -func create_from_terrain_data(terrain_data): +func create_from_terrain_data(terrain_data: HTerrainData): assert(terrain_data != null) assert(not terrain_data.is_locked()) _logger.debug("HTerrainCollider: setting up heightmap") _terrain_data = terrain_data - var aabb = terrain_data.get_aabb() + var aabb := terrain_data.get_aabb() - var width = terrain_data.get_resolution() - var depth = terrain_data.get_resolution() - var height = aabb.size.y + var width := terrain_data.get_resolution() + var depth := terrain_data.get_resolution() + var height := aabb.size.y var shape_data = { "width": terrain_data.get_resolution(), @@ -96,16 +97,16 @@ func _update_transform(aabb=null): _logger.debug("HTerrainCollider: terrain data not set yet") return - if aabb == null: - aabb = _terrain_data.get_aabb() +# if aabb == null: +# aabb = _terrain_data.get_aabb() - var width = _terrain_data.get_resolution() - var depth = _terrain_data.get_resolution() - var height = aabb.size.y + var width := _terrain_data.get_resolution() + var depth := _terrain_data.get_resolution() + #var height = aabb.size.y #_terrain_transform - var trans = Transform3D(Basis(), 0.5 * Vector3(width - 1, 0, depth - 1)) + var trans := Transform3D(Basis(), 0.5 * Vector3(width - 1, 0, depth - 1)) # And then apply the terrain transform trans = _terrain_transform * trans diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index f279c120..92477b26 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -2,7 +2,7 @@ # Holds data of the terrain. # This is mostly a set of textures using specific formats, some precalculated, and metadata. -tool +@tool extends Resource const HT_Grid = preload("./util/grid.gd") @@ -152,7 +152,7 @@ signal map_changed(type, index) # A map is a texture covering the terrain. # The usage of a map depends on its type (heightmap, normalmap, splatmap...). class HT_Map: - var texture: Texture + var texture: Texture2D # Reference used in case we need the data CPU-side var image: Image # ID used for saving, because when adding/removing maps, @@ -336,9 +336,9 @@ static func _get_map_default_fill_color(map_type: int, map_index: int): # This function is relatively slow due to locking, so don't use it to fetch large areas. func get_height_at(x: int, y: int) -> float: # Height data must be loaded in RAM - var im = get_image(CHANNEL_HEIGHT) + var im := get_image(CHANNEL_HEIGHT) assert(im != null) - var h = HT_Util.get_pixel_clamped(im, x, y).r; + var h := HT_Util.get_pixel_clamped(im, x, y).r; return h; @@ -357,13 +357,13 @@ func get_interpolated_height_at(pos: Vector3) -> float: var xf := pos.x - x0 var yf := pos.z - y0 - var h00 = HT_Util.get_pixel_clamped(im, x0, y0).r - var h10 = HT_Util.get_pixel_clamped(im, x0 + 1, y0).r - var h01 = HT_Util.get_pixel_clamped(im, x0, y0 + 1).r - var h11 = HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1).r + var h00 := HT_Util.get_pixel_clamped(im, x0, y0).r + var h10 := HT_Util.get_pixel_clamped(im, x0 + 1, y0).r + var h01 := HT_Util.get_pixel_clamped(im, x0, y0 + 1).r + var h11 := HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1).r # Bilinear filter - var h = lerpf(lerpf(h00, h10, xf), lerpf(h01, h11, xf), yf) + var h := lerpf(lerpf(h00, h10, xf), lerpf(h01, h11, xf), yf) return h; @@ -375,14 +375,14 @@ func get_heights_region(x0: int, y0: int, w: int, h: int) -> PackedFloat32Array: var im = get_image(CHANNEL_HEIGHT) assert(im != null) - var min_x := HT_Util.clamp_int(x0, 0, im.get_width()) - var min_y := HT_Util.clamp_int(y0, 0, im.get_height()) - var max_x := HT_Util.clamp_int(x0 + w, 0, im.get_width() + 1) - var max_y := HT_Util.clamp_int(y0 + h, 0, im.get_height() + 1) + var min_x := clampi(x0, 0, im.get_width()) + var min_y := clampi(y0, 0, im.get_height()) + var max_x := clampi(x0 + w, 0, im.get_width() + 1) + var max_y := clampi(y0 + h, 0, im.get_height() + 1) var heights := PackedFloat32Array() - var area = (max_x - min_x) * (max_y - min_y) + var area := (max_x - min_x) * (max_y - min_y) if area == 0: _logger.debug("Empty heights region!") return heights @@ -544,17 +544,17 @@ func _edit_apply_undo(undo_data: Dictionary, image_cache: HT_ImageFileCache): # TODO Support map indexes # Used for undoing full-terrain changes -func _edit_apply_maps_from_file_cache(image_file_cache, map_ids: Dictionary): +func _edit_apply_maps_from_file_cache(image_file_cache: HT_ImageFileCache, map_ids: Dictionary): if _edit_disable_apply_undo: return for map_type in map_ids: var id = map_ids[map_type] - var src_im = image_file_cache.load_image(id) + var src_im := image_file_cache.load_image(id) if src_im == null: continue var index := 0 var dst_im := get_image(map_type, index) - var rect = Rect2i(0, 0, src_im.get_height(), src_im.get_height()) + var rect := Rect2i(0, 0, src_im.get_height(), src_im.get_height()) dst_im.blit_rect(src_im, rect, Vector2i()) notify_region_change(rect, map_type, index) @@ -585,7 +585,7 @@ func _upload_region(channel: int, index: int, min_x: int, min_y: int, size_x: in if size_x <= 0 or size_y <= 0: return - var texture = map.texture + var texture := map.texture if texture == null or not (texture is ImageTexture): # The texture doesn't exist yet in an editable format @@ -603,7 +603,8 @@ func _upload_region(channel: int, index: int, min_x: int, min_y: int, size_x: in # Need to notify because other systems may want to grab the new texture object map_changed.emit(channel, index) - elif texture.get_size() != image.get_size(): + # TODO Unfortunately Texture2D.get_size() wasn't updated to use Vector2i in Godot 4 + elif Vector2i(texture.get_size()) != image.get_size(): _logger.debug(str( "_upload_region was used but the image size is different. ",\ "The map ", channel, "[", index, "] will be reuploaded entirely.")) @@ -616,39 +617,8 @@ func _upload_region(channel: int, index: int, min_x: int, min_y: int, size_x: in map_changed.emit(channel, index) else: - # TODO Godot 3 had partial texture update, but Godot 4 does not. - # This will affect edition performance. - if RenderingServer.has_method("texture_set_data_partial"): - assert(false) - # RenderingServer.texture_set_data_partial( \ - # texture.get_rid(), image, \ - # min_x, min_y, \ - # size_x, size_y, \ - # min_x, min_y, \ - # 0, 0) - else: - # Godot 4.0 - # It is slow. - - # ..ooo@@@XXX%%%xx.. - # .oo@@XXX%x%xxx.. ` . - # .o@XX%%xx.. ` . - # o@X%.. ..ooooooo - # .@X%x. ..o@@^^ ^^@@o - # .ooo@@@@@@ooo.. ..o@@^ @X% - # o@@^^^ ^^^@@@ooo.oo@@^ % - # xzI -*-- ^^^o^^ --*- % - # @@@o ooooooo^@@^o^@X^@oooooo .X%x - # I@@@@@@@@@XX%%xx ( o@o )X%x@ROMBASED@@@X%x - # I@@@@XX%%xx oo@@@@X% @@X%x ^^^@@@@@@@X%x - # @X%xx o@@@@@@@X% @@XX%%x ) ^^@X%x - # ^ xx o@@@@@@@@Xx ^ @XX%%x xxx - # o@@^^^ooo I^^ I^o ooo . x - # oo @^ IX I ^X @^ oo - # IX U . V IX - # V . . V - # - texture.update(image) + HT_Util.update_texture_partial(texture, image, + Rect2i(min_x, min_y, size_x, size_y), Vector2i(min_x, min_y)) #_logger.debug(str("Channel updated ", channel)) @@ -699,7 +669,7 @@ func _edit_insert_map_from_image_cache(map_type: int, index: int, image_cache, i while map_type >= len(_maps): _maps.append([]) var maps = _maps[map_type] - var map = HT_Map.new(_get_free_id(map_type)) + var map := HT_Map.new(_get_free_id(map_type)) map.image = image_cache.load_image(image_id) maps.insert(index, map) map_added.emit(map_type, index) @@ -708,8 +678,8 @@ func _edit_insert_map_from_image_cache(map_type: int, index: int, image_cache, i func _edit_remove_map(map_type: int, index: int): # TODO Check minimum and maximum instances of a given map _logger.debug(str("Removing map ", get_channel_name(map_type), " at index ", index)) - var maps = _maps[map_type] - maps.remove(index) + var maps : Array = _maps[map_type] + maps.remove_at(index) map_removed.emit(map_type, index) @@ -735,6 +705,8 @@ func get_image(map_type: int, index := 0) -> Image: func get_texture(map_type: int, index := 0, writable := false) -> Texture: + # TODO Split into `get_texture` and `get_writable_texture`? + var maps : Array = _maps[map_type] var map : HT_Map = maps[index] @@ -784,8 +756,8 @@ func get_point_aabb(cell_x: int, cell_y: int) -> Vector2: return Vector2(b.r, b.g) -func get_region_aabb(origin_in_cells_x: int, origin_in_cells_y: int, \ - size_in_cells_x: int, size_in_cells_y: int) -> AABB: +func get_region_aabb(origin_in_cells_x: int, origin_in_cells_y: int, + size_in_cells_x: int, size_in_cells_y: int) -> AABB: assert(typeof(origin_in_cells_x) == TYPE_INT) assert(typeof(origin_in_cells_y) == TYPE_INT) @@ -889,10 +861,10 @@ func save_data(data_dir: String) -> bool: var pi = 0 for map_type in CHANNEL_COUNT: - var maps = _maps[map_type] + var maps : Array = _maps[map_type] for index in len(maps): - var map = _maps[map_type][index] + var map : HT_Map = maps[index] if not map.modified: _logger.debug(str( "Skipping non-modified ", get_map_debug_name(map_type, index))) @@ -934,14 +906,14 @@ func _load_metadata(path: String): assert(f != null) var text = f.get_as_text() f = null # close file - var res = JSON.parse(text) - assert(res.error == OK) - _deserialize_metadata(res.result) + var json = JSON.new() + assert(json.parse(text) == OK) + _deserialize_metadata(json.data) func _save_metadata(path: String): var d = _serialize_metadata() - var text = JSON.print(d, "\t", true) + var text = JSON.stringify(d, "\t", true) var f = FileAccess.open(path, FileAccess.WRITE) var err = f.get_error() assert(err == OK) @@ -949,15 +921,15 @@ func _save_metadata(path: String): func _serialize_metadata() -> Dictionary: - var data = [] + var data := [] data.resize(len(_maps)) for i in range(len(_maps)): var maps = _maps[i] - var maps_data = [] + var maps_data := [] for j in range(len(maps)): - var map = maps[j] + var map : HT_Map = maps[j] maps_data.append({ "id": map.id }) data[i] = maps_data @@ -1025,7 +997,7 @@ func load_data(dir_path: String): _load_map(dir_path, map_type, index) # A map that was just loaded is considered not modified yet - _maps[map_type][index].modified = false + maps[index].modified = false pi += 1 @@ -1046,10 +1018,10 @@ func get_data_dir() -> String: func _save_map(dir_path: String, map_type: int, index: int) -> bool: - var map = _maps[map_type][index] - var im = map.image + var map : HT_Map = _maps[map_type][index] + var im := map.image if im == null: - var tex = map.texture + var tex := map.texture if tex != null: _logger.debug(str("Image not found for map ", map_type, ", downloading from VRAM")) im = tex.get_image() @@ -1062,13 +1034,13 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: # which from a user standpoint are not absolute. Also, `FileAccess.file_exists` exists but # isn't named "absolute" :shrug: if not DirAccess.dir_exists_absolute(dir_path): - var err = DirAccess.make_dir_absolute(dir_path) + var err := DirAccess.make_dir_absolute(dir_path) if err != OK: _logger.error("Could not create directory '{0}', error {1}" \ .format([dir_path, HT_Errors.get_message(err)])) return false - var fpath = dir_path.path_join(_get_map_filename(map_type, index)) + var fpath := dir_path.path_join(_get_map_filename(map_type, index)) if _channel_can_be_saved_as_png(map_type): fpath += ".png" @@ -1077,7 +1049,7 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: else: fpath += ".res" - var err = ResourceSaver.save(fpath, im) + var err := ResourceSaver.save(im, fpath) if err != OK: _logger.error("Could not save '{0}', error {1}" \ .format([fpath, HT_Errors.get_message(err)])) @@ -1087,7 +1059,7 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: static func _try_write_default_import_options(fpath: String, channel: int, logger): - var imp_fpath = fpath + ".import" + var imp_fpath := fpath + ".import" if FileAccess.file_exists(imp_fpath): # Already exists return @@ -1136,10 +1108,10 @@ static func _try_write_default_import_options(fpath: String, channel: int, logge func _load_map(dir: String, map_type: int, index: int) -> bool: - var fpath = dir.path_join(_get_map_filename(map_type, index)) + var fpath := dir.path_join(_get_map_filename(map_type, index)) # Maps must be configured before being loaded - var map = _maps[map_type][index] + var map : HT_Map = _maps[map_type][index] # while len(_maps) <= map_type: # _maps.append([]) # while len(_maps[map_type]) <= index: @@ -1184,7 +1156,7 @@ func _load_map(dir: String, map_type: int, index: int) -> bool: # It has often uses beyond graphics, so we always keep a RAM copy by default. fpath += ".res" - im = load(fpath) + var im : Image = load(fpath) if im == null: _logger.error("Could not load '{0}'".format([fpath])) @@ -1200,7 +1172,7 @@ func _load_map(dir: String, map_type: int, index: int) -> bool: func _ensure_map_format(im: Image, map_type: int, index: int): - var format = im.get_format() + var format := im.get_format() var expected_format = _map_types[map_type].texture_format if format != expected_format: _logger.warn("Map {0} loaded as format {1}, expected {2}. Will be converted." \ @@ -1274,8 +1246,8 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo var hrange := max_y - min_y - var width = mini(im.get_width(), src_image.get_width()) - var height = mini(im.get_height(), src_image.get_height()) + var width := mini(im.get_width(), src_image.get_width()) + var height := mini(im.get_height(), src_image.get_height()) _logger.debug("Converting to internal format...") @@ -1322,8 +1294,8 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo if f == null: return false - var file_len = f.get_len() - var file_res = HT_Util.integer_square_root(file_len / 2) + var file_len := f.get_length() + var file_res := HT_Util.integer_square_root(file_len / 2) if file_res == -1: # Can't deduce size return false @@ -1416,19 +1388,19 @@ func _import_map(map_type: int, path: String) -> bool: # Heightmap requires special treatment assert(map_type != CHANNEL_HEIGHT) - var im = Image.load_from_file(path) + var im := Image.load_from_file(path) # TODO No way to get the error code? if im == null: return false - var res = get_resolution() + var res := get_resolution() if im.get_width() != res or im.get_height() != res: im.crop(res, res) if im.get_format() != get_channel_format(map_type): im.convert(get_channel_format(map_type)) - var map = _maps[map_type][0] + var map : HT_Map = _maps[map_type][0] map.image = im notify_region_change(Rect2(0, 0, im.get_width(), im.get_height()), map_type) @@ -1504,8 +1476,8 @@ class HT_CellRaycastContext: var p01 := Vector3(cx, h01, cz + 1) var p11 := Vector3(cx + 1, h11, cz + 1) - var th0 = Geometry.ray_intersects_triangle(begin_pos, dir, p00, p10, p11) - var th1 = Geometry.ray_intersects_triangle(begin_pos, dir, p00, p11, p01) + var th0 = Geometry3D.ray_intersects_triangle(begin_pos, dir, p00, p10, p11) + var th1 = Geometry3D.ray_intersects_triangle(begin_pos, dir, p00, p11, p01) if th0 != null: return th0 diff --git a/addons/zylann.hterrain/hterrain_detail_layer.gd b/addons/zylann.hterrain/hterrain_detail_layer.gd index 1c62610b..f5f9dc6a 100644 --- a/addons/zylann.hterrain/hterrain_detail_layer.gd +++ b/addons/zylann.hterrain/hterrain_detail_layer.gd @@ -19,6 +19,7 @@ const HT_Logger = preload("./util/logger.gd") # TODO Can't preload because it causes the plugin to fail loading if assets aren't imported const DEFAULT_MESH_PATH = "res://addons/zylann.hterrain/models/grass_quad.obj" +# Cannot use `const` because `HTerrain` depends on the current script var HTerrain = load("res://addons/zylann.hterrain/hterrain.gd") const CHUNK_SIZE = 32 @@ -71,7 +72,7 @@ const _API_SHADER_PARAMS = { set(v): if view_distance == v: return - view_distance = max(v, 1.0) + view_distance = maxf(v, 1.0) if is_inside_tree(): _update_material() @@ -125,7 +126,7 @@ const _API_SHADER_PARAMS = { @export_flags_3d_render var render_layers := 1: get: return render_layers - set: + set(mask): render_layers = mask for k in _chunks: var chunk = _chunks[k] @@ -134,8 +135,9 @@ const _API_SHADER_PARAMS = { # Exposes shadow casting setting. # Possible values are the same as the enum `GeometryInstance.SHADOW_CASTING_SETTING_*`. +# TODO Casting to `int` should not be necessary! Had to do it otherwise GDScript complains... @export_enum("Off", "On", "DoubleSided", "ShadowsOnly") \ - var cast_shadow := GeometryInstance3D.SHADOW_CASTING_SETTING_ON: + var cast_shadow := int(GeometryInstance3D.SHADOW_CASTING_SETTING_ON): get: return cast_shadow set(option): @@ -236,11 +238,11 @@ func _get_property_list() -> Array: # Dynamic properties coming from the shader var props := [] if _material != null: - var shader_params = RenderingServer.shader_get_parameter_list(_material.shader.get_rid()) + var shader_params = RenderingServer.get_shader_parameter_list(_material.shader.get_rid()) for p in shader_params: if _API_SHADER_PARAMS.has(p.name): continue - var cp = {} + var cp := {} for k in p: cp[k] = p[k] cp.name = str("shader_params/", p.name) @@ -248,15 +250,17 @@ func _get_property_list() -> Array: return props -func _get(key: String): - if key.begins_with("shader_params/"): - var param_name = key.substr(len("shader_params/")) +func _get(key: StringName): + var key_str := String(key) + if key_str.begins_with("shader_params/"): + var param_name = key_str.substr(len("shader_params/")) return get_shader_param(param_name) -func _set(key: String, v): - if key.begins_with("shader_params/"): - var param_name = key.substr(len("shader_params/")) +func _set(key: StringName, v): + var key_str := String(key) + if key_str.begins_with("shader_params/"): + var param_name = key_str.substr(len("shader_params/")) set_shader_param(param_name, v) @@ -608,16 +612,16 @@ func _update_material(): mat.set_shader_parameter("u_terrain_globalmap", globalmap_texture) -func _add_debug_cube(terrain, aabb: AABB): - var world = terrain.get_world_3d() +func _add_debug_cube(terrain: Node3D, aabb: AABB): + var world : World3D = terrain.get_world_3d() if _debug_wirecube_mesh == null: _debug_wirecube_mesh = HT_Util.create_wirecube_mesh() - var mat = StandardMaterial3D.new() + var mat := StandardMaterial3D.new() mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED _debug_wirecube_mesh.surface_set_material(0, mat) - var debug_cube = HT_DirectMeshInstance.new() + var debug_cube := HT_DirectMeshInstance.new() debug_cube.set_mesh(_debug_wirecube_mesh) debug_cube.set_world(world) #aabb.position.y += 0.2*randf() @@ -644,10 +648,10 @@ func is_layer_index_valid() -> bool: func _get_configuration_warnings() -> PackedStringArray: - var warnings = PackedStringArray() + var warnings := PackedStringArray() var terrain = _get_terrain() - if not (terrain is HTerrain): + if not (is_instance_of(terrain, HTerrain)): warnings.append("This node must be child of an HTerrain node") return warnings @@ -685,25 +689,25 @@ func get_cast_shadow() -> int: static func _generate_multimesh(resolution: int, density: float, mesh: Mesh, multimesh: MultiMesh): assert(multimesh != null) - var position_randomness = 0.5 - var scale_randomness = 0.0 + var position_randomness := 0.5 + var scale_randomness := 0.0 #var color_randomness = 0.5 - var cell_count = resolution * resolution - var idensity = int(density) - var random_instance_count = int(cell_count * (density - floorf(density))) - var total_instance_count = cell_count * idensity + random_instance_count + var cell_count := resolution * resolution + var idensity := int(density) + var random_instance_count := int(cell_count * (density - floorf(density))) + var total_instance_count := cell_count * idensity + random_instance_count multimesh.instance_count = total_instance_count multimesh.mesh = mesh # First pass ensures uniform spread - var i = 0 + var i := 0 for z in resolution: for x in resolution: for j in idensity: - var pos = Vector3(x, 0, z) + var pos := Vector3(x, 0, z) pos.x += randf_range(-position_randomness, position_randomness) pos.z += randf_range(-position_randomness, position_randomness) @@ -722,10 +726,10 @@ static func _generate_multimesh(resolution: int, density: float, mesh: Mesh, mul static func _get_random_instance_basis(scale_randomness: float) -> Basis: - var sr = randf_range(0, scale_randomness) - var s = 1.0 + (sr * sr * sr * sr * sr) * 50.0 + var sr := randf_range(0, scale_randomness) + var s := 1.0 + (sr * sr * sr * sr * sr) * 50.0 - var basis = Basis() + var basis := Basis() basis = basis.scaled(Vector3(1, s, 1)) basis = basis.rotated(Vector3(0, 1, 0), randf_range(0, PI)) diff --git a/addons/zylann.hterrain/hterrain_mesher.gd b/addons/zylann.hterrain/hterrain_mesher.gd index 8b52bc0a..bc9ef44a 100644 --- a/addons/zylann.hterrain/hterrain_mesher.gd +++ b/addons/zylann.hterrain/hterrain_mesher.gd @@ -33,7 +33,7 @@ func configure(chunk_size_x: int, chunk_size_y: int, lod_count: int): # TODO Will reduce the size of this cache, but need index buffer swap feature for seams in SEAM_CONFIG_COUNT: - var slot = [] + var slot := [] slot.resize(lod_count) _mesh_cache[seams] = slot @@ -55,14 +55,14 @@ static func make_flat_chunk(quad_count_x: int, quad_count_y: int, stride: int, s positions[i] = Vector3(x * stride, 0, y * stride) i += 1 - var indices = make_indices(quad_count_x, quad_count_y, seams) + var indices := make_indices(quad_count_x, quad_count_y, seams) - var arrays = [] + var arrays := [] arrays.resize(Mesh.ARRAY_MAX); arrays[Mesh.ARRAY_VERTEX] = positions arrays[Mesh.ARRAY_INDEX] = indices - var mesh = ArrayMesh.new() + var mesh := ArrayMesh.new() mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays) return mesh @@ -318,8 +318,8 @@ static func make_heightmap_mesh(heightmap: Image, stride: int, scale: Vector3, var i := 0 for mz in size_z: for mx in size_x: - var x = mx * stride - var z = mz * stride + var x := mx * stride + var z := mz * stride var y := heightmap.get_pixel(x, z).r positions[i] = Vector3(x, y, z) * scale i += 1 diff --git a/addons/zylann.hterrain/hterrain_resource_loader.gd b/addons/zylann.hterrain/hterrain_resource_loader.gd index 7f7dce1d..ccc176bf 100644 --- a/addons/zylann.hterrain/hterrain_resource_loader.gd +++ b/addons/zylann.hterrain/hterrain_resource_loader.gd @@ -11,7 +11,7 @@ func _get_recognized_extensions() -> PackedStringArray: func _get_resource_type(path: String) -> String: - var ext = path.get_extension().to_lower() + var ext := path.get_extension().to_lower() if ext == HTerrainData.META_EXTENSION: return "Resource" return "" @@ -25,11 +25,11 @@ func _get_resource_type(path: String) -> String: # return ??? -func _handles_type(typename: String) -> bool: - return typename == "Resource" +func _handles_type(typename: StringName) -> bool: + return typename == &"Resource" -func _load(path, original_path): +func _load(path: String, original_path: String, use_sub_threads: bool, cache_mode: int): var res = HTerrainData.new() res.load_data(path.get_base_dir()) return res diff --git a/addons/zylann.hterrain/hterrain_resource_saver.gd b/addons/zylann.hterrain/hterrain_resource_saver.gd index e0660a98..be757e8e 100644 --- a/addons/zylann.hterrain/hterrain_resource_saver.gd +++ b/addons/zylann.hterrain/hterrain_resource_saver.gd @@ -16,8 +16,8 @@ func _recognize(res: Resource) -> bool: return res is HTerrainData -func _save(resource: Resource, path: String, flags: int) -> int: - if resource.save_data(path.get_base_dir()) +func _save(resource: Resource, path: String, flags: int) -> Error: + if resource.save_data(path.get_base_dir()): return OK # This can occur if at least one map of the terrain fails to save. # It doesnt necessarily mean the entire terrain failed to save. diff --git a/addons/zylann.hterrain/hterrain_texture_set.gd b/addons/zylann.hterrain/hterrain_texture_set.gd index bd0dda09..36f37535 100644 --- a/addons/zylann.hterrain/hterrain_texture_set.gd +++ b/addons/zylann.hterrain/hterrain_texture_set.gd @@ -87,18 +87,18 @@ func _get_property_list() -> Array: ] -func _get(key: String): - if key == "mode": +func _get(key: StringName): + if key == &"mode": return _mode - if key == "textures": + if key == &"textures": return _textures -func _set(key: String, value): - if key == "mode": +func _set(key: StringName, value): + if key == &"mode": # Not using set_mode() here because otherwise it could reset stuff set before... _mode = value - if key == "textures": + if key == &"textures": _textures = value @@ -118,6 +118,7 @@ func get_slots_count() -> int: else: assert(false) + return 0 func get_texture_count() -> int: @@ -125,7 +126,7 @@ func get_texture_count() -> int: return len(texs) -func get_texture(slot_index: int, ground_texture_type: int) -> Texture: +func get_texture(slot_index: int, ground_texture_type: int) -> Texture2D: if _mode == MODE_TEXTURE_ARRAYS: # Can't get a single texture at once return null @@ -138,9 +139,10 @@ func get_texture(slot_index: int, ground_texture_type: int) -> Texture: else: assert(false) + return null -func set_texture(slot_index: int, ground_texture_type: int, texture: Texture): +func set_texture(slot_index: int, ground_texture_type: int, texture: Texture2D): assert(_mode == MODE_TEXTURES) var texs = _textures[ground_texture_type] if texs[slot_index] != texture: @@ -148,14 +150,14 @@ func set_texture(slot_index: int, ground_texture_type: int, texture: Texture): emit_changed() -func get_texture_array(ground_texture_type: int) -> TextureArray: +func get_texture_array(ground_texture_type: int) -> Texture2DArray: if _mode != MODE_TEXTURE_ARRAYS: return null var texs = _textures[ground_texture_type] return texs[0] -func set_texture_array(ground_texture_type: int, texarray: TextureArray): +func set_texture_array(ground_texture_type: int, texarray: Texture2DArray): assert(_mode == MODE_TEXTURE_ARRAYS) var texs = _textures[ground_texture_type] if texs[0] != texarray: diff --git a/addons/zylann.hterrain/native/factory.gd b/addons/zylann.hterrain/native/factory.gd index 1a91c9a3..12a079d0 100644 --- a/addons/zylann.hterrain/native/factory.gd +++ b/addons/zylann.hterrain/native/factory.gd @@ -1,3 +1,4 @@ +@tool const NATIVE_PATH = "res://addons/zylann.hterrain/native/" diff --git a/addons/zylann.hterrain/native/image_utils_generic.gd b/addons/zylann.hterrain/native/image_utils_generic.gd index e5fcc18f..2a8aed89 100644 --- a/addons/zylann.hterrain/native/image_utils_generic.gd +++ b/addons/zylann.hterrain/native/image_utils_generic.gd @@ -1,3 +1,4 @@ +@tool # These functions are the same as the ones found in the GDNative library. # They are used if the user's platform is not supported. @@ -8,7 +9,7 @@ var _blur_buffer : Image func get_red_range(im: Image, rect: Rect2) -> Vector2: - rect = rect.clip(Rect2(0, 0, im.get_width(), im.get_height())) + rect = rect.intersection(Rect2(0, 0, im.get_width(), im.get_height())) var min_x := int(rect.position.x) var min_y := int(rect.position.y) var max_x := min_x + int(rect.size.x) @@ -29,7 +30,7 @@ func get_red_range(im: Image, rect: Rect2) -> Vector2: func get_red_sum(im: Image, rect: Rect2) -> float: - rect = rect.clip(Rect2(0, 0, im.get_width(), im.get_height())) + rect = rect.intersection(Rect2(0, 0, im.get_width(), im.get_height())) var min_x := int(rect.position.x) var min_y := int(rect.position.y) var max_x := min_x + int(rect.size.x) @@ -44,9 +45,7 @@ func get_red_sum(im: Image, rect: Rect2) -> float: return sum -func get_red_sum_weighted(im: Image, brush: Image, pos: Vector2, - var factor: float) -> float: - +func get_red_sum_weighted(im: Image, brush: Image, pos: Vector2, factor: float) -> float: var min_x = int(pos.x) var min_y = int(pos.y) var max_x = min_x + brush.get_width() @@ -73,7 +72,7 @@ func get_red_sum_weighted(im: Image, brush: Image, pos: Vector2, return sum -func add_red_brush(im: Image, brush: Image, pos: Vector2, var factor: float): +func add_red_brush(im: Image, brush: Image, pos: Vector2, factor: float): var min_x = int(pos.x) var min_y = int(pos.y) var max_x = min_x + brush.get_width() @@ -153,7 +152,7 @@ func lerp_color_brush(im: Image, brush: Image, pos: Vector2, func generate_gaussian_brush(im: Image) -> float: var sum := 0.0 var center := Vector2(im.get_width() / 2, im.get_height() / 2) - var radius := min(im.get_width(), im.get_height()) / 2.0 + var radius := minf(im.get_width(), im.get_height()) / 2.0 for y in im.get_height(): for x in im.get_width(): diff --git a/addons/zylann.hterrain/native/quad_tree_lod_generic.gd b/addons/zylann.hterrain/native/quad_tree_lod_generic.gd index da85c386..8518965e 100644 --- a/addons/zylann.hterrain/native/quad_tree_lod_generic.gd +++ b/addons/zylann.hterrain/native/quad_tree_lod_generic.gd @@ -1,10 +1,14 @@ -tool +@tool # Independent quad tree designed to handle LOD class HT_QTLQuad: + # Optional array of 4 HT_QTLQuad var children = null + + # TODO Use Vector2i var origin_x : int = 0 var origin_y : int = 0 + var data = null func _init(): @@ -17,7 +21,7 @@ class HT_QTLQuad: func clear_children(): children = null - func has_children(): + func has_children() -> bool: return children != null @@ -99,7 +103,7 @@ func _update(quad: HT_QTLQuad, lod: int, view_pos: Vector3): chunk_size * (Vector3(quad.origin_x, 0, quad.origin_y) + Vector3(0.5, 0, 0.5)) if _vertical_bounds_func.is_valid(): - var vbounds = _vertical_bounds_func.call(quad.origin_x, quad.origin_y, lod) + var vbounds : Vector2 = _vertical_bounds_func.call(quad.origin_x, quad.origin_y, lod) world_center.y = (vbounds.x + vbounds.y) / 2.0 var split_distance := _base_size * lod_factor * _split_scale @@ -132,7 +136,7 @@ func _update(quad: HT_QTLQuad, lod: int, view_pos: Vector3): if no_split_child and world_center.distance_to(view_pos) > split_distance: # Join for i in 4: - var child = quad.children[i] + var child : HT_QTLQuad = quad.children[i] _recycle_chunk(child.data, child.origin_x, child.origin_y, lod - 1) quad.clear_children() quad.data = _make_chunk(lod, quad.origin_x, quad.origin_y) diff --git a/addons/zylann.hterrain/tools/about/about_dialog.gd b/addons/zylann.hterrain/tools/about/about_dialog.gd index 421a8a2c..c8401cc8 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.gd +++ b/addons/zylann.hterrain/tools/about/about_dialog.gd @@ -8,7 +8,7 @@ const HT_Errors = preload("../../util/errors.gd") const PLUGIN_CFG_PATH = "res://addons/zylann.hterrain/plugin.cfg" -@onready var _about_rich_text_label = $VB/HB2/TC/About +@onready var _about_rich_text_label : RichTextLabel = $VB/HB2/TC/About var _logger = HT_Logger.get_for(self) @@ -18,7 +18,7 @@ func _ready(): return var plugin_cfg = ConfigFile.new() - var err = plugin_cfg.load(PLUGIN_CFG_PATH) + var err := plugin_cfg.load(PLUGIN_CFG_PATH) if err != OK: _logger.error("Could not load {0}: {1}" \ .format([PLUGIN_CFG_PATH, HT_Errors.get_message(err)])) diff --git a/addons/zylann.hterrain/tools/about/about_dialog.tscn b/addons/zylann.hterrain/tools/about/about_dialog.tscn index 2fe162b1..cdf2854c 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.tscn +++ b/addons/zylann.hterrain/tools/about/about_dialog.tscn @@ -1,88 +1,42 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://cvuubd08805oa"] -[ext_resource path="res://addons/zylann.hterrain/tools/about/about_dialog.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg" type="Texture" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd" type="Script" id=3] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/about/about_dialog.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://sdaddk8wxjin" path="res://addons/zylann.hterrain/tools/icons/icon_heightmap_node_large.svg" id="2"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/util/rich_text_label_hyperlinks.gd" id="3"] [node name="AboutDialog" type="AcceptDialog"] -margin_right = 630.0 -margin_bottom = 250.0 -rect_min_size = Vector2( 630, 250 ) -window_title = "About the HTerrain plugin" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +size = Vector2i(516, 357) +visible = true +script = ExtResource("1") [node name="VB" type="VBoxContainer" parent="."] +custom_minimum_size = Vector2(500, 300) +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 [node name="HB2" type="HBoxContainer" parent="VB"] -margin_right = 614.0 -margin_bottom = 210.0 +layout_mode = 2 size_flags_vertical = 3 [node name="TextureRect" type="TextureRect" parent="VB/HB2"] -margin_right = 128.0 -margin_bottom = 210.0 -texture = ExtResource( 2 ) +layout_mode = 2 +texture = ExtResource("2") +stretch_mode = 2 [node name="TC" type="TabContainer" parent="VB/HB2"] -margin_left = 132.0 -margin_right = 614.0 -margin_bottom = 210.0 +layout_mode = 2 size_flags_horizontal = 3 -tab_align = 0 [node name="About" type="RichTextLabel" parent="VB/HB2/TC"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 32.0 -margin_right = -4.0 -margin_bottom = -4.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 bbcode_enabled = true -bbcode_text = "[b]Version:[/b] {version} -[b]Author:[/b] Marc Gilleron -[b]Repository:[/b] [url]https://github.com/Zylann/godot_heightmap_plugin[/url] -[b]Issue tracker:[/b] [url]https://github.com/Zylann/godot_heightmap_plugin/issues[/url] - -[b]Gold supporters:[/b] - -Aaron Franke (aaronfranke) - -[b]Silver supporters:[/b] - -TheConceptBoy -Chris Bolton (yochrisbolton) -Gamerfiend (Snowminx) -greenlion (Justin Swanhart) -segfault-god (jp.owo.Manda) -RonanZe -Phyronnaz -NoFr1ends (Lynx) - -[b]Bronze supporters:[/b] - -rcorre (Ryan Roden-Corrent) -duchainer (Raphaël Duchaîne) -MadMartian -stackdump (stackdump.eth) -Treer -MrGreaterThan -lenis0012 -" text = "Version: {version} Author: Marc Gilleron Repository: https://github.com/Zylann/godot_heightmap_plugin @@ -113,16 +67,11 @@ Treer MrGreaterThan lenis0012 " -script = ExtResource( 3 ) +script = ExtResource("3") [node name="License" type="RichTextLabel" parent="VB/HB2/TC"] visible = false -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 32.0 -margin_right = -4.0 -margin_bottom = -4.0 +layout_mode = 2 text = "Copyright (c) 2016-2020 Marc Gilleron Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -133,8 +82,5 @@ THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMP " [node name="HB" type="HBoxContainer" parent="VB"] -margin_top = 214.0 -margin_right = 614.0 -margin_bottom = 234.0 +layout_mode = 2 alignment = 1 - diff --git a/addons/zylann.hterrain/tools/brush/brush.gd b/addons/zylann.hterrain/tools/brush/brush.gd index 265323bf..07cca31c 100644 --- a/addons/zylann.hterrain/tools/brush/brush.gd +++ b/addons/zylann.hterrain/tools/brush/brush.gd @@ -6,6 +6,7 @@ # This is separate from Painter because it could apply to multiple Painters at once. const HT_Errors = preload("../../util/errors.gd") +const HT_Painter = preload("./painter.gd") const SHAPES_DIR = "addons/zylann.hterrain/tools/brush/shapes" const DEFAULT_BRUSH_TEXTURE_PATH = SHAPES_DIR + "/round2.exr" @@ -115,17 +116,18 @@ func set_shapes(shapes: Array): shapes_changed.emit() -func get_shapes() -> Array: +func get_shapes() -> Array[Texture2D]: return _shapes.duplicate(false) -func get_shape(i: int) -> Texture: +func get_shape(i: int) -> Texture2D: return _shapes[i] -static func load_shape_from_image_file(fpath: String, logger, retries = 1) -> Texture: - var im := Image.load_from_file(fpath) - if im == null: +static func load_shape_from_image_file(fpath: String, logger, retries := 1) -> Texture2D: + var im := Image.new() + var err := im.load(fpath) + if err != OK: if retries > 0: # TODO There is a bug with Godot randomly being unable to load images. # See https://github.com/Zylann/godot_heightmap_plugin/issues/219 @@ -138,13 +140,13 @@ static func load_shape_from_image_file(fpath: String, logger, retries = 1) -> Te logger.error("Could not load image at '{0}', error {1}" \ .format([fpath, HT_Errors.get_message(err)])) return null - var tex = ImageTexture.create_from_image(im) + var tex := ImageTexture.create_from_image(im) return tex - + # Call this while handling mouse or pen input. # If it returns false, painting should not run. -func configure_paint_input(painters: Array, position: Vector2, pressure: float) -> bool: +func configure_paint_input(painters: Array[HT_Painter], position: Vector2, pressure: float) -> bool: assert(len(_shapes) != 0) # DEBUG @@ -152,13 +154,15 @@ func configure_paint_input(painters: Array, position: Vector2, pressure: float) if position.distance_to(_prev_position) < _frequency_distance: return false - var now = Time.get_ticks_msec() + var now := Time.get_ticks_msec() if (now - _prev_time_ms) < _frequency_time_ms: return false _prev_position = position _prev_time_ms = now - for painter in painters: + for painter_index in len(painters): + var painter : HT_Painter = painters[painter_index] + if _random_rotation: painter.set_brush_rotation(randf_range(-PI, PI)) else: diff --git a/addons/zylann.hterrain/tools/brush/brush_editor.gd b/addons/zylann.hterrain/tools/brush/brush_editor.gd index 13b64b15..c45943ef 100644 --- a/addons/zylann.hterrain/tools/brush/brush_editor.gd +++ b/addons/zylann.hterrain/tools/brush/brush_editor.gd @@ -6,6 +6,7 @@ const HT_Brush = preload("./brush.gd") const HT_Errors = preload("../../util/errors.gd") #const NativeFactory = preload("../../native/factory.gd") const HT_Logger = preload("../../util/logger.gd") +const HT_IntervalSlider = preload("../util/interval_slider.gd") const HT_BrushSettingsDialogScene = preload("./settings_dialog/brush_settings_dialog.tscn") const HT_BrushSettingsDialog = preload("./settings_dialog/brush_settings_dialog.gd") @@ -15,38 +16,37 @@ const HT_BrushSettingsDialog = preload("./settings_dialog/brush_settings_dialog. @onready var _size_value_label : Label = $GridContainer/BrushSizeControl/Label #onready var _size_label = _params_container.get_node("BrushSizeLabel") -@onready var _opacity_slider = $GridContainer/BrushOpacityControl/Slider -@onready var _opacity_value_label = $GridContainer/BrushOpacityControl/Label -@onready var _opacity_control = $GridContainer/BrushOpacityControl -@onready var _opacity_label = $GridContainer/BrushOpacityLabel +@onready var _opacity_slider : Slider = $GridContainer/BrushOpacityControl/Slider +@onready var _opacity_value_label : Label = $GridContainer/BrushOpacityControl/Label +@onready var _opacity_control : Control = $GridContainer/BrushOpacityControl +@onready var _opacity_label : Label = $GridContainer/BrushOpacityLabel -@onready var _flatten_height_container = $GridContainer/HB -@onready var _flatten_height_box = $GridContainer/HB/FlattenHeightControl -@onready var _flatten_height_label = $GridContainer/FlattenHeightLabel -@onready var _flatten_height_pick_button = $GridContainer/HB/FlattenHeightPickButton +@onready var _flatten_height_container : Control = $GridContainer/HB +@onready var _flatten_height_box : SpinBox = $GridContainer/HB/FlattenHeightControl +@onready var _flatten_height_label : Label = $GridContainer/FlattenHeightLabel +@onready var _flatten_height_pick_button : Button = $GridContainer/HB/FlattenHeightPickButton -@onready var _color_picker = $GridContainer/ColorPickerButton -@onready var _color_label = $GridContainer/ColorLabel +@onready var _color_picker : ColorPickerButton = $GridContainer/ColorPickerButton +@onready var _color_label : Label = $GridContainer/ColorLabel -@onready var _density_slider = $GridContainer/DensitySlider -@onready var _density_label = $GridContainer/DensityLabel +@onready var _density_slider : Slider = $GridContainer/DensitySlider +@onready var _density_label : Label = $GridContainer/DensityLabel -@onready var _holes_label = $GridContainer/HoleLabel -@onready var _holes_checkbox = $GridContainer/HoleCheckbox +@onready var _holes_label : Label = $GridContainer/HoleLabel +@onready var _holes_checkbox : CheckBox = $GridContainer/HoleCheckbox -@onready var _slope_limit_label = $GridContainer/SlopeLimitLabel -@onready var _slope_limit_control = $GridContainer/SlopeLimit +@onready var _slope_limit_label : Label = $GridContainer/SlopeLimitLabel +@onready var _slope_limit_control : HT_IntervalSlider = $GridContainer/SlopeLimit -@onready var _shape_texture_rect = get_node("BrushShapeButton/TextureRect") +@onready var _shape_texture_rect : TextureRect = get_node("BrushShapeButton/TextureRect") var _terrain_painter : HT_TerrainPainter -var _load_image_dialog = null -var _brush_settings_dialog = null +var _brush_settings_dialog : HT_BrushSettingsDialog = null var _logger = HT_Logger.get_for(self) # TODO This is an ugly workaround for https://github.com/godotengine/godot/issues/19479 -onready var _temp_node = get_node("Temp") -onready var _grid_container = get_node("GridContainer") +@onready var _temp_node = get_node("Temp") +@onready var _grid_container = get_node("GridContainer") func _set_visibility_of(node: Control, v: bool): node.get_parent().remove_child(node) if v: @@ -72,7 +72,7 @@ func _ready(): # _size_slider.max_value = 50 -func setup_dialogs(base_control: Control): +func setup_dialogs(base_control: Node): assert(_brush_settings_dialog == null) _brush_settings_dialog = HT_BrushSettingsDialogScene.instantiate() base_control.add_child(_brush_settings_dialog) @@ -117,10 +117,10 @@ func set_terrain_painter(terrain_painter: HT_TerrainPainter): _flatten_height_box.value = _terrain_painter.get_flatten_height() _color_picker.get_picker().color = _terrain_painter.get_color() _density_slider.value = _terrain_painter.get_detail_density() - _holes_checkbox.pressed = not _terrain_painter.get_mask_flag() + _holes_checkbox.button_pressed = not _terrain_painter.get_mask_flag() - var low = rad_to_deg(_terrain_painter.get_slope_limit_low_angle()) - var high = rad_to_deg(_terrain_painter.get_slope_limit_high_angle()) + var low := rad_to_deg(_terrain_painter.get_slope_limit_low_angle()) + var high := rad_to_deg(_terrain_painter.get_slope_limit_high_angle()) _slope_limit_control.set_values(low, high) set_display_mode(_terrain_painter.get_mode()) @@ -138,7 +138,7 @@ func set_terrain_painter(terrain_painter: HT_TerrainPainter): func _on_flatten_height_changed(): _flatten_height_box.value = _terrain_painter.get_flatten_height() - _flatten_height_pick_button.pressed = false + _flatten_height_pick_button.button_pressed = false func _on_brush_shapes_changed(): @@ -151,7 +151,8 @@ func set_display_mode(mode: int): var show_density := mode == HT_TerrainPainter.MODE_DETAIL var show_opacity := mode != HT_TerrainPainter.MODE_MASK var show_holes := mode == HT_TerrainPainter.MODE_MASK - var show_slope_limit := mode == HT_TerrainPainter.MODE_SPLAT or mode == HT_TerrainPainter.MODE_DETAIL + var show_slope_limit := \ + mode == HT_TerrainPainter.MODE_SPLAT or mode == HT_TerrainPainter.MODE_DETAIL _set_visibility_of(_opacity_label, show_opacity) _set_visibility_of(_opacity_control, show_opacity) @@ -171,7 +172,7 @@ func set_display_mode(mode: int): _set_visibility_of(_slope_limit_label, show_slope_limit) _set_visibility_of(_slope_limit_control, show_slope_limit) - _flatten_height_pick_button.pressed = false + _flatten_height_pick_button.button_pressed = false func _on_size_slider_value_changed(v: float): diff --git a/addons/zylann.hterrain/tools/brush/decal.gd b/addons/zylann.hterrain/tools/brush/decal.gd index d0b6f3e4..a645e113 100644 --- a/addons/zylann.hterrain/tools/brush/decal.gd +++ b/addons/zylann.hterrain/tools/brush/decal.gd @@ -4,6 +4,7 @@ # TODO Use an actual decal node, it wasn't available in Godot 3 const HT_DirectMeshInstance = preload("../../util/direct_mesh_instance.gd") +const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") const HT_Util = preload("../../util/util.gd") @@ -13,7 +14,7 @@ var _material = ShaderMaterial.new() #var _debug_mesh = CubeMesh.new() #var _debug_mesh_instance = null -var _terrain = null +var _terrain : HTerrain = null func _init(): @@ -32,7 +33,7 @@ func set_size(size: float): _mesh.size = Vector2(size, size) # Must line up to terrain vertex policy, so must apply an off-by-one. # If I don't do that, the brush will appear to wobble above the ground - var ss = size - 1 + var ss := size - 1 # Don't subdivide too much while ss > 50: ss /= 2 @@ -46,13 +47,13 @@ func set_size(size: float): func _on_terrain_transform_changed(terrain_global_trans: Transform3D): var inv = terrain_global_trans.affine_inverse() - _material.set_shader_param("u_terrain_inverse_transform", inv) + _material.set_shader_parameter("u_terrain_inverse_transform", inv) var normal_basis = terrain_global_trans.basis.inverse().transposed() - _material.set_shader_param("u_terrain_normal_basis", normal_basis) + _material.set_shader_parameter("u_terrain_normal_basis", normal_basis) -func set_terrain(terrain): +func set_terrain(terrain: HTerrain): if _terrain == terrain: return diff --git a/addons/zylann.hterrain/tools/brush/painter.gd b/addons/zylann.hterrain/tools/brush/painter.gd index 729a309f..03095c0c 100644 --- a/addons/zylann.hterrain/tools/brush/painter.gd +++ b/addons/zylann.hterrain/tools/brush/painter.gd @@ -87,7 +87,7 @@ func _init(): _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE # No longer available in Godot 4... #_viewport.render_target_v_flip = true - _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONLY_NEXT_FRAME + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE #_viewport.hdr = false _viewport.transparent_bg = true # Apparently HDR doesn't work if this is set to 2D... so let's waste a depth buffer :/ @@ -210,7 +210,7 @@ func paint_input(center_pos: Vector2): # Need to floor the position in case the brush has an odd size var brush_pos := (center_pos - _viewport.size * 0.5).round() _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE - _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONLY_NEXT_FRAME + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE _viewport_bg_sprite.position = -brush_pos _brush_position = brush_pos _cmd_paint = true @@ -264,10 +264,10 @@ func _process(delta: float): var data := _viewport.get_texture().get_image() data.convert(_image.get_format()) - # Flipping on the CPU since the v-flip was removed from viewports in Godot 4... + # TODO Optimize: flipping on the CPU since GPU v-flip was removed in Godot 4... data.flip_y() - var brush_pos = _last_brush_position + var brush_pos := _last_brush_position var dst_x : int = clamp(brush_pos.x, 0, _texture.get_width()) var dst_y : int = clamp(brush_pos.y, 0, _texture.get_height()) @@ -279,9 +279,9 @@ func _process(delta: float): if src_w != 0 and src_h != 0: _mark_modified_chunks(dst_x, dst_y, src_w, src_h) - RenderingServer.texture_set_data_partial( - _texture.get_rid(), data, src_x, src_y, src_w, src_h, dst_x, dst_y, 0, 0) - texture_region_changed.emit_signal(Rect2(dst_x, dst_y, src_w, src_h)) + HT_Util.update_texture_partial( + _texture, data, Rect2i(src_x, src_y, src_w, src_h), Vector2i(dst_x, dst_y)) + texture_region_changed.emit(Rect2(dst_x, dst_y, src_w, src_h)) # Input is handled just before process, so we still have to wait till next frame if _cmd_paint: @@ -316,7 +316,7 @@ func _commit_modified_chunks() -> Dictionary: #_logger.debug("About to commit ", len(_modified_chunks), " chunks") # TODO get_data_partial() would be nice... - var final_image := _texture.get_data() + var final_image := _texture.get_image() for cpos in _modified_chunks: var cx : int = cpos.x var cy : int = cpos.y @@ -327,8 +327,8 @@ func _commit_modified_chunks() -> Dictionary: var h : int = mini(cs, _image.get_height() - y) var rect := Rect2i(x, y, w, h) - var initial_data := _image.get_rect(rect) - var final_data := final_image.get_rect(rect) + var initial_data := _image.get_region(rect) + var final_data := final_image.get_region(rect) chunks_positions.append(cpos) chunks_initial_data.append(initial_data) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd index 9f868334..d9cbb5b9 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd @@ -5,21 +5,23 @@ const HT_Util = preload("../../../util/util.gd") const HT_Brush = preload("../brush.gd") const HT_Logger = preload("../../../util/logger.gd") const HT_EditorUtil = preload("../../util/editor_util.gd") +const HT_SpinSlider = preload("../../util/spin_slider.gd") +const HT_Scratchpad = preload("./preview_scratchpad.gd") -@onready var _scratchpad = $VB/HB/VB3/PreviewScratchpad +@onready var _scratchpad : HT_Scratchpad = $VB/HB/VB3/PreviewScratchpad -@onready var _shape_list = $VB/HB/VB/ShapeList -@onready var _remove_shape_button = $VB/HB/VB/HBoxContainer/RemoveShape -@onready var _change_shape_button = $VB/HB/VB/ChangeShape +@onready var _shape_list : ItemList = $VB/HB/VB/ShapeList +@onready var _remove_shape_button : Button = $VB/HB/VB/HBoxContainer/RemoveShape +@onready var _change_shape_button : Button = $VB/HB/VB/ChangeShape -@onready var _size_slider = $VB/HB/VB2/Settings/Size -@onready var _opacity_slider = $VB/HB/VB2/Settings/Opacity -@onready var _pressure_enabled_checkbox = $VB/HB/VB2/Settings/PressureEnabled -@onready var _pressure_over_size_slider = $VB/HB/VB2/Settings/PressureOverSize -@onready var _pressure_over_opacity_slider = $VB/HB/VB2/Settings/PressureOverOpacity -@onready var _frequency_distance_slider = $VB/HB/VB2/Settings/FrequencyDistance -@onready var _frequency_time_slider = $VB/HB/VB2/Settings/FrequencyTime -@onready var _random_rotation_checkbox = $VB/HB/VB2/Settings/RandomRotation +@onready var _size_slider : HT_SpinSlider = $VB/HB/VB2/Settings/Size +@onready var _opacity_slider : HT_SpinSlider = $VB/HB/VB2/Settings/Opacity +@onready var _pressure_enabled_checkbox : CheckBox = $VB/HB/VB2/Settings/PressureEnabled +@onready var _pressure_over_size_slider : HT_SpinSlider = $VB/HB/VB2/Settings/PressureOverSize +@onready var _pressure_over_opacity_slider : HT_SpinSlider = $VB/HB/VB2/Settings/PressureOverOpacity +@onready var _frequency_distance_slider : HT_SpinSlider = $VB/HB/VB2/Settings/FrequencyDistance +@onready var _frequency_time_slider : HT_SpinSlider = $VB/HB/VB2/Settings/FrequencyTime +@onready var _random_rotation_checkbox : CheckBox = $VB/HB/VB2/Settings/RandomRotation var _brush : HT_Brush # This is a `EditorFileDialog`, @@ -50,12 +52,14 @@ func set_brush(brush : HT_Brush): _update_controls_from_brush() -func setup_dialogs(base_control: Control): +# `base_control` can no longer be hinted as a `Control` because in Godot 4 it could be a +# window or dialog, which are no longer controls... +func setup_dialogs(base_control: Node): assert(_load_image_dialog == null) _load_image_dialog = HT_EditorUtil.create_open_file_dialog() - _load_image_dialog.mode = EditorFileDialog.MODE_OPEN_FILE + _load_image_dialog.file_mode = EditorFileDialog.FILE_MODE_OPEN_FILE _load_image_dialog.add_filter("*.exr ; EXR files") - _load_image_dialog.resizable = true + _load_image_dialog.unresizable = false _load_image_dialog.access = EditorFileDialog.ACCESS_FILESYSTEM _load_image_dialog.current_dir = HT_Brush.SHAPES_DIR _load_image_dialog.file_selected.connect(_on_LoadImageDialog_file_selected) @@ -69,46 +73,46 @@ func _exit_tree(): _load_image_dialog = null -func _get_shapes_from_gui() -> Array: - var shapes = [] +func _get_shapes_from_gui() -> Array[Texture2D]: + var shapes := [] for i in _shape_list.get_item_count(): - var icon = _shape_list.get_item_icon(i) + var icon : Texture2D = _shape_list.get_item_icon(i) assert(icon != null) shapes.append(icon) return shapes -func _update_shapes_gui(shapes: Array): +func _update_shapes_gui(shapes: Array[Texture2D]): _shape_list.clear() for shape in shapes: assert(shape != null) - assert(shape is Texture) + assert(shape is Texture2D) _shape_list.add_icon_item(shape) _update_shape_list_buttons() func _on_AddShape_pressed(): _load_image_index = -1 - _load_image_dialog.mode = EditorFileDialog.MODE_OPEN_FILES + _load_image_dialog.file_mode = EditorFileDialog.FILE_MODE_OPEN_FILES _load_image_dialog.popup_centered_ratio(0.7) func _on_RemoveShape_pressed(): - var selected_indices = _shape_list.get_selected_items() + var selected_indices := _shape_list.get_selected_items() if len(selected_indices) == 0: return var index : int = selected_indices[0] _shape_list.remove_item(index) - var shapes = _get_shapes_from_gui() + var shapes := _get_shapes_from_gui() for brush in _get_brushes(): brush.set_shapes(shapes) _update_shape_list_buttons() -func _on_ShapeList_item_activated(index): +func _on_ShapeList_item_activated(index: int): _request_modify_shape(index) @@ -121,11 +125,11 @@ func _on_ChangeShape_pressed(): func _request_modify_shape(index: int): _load_image_index = index - _load_image_dialog.mode = EditorFileDialog.MODE_OPEN_FILE + _load_image_dialog.file_mode = EditorFileDialog.FILE_MODE_OPEN_FILE _load_image_dialog.popup_centered_ratio(0.7) -func _on_LoadImageDialog_files_selected(fpaths: PoolStringArray): +func _on_LoadImageDialog_files_selected(fpaths: PackedStringArray): var shapes := _get_shapes_from_gui() for fpath in fpaths: @@ -179,12 +183,13 @@ func _update_controls_from_brush(): _size_slider.set_value(brush.get_size(), false) _opacity_slider.set_value(brush.get_opacity() * 100.0, false) - _pressure_enabled_checkbox.pressed = brush.is_pressure_enabled() + _pressure_enabled_checkbox.button_pressed = brush.is_pressure_enabled() _pressure_over_size_slider.set_value(brush.get_pressure_over_scale() * 100.0, false) _pressure_over_opacity_slider.set_value(brush.get_pressure_over_opacity() * 100.0, false) _frequency_distance_slider.set_value(brush.get_frequency_distance(), false) - _frequency_time_slider.set_value(1000.0 / maxf(0.1, float(brush.get_frequency_time_ms())), false) - _random_rotation_checkbox.pressed = brush.is_random_rotation_enabled() + _frequency_time_slider.set_value( + 1000.0 / maxf(0.1, float(brush.get_frequency_time_ms())), false) + _random_rotation_checkbox.button_pressed = brush.is_random_rotation_enabled() func _on_ClearScratchpad_pressed(): @@ -235,7 +240,7 @@ func _on_RandomRotation_toggled(button_pressed: bool): brush.set_random_rotation_enabled(button_pressed) -func _get_brushes() -> Array: +func _get_brushes() -> Array[HT_Brush]: if _brush != null: # We edit both the preview brush and the terrain brush # TODO Could we simply share the brush? @@ -248,12 +253,12 @@ func _on_ShapeList_item_selected(index): _update_shape_list_buttons() -func _on_ShapeList_nothing_selected(): - _update_shape_list_buttons() - - func _update_shape_list_buttons(): - var selected_count = len(_shape_list.get_selected_items()) + var selected_count := len(_shape_list.get_selected_items()) # There must be at least one shape _remove_shape_button.disabled = _shape_list.get_item_count() == 1 or selected_count == 0 _change_shape_button.disabled = selected_count == 0 + + +func _on_shape_list_empty_clicked(at_position, mouse_button_index): + _update_shape_list_buttons() diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn index 1ed5c28f..20549faa 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn @@ -1,209 +1,157 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://d2rt3wj8xkhp2"] -[ext_resource path="res://addons/zylann.hterrain/tools/util/spin_slider.tscn" type="PackedScene" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd" type="Script" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn" type="PackedScene" id=4] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/spin_slider.tscn" id="2"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd" id="3"] +[ext_resource type="PackedScene" uid="uid://ng00jipfeucy" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn" id="4"] [node name="BrushSettingsDialog" type="AcceptDialog"] +size = Vector2i(492, 342) visible = true -margin_left = 46.0 -margin_top = 65.0 -margin_right = 746.0 -margin_bottom = 465.0 -rect_min_size = Vector2( 700, 400 ) -window_title = "Brush settings" -resizable = true -script = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource("3") [node name="VB" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = 484.0 +offset_bottom = 293.0 [node name="HB" type="HBoxContainer" parent="VB"] -margin_right = 684.0 -margin_bottom = 356.0 +layout_mode = 2 size_flags_vertical = 3 -custom_constants/separation = 8 [node name="VB" type="VBoxContainer" parent="VB/HB"] -margin_right = 120.0 -margin_bottom = 356.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Label" type="Label" parent="VB/HB/VB"] -margin_right = 120.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Shapes" [node name="ShapeList" type="ItemList" parent="VB/HB/VB"] -margin_top = 18.0 -margin_right = 120.0 -margin_bottom = 308.0 -rect_min_size = Vector2( 120, 0 ) +layout_mode = 2 size_flags_vertical = 3 -fixed_icon_size = Vector2( 100, 100 ) +fixed_icon_size = Vector2i(100, 100) [node name="ChangeShape" type="Button" parent="VB/HB/VB"] -margin_top = 312.0 -margin_right = 120.0 -margin_bottom = 332.0 +layout_mode = 2 disabled = true text = "Change..." [node name="HBoxContainer" type="HBoxContainer" parent="VB/HB/VB"] -margin_top = 336.0 -margin_right = 120.0 -margin_bottom = 356.0 +layout_mode = 2 [node name="AddShape" type="Button" parent="VB/HB/VB/HBoxContainer"] -margin_right = 49.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Add..." [node name="RemoveShape" type="Button" parent="VB/HB/VB/HBoxContainer"] -margin_left = 53.0 -margin_right = 117.0 -margin_bottom = 20.0 +layout_mode = 2 disabled = true text = "Remove" [node name="VB2" type="VBoxContainer" parent="VB/HB"] -margin_left = 128.0 -margin_right = 476.0 -margin_bottom = 356.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="VB/HB/VB2"] -margin_right = 348.0 -margin_bottom = 14.0 +layout_mode = 2 [node name="Settings" type="VBoxContainer" parent="VB/HB/VB2"] -margin_top = 18.0 -margin_right = 348.0 -margin_bottom = 262.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="Size" parent="VB/HB/VB2/Settings" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_right = 348.0 -margin_bottom = 28.0 +[node name="Size" parent="VB/HB/VB2/Settings" instance=ExtResource("2")] +custom_minimum_size = Vector2(32, 28) +layout_mode = 2 size_flags_horizontal = 3 -_value = 32.0 -_min_value = 2.0 -_max_value = 500.0 -_prefix = "Size:" -_suffix = "px" -_rounded = true -_centered = false -_allow_greater = true -_greater_max_value = 4000.0 - -[node name="Opacity" parent="VB/HB/VB2/Settings" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 32.0 -margin_right = 348.0 -margin_bottom = 60.0 +value = 32.0 +min_value = 2.0 +max_value = 500.0 +prefix = "Size:" +suffix = "px" +rounded = true +centered = true +allow_greater = true +greater_max_value = 4000.0 + +[node name="Opacity" parent="VB/HB/VB2/Settings" instance=ExtResource("2")] +custom_minimum_size = Vector2(32, 28) +layout_mode = 2 size_flags_horizontal = 3 -_value = 100.0 -_prefix = "Opacity" -_suffix = "%" -_rounded = true -_centered = false +value = 100.0 +max_value = 100.0 +prefix = "Opacity" +suffix = "%" +rounded = true +centered = true +greater_max_value = 10000.0 [node name="PressureEnabled" type="CheckBox" parent="VB/HB/VB2/Settings"] -margin_top = 64.0 -margin_right = 348.0 -margin_bottom = 88.0 +layout_mode = 2 text = "Enable pressure (pen tablets)" -[node name="PressureOverSize" parent="VB/HB/VB2/Settings" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 92.0 -margin_right = 348.0 -margin_bottom = 120.0 -_value = 50.0 -_prefix = "Pressure affects size:" -_suffix = "%" -_centered = false - -[node name="PressureOverOpacity" parent="VB/HB/VB2/Settings" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 124.0 -margin_right = 348.0 -margin_bottom = 152.0 -_value = 50.0 -_prefix = "Pressure affects opacity:" -_suffix = "%" -_centered = false - -[node name="FrequencyTime" parent="VB/HB/VB2/Settings" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 156.0 -margin_right = 348.0 -margin_bottom = 184.0 -_value = 60.0 -_min_value = 1.0 -_max_value = 60.0 -_prefix = "Frequency time:" -_suffix = "fps" -_centered = false - -[node name="FrequencyDistance" parent="VB/HB/VB2/Settings" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 188.0 -margin_right = 348.0 -margin_bottom = 216.0 -_prefix = "Frequency distance:" -_suffix = "px" -_centered = false -_greater_max_value = 4000.0 +[node name="PressureOverSize" parent="VB/HB/VB2/Settings" instance=ExtResource("2")] +custom_minimum_size = Vector2(32, 28) +layout_mode = 2 +value = 50.0 +max_value = 100.0 +prefix = "Pressure affects size:" +suffix = "%" +centered = true +greater_max_value = 10000.0 + +[node name="PressureOverOpacity" parent="VB/HB/VB2/Settings" instance=ExtResource("2")] +custom_minimum_size = Vector2(32, 28) +layout_mode = 2 +value = 50.0 +max_value = 100.0 +prefix = "Pressure affects opacity:" +suffix = "%" +centered = true +greater_max_value = 10000.0 + +[node name="FrequencyTime" parent="VB/HB/VB2/Settings" instance=ExtResource("2")] +custom_minimum_size = Vector2(32, 28) +layout_mode = 2 +value = 60.0 +min_value = 1.0 +max_value = 60.0 +prefix = "Frequency time:" +suffix = "fps" +centered = true +greater_max_value = 10000.0 + +[node name="FrequencyDistance" parent="VB/HB/VB2/Settings" instance=ExtResource("2")] +custom_minimum_size = Vector2(32, 28) +layout_mode = 2 +max_value = 100.0 +prefix = "Frequency distance:" +suffix = "px" +centered = true +greater_max_value = 4000.0 [node name="RandomRotation" type="CheckBox" parent="VB/HB/VB2/Settings"] -margin_top = 220.0 -margin_right = 348.0 -margin_bottom = 244.0 +layout_mode = 2 text = "Random rotation" [node name="HSeparator" type="HSeparator" parent="VB/HB/VB2/Settings"] visible = false -margin_top = 124.0 -margin_right = 292.0 -margin_bottom = 128.0 +layout_mode = 2 [node name="SizeLimitHB" type="HBoxContainer" parent="VB/HB/VB2/Settings"] visible = false -margin_top = 124.0 -margin_right = 142.0 -margin_bottom = 152.0 +layout_mode = 2 [node name="Label" type="Label" parent="VB/HB/VB2/Settings/SizeLimitHB"] -margin_top = 7.0 -margin_right = 64.0 -margin_bottom = 21.0 -hint_tooltip = "This allows to change the upper limit of the brush size slider. Bear in mind high values can slow down the editor." +layout_mode = 2 mouse_filter = 0 text = "Size limit:" [node name="SizeLimit" type="SpinBox" parent="VB/HB/VB2/Settings/SizeLimitHB"] -margin_left = 68.0 -margin_right = 142.0 -margin_bottom = 28.0 +layout_mode = 2 size_flags_horizontal = 3 min_value = 1.0 max_value = 1000.0 @@ -211,52 +159,38 @@ value = 200.0 [node name="HSeparator2" type="HSeparator" parent="VB/HB/VB2/Settings"] visible = false -margin_top = 188.0 -margin_right = 292.0 -margin_bottom = 192.0 +layout_mode = 2 [node name="HB" type="HBoxContainer" parent="VB/HB/VB2/Settings"] visible = false -margin_top = 248.0 -margin_right = 292.0 -margin_bottom = 268.0 +layout_mode = 2 [node name="Button" type="Button" parent="VB/HB/VB2/Settings/HB"] -margin_right = 99.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Load preset..." [node name="Button2" type="Button" parent="VB/HB/VB2/Settings/HB"] -margin_left = 103.0 -margin_right = 201.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Save preset..." [node name="VB3" type="VBoxContainer" parent="VB/HB"] -margin_left = 484.0 -margin_right = 684.0 -margin_bottom = 356.0 +layout_mode = 2 [node name="Label" type="Label" parent="VB/HB/VB3"] -margin_right = 200.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Scratchpad" -[node name="PreviewScratchpad" parent="VB/HB/VB3" instance=ExtResource( 4 )] -margin_top = 18.0 -margin_right = 200.0 -margin_bottom = 318.0 -rect_min_size = Vector2( 200, 300 ) +[node name="PreviewScratchpad" parent="VB/HB/VB3" instance=ExtResource("4")] +layout_mode = 2 +size_flags_vertical = 3 [node name="ClearScratchpad" type="Button" parent="VB/HB/VB3"] -margin_top = 322.0 -margin_right = 200.0 -margin_bottom = 342.0 +layout_mode = 2 text = "Clear" +[connection signal="empty_clicked" from="VB/HB/VB/ShapeList" to="." method="_on_shape_list_empty_clicked"] [connection signal="item_activated" from="VB/HB/VB/ShapeList" to="." method="_on_ShapeList_item_activated"] [connection signal="item_selected" from="VB/HB/VB/ShapeList" to="." method="_on_ShapeList_item_selected"] -[connection signal="nothing_selected" from="VB/HB/VB/ShapeList" to="." method="_on_ShapeList_nothing_selected"] [connection signal="pressed" from="VB/HB/VB/ChangeShape" to="." method="_on_ChangeShape_pressed"] [connection signal="pressed" from="VB/HB/VB/HBoxContainer/AddShape" to="." method="_on_AddShape_pressed"] [connection signal="pressed" from="VB/HB/VB/HBoxContainer/RemoveShape" to="." method="_on_RemoveShape_pressed"] diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd index 69fd4755..be52072e 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd @@ -4,7 +4,7 @@ extends Node const HT_Painter = preload("./../painter.gd") const HT_Brush = preload("./../brush.gd") -const HT_ColorShader = preload("../shaders/color.shader") +const HT_ColorShader = preload("../shaders/color.gdshader") var _painter : HT_Painter var _brush : HT_Brush diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd index 8daa16d4..23580ef5 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd @@ -23,11 +23,10 @@ func _ready(): func reset_image(): - var image = Image.new() - image.create(_texture_rect.rect_size.x, _texture_rect.rect_size.y, false, Image.FORMAT_RGB8) + var image = Image.create( + _texture_rect.rect_size.x, _texture_rect.rect_size.y, false, Image.FORMAT_RGB8) image.fill(Color(1,1,1)) - var texture = ImageTexture.new() - texture.create_from_image(image) + var texture = ImageTexture.create_from_image(image) _texture_rect.texture = texture _painter.set_image_texture(image, texture) @@ -40,7 +39,7 @@ func _gui_input(event): if event is InputEventMouseMotion: if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): _painter.paint_input(event.position, event.pressure) - update() + queue_redraw() elif event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT: diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn index d9f20467..6c7c91b1 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn @@ -1,22 +1,21 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://ng00jipfeucy"] -[ext_resource path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd" type="Script" id=2] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd" id="1"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd" id="2"] [node name="PreviewScratchpad" type="Control"] -margin_right = 380.0 -margin_bottom = 383.0 -rect_clip_content = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +layout_mode = 3 +anchors_preset = 0 +offset_right = 200.0 +offset_bottom = 400.0 +script = ExtResource("1") [node name="Painter" type="Node" parent="."] -script = ExtResource( 2 ) +script = ExtResource("2") [node name="TextureRect" type="TextureRect" parent="."] show_behind_parent = true +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 stretch_mode = 5 diff --git a/addons/zylann.hterrain/tools/brush/terrain_painter.gd b/addons/zylann.hterrain/tools/brush/terrain_painter.gd index bada8dbe..c7c103b2 100644 --- a/addons/zylann.hterrain/tools/brush/terrain_painter.gd +++ b/addons/zylann.hterrain/tools/brush/terrain_painter.gd @@ -7,16 +7,16 @@ const HTerrainData = preload("../../hterrain_data.gd") const HT_Logger = preload("../../util/logger.gd") const HT_Brush = preload("./brush.gd") -const HT_RaiseShader = preload("./shaders/raise.shader") -const HT_SmoothShader = preload("./shaders/smooth.shader") -const HT_LevelShader = preload("./shaders/level.shader") -const HT_FlattenShader = preload("./shaders/flatten.shader") -const HT_ErodeShader = preload("./shaders/erode.shader") -const HT_Splat4Shader = preload("./shaders/splat4.shader") -const HT_Splat16Shader = preload("./shaders/splat16.shader") -const HT_SplatIndexedShader = preload("./shaders/splat_indexed.shader") -const HT_ColorShader = preload("./shaders/color.shader") -const HT_AlphaShader = preload("./shaders/alpha.shader") +const HT_RaiseShader = preload("./shaders/raise.gdshader") +const HT_SmoothShader = preload("./shaders/smooth.gdshader") +const HT_LevelShader = preload("./shaders/level.gdshader") +const HT_FlattenShader = preload("./shaders/flatten.gdshader") +const HT_ErodeShader = preload("./shaders/erode.gdshader") +const HT_Splat4Shader = preload("./shaders/splat4.gdshader") +const HT_Splat16Shader = preload("./shaders/splat16.gdshader") +const HT_SplatIndexedShader = preload("./shaders/splat_indexed.gdshader") +const HT_ColorShader = preload("./shaders/color.gdshader") +const HT_AlphaShader = preload("./shaders/alpha.gdshader") const MODE_RAISE = 0 const MODE_LOWER = 1 @@ -58,11 +58,11 @@ var _logger = HT_Logger.get_for(self) func _init(): for i in 4: - var p = HT_Painter.new() + var p := HT_Painter.new() # The name is just for debugging p.set_name(str("Painter", i)) #p.set_brush_size(_brush_size) - p.connect("texture_region_changed", self, "_on_painter_texture_region_changed", [i]) + p.texture_region_changed.connect(_on_painter_texture_region_changed.bind(i)) add_child(p) _painters.append(p) @@ -244,7 +244,7 @@ func set_terrain(terrain: HTerrain): # Returns `true` if any change was performed. func paint_input(position: Vector2, pressure: float) -> bool: assert(_terrain.get_data() != null) - var data = _terrain.get_data() + var data := _terrain.get_data() assert(not data.is_locked()) if not _brush.configure_paint_input(_painters, position, pressure): @@ -306,7 +306,7 @@ func paint_input(position: Vector2, pressure: float) -> bool: func _on_painter_texture_region_changed(rect: Rect2, painter_index: int): - var data = _terrain.get_data() + var data := _terrain.get_data() if data == null: return for mm in _modified_maps: @@ -317,10 +317,10 @@ func _on_painter_texture_region_changed(rect: Rect2, painter_index: int): func _paint_height(data: HTerrainData, position: Vector2, factor: float): - var image = data.get_image(HTerrainData.CHANNEL_HEIGHT) - var texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) + var image := data.get_image(HTerrainData.CHANNEL_HEIGHT) + var texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = HTerrainData.CHANNEL_HEIGHT mm.map_index = 0 mm.painter_index = 0 @@ -339,10 +339,10 @@ func _paint_height(data: HTerrainData, position: Vector2, factor: float): func _paint_smooth(data: HTerrainData, position: Vector2): - var image = data.get_image(HTerrainData.CHANNEL_HEIGHT) - var texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) + var image := data.get_image(HTerrainData.CHANNEL_HEIGHT) + var texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = HTerrainData.CHANNEL_HEIGHT mm.map_index = 0 mm.painter_index = 0 @@ -357,10 +357,10 @@ func _paint_smooth(data: HTerrainData, position: Vector2): func _paint_flatten(data: HTerrainData, position: Vector2): - var image = data.get_image(HTerrainData.CHANNEL_HEIGHT) - var texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) + var image := data.get_image(HTerrainData.CHANNEL_HEIGHT) + var texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = HTerrainData.CHANNEL_HEIGHT mm.map_index = 0 mm.painter_index = 0 @@ -375,10 +375,10 @@ func _paint_flatten(data: HTerrainData, position: Vector2): func _paint_level(data: HTerrainData, position: Vector2): - var image = data.get_image(HTerrainData.CHANNEL_HEIGHT) - var texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) + var image := data.get_image(HTerrainData.CHANNEL_HEIGHT) + var texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = HTerrainData.CHANNEL_HEIGHT mm.map_index = 0 mm.painter_index = 0 @@ -393,10 +393,10 @@ func _paint_level(data: HTerrainData, position: Vector2): func _paint_erode(data: HTerrainData, position: Vector2): - var image = data.get_image(HTerrainData.CHANNEL_HEIGHT) - var texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) + var image := data.get_image(HTerrainData.CHANNEL_HEIGHT) + var texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0, true) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = HTerrainData.CHANNEL_HEIGHT mm.map_index = 0 mm.painter_index = 0 @@ -410,18 +410,18 @@ func _paint_erode(data: HTerrainData, position: Vector2): func _paint_splat4(data: HTerrainData, position: Vector2): - var image = data.get_image(HTerrainData.CHANNEL_SPLAT) - var texture = data.get_texture(HTerrainData.CHANNEL_SPLAT, 0, true) - var heightmap_texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0) + var image := data.get_image(HTerrainData.CHANNEL_SPLAT) + var texture := data.get_texture(HTerrainData.CHANNEL_SPLAT, 0, true) + var heightmap_texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = HTerrainData.CHANNEL_SPLAT mm.map_index = 0 mm.painter_index = 0 _modified_maps = [mm] var p : HT_Painter = _painters[0] - var splat = Color(0.0, 0.0, 0.0, 0.0) + var splat := Color(0.0, 0.0, 0.0, 0.0) splat[_texture_index] = 1.0; p.set_brush_shader(HT_Splat4Shader) p.set_brush_shader_param("u_splat", splat) @@ -431,20 +431,20 @@ func _paint_splat4(data: HTerrainData, position: Vector2): func _paint_splat_indexed(data: HTerrainData, position: Vector2): - var map_types = [ + var map_types := [ HTerrainData.CHANNEL_SPLAT_INDEX, HTerrainData.CHANNEL_SPLAT_WEIGHT ] _modified_maps = [] - var textures = [] + var textures := [] for mode in 2: textures.append(data.get_texture(map_types[mode], 0, true)) for mode in 2: - var image = data.get_image(map_types[mode]) + var image := data.get_image(map_types[mode]) - var mm = HT_ModifiedMap.new() + var mm := HT_ModifiedMap.new() mm.map_type = map_types[mode] mm.map_index = 0 mm.painter_index = mode @@ -475,7 +475,7 @@ func _paint_splat16(data: HTerrainData, position: Vector2): for i in 4: textures.append(data.get_texture(HTerrainData.CHANNEL_SPLAT, i, true)) - var heightmap_texture = data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0) + var heightmap_texture := data.get_texture(HTerrainData.CHANNEL_HEIGHT, 0) for i in 4: var image : Image = data.get_image(HTerrainData.CHANNEL_SPLAT, i) @@ -489,7 +489,7 @@ func _paint_splat16(data: HTerrainData, position: Vector2): var p : HT_Painter = _painters[i] - var other_splatmaps = [] + var other_splatmaps := [] for tex in textures: if tex != texture: other_splatmaps.append(tex) diff --git a/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd b/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd index b38bf77f..1f19400e 100644 --- a/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd +++ b/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd @@ -1,6 +1,7 @@ @tool extends Control +const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") const HTerrainDetailLayer = preload("../../hterrain_detail_layer.gd") const HT_ImageFileCache = preload("../../util/image_file_cache.gd") @@ -16,11 +17,11 @@ signal detail_selected(index) # Emitted when the tool added or removed a detail map signal detail_list_changed -@onready var _item_list = $ItemList -@onready var _confirmation_dialog = $ConfirmationDialog +@onready var _item_list : ItemList = $ItemList +@onready var _confirmation_dialog : ConfirmationDialog = $ConfirmationDialog -var _terrain = null -var _dialog_target = -1 +var _terrain : HTerrain = null +var _dialog_target := -1 var _undo_redo : UndoRedo var _image_cache : HT_ImageFileCache var _logger = HT_Logger.get_for(self) @@ -72,7 +73,7 @@ func _update_list(): if layer_nodes_by_index.has(i): # TODO How to keep names updated with node names? - var names := PackedStringArray(layer_nodes_by_index[i]).join(", ") + var names := ", ".join(PackedStringArray(layer_nodes_by_index[i])) if len(names) == 1: _item_list.set_item_tooltip(i, "Used by " + names) else: @@ -96,7 +97,7 @@ func _on_Remove_pressed(): if len(selected) == 0: return _dialog_target = _item_list.get_selected_items()[0] - _confirmation_dialog.window_title = "Removing detail map {0}".format([_dialog_target]) + _confirmation_dialog.title = "Removing detail map {0}".format([_dialog_target]) _confirmation_dialog.popup_centered() @@ -111,9 +112,9 @@ func _add_layer(): var terrain_data : HTerrainData = _terrain.get_data() # First, create node and map image - var node = HTerrainDetailLayer.new() + var node := HTerrainDetailLayer.new() # TODO Workarounds for https://github.com/godotengine/godot/issues/21410 - var detail_layer_icon = HT_EditorUtil.load_texture(DETAIL_LAYER_ICON_TEXTURE, _logger) + var detail_layer_icon := HT_EditorUtil.load_texture(DETAIL_LAYER_ICON_TEXTURE, _logger) node.set_meta("_editor_icon", detail_layer_icon) node.name = "HTerrainDetailLayer" var map_index := terrain_data._edit_add_map(HTerrainData.CHANNEL_DETAIL) @@ -124,17 +125,17 @@ func _add_layer(): # Then, create an action _undo_redo.create_action("Add Detail Layer {0}".format([map_index])) - _undo_redo.add_do_method(terrain_data, "_edit_insert_map_from_image_cache", - HTerrainData.CHANNEL_DETAIL, map_index, _image_cache, map_image_cache_id) - _undo_redo.add_do_method(_terrain, "add_child", node) + _undo_redo.add_do_method(terrain_data._edit_insert_map_from_image_cache.bind( + HTerrainData.CHANNEL_DETAIL, map_index, _image_cache, map_image_cache_id)) + _undo_redo.add_do_method(_terrain.add_child.bind(node)) _undo_redo.add_do_property(node, "owner", get_tree().edited_scene_root) - _undo_redo.add_do_method(self, "_update_list") + _undo_redo.add_do_method(self._update_list) _undo_redo.add_do_reference(node) - _undo_redo.add_undo_method(_terrain, "remove_child", node) + _undo_redo.add_undo_method(_terrain.remove_child.bind(node)) _undo_redo.add_undo_method( - terrain_data, "_edit_remove_map", HTerrainData.CHANNEL_DETAIL, map_index) - _undo_redo.add_undo_method(self, "_update_list") + terrain_data._edit_remove_map.bind(HTerrainData.CHANNEL_DETAIL, map_index)) + _undo_redo.add_undo_method(self._update_list) # Yet another instance of this hack, to prevent UndoRedo from running some of the functions, # which we had to run already @@ -145,7 +146,7 @@ func _add_layer(): #_update_list() detail_list_changed.emit() - var index = node.layer_index + var index := node.layer_index _item_list.select(index) # select() doesn't trigger the signal detail_selected.emit(index) @@ -167,18 +168,18 @@ func _remove_layer(map_index: int): _undo_redo.create_action("Remove Detail Layer {0}".format([map_index])) _undo_redo.add_do_method( - terrain_data, "_edit_remove_map", HTerrainData.CHANNEL_DETAIL, map_index) + terrain_data._edit_remove_map.bind(HTerrainData.CHANNEL_DETAIL, map_index)) for node in using_nodes: - _undo_redo.add_do_method(_terrain, "remove_child", node) - _undo_redo.add_do_method(self, "_update_list") + _undo_redo.add_do_method(_terrain.remove_child.bind(node)) + _undo_redo.add_do_method(self._update_list) - _undo_redo.add_undo_method(terrain_data, "_edit_insert_map_from_image_cache", - HTerrainData.CHANNEL_DETAIL, map_index, _image_cache, image_id) + _undo_redo.add_undo_method(terrain_data._edit_insert_map_from_image_cache.bind( + HTerrainData.CHANNEL_DETAIL, map_index, _image_cache, image_id)) for node in using_nodes: - _undo_redo.add_undo_method(_terrain, "add_child", node) + _undo_redo.add_undo_method(_terrain.add_child.bind(node)) _undo_redo.add_undo_property(node, "owner", get_tree().edited_scene_root) _undo_redo.add_undo_reference(node) - _undo_redo.add_undo_method(self, "_update_list") + _undo_redo.add_undo_method(self._update_list) _undo_redo.commit_action() diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 5bd238f8..2400f1bb 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -1,5 +1,5 @@ @tool -extends WindowDialog +extends AcceptDialog const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") @@ -20,13 +20,19 @@ const FORMAT_COUNT = 4 @onready var _export_button := $VB/Buttons/ExportButton as Button @onready var _show_in_explorer_checkbox := $VB/ShowInExplorerCheckbox as CheckBox -var _terrain = null +var _terrain : HTerrain = null var _file_dialog : EditorFileDialog = null var _format_names := [] var _format_extensions := [] var _logger = HT_Logger.get_for(self) +func _init(): + # Godot 4 decided to not have a plain WindowDialog class... + # there is Window but it's way too unfriendly... + get_ok_button().hide() + + func _ready(): _format_names.resize(FORMAT_COUNT) _format_extensions.resize(FORMAT_COUNT) @@ -49,7 +55,7 @@ func _ready(): func setup_dialogs(base_control: Control): assert(_file_dialog == null) var fd := EditorFileDialog.new() - fd.mode = EditorFileDialog.MODE_SAVE_FILE + fd.file_mode = EditorFileDialog.FILE_MODE_SAVE_FILE fd.resizable = true fd.access = EditorFileDialog.ACCESS_FILESYSTEM fd.file_selected.connect(_on_FileDialog_file_selected) @@ -76,7 +82,7 @@ func _on_FileDialog_file_selected(fpath: String): func _auto_adjust_height_range(): assert(_terrain != null) assert(_terrain.get_data() != null) - var aabb = _terrain.get_data().get_aabb() + var aabb := _terrain.get_data().get_aabb() _height_range_min_spinbox.value = aabb.position.y _height_range_max_spinbox.value = aabb.position.y + aabb.size.y @@ -104,7 +110,7 @@ func _export() -> bool: var save_error := OK if format == FORMAT_PNG8: - var hscale = 1.0 / (height_max - height_min) + var hscale := 1.0 / (height_max - height_min) var im := Image.create(heightmap.get_width(), heightmap.get_height(), false, Image.FORMAT_R8) for y in heightmap.get_height(): @@ -118,9 +124,9 @@ func _export() -> bool: save_error = heightmap.save_exr(fpath, true) else: - var f := FileAccess.open(fpath, File.WRITE) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(fpath, FileAccess.WRITE) + if f == null: + var err := FileAccess.get_open_error() _print_file_error(fpath, err) return false @@ -129,10 +135,10 @@ func _export() -> bool: f.store_buffer(heightmap.get_data()) elif format == FORMAT_R16: - var hscale = 65535.0 / (height_max - height_min) + var hscale := 65535.0 / (height_max - height_min) for y in heightmap.get_height(): for x in heightmap.get_width(): - var h = int((heightmap.get_pixel(x, y).r - height_min) * hscale) + var h := int((heightmap.get_pixel(x, y).r - height_min) * hscale) if h < 0: h = 0 elif h > 65535: @@ -158,11 +164,11 @@ func _update_file_extension(): # TODO Is `selected` an ID or an index? I need an ID, it works by chance for now. var format = _format_selector.selected - var ext = _format_extensions[format] + var ext : String = _format_extensions[format] _file_dialog.clear_filters() _file_dialog.add_filter(str("*.", ext, " ; ", ext.to_upper(), " files")) - var fpath = _output_path_line_edit.text.strip_edges() + var fpath := _output_path_line_edit.text.strip_edges() if fpath != "": _output_path_line_edit.text = str(fpath.get_basename(), ".", ext) diff --git a/addons/zylann.hterrain/tools/generate_mesh_dialog.gd b/addons/zylann.hterrain/tools/generate_mesh_dialog.gd index be81b962..713eab35 100644 --- a/addons/zylann.hterrain/tools/generate_mesh_dialog.gd +++ b/addons/zylann.hterrain/tools/generate_mesh_dialog.gd @@ -1,22 +1,27 @@ @tool -extends WindowDialog +extends AcceptDialog signal generate_selected(lod) +const HTerrain = preload("../hterrain.gd") const HTerrainMesher = preload("../hterrain_mesher.gd") const HT_Util = preload("../util/util.gd") @onready var _preview_label : Label = $VBoxContainer/PreviewLabel @onready var _lod_spinbox : SpinBox = $VBoxContainer/HBoxContainer/LODSpinBox -var _terrain = null +var _terrain : HTerrain = null -func set_terrain(terrain): +func _init(): + get_ok_button().hide() + + +func set_terrain(terrain: HTerrain): _terrain = terrain -func _notification(what): +func _notification(what: int): if what == NOTIFICATION_VISIBILITY_CHANGED: if visible: _update_preview() @@ -29,17 +34,17 @@ func _on_LODSpinBox_value_changed(value): func _update_preview(): assert(_terrain != null) assert(_terrain.get_data() != null) - var resolution = _terrain.get_data().get_resolution() - var stride = int(_lod_spinbox.value) + var resolution := _terrain.get_data().get_resolution() + var stride := int(_lod_spinbox.value) resolution /= stride - var s = HTerrainMesher.get_mesh_size(resolution, resolution) + var s := HTerrainMesher.get_mesh_size(resolution, resolution) _preview_label.text = str( \ HT_Util.format_integer(s.vertices), " vertices, ", \ HT_Util.format_integer(s.triangles), " triangles") func _on_Generate_pressed(): - var stride = int(_lod_spinbox.value) + var stride := int(_lod_spinbox.value) generate_selected.emit(stride) hide() diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 1727d404..8099ec93 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -1,5 +1,5 @@ @tool -extends WindowDialog +extends AcceptDialog const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") @@ -9,6 +9,8 @@ const HT_TextureGenerator = preload("./texture_generator.gd") const HT_TextureGeneratorPass = preload("./texture_generator_pass.gd") const HT_Logger = preload("../../util/logger.gd") const HT_ImageFileCache = preload("../../util/image_file_cache.gd") +const HT_Inspector = preload("../inspector/inspector.gd") +const HT_TerrainPreview = preload("../terrain_preview.gd") # TODO Power of two is assumed here. # I wonder why it doesn't have the off by one terrain textures usually have @@ -16,10 +18,10 @@ const MAX_VIEWPORT_RESOLUTION = 512 signal progress_notified(info) # { "progress": real, "message": string, "finished": bool } -@onready var _inspector_container = $VBoxContainer/Editor/Settings -@onready var _inspector = $VBoxContainer/Editor/Settings/Inspector -@onready var _preview = $VBoxContainer/Editor/Preview/TerrainPreview -@onready var _progress_bar = $VBoxContainer/Editor/Preview/ProgressBar +@onready var _inspector_container : Control = $VBoxContainer/Editor/Settings +@onready var _inspector : HT_Inspector = $VBoxContainer/Editor/Settings/Inspector +@onready var _preview : HT_TerrainPreview = $VBoxContainer/Editor/Preview/TerrainPreview +@onready var _progress_bar : ProgressBar = $VBoxContainer/Editor/Preview/ProgressBar var _dummy_texture = load("res://addons/zylann.hterrain/tools/icons/empty.png") var _terrain : HTerrain = null @@ -40,6 +42,11 @@ static func get_shader(shader_name: String) -> Shader: return load(path) as Shader +func _init(): + # Godot 4 does not have a plain WindowDialog class... there is Window but it's too unfriendly... + get_ok_button().hide() + + func _ready(): _inspector.set_prototype({ "seed": { @@ -156,7 +163,7 @@ func _ready(): func apply_dpi_scale(dpi_scale: float): - custom_minimum_size *= dpi_scale + min_size *= dpi_scale _inspector_container.custom_minimum_size *= dpi_scale @@ -179,7 +186,7 @@ func _adjust_viewport_resolution(): var data = _terrain.get_data() if data == null: return - var terrain_resolution = data.get_resolution() + var terrain_resolution := data.get_resolution() # By default we want to work with a large enough viewport to generate tiles, # but we should pick a smaller size if the terrain is smaller than that... @@ -229,7 +236,7 @@ func _notification(what: int): func _update_generator(preview: bool): - var scale = _inspector.get_value("scale") + var scale : float = _inspector.get_value("scale") # Scale is inverted in the shader if absf(scale) < 0.01: scale = 0.0 @@ -239,7 +246,7 @@ func _update_generator(preview: bool): var preview_scale := 4.0 # As if 2049x2049 var sectors := [] - var terrain_size = 513 + var terrain_size := 513 var additive_heightmap : Texture = null @@ -273,8 +280,8 @@ func _update_generator(preview: bool): # so the size or shape of the terrain doesn't matter preview_scale = 1.0 - var cw = terrain_size / _viewport_resolution - var ch = terrain_size / _viewport_resolution + var cw := terrain_size / _viewport_resolution + var ch := terrain_size / _viewport_resolution for y in ch: for x in cw: @@ -392,17 +399,17 @@ func _apply(): _logger.error("cannot apply, terrain is null") return - var data = _terrain.get_data() + var data := _terrain.get_data() if data == null: _logger.error("cannot apply, terrain data is null") return - var dst_heights = data.get_image(HTerrainData.CHANNEL_HEIGHT) + var dst_heights := data.get_image(HTerrainData.CHANNEL_HEIGHT) if dst_heights == null: _logger.error("terrain heightmap image isn't loaded") return - var dst_normals = data.get_image(HTerrainData.CHANNEL_NORMAL) + var dst_normals := data.get_image(HTerrainData.CHANNEL_NORMAL) if dst_normals == null: _logger.error("terrain normal image isn't loaded") return @@ -486,9 +493,9 @@ func _on_TextureGenerator_completed(): data._edit_set_disable_apply_undo(true) _undo_redo.create_action("Generate terrain") _undo_redo.add_do_method( - data, "_edit_apply_maps_from_file_cache", _image_cache, redo_map_ids) + data._edit_apply_maps_from_file_cache.bind(_image_cache, redo_map_ids)) _undo_redo.add_undo_method( - data, "_edit_apply_maps_from_file_cache", _image_cache, _undo_map_ids) + data._edit_apply_maps_from_file_cache.bind(_image_cache, _undo_map_ids)) _undo_redo.commit_action() data._edit_set_disable_apply_undo(false) diff --git a/addons/zylann.hterrain/tools/generator/texture_generator.gd b/addons/zylann.hterrain/tools/generator/texture_generator.gd index 2618c173..3a4db873 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator.gd @@ -18,7 +18,7 @@ signal output_generated(image, metadata) signal completed var _passes := [] -var _resolution := Vector2(512, 512) +var _resolution := Vector2i(512, 512) var _output_padding := [0, 0, 0, 0] var _viewport : SubViewport = null var _ci : TextureRect = null @@ -42,10 +42,10 @@ func _ready(): _viewport = SubViewport.new() _viewport.own_world = true - _viewport.world = World.new() + _viewport.world = World3D.new() # Godot 4 no longer supports this... # _viewport.render_target_v_flip = true - _viewport.render_target_update_mode = Viewport.UPDATE_DISABLED + _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED add_child(_viewport) _dummy_texture = load(DUMMY_TEXTURE_PATH) @@ -87,7 +87,7 @@ func add_output(meta): # In tiled rendering, this is the resolution of one tile. # The internal viewport may be larger if some passes need more room, # and the resulting images might include some of these pixels if output padding is used. -func set_resolution(res: Vector2): +func set_resolution(res: Vector2i): assert(not _running) _resolution = res @@ -129,7 +129,7 @@ func run(): for v in _output_padding: if v > largest_padding: largest_padding = v - var padded_size := _resolution + 2 * Vector2(largest_padding, largest_padding) + var padded_size := _resolution + 2 * Vector2i(largest_padding, largest_padding) # _uv_offset = Vector2( \ # float(largest_padding) / padded_size.x, @@ -139,7 +139,7 @@ func run(): _viewport.size = padded_size _viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS - _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONLY_NEXT_FRAME + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE _running_pass_index = 0 _running_iteration = 0 @@ -160,7 +160,7 @@ func _process(delta: float): if _running_pass_index >= len(_running_passes): _running = false - completed.emit_signal() + completed.emit() if _rerun: # run() was requested again before we complete... @@ -173,7 +173,7 @@ func _process(delta: float): set_process(false) return - var p = _running_passes[_running_pass_index] + var p : HT_TextureGeneratorPass = _running_passes[_running_pass_index] if _running_iteration == 0: _setup_pass(p) @@ -207,9 +207,11 @@ func _setup_pass(p: HT_TextureGeneratorPass): for param_name in p.params: _shader_material.set_shader_parameter(param_name, p.params[param_name]) - var scale_ndc = _viewport.size / _resolution - var pad_offset_ndc = ((_viewport.size - _resolution) / 2) / _viewport.size - var offset_ndc = -pad_offset_ndc + p.tile_pos / scale_ndc + var vp_size_f := Vector2(_viewport.size) + var res_f := Vector2(_resolution) + var scale_ndc := vp_size_f / res_f + var pad_offset_ndc := ((vp_size_f - res_f) / 2.0) / vp_size_f + var offset_ndc := -pad_offset_ndc + p.tile_pos / scale_ndc # Because padding may be used around the generated area, # the shader can use these predefined parameters, @@ -226,7 +228,7 @@ func _setup_pass(p: HT_TextureGeneratorPass): _ci.material = null if p.clear: - _viewport.render_target_clear_mode = Viewport.CLEAR_MODE_ONLY_NEXT_FRAME + _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE func _create_output_image(metadata): diff --git a/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd b/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd index 86bf8856..76745f16 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator_pass.gd @@ -7,10 +7,11 @@ var clear := false # If not set, a default texture will be drawn. # Note that it won't matter if the shader disregards it, # and will only serve to provide UVs, due to https://github.com/godotengine/godot/issues/7298. -var texture = null +var texture : Texture = null # Which shader to use var shader : Shader = null # Parameters for the shader +# TODO Use explicit Dictionary, dont allow null var params = null # How many pixels to pad the viewport on all edges, in case neighboring matters. # Outputs won't have that padding, but can pick part of it in case output padding is used. diff --git a/addons/zylann.hterrain/tools/globalmap_baker.gd b/addons/zylann.hterrain/tools/globalmap_baker.gd index 26e3d31a..7a941f46 100644 --- a/addons/zylann.hterrain/tools/globalmap_baker.gd +++ b/addons/zylann.hterrain/tools/globalmap_baker.gd @@ -131,8 +131,8 @@ func _setup_pass(sector: Vector2): var center = origin + 0.5 * _viewport.size # The heightmap is left empty, so will default to white, which is a height of 1. # The camera must be placed above the terrain to see it. - _camera.translation = Vector3(center.x, 2.0, center.y) - _plane.translation = Vector3(origin.x, 0.0, origin.y) + _camera.position = Vector3(center.x, 2.0, center.y) + _plane.position = Vector3(origin.x, 0.0, origin.y) func _grab_image(sector: Vector2): diff --git a/addons/zylann.hterrain/tools/importer/importer_dialog.gd b/addons/zylann.hterrain/tools/importer/importer_dialog.gd index a8511350..a6903458 100644 --- a/addons/zylann.hterrain/tools/importer/importer_dialog.gd +++ b/addons/zylann.hterrain/tools/importer/importer_dialog.gd @@ -1,5 +1,5 @@ @tool -extends WindowDialog +extends AcceptDialog const HT_Util = preload("../../util/util.gd") const HTerrain = preload("../../hterrain.gd") @@ -7,12 +7,14 @@ const HTerrainData = preload("../../hterrain_data.gd") const HT_Errors = preload("../../util/errors.gd") const HT_Logger = preload("../../util/logger.gd") const HT_XYZFormat = preload("../../util/xyz_format.gd") +const HT_Inspector = preload("../inspector/inspector.gd") signal permanent_change_performed(message) -@onready var _inspector = $VBoxContainer/Inspector -@onready var _errors_label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Errors -@onready var _warnings_label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Warnings +@onready var _inspector : HT_Inspector = $VBoxContainer/Inspector +@onready var _errors_label : Label = $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Errors +@onready var _warnings_label : Label = \ + $VBoxContainer/ColorRect/ScrollContainer/VBoxContainer/Warnings const RAW_LITTLE_ENDIAN = 0 const RAW_BIG_ENDIAN = 1 @@ -21,6 +23,10 @@ var _terrain : HTerrain = null var _logger = HT_Logger.get_for(self) +func _init(): + get_ok_button().hide() + + func _ready(): _inspector.set_prototype({ "heightmap": { @@ -75,7 +81,7 @@ static func _format_feedbacks(feed): var a = [] for s in feed: a.append("- " + s) - return PackedStringArray(a).join("\n") + return "\n".join(PackedStringArray(a)) func _clear_feedback(): @@ -83,7 +89,12 @@ func _clear_feedback(): _warnings_label.text = "" -func _show_feedback(res: Dictionary): +class HT_ErrorCheckReport: + var errors := [] + var warnings := [] + + +func _show_feedback(res: HT_ErrorCheckReport): for e in res.errors: _logger.error(e) @@ -115,7 +126,7 @@ func _on_ImportButton_pressed(): _logger.debug("Cannot import due to errors, aborting") return - var params = {} + var params := {} var heightmap_path = _inspector.get_value("heightmap") if heightmap_path != "": @@ -157,11 +168,8 @@ func _on_Inspector_property_changed(key: String, value): _inspector.set_property_enabled("raw_endianess", is_raw) -func _validate_form() -> Dictionary: - var res := { - "errors": [], - "warnings": [] - } +func _validate_form() -> HT_ErrorCheckReport: + var res := HT_ErrorCheckReport.new() var heightmap_path : String = _inspector.get_value("heightmap") var splatmap_path : String = _inspector.get_value("splatmap") @@ -185,14 +193,15 @@ func _validate_form() -> Dictionary: # so we avoid loading other maps everytime to do further checks return res - var size = _load_image_size(heightmap_path, _logger) - if size.has("error"): - res.errors.append(str("Cannot open heightmap file: ", _error_to_string(size.error))) + var image_size_result = _load_image_size(heightmap_path, _logger) + if image_size_result.error_code != OK: + res.errors.append(str("Cannot open heightmap file: ", image_size_result.to_string())) return res - var adjusted_size = HTerrainData.get_adjusted_map_size(size.width, size.height) + var adjusted_size = HTerrainData.get_adjusted_map_size( + image_size_result.width, image_size_result.height) - if adjusted_size != size.width: + if adjusted_size != image_size_result.width: res.warnings.append( "The square resolution deduced from heightmap file size is not power of two + 1.\n" + \ "The heightmap will be cropped.") @@ -208,76 +217,94 @@ func _validate_form() -> Dictionary: return res -static func _check_map_size(path: String, map_name: String, heightmap_size: int, res: Dictionary, - logger): +static func _check_map_size(path: String, map_name: String, heightmap_size: int, + res: HT_ErrorCheckReport, logger): - var size = _load_image_size(path, logger) - if size.has("error"): - res.errors.append("Cannot open splatmap file: ", _error_to_string(size.error)) + var size_result := _load_image_size(path, logger) + if size_result.error_code != OK: + res.errors.append(str("Cannot open splatmap file: ", size_result.to_string())) return - var adjusted_size = HTerrainData.get_adjusted_map_size(size.width, size.height) + var adjusted_size := HTerrainData.get_adjusted_map_size(size_result.width, size_result.height) if adjusted_size != heightmap_size: res.errors.append(str( "The ", map_name, " must have the same resolution as the heightmap (", heightmap_size, ")")) else: - if adjusted_size != size.width: - res.warnings.append( + if adjusted_size != size_result.width: + res.warnings.append(str( "The square resolution deduced from ", map_name, " file size is not power of two + 1.\nThe ", - map_name, " will be cropped.") + map_name, " will be cropped.")) + + +class HT_ImageSizeResult: + var width := 0 + var height := 0 + var error_code := OK + var error_message := "" + + func to_string() -> String: + if error_message != "": + return error_message + return HT_Errors.get_message(error_code) -static func _load_image_size(path: String, logger) -> Dictionary: +static func _load_image_size(path: String, logger) -> HT_ImageSizeResult: var ext := path.get_extension().to_lower() + var result := HT_ImageSizeResult.new() if ext == "png" or ext == "exr": # Godot can load these formats natively var im := Image.new() var err := im.load(path) if err != OK: - logger.error("An error occurred loading image '{0}', code {1}" \ - .format([path, err])) - return { "error": err } - - return { "width": im.get_width(), "height": im.get_height() } + logger.error("An error occurred loading image '{0}', code {1}".format([path, err])) + result.error_code = err + return result + + result.width = im.get_width() + result.height = im.get_height() + return result elif ext == "raw": - var f := FileAccess.open(path, File.READ) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(path, FileAccess.READ) + if f == null: + var err := FileAccess.get_open_error() logger.error("Error opening file {0}".format([path])) - return { "error": err } + result.error_code = err + return result # Assume the raw data is square in 16-bit format, # so its size is function of file length - var flen := f.get_len() + var flen := f.get_length() f = null - var size = HT_Util.integer_square_root(flen / 2) - if size == -1: - return { "error": "RAW image is not square" } + var size_px = HT_Util.integer_square_root(flen / 2) + if size_px == -1: + result.error_code = ERR_INVALID_DATA + result.error_message = "RAW image is not square" + return result logger.debug("Deduced RAW heightmap resolution: {0}*{1}, for a length of {2}" \ - .format([size, size, flen])) + .format([size_px, size_px, flen])) - return { "width": size, "height": size } + result.width = size_px + result.height = size_px + return result elif ext == "xyz": - var f := FileAccess.open(path, File.READ) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(path, FileAccess.READ) + if f == null: + var err := FileAccess.get_open_error() logger.error("Error opening file {0}".format([path])) - return { "error": err } + result.error_code = err + return result var bounds := HT_XYZFormat.load_bounds(f) - return { "width": bounds.image_width, "height": bounds.image_height } + result.width = bounds.image_width + result.height = bounds.image_height + return result else: - return { "error": ERR_FILE_UNRECOGNIZED } - - -static func _error_to_string(err) -> String: - if typeof(err) == TYPE_STRING: - return err - return str("code ", err, ": ", HT_Errors.get_message(err)) + result.error_code = ERR_FILE_UNRECOGNIZED + return result diff --git a/addons/zylann.hterrain/tools/inspector/inspector.gd b/addons/zylann.hterrain/tools/inspector/inspector.gd index ac0718e9..cbca5208 100644 --- a/addons/zylann.hterrain/tools/inspector/inspector.gd +++ b/addons/zylann.hterrain/tools/inspector/inspector.gd @@ -403,9 +403,9 @@ func _randomize_property_pressed(key): v = randi() % (prop.range.max - prop.range.min) + prop.range.min else: v = randi() - 0x7fffffff - TYPE_REAL: + TYPE_FLOAT: if prop.has("range"): - v = rand_range(prop.range.min, prop.range.max) + v = randf_range(prop.range.min, prop.range.max) else: v = randf() @@ -442,7 +442,7 @@ func _on_file_dialog_close(): # so we can re-use the same dialog with different listeners var cons = _file_dialog.get_signal_connection_list("file_selected") for con in cons: - _file_dialog.disconnect("file_selected", con.target, con.method) + _file_dialog.file_selected.disconnect(con.callable) func _on_texture_selected(path: String, key): @@ -461,7 +461,7 @@ func _on_ask_clear_texture(key): func _on_ask_load_file(key, exts): - var filters = [] + var filters := [] for ext in exts: filters.append(str("*.", ext, " ; ", ext.to_upper(), " files")) _open_file_dialog(filters, _on_file_selected.bind(key), FileDialog.ACCESS_FILESYSTEM) diff --git a/addons/zylann.hterrain/tools/load_texture_dialog.gd b/addons/zylann.hterrain/tools/load_texture_dialog.gd index ecd63d55..6d1e8749 100644 --- a/addons/zylann.hterrain/tools/load_texture_dialog.gd +++ b/addons/zylann.hterrain/tools/load_texture_dialog.gd @@ -4,13 +4,13 @@ extends EditorFileDialog func _init(): #access = EditorFileDialog.ACCESS_RESOURCES - mode = EditorFileDialog.MODE_OPEN_FILE + file_mode = EditorFileDialog.FILE_MODE_OPEN_FILE # TODO I actually want a dialog to load a texture, not specifically a PNG... add_filter("*.png ; PNG files") add_filter("*.jpg ; JPG files") - resizable = true + unresizable = false access = EditorFileDialog.ACCESS_RESOURCES - popup_hide.connect(call_deferred.bind("_on_close")) + close_requested.connect(call_deferred.bind("_on_close")) func _on_close(): @@ -18,5 +18,5 @@ func _on_close(): # so we can re-use the same dialog with different listeners var cons = get_signal_connection_list("file_selected") for con in cons: - disconnect("file_selected", con.target, con.method) + file_selected.disconnect(con.callable) diff --git a/addons/zylann.hterrain/tools/minimap/minimap.gd b/addons/zylann.hterrain/tools/minimap/minimap.gd index 6bce291b..1084e5f1 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap.gd +++ b/addons/zylann.hterrain/tools/minimap/minimap.gd @@ -4,8 +4,9 @@ extends Control const HT_Util = preload("../../util/util.gd") const HTerrain = preload("../../hterrain.gd") const HTerrainData = preload("../../hterrain_data.gd") +const HT_MinimapOverlay = preload("./minimap_overlay.gd") -const HT_MinimapShader = preload("./minimap_normal.shader") +const HT_MinimapShader = preload("./minimap_normal.gdshader") # TODO Can't preload because it causes the plugin to fail loading if assets aren't imported #const HT_WhiteTexture = preload("../icons/white.png") const WHITE_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/white.png" @@ -13,9 +14,9 @@ const WHITE_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/white.png" const MODE_QUADTREE = 0 const MODE_NORMAL = 1 -@onready var _popup_menu = $PopupMenu -@onready var _color_rect = $ColorRect -@onready var _overlay = $Overlay +@onready var _popup_menu : PopupMenu = $PopupMenu +@onready var _color_rect : ColorRect = $ColorRect +@onready var _overlay : HT_MinimapOverlay = $Overlay var _terrain : HTerrain = null var _mode := MODE_NORMAL @@ -46,11 +47,11 @@ func set_camera_transform(ct: Transform3D): var data = _terrain.get_data() if data == null: return - var to_local = _terrain.get_internal_transform().affine_inverse() - var pos := _get_xz(to_local.xform(_camera_transform.origin)) + var to_local := _terrain.get_internal_transform().affine_inverse() + var pos := _get_xz(to_local * _camera_transform.origin) var size := Vector2(data.get_resolution(), data.get_resolution()) pos /= size - var dir := _get_xz(to_local.basis.xform(-_camera_transform.basis.z)).normalized() + var dir := _get_xz(to_local.basis * (-_camera_transform.basis.z)).normalized() _overlay.set_cursor_position_normalized(pos, dir) _camera_transform = ct @@ -63,10 +64,10 @@ func _gui_input(event: InputEvent): if event is InputEventMouseButton: if event.pressed: match event.button_index: - BUTTON_RIGHT: + MOUSE_BUTTON_RIGHT: _popup_menu.rect_position = get_global_mouse_position() _popup_menu.popup() - BUTTON_LEFT: + MOUSE_BUTTON_LEFT: # Teleport there? pass @@ -83,7 +84,7 @@ func _set_mode(mode: int): if mode == MODE_QUADTREE: _color_rect.hide() else: - var mat = ShaderMaterial.new() + var mat := ShaderMaterial.new() mat.shader = HT_MinimapShader _color_rect.material = mat _color_rect.show() @@ -128,9 +129,9 @@ func _draw(): if lod_count > 0: # Fit drawing to rect - var size = 1 << (lod_count - 1) - var vsize = rect_size - draw_set_transform(Vector2(0, 0), 0, Vector2(vsize.x / size, vsize.y / size)) + var qsize = 1 << (lod_count - 1) + var vsize := size + draw_set_transform(Vector2(0, 0), 0, Vector2(vsize.x / qsize, vsize.y / qsize)) _terrain._edit_debug_draw(self) diff --git a/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd b/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd index 82607a10..93c6695c 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd +++ b/addons/zylann.hterrain/tools/minimap/minimap_overlay.gd @@ -2,10 +2,10 @@ extends Control -export(Texture) var cursor_texture -export(Texture) var out_of_range_texture +@export var cursor_texture : Texture +@export var out_of_range_texture : Texture -@onready var _sprite = $Cursor +@onready var _sprite : Sprite2D = $Cursor var _pos := Vector2() var _rot := 0.0 @@ -19,6 +19,6 @@ func set_cursor_position_normalized(pos_norm: Vector2, dir: Vector2): pos_norm.y = clampf(pos_norm.y, 0.0, 1.0) _sprite.texture = out_of_range_texture - _sprite.position = pos_norm * rect_size + _sprite.position = pos_norm * size _sprite.rotation = dir.angle() diff --git a/addons/zylann.hterrain/tools/minimap/ratio_container.gd b/addons/zylann.hterrain/tools/minimap/ratio_container.gd index fa22f1e3..1bd6acac 100644 --- a/addons/zylann.hterrain/tools/minimap/ratio_container.gd +++ b/addons/zylann.hterrain/tools/minimap/ratio_container.gd @@ -19,8 +19,8 @@ func _sort_children2(): var child = get_child(i) if not (child is Control): continue - var w = size.x - var h = size.x / ratio + var w := size.x + var h := size.x / ratio if h > size.y: h = size.y diff --git a/addons/zylann.hterrain/tools/normalmap_baker.gd b/addons/zylann.hterrain/tools/normalmap_baker.gd index ec062e00..83694c36 100644 --- a/addons/zylann.hterrain/tools/normalmap_baker.gd +++ b/addons/zylann.hterrain/tools/normalmap_baker.gd @@ -135,7 +135,7 @@ func _process(delta): # The sprite will be much larger than the viewport due to the size of the heightmap. # We move it around so the part inside the viewport will correspond to the tile. _ci.position = -VIEWPORT_SIZE * tpos + Vector2(1, 1) - _viewport.render_target_update_mode = Viewport.UPDATE_ONCE + _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE _processing_tile = tpos _pending_tiles_grid[tpos] = STATE_PROCESSING else: diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd index b6e69b6e..735ed493 100644 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd @@ -43,7 +43,7 @@ func _get_preset_name(preset_index: int) -> String: return "" -func _get_import_options(preset_index: int) -> Array: +func _get_import_options(path: String, preset_index: int) -> Array: return [ { "name": "compress/mode", @@ -63,7 +63,7 @@ func _get_option_visibility(path: String, option_name: StringName, options: Dict func _import(p_source_path: String, p_save_path: String, options: Dictionary, - r_platform_variants: Array, r_gen_files: Array) -> int: + r_platform_variants: Array[String], r_gen_files: Array[String]) -> Error: var result := _import_internal( p_source_path, p_save_path, options, r_platform_variants, r_gen_files) @@ -79,9 +79,9 @@ func _import(p_source_path: String, p_save_path: String, options: Dictionary, func _import_internal(p_source_path: String, p_save_path: String, options: Dictionary, r_platform_variants: Array, r_gen_files: Array) -> HT_Result: - var f := FileAccess.open(p_source_path, File.READ) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(p_source_path, FileAccess.READ) + if f == null: + var err := FileAccess.get_open_error() return HT_Result.new(false, "Could not open file {0}: {1}" \ .format([p_source_path, HT_Errors.get_message(err)])) \ .with_value(err) @@ -121,7 +121,7 @@ func _import_internal(p_source_path: String, p_save_path: String, options: Dicti r_platform_variants, r_gen_files, contains_albedo, - get_visible_name(), + _get_visible_name(), options["compress/mode"], options["flags/mipmaps"]) diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd index eaf0a8ea..66bdf082 100644 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd @@ -22,7 +22,7 @@ func _get_visible_name() -> String: return "HTerrainPackedTexture" -func _get_recognized_extensions() -> Array: +func _get_recognized_extensions() -> PackedStringArray: return PackedStringArray(["packed_tex"]) @@ -43,7 +43,7 @@ func _get_preset_name(preset_index: int) -> String: return "" -func _get_import_options(preset_index: int) -> Array: +func _get_import_options(path: String, preset_index: int) -> Array: return [ { "name": "compress/mode", @@ -51,33 +51,19 @@ func _get_import_options(preset_index: int) -> Array: "property_hint": PROPERTY_HINT_ENUM, "hint_string": HT_StreamTextureImporter.COMPRESS_HINT_STRING }, - { - "name": "flags/repeat", - "default_value": HT_StreamTextureImporter.REPEAT_ENABLED, - "property_hint": PROPERTY_HINT_ENUM, - "hint_string": HT_StreamTextureImporter.REPEAT_HINT_STRING - }, - { - "name": "flags/filter", - "default_value": true - }, { "name": "flags/mipmaps", "default_value": true - }, - { - "name": "flags/anisotropic", - "default_value": false } ] -func _get_option_visibility(path: String, option_name: String, options: Dictionary) -> bool: +func _get_option_visibility(path: String, option_name: StringName, options: Dictionary) -> bool: return true func _import(p_source_path: String, p_save_path: String, options: Dictionary, - r_platform_variants: Array, r_gen_files: Array) -> int: + r_platform_variants: Array[String], r_gen_files: Array[String]) -> Error: var result := _import_internal( p_source_path, p_save_path, options, r_platform_variants, r_gen_files) @@ -93,9 +79,9 @@ func _import(p_source_path: String, p_save_path: String, options: Dictionary, func _import_internal(p_source_path: String, p_save_path: String, options: Dictionary, r_platform_variants: Array, r_gen_files: Array) -> HT_Result: - var f := FileAccess.open(p_source_path, File.READ) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(p_source_path, FileAccess.READ) + if f == null: + var err := FileAccess.get_open_error() return HT_Result.new(false, "Could not open file {0}: {1}" \ .format([p_source_path, HT_Errors.get_message(err)])) \ .with_value(err) @@ -122,7 +108,6 @@ func _import_internal(p_source_path: String, p_save_path: String, options: Dicti .with_value(result.value) var image : Image = result.value - result = HT_StreamTextureImporter.import( p_source_path, @@ -131,7 +116,7 @@ func _import_internal(p_source_path: String, p_save_path: String, options: Dicti r_platform_variants, r_gen_files, contains_albedo, - get_visible_name(), + _get_visible_name(), options["compress/mode"], options["flags/mipmaps"]) diff --git a/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd b/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd index 5823bc38..8a5df570 100644 --- a/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd @@ -37,17 +37,11 @@ static func import( p_contains_albedo: bool, importer_name: String, p_compress_mode: int, - p_repeat: int, - p_filter: bool, - p_mipmaps: bool, - p_anisotropic: bool) -> HT_Result: + p_mipmaps: bool) -> HT_Result: var compress_mode := p_compress_mode var lossy := 0.7 - var repeat := p_repeat - var filter := p_filter var mipmaps := p_mipmaps - var anisotropic := p_anisotropic var srgb := 1 if p_contains_albedo else 2 var fix_alpha_border := false var premult_alpha := false @@ -64,16 +58,8 @@ static func import( var formats_imported := [] var tex_flags := 0 - if repeat > 0: - tex_flags |= Texture.FLAG_REPEAT - if repeat == 2: - tex_flags |= Texture.FLAG_MIRRORED_REPEAT - if filter: - tex_flags |= Texture.FLAG_FILTER if mipmaps or compress_mode == COMPRESS_VIDEO_RAM: tex_flags |= Texture.FLAG_MIPMAPS - if anisotropic: - tex_flags |= Texture.FLAG_ANISOTROPIC_FILTER if srgb == 1: tex_flags |= Texture.FLAG_CONVERT_TO_LINEAR diff --git a/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd b/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd index a53acb47..d8c0adbe 100644 --- a/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd +++ b/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd @@ -31,33 +31,20 @@ static func import( p_contains_albedo: bool, importer_name: String, p_compress_mode: int, - p_repeat: int, - p_filter: bool, - p_mipmaps: bool, - p_anisotropic: bool) -> HT_Result: + p_mipmaps: bool) -> HT_Result: var compress_mode := p_compress_mode var no_bptc_if_rgb := false#p_options["compress/no_bptc_if_rgb"]; - var repeat := p_repeat - var filter := p_filter var mipmaps := p_mipmaps var srgb := 1 if p_contains_albedo else 2#p_options["flags/srgb"]; # int hslices = p_options["slices/horizontal"]; # int vslices = p_options["slices/vertical"]; var tex_flags := 0 - if repeat > 0: - tex_flags |= Texture.FLAG_REPEAT - if repeat == 2: - tex_flags |= Texture.FLAG_MIRRORED_REPEAT - if filter: - tex_flags |= Texture.FLAG_FILTER if mipmaps or compress_mode == COMPRESS_VIDEO_RAM: tex_flags |= Texture.FLAG_MIPMAPS if srgb == 1: tex_flags |= Texture.FLAG_CONVERT_TO_LINEAR - if p_anisotropic: - tex_flags |= Texture.FLAG_ANISOTROPIC_FILTER # Vector > slices; # diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 179794ce..5bfb2460 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -285,7 +285,7 @@ func _exit_tree(): _logger.debug("HTerrain plugin Exit tree") # Make sure we release all references to edited stuff - edit(null) + _edit(null) _panel.queue_free() _panel = null @@ -433,13 +433,13 @@ func _make_visible(visible: bool): # loaded in memory, so if the user closes the scene and reopens it later, the changes will # still be partially present, and this is not expected. if not visible: - edit(null) + _edit(null) # TODO Can't hint return as `Vector2?` because it's nullable -func _get_pointed_cell_position(mouse_position: Vector2, p_camera: Camera):# -> Vector2: +func _get_pointed_cell_position(mouse_position: Vector2, p_camera: Camera3D):# -> Vector2: # Need to do an extra conversion in case the editor viewport is in half-resolution mode - var viewport = p_camera.get_viewport() + var viewport := p_camera.get_viewport() var viewport_container = viewport.get_parent() var screen_pos = mouse_position * viewport.size / viewport_container.rect_size @@ -450,9 +450,9 @@ func _get_pointed_cell_position(mouse_position: Vector2, p_camera: Camera):# -> return _node.cell_raycast(origin, dir, ray_distance) -func _forward_3d_gui_input(p_camera: Camera3D, p_event: InputEvent) -> bool: +func _forward_3d_gui_input(p_camera: Camera3D, p_event: InputEvent) -> int: if _node == null || _node.get_data() == null: - return false + return AFTER_GUI_INPUT_PASS _node._edit_update_viewer_position(p_camera) _panel.set_camera_transform(p_camera.global_transform) @@ -510,7 +510,9 @@ func _forward_3d_gui_input(p_camera: Camera3D, p_event: InputEvent) -> bool: # to keep the decal working without having to noodle around with nested signals _brush_decal.update_visibility() - return captured_event + if captured_event: + return AFTER_GUI_INPUT_STOP + return AFTER_GUI_INPUT_PASS func _process(delta: float): @@ -624,7 +626,7 @@ func _paint_completed(changes: Dictionary): func _terrain_exited_scene(): _logger.debug("HTerrain exited the scene") - edit(null) + _edit(null) func _menu_item_selected(id: int): @@ -840,20 +842,20 @@ func _debug_spawn_collider_indicators(): test_root = terrain.get_node("__DEBUG") var space_state := terrain.get_world_3d().direct_space_state - var hit_material = StandardMaterial3D.new() + var hit_material := StandardMaterial3D.new() hit_material.albedo_color = Color(0, 1, 1) - var cube = CubeMesh.new() + var cube := BoxMesh.new() for zi in 16: for xi in 16: - var hit_name = str(xi, "_", zi) - var pos = Vector3(xi * 16, 1000, zi * 16) + var hit_name := str(xi, "_", zi) + var pos := Vector3(xi * 16, 1000, zi * 16) var query := PhysicsRayQueryParameters3D.new() query.from = pos query.to = pos + Vector3(0, -2000, 0) - var hit = space_state.intersect_ray(query) + var hit := space_state.intersect_ray(query) var mi : MeshInstance3D if not test_root.has_node(hit_name): @@ -864,34 +866,34 @@ func _debug_spawn_collider_indicators(): test_root.add_child(mi) else: mi = test_root.get_node(hit_name) - if hit.empty(): + if hit.is_empty(): mi.hide() else: mi.show() - mi.translation = hit.position + mi.position = hit.position func _spawn_vertical_bound_boxes(): - var data = _node.get_data() + var data := _node.get_data() # var sy = data._chunked_vertical_bounds_size_y # var sx = data._chunked_vertical_bounds_size_x - var mat = StandardMaterial3D.new() + var mat := StandardMaterial3D.new() mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA mat.albedo_color = Color(1,1,1,0.2) for cy in range(30, 60): for cx in range(30, 60): - var vb = data._chunked_vertical_bounds.get_pixel(cx, cy) - var minv = vb.r - var maxv = vb.g - var mi = MeshInstance3D.new() + var vb := data._chunked_vertical_bounds.get_pixel(cx, cy) + var minv := vb.r + var maxv := vb.g + var mi := MeshInstance3D.new() mi.mesh = BoxMesh.new() - var cs = HTerrainData.VERTICAL_BOUNDS_CHUNK_SIZE + var cs := HTerrainData.VERTICAL_BOUNDS_CHUNK_SIZE mi.mesh.size = Vector3(cs, maxv - minv, cs) - mi.translation = Vector3( + mi.position = Vector3( (float(cx) + 0.5) * cs, minv + mi.mesh.size.y * 0.5, (float(cy) + 0.5) * cs) - mi.translation *= _node.map_scale + mi.position *= _node.map_scale mi.scale = _node.map_scale mi.material_override = mat _node.add_child(mi) diff --git a/addons/zylann.hterrain/tools/preview_generator.gd b/addons/zylann.hterrain/tools/preview_generator.gd index 77439496..38b8ebf9 100644 --- a/addons/zylann.hterrain/tools/preview_generator.gd +++ b/addons/zylann.hterrain/tools/preview_generator.gd @@ -8,7 +8,7 @@ const HT_Logger = preload("../util/logger.gd") var _logger = HT_Logger.get_for(self) -func _generate(res: Resource, size: Vector2) -> Texture: +func _generate(res: Resource, size: Vector2i) -> Texture2D: if res == null or not (res is HTerrainData): return null var normalmap = res.get_image(HTerrainData.CHANNEL_NORMAL) @@ -17,7 +17,7 @@ func _generate(res: Resource, size: Vector2) -> Texture: return _generate_internal(normalmap, size) -func _generate_from_path(path: String, size: Vector2) -> Texture: +func _generate_from_path(path: String, size: Vector2i) -> Texture2D: if not path.ends_with("." + HTerrainData.META_EXTENSION): return null var data_dir := path.get_base_dir() @@ -36,10 +36,10 @@ func _handles(type: String) -> bool: return type == "Resource" -static func _generate_internal(normals: Image, size: Vector2) -> Texture: +static func _generate_internal(normals: Image, size: Vector2) -> Texture2D: var im := Image.create(size.x, size.y, false, Image.FORMAT_RGB8) - var light_dir = Vector3(-1, -0.5, -1).normalized() + var light_dir := Vector3(-1, -0.5, -1).normalized() for y in im.get_height(): for x in im.get_width(): @@ -57,7 +57,7 @@ static func _generate_internal(normals: Image, size: Vector2) -> Texture: im.set_pixel(x, y, col) - var tex = ImageTexture.create_from_image(im) + var tex := ImageTexture.create_from_image(im) return tex diff --git a/addons/zylann.hterrain/tools/progress_window.gd b/addons/zylann.hterrain/tools/progress_window.gd index a8c63f61..3e8ecdb9 100644 --- a/addons/zylann.hterrain/tools/progress_window.gd +++ b/addons/zylann.hterrain/tools/progress_window.gd @@ -1,9 +1,13 @@ @tool -extends WindowDialog +extends AcceptDialog #onready var _label = get_node("VBoxContainer/Label") -@onready var _progress_bar = $VBoxContainer/ProgressBar +@onready var _progress_bar : ProgressBar = $VBoxContainer/ProgressBar + + +func _init(): + get_ok_button().hide() func show_progress(message, progress): diff --git a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd index 32b973bd..0313b73c 100644 --- a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd +++ b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd @@ -1,5 +1,5 @@ @tool -extends WindowDialog +extends AcceptDialog const HT_Util = preload("../../util/util.gd") const HT_Logger = preload("../../util/logger.gd") @@ -43,15 +43,15 @@ const _anchor_icon_names = [ signal permanent_change_performed(message) -@onready var _resolution_dropdown = $VBoxContainer/GridContainer/ResolutionDropdown -@onready var _stretch_checkbox = $VBoxContainer/GridContainer/StretchCheckBox -@onready var _anchor_control = $VBoxContainer/GridContainer/HBoxContainer/AnchorControl +@onready var _resolution_dropdown : OptionButton = $VBoxContainer/GridContainer/ResolutionDropdown +@onready var _stretch_checkbox : CheckBox = $VBoxContainer/GridContainer/StretchCheckBox +@onready var _anchor_control : Control = $VBoxContainer/GridContainer/HBoxContainer/AnchorControl const _resolutions = HTerrainData.SUPPORTED_RESOLUTIONS -var _anchor_buttons = [] -var _anchor_buttons_grid = {} -var _anchor_button_group = null +var _anchor_buttons := [] +var _anchor_buttons_grid := {} +var _anchor_button_group : ButtonGroup = null var _selected_anchor = ANCHOR_TOP_LEFT var _logger = HT_Logger.get_for(self) @@ -62,7 +62,7 @@ func set_terrain(terrain: HTerrain): _terrain = terrain -static func _get_icon(name): +static func _get_icon(name) -> Texture2D: return load("res://addons/zylann.hterrain/tools/icons/icon_" + name + ".svg") @@ -77,16 +77,17 @@ func _ready(): _anchor_button_group = ButtonGroup.new() _anchor_buttons.resize(ANCHOR_COUNT) - var x = 0 - var y = 0 + var x := 0 + var y := 0 for i in _anchor_control.get_child_count(): - var child = _anchor_control.get_child(i) - assert(child is Button) + var child_node = _anchor_control.get_child(i) + assert(child_node is Button) + var child := child_node as Button child.toggle_mode = true - child.custom_minimum_size = child.rect_size + child.custom_minimum_size = child.size child.icon = null child.pressed.connect(_on_AnchorButton_pressed.bind(i, x, y)) - child.group = _anchor_button_group + child.button_group = _anchor_button_group _anchor_buttons[i] = child _anchor_buttons_grid[Vector2(x, y)] = child x += 1 @@ -104,7 +105,7 @@ func _notification(what: int): if visible: # Select current resolution if _terrain != null and _terrain.get_data() != null: - var res = _terrain.get_data().get_resolution() + var res := _terrain.get_data().get_resolution() for i in len(_resolutions): if res == _resolutions[i]: _resolution_dropdown.select(i) @@ -124,8 +125,8 @@ func _on_AnchorButton_pressed(anchor0: int, x0: int, y0: int): var k = Vector2(nx, ny) if not _anchor_buttons_grid.has(k): continue - var button = _anchor_buttons_grid[k] - var icon = _get_icon(_anchor_icon_names[anchor]) + var button : Button = _anchor_buttons_grid[k] + var icon := _get_icon(_anchor_icon_names[anchor]) button.icon = icon diff --git a/addons/zylann.hterrain/tools/terrain_preview.gd b/addons/zylann.hterrain/tools/terrain_preview.gd index fc1d1cf6..a3300ebb 100644 --- a/addons/zylann.hterrain/tools/terrain_preview.gd +++ b/addons/zylann.hterrain/tools/terrain_preview.gd @@ -1,5 +1,5 @@ @tool -extends ViewportContainer +extends SubViewportContainer const PREVIEW_MESH_LOD = 2 @@ -19,15 +19,15 @@ var _yaw := 0.0 var _pitch := -PI / 6.0 var _distance := 0.0 var _default_distance := 0.0 -var _sea_outline : MeshInstance = null -var _sea_plane : MeshInstance = null +var _sea_outline : MeshInstance3D = null +var _sea_plane : MeshInstance3D = null var _mesh_resolution := 0 func _ready(): if _sea_outline == null: - var mesh = HT_Util.create_wirecube_mesh() - var mat2 = StandardMaterial3D.new() + var mesh := HT_Util.create_wirecube_mesh() + var mat2 := StandardMaterial3D.new() mat2.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED mat2.albedo_color = Color(0, 0.5, 1) mesh.surface_set_material(0, mat2) @@ -36,9 +36,9 @@ func _ready(): _viewport.add_child(_sea_outline) if _sea_plane == null: - var mesh = PlaneMesh.new() + var mesh := PlaneMesh.new() mesh.size = Vector2(1, 1) - var mat2 = StandardMaterial3D.new() + var mat2 := StandardMaterial3D.new() mat2.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED mat2.albedo_color = Color(0, 0.5, 1, 0.5) mat2.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA @@ -49,13 +49,13 @@ func _ready(): _viewport.add_child(_sea_plane) -func setup(heights_texture: Texture, normals_texture: Texture): - var terrain_size = heights_texture.get_width() - var mesh_resolution = terrain_size / PREVIEW_MESH_LOD +func setup(heights_texture: Texture2D, normals_texture: Texture2D): + var terrain_size := heights_texture.get_width() + var mesh_resolution := terrain_size / PREVIEW_MESH_LOD if _mesh_resolution != mesh_resolution or not (_mesh_instance.mesh is ArrayMesh): _mesh_resolution = mesh_resolution - var mesh = HTerrainMesher.make_flat_chunk( + var mesh := HTerrainMesher.make_flat_chunk( _mesh_resolution, _mesh_resolution, PREVIEW_MESH_LOD, 0) _mesh_instance.mesh = mesh _default_distance = _mesh_instance.get_aabb().size.x @@ -63,7 +63,7 @@ func setup(heights_texture: Texture, normals_texture: Texture): #_mesh_instance.translation -= 0.5 * Vector3(terrain_size, 0, terrain_size) _update_camera() - var mat = _mesh_instance.mesh.surface_get_material(0) + var mat : ShaderMaterial = _mesh_instance.mesh.surface_get_material(0) if mat == null: mat = ShaderMaterial.new() @@ -75,12 +75,12 @@ func setup(heights_texture: Texture, normals_texture: Texture): mat.set_shader_parameter("u_terrain_inverse_transform", Transform3D()) mat.set_shader_parameter("u_terrain_normal_basis", Basis()) - var aabb = _mesh_instance.get_aabb() + var aabb := _mesh_instance.get_aabb() _sea_outline.scale = aabb.size aabb = _mesh_instance.get_aabb() _sea_plane.scale = Vector3(aabb.size.x, 1, aabb.size.z) - _sea_plane.translation = Vector3(aabb.size.x, 0, aabb.size.z) / 2.0 + _sea_plane.position = Vector3(aabb.size.x, 0, aabb.size.z) / 2.0 func set_sea_visible(visible: bool): @@ -92,18 +92,18 @@ func set_shadows_enabled(enabled: bool): func _update_camera(): - var aabb = _mesh_instance.get_aabb() - var target = aabb.position + 0.5 * aabb.size - var trans = Transform3D() + var aabb := _mesh_instance.get_aabb() + var target := aabb.position + 0.5 * aabb.size + var trans := Transform3D() trans.basis = Basis(Quaternion(Vector3(0, 1, 0), _yaw) * Quaternion(Vector3(1, 0, 0), _pitch)) - var back = trans.basis.z + var back := trans.basis.z trans.origin = target + back * _distance _camera.transform = trans func cleanup(): if _mesh_instance != null: - var mat = _mesh_instance.mesh.surface_get_material(0) + var mat : ShaderMaterial = _mesh_instance.mesh.surface_get_material(0) assert(mat != null) mat.set_shader_parameter("u_terrain_heightmap", null) mat.set_shader_parameter("u_terrain_normalmap", null) @@ -115,12 +115,12 @@ func _gui_input(event: InputEvent): if event is InputEventMouseMotion: if event.button_mask & MOUSE_BUTTON_MASK_MIDDLE: - var d = 0.01 * event.relative + var d : Vector2 = 0.01 * event.relative _yaw -= d.x _pitch -= d.y _update_camera() else: - var rel = 0.01 * event.relative + var rel : Vector2 = 0.01 * event.relative # Align dragging to view rotation rel = -rel.rotated(-_yaw) dragged.emit(rel, event.button_mask) @@ -128,10 +128,10 @@ func _gui_input(event: InputEvent): elif event is InputEventMouseButton: if event.pressed: - var factor = 1.2 - var max_factor = 10.0 - var min_distance = _default_distance / max_factor - var max_distance = _default_distance + var factor := 1.2 + var max_factor := 10.0 + var min_distance := _default_distance / max_factor + var max_distance := _default_distance # Zoom in/out if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: diff --git a/addons/zylann.hterrain/tools/texture_editor/flow_container.gd b/addons/zylann.hterrain/tools/texture_editor/flow_container.gd index 04b89f6d..44251349 100644 --- a/addons/zylann.hterrain/tools/texture_editor/flow_container.gd +++ b/addons/zylann.hterrain/tools/texture_editor/flow_container.gd @@ -12,16 +12,17 @@ func _notification(what: int): # TODO Function with ugly name to workaround a Godot 3.1 issue # See https://github.com/godotengine/godot/pull/38396 func _sort_children2(): - var max_x := rect_size.x - SEPARATION + var max_x := size.x - SEPARATION var pos := Vector2(SEPARATION, SEPARATION) var line_height := 0 for i in get_child_count(): - var child = get_child(i) - if not child is Control: + var child_node = get_child(i) + if not child_node is Control: continue + var child := child_node as Control - var rect = child.get_rect() + var rect := child.get_rect() if rect.size.y > line_height: line_height = rect.size.y diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd index 4f45691d..834accbf 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd @@ -37,7 +37,7 @@ func set_texture(tex: Texture): func set_texture_tooltip(msg: String): - _texture_rect.hint_tooltip = msg + _texture_rect.tooltip_text = msg func _on_LoadButton_pressed(): diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd index 7e1ce8cd..7cb76cd2 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd @@ -6,10 +6,10 @@ const HT_EditorUtil = preload("../../util/editor_util.gd") const HT_Util = preload("../../../util/util.gd") const HT_Logger = preload("../../../util/logger.gd") -const HT_ColorShader = preload("../display_color.shader") -const HT_ColorSliceShader = preload("../display_color_slice.shader") -const HT_AlphaShader = preload("../display_alpha.shader") -const HT_AlphaSliceShader = preload("../display_alpha_slice.shader") +const HT_ColorShader = preload("../display_color.gdshader") +const HT_ColorSliceShader = preload("../display_color_slice.gdshader") +const HT_AlphaShader = preload("../display_alpha.gdshader") +const HT_AlphaSliceShader = preload("../display_alpha_slice.gdshader") # TODO Can't preload because it causes the plugin to fail loading if assets aren't imported #const HT_EmptyTexture = preload("../../icons/empty.png") const EMPTY_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/empty.png" @@ -34,8 +34,8 @@ var _undo_redo : UndoRedo var _mode_confirmation_dialog : ConfirmationDialog var _delete_slot_confirmation_dialog : ConfirmationDialog -var _load_texture_dialog : WindowDialog -var _load_texture_array_dialog : WindowDialog +var _load_texture_dialog : ConfirmationDialog +var _load_texture_array_dialog : ConfirmationDialog var _load_texture_type := -1 var _logger = HT_Logger.get_for(self) @@ -178,9 +178,9 @@ func select_slot(slot_index: int): func _clear_previews(): - var empty_texture = load(EMPTY_TEXTURE_PATH) + var empty_texture : Texture2D = load(EMPTY_TEXTURE_PATH) if empty_texture == null: - _logger.error("Failed to load empty texture ", EMPTY_TEXTURE_PATH) + _logger.error(str("Failed to load empty texture ", EMPTY_TEXTURE_PATH)) _albedo_preview.texture = empty_texture _bump_preview.texture = empty_texture @@ -197,9 +197,9 @@ func _select_slot(slot_index: int): assert(slot_index >= 0) assert(slot_index < _texture_set.get_slots_count()) - var empty_texture = load(EMPTY_TEXTURE_PATH) + var empty_texture : Texture2D = load(EMPTY_TEXTURE_PATH) if empty_texture == null: - _logger.error("Failed to load empty texture ", EMPTY_TEXTURE_PATH) + _logger.error(str("Failed to load empty texture ", EMPTY_TEXTURE_PATH)) if _texture_set.get_mode() == HTerrainTextureSet.MODE_TEXTURES: var albedo_tex := \ @@ -279,8 +279,8 @@ func _on_AddSlot_pressed(): assert(_texture_set.get_mode() == HTerrainTextureSet.MODE_TEXTURES) var slot_index = _texture_set.get_slots_count() _undo_redo.create_action("HTerrainTextureSet: add slot") - _undo_redo.add_do_method(_texture_set, "insert_slot", -1) - _undo_redo.add_undo_method(_texture_set, "remove_slot", slot_index) + _undo_redo.add_do_method(_texture_set.insert_slot.bind(-1)) + _undo_redo.add_undo_method(_texture_set.remove_slot.bind(slot_index)) _undo_redo.commit_action() @@ -294,17 +294,17 @@ func _on_RemoveSlot_pressed(): _undo_redo.create_action("HTerrainTextureSet: remove slot") - _undo_redo.add_do_method(_texture_set, "remove_slot", slot_index) + _undo_redo.add_do_method(_texture_set.remove_slot.bind(slot_index)) - _undo_redo.add_undo_method(_texture_set, "insert_slot", slot_index) + _undo_redo.add_undo_method(_texture_set.insert_slot.bind(slot_index)) for type in len(textures): var texture = textures[type] # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture == null: - _undo_redo.add_undo_method(_texture_set, "set_texture_null", slot_index, type) + _undo_redo.add_undo_method(_texture_set.set_texture_null.bind(slot_index, type)) else: - _undo_redo.add_undo_method(_texture_set, "set_texture", slot_index, type, texture) + _undo_redo.add_undo_method(_texture_set.set_texture.bind(slot_index, type, texture)) _undo_redo.commit_action() @@ -337,23 +337,23 @@ func _set_texture_action(slot_index: int, texture: Texture, type: int): # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture == null: - _undo_redo.add_do_method(_texture_set, "set_texture_null", slot_index, type) + _undo_redo.add_do_method(_texture_set.set_texture_null.bind(slot_index, type)) else: - _undo_redo.add_do_method(_texture_set, "set_texture", slot_index, type, texture) - _undo_redo.add_do_method(self, "_select_slot", slot_index) + _undo_redo.add_do_method(_texture_set.set_texture.bind(slot_index, type, texture)) + _undo_redo.add_do_method(self._select_slot.bind(slot_index)) # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if prev_texture == null: - _undo_redo.add_undo_method(_texture_set, "set_texture_null", slot_index, type) + _undo_redo.add_undo_method(_texture_set.set_texture_null.bind(slot_index, type)) else: - _undo_redo.add_undo_method(_texture_set, "set_texture", slot_index, type, prev_texture) - _undo_redo.add_undo_method(self, "_select_slot", slot_index) + _undo_redo.add_undo_method(_texture_set.set_texture.bind(slot_index, type, prev_texture)) + _undo_redo.add_undo_method(self._select_slot.bind(slot_index)) _undo_redo.commit_action() -func _set_texture_array_action(slot_index: int, texture_array: TextureArray, type: int): +func _set_texture_array_action(slot_index: int, texture_array: Texture2DArray, type: int): var prev_texture_array = _texture_set.get_texture_array(type) _undo_redo.create_action("HTerrainTextureSet: load texture array") @@ -361,20 +361,20 @@ func _set_texture_array_action(slot_index: int, texture_array: TextureArray, typ # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture_array == null: - _undo_redo.add_do_method(_texture_set, "set_texture_array_null", type) + _undo_redo.add_do_method(_texture_set.set_texture_array_null.bind(type)) # Can't select a slot after this because there won't be any after the array is removed else: - _undo_redo.add_do_method(_texture_set, "set_texture_array", type, texture_array) - _undo_redo.add_do_method(self, "_select_slot", slot_index) + _undo_redo.add_do_method(_texture_set.set_texture_array.bind(type, texture_array)) + _undo_redo.add_do_method(self._select_slot.bind(slot_index)) # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if prev_texture_array == null: - _undo_redo.add_undo_method(_texture_set, "set_texture_array_null", type) + _undo_redo.add_undo_method(_texture_set.set_texture_array_null.bind(type)) # Can't select a slot after this because there won't be any after the array is removed else: - _undo_redo.add_undo_method(_texture_set, "set_texture_array", type, prev_texture_array) - _undo_redo.add_undo_method(self, "_select_slot", slot_index) + _undo_redo.add_undo_method(_texture_set.set_texture_array.bind(type, prev_texture_array)) + _undo_redo.add_undo_method(self._select_slot.bind(slot_index)) _undo_redo.commit_action() @@ -451,12 +451,12 @@ func _switch_mode_action(): if mode == HTerrainTextureSet.MODE_TEXTURES: ur.create_action("HTerrainTextureSet: switch to TextureArrays") - ur.add_do_method(_texture_set, "set_mode", HTerrainTextureSet.MODE_TEXTURE_ARRAYS) + ur.add_do_method(_texture_set.set_mode.bind(HTerrainTextureSet.MODE_TEXTURE_ARRAYS)) backup_for_undo(_texture_set, ur) else: ur.create_action("HTerrainTextureSet: switch to Textures") - ur.add_do_method(_texture_set, "set_mode", HTerrainTextureSet.MODE_TEXTURES) + ur.add_do_method(_texture_set.set_mode.bind(HTerrainTextureSet.MODE_TEXTURES)) backup_for_undo(_texture_set, ur) ur.commit_action() @@ -465,8 +465,8 @@ func _switch_mode_action(): static func backup_for_undo(texture_set: HTerrainTextureSet, ur: UndoRedo): var mode := texture_set.get_mode() - ur.add_undo_method(texture_set, "clear") - ur.add_undo_method(texture_set, "set_mode", mode) + ur.add_undo_method(texture_set.clear) + ur.add_undo_method(texture_set.set_mode.bind(mode)) if mode == HTerrainTextureSet.MODE_TEXTURES: # Backup slots @@ -481,14 +481,14 @@ static func backup_for_undo(texture_set: HTerrainTextureSet, ur: UndoRedo): for type in len(type_textures): var textures = type_textures[type] for slot_index in len(textures): - ur.add_undo_method(texture_set, "insert_slot", slot_index) + ur.add_undo_method(texture_set.insert_slot.bind(slot_index)) var texture = textures[slot_index] # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture == null: - ur.add_undo_method(texture_set, "set_texture_null", slot_index, type) + ur.add_undo_method(texture_set.set_texture_null.bind(slot_index, type)) else: - ur.add_undo_method(texture_set, "set_texture", slot_index, type, texture) + ur.add_undo_method(texture_set.set_texture.bind(slot_index, type, texture)) else: # Backup slots @@ -501,9 +501,9 @@ static func backup_for_undo(texture_set: HTerrainTextureSet, ur: UndoRedo): # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture_array == null: - ur.add_undo_method(texture_set, "set_texture_array_null", type) + ur.add_undo_method(texture_set.set_texture_array_null.bind(type)) else: - ur.add_undo_method(texture_set, "set_texture_array", type, texture_array) + ur.add_undo_method(texture_set.set_texture_array.bind(type, texture_array)) #func _on_ModeConfirmationDialog_cancelled(): diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index 9f57c43c..60cfb101 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -14,7 +14,7 @@ const HT_PackedTextureImporter = preload("../../packed_textures/packed_texture_i const HT_PackedTextureArrayImporter = \ preload("../../packed_textures/packed_texture_array_importer.gd") -const HT_NormalMapPreviewShader = preload("../display_normal.shader") +const HT_NormalMapPreviewShader = preload("../display_normal.gdshader") const COMPRESS_RAW = 0 const COMPRESS_LOSSLESS = 1 @@ -73,7 +73,7 @@ var _logger = HT_Logger.get_for(self) # This is normally an `EditorFileDialog`. I can't type-hint this one properly, # because when I test this UI in isolation, I can't use `EditorFileDialog`. -var _load_texture_dialog : WindowDialog +var _load_texture_dialog : ConfirmationDialog var _load_texture_type : int = -1 var _error_popup : AcceptDialog var _info_popup : AcceptDialog @@ -82,12 +82,12 @@ var _open_dir_dialog : ConfirmationDialog var _editor_file_system : EditorFileSystem var _normalmap_material : ShaderMaterial -var _import_mode = HTerrainTextureSet.MODE_TEXTURES +var _import_mode := HTerrainTextureSet.MODE_TEXTURES class HT_TextureSetImportEditorSlot: # Array of strings. # Can be either path to images, hexadecimal colors starting with #, or empty string for "null". - var texture_paths = [] + var texture_paths := [] var flip_normalmap_y := false func _init(): @@ -95,7 +95,7 @@ class HT_TextureSetImportEditorSlot: texture_paths.append("") # Array of HT_TextureSetImportEditorSlot -var _slots_data = [] +var _slots_data := [] var _import_settings := { "mipmaps": true, @@ -214,7 +214,7 @@ func set_texture_set(texture_set: HTerrainTextureSet): continue var import_data := _parse_json_file(texture.resource_path) - if import_data.empty() or not import_data.has("src"): + if import_data.is_empty() or not import_data.has("src"): continue var src_types = HTerrainTextureSet.get_src_types_from_type(type) @@ -240,7 +240,7 @@ func set_texture_set(texture_set: HTerrainTextureSet): continue var import_data := _parse_json_file(texture_array.resource_path) - if import_data.empty() or not import_data.has("layers"): + if import_data.is_empty() or not import_data.has("layers"): continue var layers_data = import_data["layers"] @@ -270,9 +270,9 @@ func set_texture_set(texture_set: HTerrainTextureSet): func _parse_json_file(fpath: String) -> Dictionary: - var f := FileAccess.open(fpath, File.READ) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(fpath, FileAccess.READ) + if f == null: + var err := FileAccess.get_open_error() _logger.error("Could not load {0}: {1}".format([fpath, HT_Errors.get_message(err)])) return {} @@ -295,7 +295,7 @@ func _update_ui_from_data(): _slots_list.add_item("Texture {0}".format([slot_index])) _resolution_spinbox.value = _import_settings.resolution - _mipmaps_checkbox.pressed = _import_settings.mipmaps + _mipmaps_checkbox.button_pressed = _import_settings.mipmaps _set_selected_id(_compression_selector, _import_settings.compression) _set_selected_id(_import_mode_selector, _import_mode) @@ -340,7 +340,7 @@ func _select_slot(slot_index: int): _slots_list.select(slot_index) - _normalmap_flip_checkbox.pressed = slot.flip_normalmap_y + _normalmap_flip_checkbox.button_pressed = slot.flip_normalmap_y _normalmap_material.set_shader_parameter("u_flip_y", slot.flip_normalmap_y) @@ -373,8 +373,7 @@ func _set_ui_slot_texture_from_path(im_path: String, type: int): ed.set_texture_tooltip("") return - var tex := ImageTexture.new() - tex.create_from_image(im, 0) + var tex := ImageTexture.create_from_image(im) ed.set_texture(tex) ed.set_texture_tooltip(im_path) @@ -543,7 +542,7 @@ func _on_RemoveSlotButton_pressed(): func _on_delete_confirmation_popup_confirmed(): var selected_item : int = _slots_list.get_selected_items()[0] - _slots_data.remove(selected_item) + _slots_data.remove_at(selected_item) _update_ui_from_data() @@ -625,9 +624,9 @@ func _on_ImportButton_pressed(): _show_error("A problem occurred while serializing data for {0}".format([fd.path])) return - var f := FileAccess.open(fd.path, File.WRITE) - var err := FileAccess.get_open_error() - if err != OK: + var f := FileAccess.open(fd.path, FileAccess.WRITE) + if f == null: + var err := FileAccess.get_open_error() _show_error("Could not write file {0}: {1}".format([fd.path])) return @@ -697,11 +696,11 @@ func _on_ImportButton_pressed(): var texture_array = load(fd.path) if texture_array == null: failed_resource_paths.append(fd.path) - assert(texture_array is TextureArray) + assert(texture_array is Texture2DArray) fd["texture_array"] = texture_array if len(failed_resource_paths) > 0: - var failed_list = PackedStringArray(failed_resource_paths).join("\n") + var failed_list := "\n".join(PackedStringArray(failed_resource_paths)) _show_error("Some resources failed to load:\n" + failed_list) else: @@ -712,24 +711,24 @@ func _on_ImportButton_pressed(): HT_TextureSetEditor.backup_for_undo(_texture_set, ur) - ur.add_do_method(_texture_set, "clear") - ur.add_do_method(_texture_set, "set_mode", _import_mode) + ur.add_do_method(_texture_set.clear) + ur.add_do_method(_texture_set.set_mode.bind(_import_mode)) for i in len(_slots_data): - ur.add_do_method(_texture_set, "insert_slot", -1) + ur.add_do_method(_texture_set.insert_slot.bind(-1)) for fd in files_data: - ur.add_do_method(_texture_set, "set_texture", fd.slot_index, fd.type, fd.texture) + ur.add_do_method(_texture_set.set_texture.bind(fd.slot_index, fd.type, fd.texture)) else: ur.create_action("HTerrainTextureSet: import texture arrays") HT_TextureSetEditor.backup_for_undo(_texture_set, ur) - ur.add_do_method(_texture_set, "clear") - ur.add_do_method(_texture_set, "set_mode", _import_mode) + ur.add_do_method(_texture_set.clear) + ur.add_do_method(_texture_set.set_mode.bind(_import_mode)) for fd in files_data: - ur.add_do_method(_texture_set, "set_texture_array", fd.type, fd.texture_array) + ur.add_do_method(_texture_set.set_texture_array.bind(fd.type, fd.texture_array)) ur.commit_action() @@ -751,7 +750,7 @@ func _generate_packed_textures_files_data(import_dir: String, prefix: String) -> COMPRESS_LOSSLESS: importer_compress_mode = HT_StreamTextureImporter.COMPRESS_LOSSLESS COMPRESS_RAW: - importer_compress_mode = HT_StreamTextureImporter.COMPRESS_RAW + importer_compress_mode = HT_StreamTextureImporter.COMPRESS_UNCOMPRESSED _: return HT_Result.new(false, "Unknown compress mode {0}, might be a bug" \ .format([_import_settings.compression])) @@ -830,7 +829,7 @@ func _generate_save_packed_texture_arrays_files_data( COMPRESS_LOSSLESS: importer_compress_mode = HT_TextureLayeredImporter.COMPRESS_LOSSLESS COMPRESS_RAW: - importer_compress_mode = HT_TextureLayeredImporter.COMPRESS_RAW + importer_compress_mode = HT_TextureLayeredImporter.COMPRESS_UNCOMPRESSED _: return HT_Result.new(false, "Unknown compress mode {0}, might be a bug" \ .format([_import_settings.compression])) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd b/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd index f331458d..e3e337fd 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_editor.gd @@ -19,7 +19,7 @@ var _terrain : HTerrain = null var _texture_set : HTerrainTextureSet = null var _texture_list_need_update := false -var _empty_icon : Texture +var _empty_icon : Texture2D var _logger = HT_Logger.get_for(self) @@ -90,7 +90,7 @@ func _update_texture_list(): for slot_index in slots_count: var texture := texture_set.get_texture( slot_index, HTerrainTextureSet.TYPE_ALBEDO_BUMP) - var hint = _get_slot_hint_name(slot_index, _terrain.get_shader_type()) + var hint := _get_slot_hint_name(slot_index, _terrain.get_shader_type()) if texture == null: texture = _empty_icon _textures_list.add_item(hint, texture) @@ -98,7 +98,7 @@ func _update_texture_list(): HTerrainTextureSet.MODE_TEXTURE_ARRAYS: var texture_array = texture_set.get_texture_array(HTerrainTextureSet.TYPE_ALBEDO_BUMP) for slot_index in slots_count: - var hint = _get_slot_hint_name(slot_index, _terrain.get_shader_type()) + var hint := _get_slot_hint_name(slot_index, _terrain.get_shader_type()) _textures_list.add_item(hint, texture_array, slot_index) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list.gd b/addons/zylann.hterrain/tools/texture_editor/texture_list.gd index 5eddd854..74a664bc 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list.gd @@ -32,8 +32,8 @@ var _selected_item := -1 # Note: the texture can be a TextureArray, which does not inherit Texture -func add_item(text: String, texture: Resource, texture_layer: int = 0): - var item = HT_TextureListItemScene.instance() +func add_item(text: String, texture: Texture, texture_layer: int = 0): + var item : HT_TextureListItem = HT_TextureListItemScene.instance() _container.add_child(item) item.set_text(text) item.set_texture(texture, texture_layer) @@ -43,8 +43,8 @@ func get_item_count() -> int: return _container.get_child_count() -func set_item_texture(index: int, tex: Resource, layer: int = 0): - var child = _container.get_child(index) +func set_item_texture(index: int, tex: Texture, layer: int = 0): + var child : HT_TextureListItem = _container.get_child(index) child.set_texture(tex, layer) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd index ed5cd6db..fb99e772 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd @@ -6,13 +6,13 @@ extends PanelContainer # In such cases, the hierarchy must be made of containers that grow based on their children. const HT_ColorMaterial = preload("./display_color_material.tres") -const HT_ColorSliceShader = preload("./display_color_slice.shader") +const HT_ColorSliceShader = preload("./display_color_slice.gdshader") # TODO Can't preload because it causes the plugin to fail loading if assets aren't imported #const HT_DummyTexture = preload("../icons/empty.png") const DUMMY_TEXTURE_PATH = "res://addons/zylann.hterrain/tools/icons/empty.png" -@onready var _texture_rect = $VB/TextureRect -@onready var _label = $VB/Label +@onready var _texture_rect : TextureRect = $VB/TextureRect +@onready var _label : Label = $VB/Label var _selected := false @@ -22,8 +22,8 @@ func set_text(text: String): _label.text = text -func set_texture(texture: Resource, texture_layer: int): - if texture is TextureArray: +func set_texture(texture: Texture, texture_layer: int): + if texture is Texture2DArray: var mat = _texture_rect.material if mat == null or not (mat is ShaderMaterial): mat = ShaderMaterial.new() @@ -69,4 +69,4 @@ func _draw(): else: color = Color(0.0, 0.0, 0.0, 0.5) # Draw background - draw_rect(Rect2(Vector2(), rect_size), color) + draw_rect(Rect2(Vector2(), size), color) diff --git a/addons/zylann.hterrain/tools/util/dialog_fitter.gd b/addons/zylann.hterrain/tools/util/dialog_fitter.gd index e1aeffd8..59bb194e 100644 --- a/addons/zylann.hterrain/tools/util/dialog_fitter.gd +++ b/addons/zylann.hterrain/tools/util/dialog_fitter.gd @@ -21,17 +21,17 @@ func _notification(what: int): func _fit_to_contents(): - var dialog : Control = get_parent() + var dialog : Window = get_parent() for child in dialog.get_children(): if child is Container: var child_rect : Rect2 = child.get_global_rect() - var dialog_rect := dialog.get_global_rect() + var dialog_rect := Rect2(Vector2(), dialog.size) #print("Dialog: ", dialog_rect, ", contents: ", child_rect, " ", child.get_path()) if not dialog_rect.encloses(child_rect): var margin : Vector2 = child.get_rect().position #print("Fitting ", dialog.get_path(), " from ", dialog.rect_size, # " to ", child_rect.size + margin * 2.0) - dialog.custom_minimum_size = child_rect.size + margin * 2.0 + dialog.min_size = child_rect.size + margin * 2.0 #func _process(delta): diff --git a/addons/zylann.hterrain/tools/util/editor_util.gd b/addons/zylann.hterrain/tools/util/editor_util.gd index f40df5a6..137ea78d 100644 --- a/addons/zylann.hterrain/tools/util/editor_util.gd +++ b/addons/zylann.hterrain/tools/util/editor_util.gd @@ -11,12 +11,12 @@ static func create_open_file_dialog() -> ConfirmationDialog: var d if Engine.is_editor_hint(): d = EditorFileDialog.new() - d.mode = EditorFileDialog.MODE_OPEN_FILE + d.file_mode = EditorFileDialog.FILE_MODE_OPEN_FILE d.access = EditorFileDialog.ACCESS_RESOURCES else: # Duh. I need to be able to test it. d = FileDialog.new() - d.mode = FileDialog.MODE_OPEN_FILE + d.file_mode = FileDialog.FILE_MODE_OPEN_FILE d.access = FileDialog.ACCESS_RESOURCES d.resizable = true return d @@ -26,12 +26,12 @@ static func create_open_dir_dialog() -> ConfirmationDialog: var d if Engine.is_editor_hint(): d = EditorFileDialog.new() - d.mode = EditorFileDialog.MODE_OPEN_DIR + d.file_mode = EditorFileDialog.FILE_MODE_OPEN_DIR d.access = EditorFileDialog.ACCESS_RESOURCES else: # Duh. I need to be able to test it. d = FileDialog.new() - d.mode = FileDialog.MODE_OPEN_DIR + d.file_mode = FileDialog.FILE_MODE_OPEN_DIR d.access = FileDialog.ACCESS_RESOURCES d.resizable = true return d diff --git a/addons/zylann.hterrain/tools/util/interval_slider.gd b/addons/zylann.hterrain/tools/util/interval_slider.gd index 8b4e2aff..481d08be 100644 --- a/addons/zylann.hterrain/tools/util/interval_slider.gd +++ b/addons/zylann.hterrain/tools/util/interval_slider.gd @@ -38,25 +38,25 @@ func _get_property_list(): ] -func _get(key: String): +func _get(key: StringName): match key: - "min_value": + &"min_value": return _min_value - "max_value": + &"max_value": return _max_value - "range": + &"range": return Vector2(_min_value, _max_value) -func _set(key: String, value): +func _set(key: StringName, value): match key: - "min_value": + &"min_value": _min_value = min(value, _max_value) - update() - "max_value": + queue_redraw() + &"max_value": _max_value = max(value, _min_value) - update() - "range": + queue_redraw() + &"range": _min_value = value.x _max_value = value.y @@ -68,7 +68,7 @@ func set_values(low: float, high: float): high = low _values[VALUE_LOW] = low _values[VALUE_HIGH] = high - update() + queue_redraw() func set_value(i: int, v: float, notify_change: bool): @@ -120,7 +120,7 @@ func _ratio_to_value(r: float) -> float: func _value_to_ratio(v: float) -> float: - if abs(_max_value - _min_value) < 0.001: + if absf(_max_value - _min_value) < 0.001: return 0.0 return (v - _min_value) / (_max_value - _min_value) @@ -134,7 +134,7 @@ func _get_closest_index(ratio: float) -> int: func _set_from_pixel(px: float): - var r := (px - FG_MARGIN) / (rect_size.x - FG_MARGIN * 2.0) + var r := (px - FG_MARGIN) / (size.x - FG_MARGIN * 2.0) var i := _get_closest_index(r) var v := _ratio_to_value(r) set_value(i, v, true) @@ -163,7 +163,7 @@ func _draw(): var interval_color := Color(0.4,0.4,0.4) var background_color := Color(0.1, 0.1, 0.1) - var control_rect := Rect2(Vector2(), rect_size) + var control_rect := Rect2(Vector2(), size) var bg_rect := Rect2( control_rect.position.x, diff --git a/addons/zylann.hterrain/tools/util/spin_slider.gd b/addons/zylann.hterrain/tools/util/spin_slider.gd index 2d798c87..fa690d58 100644 --- a/addons/zylann.hterrain/tools/util/spin_slider.gd +++ b/addons/zylann.hterrain/tools/util/spin_slider.gd @@ -59,7 +59,7 @@ var _centered := true @export var centered: bool: get: return _centered - set: + set(v): set_centered(v) @@ -134,7 +134,7 @@ func _init(): _line_edit.anchor_bottom = 1 _line_edit.gui_input.connect(_on_LineEdit_gui_input) _line_edit.focus_exited.connect(_on_LineEdit_focus_exited) - _line_edit.text_entered.connect(_on_LineEdit_text_entered) + _line_edit.text_submitted.connect(_on_LineEdit_text_submitted) _line_edit.hide() add_child(_line_edit) @@ -155,7 +155,7 @@ func set_centered(p_centered: bool): _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT _label.offset_right = -8 _label2.show() - update() + queue_redraw() func is_centered() -> bool: @@ -249,7 +249,7 @@ func is_allowing_greater() -> bool: func _set_from_pixel(px: float): - var r := (px - FG_MARGIN) / (rect_size.x - FG_MARGIN * 2.0) + var r := (px - FG_MARGIN) / (size.x - FG_MARGIN * 2.0) var v := _ratio_to_value(r) set_value(v, true, true) @@ -263,7 +263,7 @@ func _ratio_to_value(r: float) -> float: func _value_to_ratio(v: float) -> float: - if abs(_max_value - _min_value) < 0.001: + if absf(_max_value - _min_value) < 0.001: return 0.0 return (v - _min_value) / (_max_value - _min_value) @@ -284,14 +284,14 @@ func _on_LineEdit_focus_exited(): _enter_text() -func _on_LineEdit_text_entered(text: String): +func _on_LineEdit_text_submitted(text: String): _enter_text() func _enter_text(): var s = _line_edit.text.strip_edges() if s.is_valid_float(): - var v = s.to_float() + var v := s.to_float() if not _allow_greater: v = minf(v, _max_value) set_value(v, true, false) @@ -346,7 +346,7 @@ func _draw(): var interval_color := Color(0.4,0.4,0.4) var background_color := Color(0.1, 0.1, 0.1) - var control_rect := Rect2(Vector2(), rect_size) + var control_rect := Rect2(Vector2(), size) var bg_rect := Rect2( control_rect.position.x, @@ -365,7 +365,7 @@ func _draw(): var dot_pos := value_text.find(".") if dot_pos != -1: - var decimal_count = len(value_text) - dot_pos + var decimal_count := len(value_text) - dot_pos if decimal_count > MAX_DECIMALS_VISUAL: value_text = value_text.substr(0, dot_pos + MAX_DECIMALS_VISUAL + 1) @@ -379,7 +379,7 @@ func _draw(): else: _label2.text = _prefix - var text = value_text + var text := value_text if _suffix != "": text = str(text, " ", _suffix) _label.text = text diff --git a/addons/zylann.hterrain/util/direct_mesh_instance.gd b/addons/zylann.hterrain/util/direct_mesh_instance.gd index adb7eead..17c89c92 100644 --- a/addons/zylann.hterrain/util/direct_mesh_instance.gd +++ b/addons/zylann.hterrain/util/direct_mesh_instance.gd @@ -2,9 +2,9 @@ # Implementation of MeshInstance which doesn't use the scene tree -var _mesh_instance = null +var _mesh_instance := RID() # Need to keep a reference so that the mesh RID doesn't get freed -var _mesh = null +var _mesh : Mesh func _init(): diff --git a/addons/zylann.hterrain/util/errors.gd b/addons/zylann.hterrain/util/errors.gd index 9595479c..c6a2c636 100644 --- a/addons/zylann.hterrain/util/errors.gd +++ b/addons/zylann.hterrain/util/errors.gd @@ -53,6 +53,6 @@ const _names = { ERR_PRINTER_ON_FIRE: "The printer is on fire" } -static func get_message(err_code): +static func get_message(err_code: int): return str("[", err_code, "]: ", _names[err_code]) diff --git a/addons/zylann.hterrain/util/grid.gd b/addons/zylann.hterrain/util/grid.gd index ed62485b..b28e83b0 100644 --- a/addons/zylann.hterrain/util/grid.gd +++ b/addons/zylann.hterrain/util/grid.gd @@ -6,7 +6,7 @@ # Performs a positive integer division rounded to upper (4/2 = 2, 5/3 = 2) -static func up_div(a, b): +static func up_div(a: int, b: int): if a % b != 0: return a / b + 1 return a / b @@ -15,12 +15,12 @@ static func up_div(a, b): # Creates a 2D array as an array of arrays. # if v is provided, all cells will contain the same value. # if v is a funcref, it will be executed to fill the grid cell per cell. -static func create_grid(w, h, v=null): +static func create_grid(w: int, h: int, v=null): var is_create_func = typeof(v) == TYPE_CALLABLE - var grid = [] + var grid := [] grid.resize(h) for y in range(grid.size()): - var row = [] + var row := [] row.resize(w) if is_create_func: for x in range(row.size()): @@ -34,10 +34,10 @@ static func create_grid(w, h, v=null): # Creates a 2D array that is a copy of another 2D array static func clone_grid(other_grid): - var grid = [] + var grid := [] grid.resize(other_grid.size()) for y in range(0, grid.size()): - var row = [] + var row := [] var other_row = other_grid[y] row.resize(other_row.size()) grid[y] = row diff --git a/addons/zylann.hterrain/util/image_file_cache.gd b/addons/zylann.hterrain/util/image_file_cache.gd index 2f56166a..bccc12c8 100644 --- a/addons/zylann.hterrain/util/image_file_cache.gd +++ b/addons/zylann.hterrain/util/image_file_cache.gd @@ -38,11 +38,11 @@ func _init(cache_dir: String): _session_id += str(rng.randi() % 10) _logger.debug(str("Image cache session ID: ", _session_id)) if not DirAccess.dir_exists_absolute(_cache_dir): - var err = DirAccess.make_dir_absolute(_cache_dir) + var err := DirAccess.make_dir_absolute(_cache_dir) if err != OK: _logger.error("Could not create directory {0}, error {1}".format([_cache_dir, err])) _save_thread_running = true - _saving_thread.start(self, "_save_thread_func") + _saving_thread.start(_save_thread_func) # TODO Cannot cleanup the cache in destructor! @@ -57,7 +57,7 @@ func _notification(what: int): func _create_new_cache_file(fpath: String): - var f := FileAccess.open(fpath, File.WRITE) + var f := FileAccess.open(fpath, FileAccess.WRITE) if f == null: var err = FileAccess.get_open_error() _logger.error("Failed to create new cache file {0}, error {1}".format([fpath, err])) @@ -127,15 +127,15 @@ static func _read_image(f: FileAccess) -> Image: var height := f.get_32() var data_size := f.get_32() var data := f.get_buffer(data_size) - var im = Image.create_from_data(width, height, false, format, data) + var im := Image.create_from_data(width, height, false, format, data) return im func load_image(id: int) -> Image: var info := _cache_image_info[id] as Dictionary - var timeout = 5.0 - var time_before = Time.get_ticks_msec() + var timeout := 5.0 + var time_before := Time.get_ticks_msec() # We could just grab `image`, because the thread only reads it. # However it's still not safe to do that if we write or even lock it, # so we have to assume it still has ownership of it. @@ -148,9 +148,9 @@ func load_image(id: int) -> Image: var fpath := info.path as String - var f = FileAccess.open(fpath, File.READ) + var f := FileAccess.open(fpath, FileAccess.READ) if f == null: - var err = FileAccess.get_open_error() + var err := FileAccess.get_open_error() _logger.error("Could not load cached image from {0}, error {1}" \ .format([fpath, err])) return null @@ -176,7 +176,7 @@ func clear(): dir.include_hidden = false dir.include_navigational = false - var err = dir.list_dir_begin() + var err := dir.list_dir_begin() if err != OK: _logger.error("Could not start list_dir_begin in '{0}'".format([_cache_dir])) return @@ -226,7 +226,7 @@ func _save_thread_func(_unused_userdata): f = null path = "" - f = FileAccess.open(path, File.READ_WRITE) + f = FileAccess.open(path, FileAccess.READ_WRITE) if f == null: var err = FileAccess.get_open_error() call_deferred("_on_error", "Could not open file {0}, error {1}" \ diff --git a/addons/zylann.hterrain/util/logger.gd b/addons/zylann.hterrain/util/logger.gd index de0c2aea..fcc78a3e 100644 --- a/addons/zylann.hterrain/util/logger.gd +++ b/addons/zylann.hterrain/util/logger.gd @@ -17,8 +17,8 @@ class HT_LoggerBase: class HT_LoggerVerbose extends HT_LoggerBase: - func _init(p_context: String).(p_context): - pass + func _init(p_context: String): + super(p_context) func debug(msg: String): print(_context, ": ", msg) @@ -26,7 +26,8 @@ class HT_LoggerVerbose extends HT_LoggerBase: static func get_for(owner: Object) -> HT_LoggerBase: # Note: don't store the owner. If it's a Reference, it could create a cycle - var context = owner.get_script().resource_path.get_file() + var script : Script = owner.get_script() + var context := script.resource_path.get_file() if OS.is_stdout_verbose(): return HT_LoggerVerbose.new(context) return HT_LoggerBase.new(context) diff --git a/addons/zylann.hterrain/util/util.gd b/addons/zylann.hterrain/util/util.gd index 8f2754a7..15e7c2f1 100644 --- a/addons/zylann.hterrain/util/util.gd +++ b/addons/zylann.hterrain/util/util.gd @@ -59,7 +59,7 @@ static func create_wirecube_mesh(color = Color(1,1,1)) -> Mesh: static func integer_square_root(x: int) -> int: assert(typeof(x) == TYPE_INT) - var r = int(roundf(sqrt(x))) + var r := int(roundf(sqrt(x))) if r * r == x: return r # Does not exist @@ -70,7 +70,7 @@ static func integer_square_root(x: int) -> int: static func format_integer(n: int, sep := ",") -> String: assert(typeof(n) == TYPE_INT) - var negative = false + var negative := false if n < 0: negative = true n = -n @@ -90,18 +90,18 @@ static func format_integer(n: int, sep := ",") -> String: static func get_node_in_parents(node: Node, klass) -> Node: while node != null: node = node.get_parent() - if node != null and node is klass: + if node != null and is_instance_of(node, klass): return node return null # Goes down all children until a node of the given class is found static func find_first_node(node: Node, klass) -> Node: - if node is klass: + if is_instance_of(node, klass): return node for i in node.get_child_count(): - var child = node.get_child(i) - var found_node = find_first_node(child, klass) + var child := node.get_child(i) + var found_node := find_first_node(child, klass) if found_node != null: return found_node return null @@ -110,10 +110,10 @@ static func find_first_node(node: Node, klass) -> Node: static func is_in_edited_scene(node: Node) -> bool: if not node.is_inside_tree(): return false - var edited_scene = node.get_tree().edited_scene_root + var edited_scene := node.get_tree().edited_scene_root if node == edited_scene: return true - return edited_scene != null and edited_scene.is_a_parent_of(node) + return edited_scene != null and edited_scene.is_ancestor_of(node) # Get an extended or cropped version of an image, @@ -126,7 +126,7 @@ static func get_cropped_image(src: Image, width: int, height: int, height = int(height) if width == src.get_width() and height == src.get_height(): return src - var im = Image.create(width, height, false, src.get_format()) + var im := Image.create(width, height, false, src.get_format()) if fill_color != null: im.fill(fill_color) var p = get_cropped_image_params( @@ -135,8 +135,8 @@ static func get_cropped_image(src: Image, width: int, height: int, return im -static func get_cropped_image_params(src_w: int, src_h: int, dst_w: int, dst_h: int, - anchor: Vector2) -> Dictionary: +static func get_cropped_image_params(src_w: int, src_h: int, dst_w: int, dst_h: int, + anchor: Vector2) -> Dictionary: var rel_anchor := (anchor + Vector2(1, 1)) / 2.0 @@ -199,16 +199,19 @@ static func get_cropped_image_params(src_w: int, src_h: int, dst_w: int, dst_h: # Generic way to apply editor scale to a plugin UI scene. # It is slower than doing it manually on specific controls. -static func apply_dpi_scale(root: Control, dpi_scale: float): +# Takes a node as root because since Godot 4 Window dialogs are no longer Controls. +static func apply_dpi_scale(root: Node, dpi_scale: float): if dpi_scale == 1.0: return var to_process := [root] while len(to_process) > 0: var node : Node = to_process[-1] to_process.pop_back() - if node is Viewport or node is SubViewport: + if node is Window: + node.size = Vector2(node.size) * dpi_scale + elif node is Viewport or node is SubViewport: continue - if node is Control: + elif node is Control: if node.custom_minimum_size != Vector2(0, 0): node.custom_minimum_size = node.custom_minimum_size * dpi_scale var parent = node.get_parent() @@ -236,7 +239,7 @@ static func get_aabb_intersection_with_segment(aabb: AABB, var hit - var x_rect = Rect2(aabb.position.y, aabb.position.z, aabb.size.y, aabb.size.z) + var x_rect := Rect2(aabb.position.y, aabb.position.z, aabb.size.y, aabb.size.z) hit = Plane(Vector3(1, 0, 0), aabb.position.x) \ .intersects_segment(segment_begin, segment_end) @@ -248,7 +251,7 @@ static func get_aabb_intersection_with_segment(aabb: AABB, if hit != null and x_rect.has_point(Vector2(hit.y, hit.z)): hits.append(hit) - var y_rect = Rect2(aabb.position.x, aabb.position.z, aabb.size.x, aabb.size.z) + var y_rect := Rect2(aabb.position.x, aabb.position.z, aabb.size.x, aabb.size.z) hit = Plane(Vector3(0, 1, 0), aabb.position.y) \ .intersects_segment(segment_begin, segment_end) @@ -260,7 +263,7 @@ static func get_aabb_intersection_with_segment(aabb: AABB, if hit != null and y_rect.has_point(Vector2(hit.x, hit.z)): hits.append(hit) - var z_rect = Rect2(aabb.position.x, aabb.position.y, aabb.size.x, aabb.size.y) + var z_rect := Rect2(aabb.position.x, aabb.position.y, aabb.size.x, aabb.size.y) hit = Plane(Vector3(0, 0, 1), aabb.position.z) \ .intersects_segment(segment_begin, segment_end) @@ -490,7 +493,7 @@ static func update_configuration_warning(node: Node, recursive: bool): static func write_import_file(settings: Dictionary, imp_fpath: String, logger) -> bool: # TODO Should use ConfigFile instead - var f := FileAccess.open(imp_fpath, File.WRITE) + var f := FileAccess.open(imp_fpath, FileAccess.WRITE) if f == null: var err = FileAccess.get_open_error() logger.error("Could not open '{0}' for write, error {1}" \ @@ -515,3 +518,30 @@ static func write_import_file(settings: Dictionary, imp_fpath: String, logger) - f.store_line("") return true + + +static func update_texture_partial( + tex: ImageTexture, im: Image, src_rect: Rect2i, dst_pos: Vector2i): + + # ..ooo@@@XXX%%%xx.. + # .oo@@XXX%x%xxx.. ` . + # .o@XX%%xx.. ` . + # o@X%.. ..ooooooo + # .@X%x. ..o@@^^ ^^@@o + # .ooo@@@@@@ooo.. ..o@@^ @X% + # o@@^^^ ^^^@@@ooo.oo@@^ % + # xzI -*-- ^^^o^^ --*- % + # @@@o ooooooo^@@^o^@X^@oooooo .X%x + # I@@@@@@@@@XX%%xx ( o@o )X%x@ROMBASED@@@X%x + # I@@@@XX%%xx oo@@@@X% @@X%x ^^^@@@@@@@X%x + # @X%xx o@@@@@@@X% @@XX%%x ) ^^@X%x + # ^ xx o@@@@@@@@Xx ^ @XX%%x xxx + # o@@^^^ooo I^^ I^o ooo . x + # oo @^ IX I ^X @^ oo + # IX U . V IX + # V . . V + # + + # TODO Optimize: Godot 4 has lost the ability to update textures partially! + tex.update(im) + diff --git a/addons/zylann.hterrain/util/xyz_format.gd b/addons/zylann.hterrain/util/xyz_format.gd index d912aa20..9e77d10d 100644 --- a/addons/zylann.hterrain/util/xyz_format.gd +++ b/addons/zylann.hterrain/util/xyz_format.gd @@ -28,12 +28,12 @@ class HT_XYZBounds: static func load_bounds(f: FileAccess) -> HT_XYZBounds: # It is faster to get line and split floats than using CSV functions var line := f.get_line() - var floats = line.split_floats(" ") + var floats := line.split_floats(" ") # We only care about X and Y, it makes less operations to do in the loop. # Z is the height and will remain as-is at the end. - var min_pos_x : float = floats[0] - var min_pos_y : float = floats[1] + var min_pos_x := floats[0] + var min_pos_y := floats[1] var max_pos_x := min_pos_x var max_pos_y := min_pos_y @@ -51,8 +51,8 @@ static func load_bounds(f: FileAccess) -> HT_XYZBounds: floats = line.split_floats(" ") - var pos_x = floats[0] - var pos_y = floats[1] + var pos_x := floats[0] + var pos_y := floats[1] min_pos_x = minf(min_pos_x, pos_x) min_pos_y = minf(min_pos_y, pos_y) From bae0547d0e583a28ce2cf513d9d5c864a160f064 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Mon, 20 Mar 2023 00:53:31 +0000 Subject: [PATCH 11/94] Fixes to make the scratchpad painter work --- addons/zylann.hterrain/tools/brush/painter.gd | 31 +++++++++---------- .../settings_dialog/preview_scratchpad.gd | 11 +++++-- .../settings_dialog/preview_scratchpad.tscn | 15 ++++++++- .../tools/generator/texture_generator.gd | 2 +- addons/zylann.hterrain/tools/plugin.gd | 2 +- .../zylann.hterrain/tools/util/editor_util.gd | 12 ++++--- addons/zylann.hterrain/util/util.gd | 4 ++- project.godot | 1 - 8 files changed, 50 insertions(+), 28 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/painter.gd b/addons/zylann.hterrain/tools/brush/painter.gd index 03095c0c..6f3929ab 100644 --- a/addons/zylann.hterrain/tools/brush/painter.gd +++ b/addons/zylann.hterrain/tools/brush/painter.gd @@ -46,14 +46,15 @@ const _supported_formats = [ Image.FORMAT_R8, Image.FORMAT_RG8, Image.FORMAT_RGB8, - Image.FORMAT_RGBA8, - Image.FORMAT_RH, - Image.FORMAT_RGH, - Image.FORMAT_RGBH, - Image.FORMAT_RGBAH + Image.FORMAT_RGBA8 + # No longer supported since Godot 4 removed support for it in 2D viewports... +# Image.FORMAT_RH, +# Image.FORMAT_RGH, +# Image.FORMAT_RGBH, +# Image.FORMAT_RGBAH ] -# - Viewport (size of edited region + margin to allow quad rotation) +# - SubViewport (size of edited region + margin to allow quad rotation) # |- Background # | Fills pixels with unmodified source image. # |- Brush sprite @@ -85,8 +86,6 @@ func _init(): _viewport = SubViewport.new() _viewport.size = Vector2(_brush_size, _brush_size) _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE - # No longer available in Godot 4... - #_viewport.render_target_v_flip = true _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE #_viewport.hdr = false _viewport.transparent_bg = true @@ -193,14 +192,14 @@ func clear_brush_shader_params(): # If we want to be able to rotate the brush quad every frame, # we must prepare a bigger viewport otherwise the quad will not fit inside -static func _get_size_fit_for_rotation(src_size: Vector2) -> Vector2: +static func _get_size_fit_for_rotation(src_size: Vector2) -> Vector2i: var d = int(ceilf(src_size.length())) - return Vector2(d, d) + return Vector2i(d, d) # You must call this from an `_input` function or similar. func paint_input(center_pos: Vector2): - var vp_size = _get_size_fit_for_rotation(Vector2(_brush_size, _brush_size)) + var vp_size := _get_size_fit_for_rotation(Vector2(_brush_size, _brush_size)) if _viewport.size != vp_size: # Do this lazily so the brush slider won't lag while adjusting it # TODO An "sliding_ended" handling might produce better user experience @@ -217,14 +216,15 @@ func paint_input(center_pos: Vector2): # We want this quad to have a specific size, regardless of the texture assigned to it _viewport_brush_sprite.scale = \ - _brush_scale * Vector2(_brush_size, _brush_size) / _viewport_brush_sprite.texture.get_size() + _brush_scale * Vector2(_brush_size, _brush_size) \ + / Vector2(_viewport_brush_sprite.texture.get_size()) # Using a Color because Godot doesn't understand vec4 var rect := Color() rect.r = brush_pos.x / _texture.get_width() rect.g = brush_pos.y / _texture.get_height() - rect.b = _viewport.size.x / _texture.get_width() - rect.a = _viewport.size.y / _texture.get_height() + rect.b = float(_viewport.size.x) / float(_texture.get_width()) + rect.a = float(_viewport.size.y) / float(_texture.get_height()) # In order to make sure that u_brush_rect is never bigger than the brush: # 1. we ceil() the result of lower-left corner # 2. we floor() the result of upper-right corner @@ -263,9 +263,6 @@ func _process(delta: float): #print("Paint result at frame ", Engine.get_frames_drawn()) var data := _viewport.get_texture().get_image() data.convert(_image.get_format()) - - # TODO Optimize: flipping on the CPU since GPU v-flip was removed in Godot 4... - data.flip_y() var brush_pos := _last_brush_position diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd index 23580ef5..03879444 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd @@ -23,9 +23,16 @@ func _ready(): func reset_image(): - var image = Image.create( - _texture_rect.rect_size.x, _texture_rect.rect_size.y, false, Image.FORMAT_RGB8) + var image = Image.create(_texture_rect.size.x, _texture_rect.size.y, false, Image.FORMAT_RGB8) image.fill(Color(1,1,1)) + + # TEST +# var fnl = FastNoiseLite.new() +# for y in image.get_height(): +# for x in image.get_width(): +# var g = 0.5 + 0.5 * fnl.get_noise_2d(x, y) +# image.set_pixel(x, y, Color(g, g, g, 1.0)) + var texture = ImageTexture.create_from_image(image) _texture_rect.texture = texture _painter.set_image_texture(image, texture) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn index 6c7c91b1..c41ef99b 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn @@ -1,8 +1,20 @@ -[gd_scene load_steps=3 format=3 uid="uid://ng00jipfeucy"] +[gd_scene load_steps=5 format=3 uid="uid://ng00jipfeucy"] [ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd" id="1"] [ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd" id="2"] +[sub_resource type="Image" id="Image_iltsg"] +data = { +"data": PackedByteArray(127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 103, 103, 103, 99, 99, 99, 96, 96, 96, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 95, 95, 95, 98, 98, 98, 102, 102, 102, 106, 106, 106, 110, 110, 110, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 115, 115, 115, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 99, 99, 99, 100, 100, 100, 101, 101, 101, 99, 99, 99, 96, 96, 96, 91, 91, 91, 88, 88, 88, 86, 86, 86, 87, 87, 87, 89, 89, 89, 93, 93, 93, 97, 97, 97, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 99, 99, 99, 97, 97, 97, 94, 94, 94, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 101, 101, 101, 102, 102, 102, 105, 105, 105, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 124, 124, 124, 127, 127, 127, 132, 132, 132, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 105, 105, 105, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 86, 86, 86, 81, 81, 81, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 93, 93, 93, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 103, 103, 103, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 81, 81, 81, 79, 79, 79, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 97, 97, 97, 92, 92, 92, 89, 89, 89, 86, 86, 86, 86, 86, 86, 88, 88, 88, 92, 92, 92, 96, 96, 96, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 121, 121, 121, 125, 125, 125, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 114, 114, 114, 116, 116, 116, 121, 121, 121, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 137, 137, 137, 130, 130, 130, 122, 122, 122, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 106, 106, 106, 100, 100, 100, 96, 96, 96, 93, 93, 93, 91, 91, 91, 87, 87, 87, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 92, 92, 92, 96, 96, 96, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 103, 103, 103, 100, 100, 100, 95, 95, 95, 90, 90, 90, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 78, 78, 78, 77, 77, 77, 78, 78, 78, 81, 81, 81, 82, 82, 82, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 87, 87, 87, 86, 86, 86, 87, 87, 87, 90, 90, 90, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 141, 141, 141, 134, 134, 134, 125, 125, 125, 119, 119, 119, 114, 114, 114, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 106, 106, 106, 101, 101, 101, 96, 96, 96, 94, 94, 94, 91, 91, 91, 89, 89, 89, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 92, 92, 92, 93, 93, 93, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 103, 103, 103, 99, 99, 99, 94, 94, 94, 88, 88, 88, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 76, 76, 76, 79, 79, 79, 82, 82, 82, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 98, 98, 98, 100, 100, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 125, 125, 125, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 138, 138, 138, 130, 130, 130, 123, 123, 123, 117, 117, 117, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 101, 101, 101, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 99, 99, 99, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 102, 102, 102, 97, 97, 97, 92, 92, 92, 86, 86, 86, 83, 83, 83, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 75, 75, 75, 78, 78, 78, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 96, 96, 96, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 109, 109, 109, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 123, 123, 123, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 150, 150, 150, 147, 147, 147, 141, 141, 141, 135, 135, 135, 128, 128, 128, 121, 121, 121, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 99, 99, 99, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 103, 103, 103, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 100, 100, 100, 96, 96, 96, 91, 91, 91, 85, 85, 85, 81, 81, 81, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 77, 77, 77, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 93, 93, 93, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 106, 106, 106, 110, 110, 110, 114, 114, 114, 116, 116, 116, 117, 117, 117, 120, 120, 120, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 144, 144, 144, 148, 148, 148, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 148, 148, 148, 143, 143, 143, 137, 137, 137, 130, 130, 130, 124, 124, 124, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 99, 99, 99, 98, 98, 98, 94, 94, 94, 90, 90, 90, 85, 85, 85, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 85, 85, 85, 90, 90, 90, 93, 93, 93, 93, 93, 93, 91, 91, 91, 91, 91, 91, 90, 90, 90, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 85, 85, 85, 90, 90, 90, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 102, 102, 102, 107, 107, 107, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 151, 151, 151, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 146, 146, 146, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 154, 154, 154, 150, 150, 150, 144, 144, 144, 138, 138, 138, 131, 131, 131, 126, 126, 126, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 105, 105, 105, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 78, 78, 78, 75, 75, 75, 73, 73, 73, 74, 74, 74, 74, 74, 74, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 89, 89, 89, 92, 92, 92, 93, 93, 93, 91, 91, 91, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 82, 82, 82, 88, 88, 88, 93, 93, 93, 96, 96, 96, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 104, 104, 104, 110, 110, 110, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 153, 153, 153, 147, 147, 147, 140, 140, 140, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 105, 105, 105, 101, 101, 101, 98, 98, 98, 98, 98, 98, 99, 99, 99, 102, 102, 102, 106, 106, 106, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 86, 86, 86, 82, 82, 82, 76, 76, 76, 73, 73, 73, 72, 72, 72, 73, 73, 73, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 82, 82, 82, 87, 87, 87, 90, 90, 90, 91, 91, 91, 89, 89, 89, 87, 87, 87, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 74, 74, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 74, 74, 74, 79, 79, 79, 85, 85, 85, 90, 90, 90, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 113, 113, 113, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 98, 98, 98, 103, 103, 103, 108, 108, 108, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 152, 152, 152, 145, 145, 145, 138, 138, 138, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 80, 80, 80, 75, 75, 75, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 82, 82, 82, 85, 85, 85, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 72, 72, 72, 76, 76, 76, 82, 82, 82, 88, 88, 88, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 94, 94, 94, 97, 97, 97, 102, 102, 102, 108, 108, 108, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 149, 149, 149, 146, 146, 146, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 166, 166, 166, 163, 163, 163, 157, 157, 157, 150, 150, 150, 143, 143, 143, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 104, 104, 104, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 75, 75, 75, 72, 72, 72, 72, 72, 72, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 74, 74, 74, 80, 80, 80, 86, 86, 86, 90, 90, 90, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 94, 94, 94, 92, 92, 92, 93, 93, 93, 96, 96, 96, 102, 102, 102, 107, 107, 107, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 168, 168, 168, 165, 165, 165, 160, 160, 160, 153, 153, 153, 147, 147, 147, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 105, 105, 105, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 104, 104, 104, 100, 100, 100, 97, 97, 97, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 88, 88, 88, 85, 85, 85, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 76, 76, 76, 74, 74, 74, 74, 74, 74, 75, 75, 75, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 80, 80, 80, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 69, 69, 69, 68, 68, 68, 70, 70, 70, 73, 73, 73, 78, 78, 78, 84, 84, 84, 88, 88, 88, 90, 90, 90, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 93, 93, 93, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 153, 153, 153, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 168, 168, 168, 171, 171, 171, 171, 171, 171, 170, 170, 170, 166, 166, 166, 161, 161, 161, 156, 156, 156, 151, 151, 151, 147, 147, 147, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 102, 102, 102, 98, 98, 98, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 99, 99, 99, 95, 95, 95, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 77, 77, 77, 79, 79, 79, 80, 80, 80, 78, 78, 78, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 84, 84, 84, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 72, 72, 72, 70, 70, 70, 69, 69, 69, 69, 69, 69, 71, 71, 71, 74, 74, 74, 78, 78, 78, 82, 82, 82, 85, 85, 85, 87, 87, 87, 90, 90, 90, 92, 92, 92, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 116, 116, 116, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 94, 94, 94, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 165, 165, 165, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 173, 173, 173, 171, 171, 171, 168, 168, 168, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 170, 170, 170, 167, 167, 167, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 143, 143, 143, 137, 137, 137, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 112, 112, 112, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 104, 104, 104, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 104, 104, 104, 110, 110, 110, 116, 116, 116, 118, 118, 118, 118, 118, 118, 117, 117, 117, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 83, 83, 83, 85, 85, 85, 85, 85, 85, 83, 83, 83, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 92, 92, 92, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 102, 102, 102, 98, 98, 98, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 102, 102, 102, 107, 107, 107, 111, 111, 111, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 170, 170, 170, 168, 168, 168, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 155, 155, 155, 154, 154, 154, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 170, 170, 170, 169, 169, 169, 170, 170, 170, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 150, 150, 150, 144, 144, 144, 137, 137, 137, 132, 132, 132, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 113, 113, 113, 118, 118, 118, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 90, 90, 90, 88, 88, 88, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 78, 78, 78, 80, 80, 80, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 84, 84, 84, 87, 87, 87, 87, 87, 87, 85, 85, 85, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 89, 89, 89, 93, 93, 93, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 102, 102, 102, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 106, 106, 106, 103, 103, 103, 100, 100, 100, 98, 98, 98, 98, 98, 98, 99, 99, 99, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 169, 169, 169, 166, 166, 166, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 162, 162, 162, 158, 158, 158, 157, 157, 157, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 171, 171, 171, 174, 174, 174, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 149, 149, 149, 144, 144, 144, 139, 139, 139, 134, 134, 134, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 98, 98, 98, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 110, 110, 110, 115, 115, 115, 120, 120, 120, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 108, 108, 108, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 85, 85, 85, 88, 88, 88, 89, 89, 89, 87, 87, 87, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 98, 98, 98, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 115, 115, 115, 118, 118, 118, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 108, 108, 108, 104, 104, 104, 100, 100, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 93, 93, 93, 90, 90, 90, 88, 88, 88, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 170, 170, 170, 171, 171, 171, 169, 169, 169, 165, 165, 165, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 170, 170, 170, 173, 173, 173, 175, 175, 175, 176, 176, 176, 174, 174, 174, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 158, 158, 158, 153, 153, 153, 148, 148, 148, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 105, 105, 105, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 100, 100, 100, 96, 96, 96, 92, 92, 92, 90, 90, 90, 88, 88, 88, 87, 87, 87, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 72, 72, 72, 75, 75, 75, 79, 79, 79, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 82, 82, 82, 83, 83, 83, 85, 85, 85, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 91, 91, 91, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 105, 105, 105, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 105, 105, 105, 102, 102, 102, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 91, 91, 91, 87, 87, 87, 86, 86, 86, 153, 153, 153, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 163, 163, 163, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 175, 175, 175, 171, 171, 171, 168, 168, 168, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 167, 167, 167, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 156, 156, 156, 150, 150, 150, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 107, 107, 107, 109, 109, 109, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 121, 121, 121, 116, 116, 116, 111, 111, 111, 107, 107, 107, 104, 104, 104, 100, 100, 100, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 70, 70, 70, 68, 68, 68, 67, 67, 67, 67, 67, 67, 71, 71, 71, 75, 75, 75, 80, 80, 80, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 83, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 105, 105, 105, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 124, 124, 124, 123, 123, 123, 120, 120, 120, 115, 115, 115, 111, 111, 111, 108, 108, 108, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 86, 86, 86, 85, 85, 85, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 176, 176, 176, 172, 172, 172, 169, 169, 169, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 169, 169, 169, 166, 166, 166, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 157, 157, 157, 151, 151, 151, 146, 146, 146, 142, 142, 142, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 122, 122, 122, 119, 119, 119, 114, 114, 114, 111, 111, 111, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 116, 116, 116, 110, 110, 110, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 91, 91, 91, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 64, 64, 64, 67, 67, 67, 71, 71, 71, 76, 76, 76, 80, 80, 80, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 96, 96, 96, 93, 93, 93, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 100, 100, 100, 95, 95, 95, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 102, 102, 102, 105, 105, 105, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 86, 86, 86, 158, 158, 158, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 165, 165, 165, 161, 161, 161, 158, 158, 158, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 171, 171, 171, 172, 172, 172, 172, 172, 172, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 156, 156, 156, 151, 151, 151, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 126, 126, 126, 129, 129, 129, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 115, 115, 115, 110, 110, 110, 105, 105, 105, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 82, 82, 82, 77, 77, 77, 72, 72, 72, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, 64, 64, 64, 62, 62, 62, 61, 61, 61, 61, 61, 61, 63, 63, 63, 67, 67, 67, 72, 72, 72, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 79, 79, 79, 82, 82, 82, 83, 83, 83, 83, 83, 83, 81, 81, 81, 79, 79, 79, 80, 80, 80, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 95, 95, 95, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 99, 99, 99, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 128, 128, 128, 130, 130, 130, 131, 131, 131, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 106, 106, 106, 101, 101, 101, 95, 95, 95, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 115, 115, 115, 109, 109, 109, 103, 103, 103, 98, 98, 98, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 77, 77, 77, 72, 72, 72, 68, 68, 68, 64, 64, 64, 63, 63, 63, 63, 63, 63, 62, 62, 62, 60, 60, 60, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 65, 65, 65, 69, 69, 69, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 77, 77, 77, 80, 80, 80, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 77, 77, 77, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 86, 86, 86, 87, 87, 87, 89, 89, 89, 92, 92, 92, 96, 96, 96, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 93, 93, 93, 89, 89, 89, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 126, 126, 126, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 108, 108, 108, 103, 103, 103, 98, 98, 98, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 165, 165, 165, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 167, 167, 167, 164, 164, 164, 159, 159, 159, 153, 153, 153, 149, 149, 149, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 135, 135, 135, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 112, 112, 112, 106, 106, 106, 100, 100, 100, 94, 94, 94, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 67, 67, 67, 64, 64, 64, 62, 62, 62, 62, 62, 62, 61, 61, 61, 59, 59, 59, 57, 57, 57, 58, 58, 58, 60, 60, 60, 62, 62, 62, 63, 63, 63, 65, 65, 65, 67, 67, 67, 68, 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70, 70, 72, 72, 72, 74, 74, 74, 76, 76, 76, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 75, 75, 75, 79, 79, 79, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 83, 83, 83, 85, 85, 85, 88, 88, 88, 92, 92, 92, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 108, 108, 108, 104, 104, 104, 101, 101, 101, 98, 98, 98, 94, 94, 94, 90, 90, 90, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 158, 158, 158, 152, 152, 152, 149, 149, 149, 148, 148, 148, 148, 148, 148, 146, 146, 146, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 113, 113, 113, 108, 108, 108, 102, 102, 102, 96, 96, 96, 90, 90, 90, 85, 85, 85, 80, 80, 80, 76, 76, 76, 71, 71, 71, 67, 67, 67, 64, 64, 64, 62, 62, 62, 61, 61, 61, 62, 62, 62, 60, 60, 60, 58, 58, 58, 56, 56, 56, 58, 58, 58, 61, 61, 61, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 69, 69, 69, 69, 69, 69, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 71, 71, 71, 72, 72, 72, 72, 72, 72, 70, 70, 70, 71, 71, 71, 74, 74, 74, 78, 78, 78, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 94, 94, 94, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 102, 102, 102, 96, 96, 96, 91, 91, 91, 169, 169, 169, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 166, 166, 166, 167, 167, 167, 170, 170, 170, 173, 173, 173, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 180, 180, 180, 180, 180, 180, 178, 178, 178, 174, 174, 174, 169, 169, 169, 165, 165, 165, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 158, 158, 158, 152, 152, 152, 148, 148, 148, 147, 147, 147, 147, 147, 147, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 111, 111, 111, 104, 104, 104, 98, 98, 98, 93, 93, 93, 89, 89, 89, 84, 84, 84, 80, 80, 80, 74, 74, 74, 70, 70, 70, 66, 66, 66, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 60, 60, 60, 58, 58, 58, 57, 57, 57, 59, 59, 59, 63, 63, 63, 66, 66, 66, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 73, 73, 73, 77, 77, 77, 80, 80, 80, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 110, 110, 110, 115, 115, 115, 121, 121, 121, 125, 125, 125, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 105, 105, 105, 98, 98, 98, 92, 92, 92, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 173, 173, 173, 173, 173, 173, 171, 171, 171, 169, 169, 169, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 178, 178, 178, 181, 181, 181, 182, 182, 182, 181, 181, 181, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 161, 161, 161, 158, 158, 158, 152, 152, 152, 148, 148, 148, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 121, 121, 121, 115, 115, 115, 108, 108, 108, 102, 102, 102, 96, 96, 96, 91, 91, 91, 87, 87, 87, 83, 83, 83, 79, 79, 79, 75, 75, 75, 70, 70, 70, 67, 67, 67, 65, 65, 65, 63, 63, 63, 63, 63, 63, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 61, 61, 61, 64, 64, 64, 68, 68, 68, 68, 68, 68, 67, 67, 67, 65, 65, 65, 64, 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 63, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 69, 69, 69, 73, 73, 73, 78, 78, 78, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 91, 91, 91, 96, 96, 96, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 117, 117, 117, 123, 123, 123, 129, 129, 129, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 112, 112, 112, 106, 106, 106, 100, 100, 100, 94, 94, 94, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 176, 176, 176, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 173, 173, 173, 175, 175, 175, 177, 177, 177, 180, 180, 180, 181, 181, 181, 181, 181, 181, 178, 178, 178, 174, 174, 174, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 159, 159, 159, 159, 159, 159, 159, 159, 159, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 113, 113, 113, 107, 107, 107, 100, 100, 100, 94, 94, 94, 88, 88, 88, 84, 84, 84, 80, 80, 80, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 67, 67, 67, 66, 66, 66, 66, 66, 66, 65, 65, 65, 63, 63, 63, 62, 62, 62, 62, 62, 62, 64, 64, 64, 67, 67, 67, 69, 69, 69, 70, 70, 70, 68, 68, 68, 66, 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 63, 63, 63, 65, 65, 65, 67, 67, 67, 70, 70, 70, 75, 75, 75, 80, 80, 80, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 90, 90, 90, 95, 95, 95, 100, 100, 100, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 105, 105, 105, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 119, 119, 119, 125, 125, 125, 131, 131, 131, 135, 135, 135, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 118, 118, 118, 112, 112, 112, 107, 107, 107, 102, 102, 102, 97, 97, 97, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 177, 177, 177, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 179, 179, 179, 176, 176, 176, 172, 172, 172, 168, 168, 168, 165, 165, 165, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 112, 112, 112, 106, 106, 106, 100, 100, 100, 93, 93, 93, 86, 86, 86, 81, 81, 81, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 66, 66, 66, 64, 64, 64, 63, 63, 63, 64, 64, 64, 67, 67, 67, 70, 70, 70, 74, 74, 74, 78, 78, 78, 82, 82, 82, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 93, 93, 93, 98, 98, 98, 102, 102, 102, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 96, 96, 96, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 115, 115, 115, 120, 120, 120, 126, 126, 126, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 122, 122, 122, 117, 117, 117, 112, 112, 112, 108, 108, 108, 104, 104, 104, 99, 99, 99, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 178, 178, 178, 180, 180, 180, 182, 182, 182, 183, 183, 183, 182, 182, 182, 181, 181, 181, 182, 182, 182, 184, 184, 184, 183, 183, 183, 179, 179, 179, 175, 175, 175, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 180, 180, 180, 181, 181, 181, 179, 179, 179, 174, 174, 174, 170, 170, 170, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 106, 106, 106, 99, 99, 99, 92, 92, 92, 85, 85, 85, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 70, 70, 70, 70, 70, 70, 70, 70, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 67, 67, 67, 65, 65, 65, 66, 66, 66, 69, 69, 69, 74, 74, 74, 78, 78, 78, 81, 81, 81, 83, 83, 83, 86, 86, 86, 89, 89, 89, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 118, 118, 118, 122, 122, 122, 127, 127, 127, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 129, 129, 129, 125, 125, 125, 120, 120, 120, 115, 115, 115, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 165, 165, 165, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 187, 187, 187, 186, 186, 186, 185, 185, 185, 186, 186, 186, 187, 187, 187, 185, 185, 185, 181, 181, 181, 177, 177, 177, 174, 174, 174, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 180, 180, 180, 181, 181, 181, 179, 179, 179, 174, 174, 174, 169, 169, 169, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 147, 147, 147, 143, 143, 143, 141, 141, 141, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 104, 104, 104, 98, 98, 98, 91, 91, 91, 84, 84, 84, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 73, 73, 73, 75, 75, 75, 76, 76, 76, 75, 75, 75, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 70, 70, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 71, 71, 71, 73, 73, 73, 73, 73, 73, 71, 71, 71, 69, 69, 69, 69, 69, 69, 71, 71, 71, 76, 76, 76, 79, 79, 79, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 106, 106, 106, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 153, 153, 153, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 175, 175, 175, 179, 179, 179, 183, 183, 183, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 187, 187, 187, 183, 183, 183, 179, 179, 179, 177, 177, 177, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 175, 175, 175, 170, 170, 170, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 158, 158, 158, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 130, 130, 130, 124, 124, 124, 119, 119, 119, 115, 115, 115, 111, 111, 111, 108, 108, 108, 106, 106, 106, 102, 102, 102, 96, 96, 96, 90, 90, 90, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 73, 73, 73, 77, 77, 77, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 108, 108, 108, 107, 107, 107, 105, 105, 105, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 126, 126, 126, 122, 122, 122, 119, 119, 119, 114, 114, 114, 109, 109, 109, 105, 105, 105, 101, 101, 101, 97, 97, 97, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 154, 154, 154, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 174, 174, 174, 179, 179, 179, 183, 183, 183, 184, 184, 184, 184, 184, 184, 185, 185, 185, 186, 186, 186, 188, 188, 188, 189, 189, 189, 187, 187, 187, 185, 185, 185, 182, 182, 182, 179, 179, 179, 178, 178, 178, 178, 178, 178, 178, 178, 178, 180, 180, 180, 182, 182, 182, 183, 183, 183, 183, 183, 183, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 156, 156, 156, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 137, 137, 137, 131, 131, 131, 124, 124, 124, 117, 117, 117, 111, 111, 111, 106, 106, 106, 103, 103, 103, 102, 102, 102, 99, 99, 99, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 75, 75, 75, 79, 79, 79, 82, 82, 82, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 82, 82, 82, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 73, 73, 73, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 80, 80, 80, 84, 84, 84, 87, 87, 87, 89, 89, 89, 92, 92, 92, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 97, 97, 97, 94, 94, 94, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 172, 172, 172, 177, 177, 177, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 184, 184, 184, 186, 186, 186, 188, 188, 188, 187, 187, 187, 185, 185, 185, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 180, 180, 180, 181, 181, 181, 183, 183, 183, 185, 185, 185, 185, 185, 185, 183, 183, 183, 181, 181, 181, 180, 180, 180, 177, 177, 177, 174, 174, 174, 169, 169, 169, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 137, 137, 137, 130, 130, 130, 122, 122, 122, 114, 114, 114, 107, 107, 107, 101, 101, 101, 98, 98, 98, 97, 97, 97, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 82, 82, 82, 78, 78, 78, 74, 74, 74, 73, 73, 73, 74, 74, 74, 77, 77, 77, 80, 80, 80, 84, 84, 84, 87, 87, 87, 87, 87, 87, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 85, 85, 85, 82, 82, 82, 79, 79, 79, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 110, 110, 110, 103, 103, 103, 97, 97, 97, 93, 93, 93, 92, 92, 92, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 165, 165, 165, 169, 169, 169, 174, 174, 174, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 183, 183, 183, 184, 184, 184, 184, 184, 184, 183, 183, 183, 183, 183, 183, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 183, 183, 183, 185, 185, 185, 186, 186, 186, 185, 185, 185, 182, 182, 182, 180, 180, 180, 178, 178, 178, 176, 176, 176, 172, 172, 172, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 143, 143, 143, 136, 136, 136, 128, 128, 128, 119, 119, 119, 111, 111, 111, 103, 103, 103, 97, 97, 97, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 85, 85, 85, 88, 88, 88, 89, 89, 89, 87, 87, 87, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 89, 89, 89, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 142, 142, 142, 137, 137, 137, 132, 132, 132, 126, 126, 126, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 105, 105, 105, 99, 99, 99, 94, 94, 94, 91, 91, 91, 89, 89, 89, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 166, 166, 166, 170, 170, 170, 174, 174, 174, 176, 176, 176, 175, 175, 175, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 179, 179, 179, 179, 179, 179, 180, 180, 180, 182, 182, 182, 184, 184, 184, 185, 185, 185, 184, 184, 184, 183, 183, 183, 180, 180, 180, 178, 178, 178, 177, 177, 177, 176, 176, 176, 172, 172, 172, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 143, 143, 143, 134, 134, 134, 125, 125, 125, 116, 116, 116, 108, 108, 108, 100, 100, 100, 94, 94, 94, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 88, 88, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 95, 95, 95, 99, 99, 99, 103, 103, 103, 107, 107, 107, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 111, 111, 111, 106, 106, 106, 100, 100, 100, 95, 95, 95, 91, 91, 91, 89, 89, 89, 87, 87, 87, 141, 141, 141, 138, 138, 138, 137, 137, 137, 138, 138, 138, 141, 141, 141, 145, 145, 145, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 142, 142, 142, 133, 133, 133, 123, 123, 123, 114, 114, 114, 106, 106, 106, 98, 98, 98, 92, 92, 92, 89, 89, 89, 87, 87, 87, 88, 88, 88, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 108, 108, 108, 112, 112, 112, 116, 116, 116, 118, 118, 118, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 150, 150, 150, 147, 147, 147, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 140, 140, 140, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 114, 114, 114, 107, 107, 107, 101, 101, 101, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 142, 142, 142, 138, 138, 138, 136, 136, 136, 137, 137, 137, 141, 141, 141, 146, 146, 146, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 154, 154, 154, 154, 154, 154, 157, 157, 157, 161, 161, 161, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 133, 133, 133, 123, 123, 123, 114, 114, 114, 105, 105, 105, 98, 98, 98, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 76, 76, 76, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 84, 84, 84, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 153, 153, 153, 151, 151, 151, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 134, 134, 134, 136, 136, 136, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 132, 132, 132, 129, 129, 129, 125, 125, 125, 119, 119, 119, 111, 111, 111, 104, 104, 104, 99, 99, 99, 95, 95, 95, 92, 92, 92, 90, 90, 90, 86, 86, 86, 80, 80, 80, 143, 143, 143, 138, 138, 138, 136, 136, 136, 136, 136, 136, 140, 140, 140, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 167, 167, 167, 170, 170, 170, 170, 170, 170, 169, 169, 169, 168, 168, 168, 170, 170, 170, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 175, 175, 175, 177, 177, 177, 179, 179, 179, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 162, 162, 162, 163, 163, 163, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 154, 154, 154, 158, 158, 158, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 140, 140, 140, 133, 133, 133, 124, 124, 124, 114, 114, 114, 106, 106, 106, 99, 99, 99, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 81, 81, 81, 78, 78, 78, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 78, 78, 78, 81, 81, 81, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 129, 129, 129, 131, 131, 131, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 128, 128, 128, 124, 124, 124, 117, 117, 117, 109, 109, 109, 103, 103, 103, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 84, 84, 84, 78, 78, 78, 142, 142, 142, 138, 138, 138, 136, 136, 136, 137, 137, 137, 140, 140, 140, 146, 146, 146, 152, 152, 152, 156, 156, 156, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 169, 169, 172, 172, 172, 175, 175, 175, 175, 175, 175, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 167, 167, 167, 171, 171, 171, 176, 176, 176, 178, 178, 178, 177, 177, 177, 174, 174, 174, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 162, 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 138, 138, 138, 131, 131, 131, 123, 123, 123, 114, 114, 114, 106, 106, 106, 100, 100, 100, 96, 96, 96, 91, 91, 91, 87, 87, 87, 83, 83, 83, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 80, 80, 80, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 85, 85, 85, 81, 81, 81, 80, 80, 80, 82, 82, 82, 86, 86, 86, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 134, 134, 134, 133, 133, 133, 130, 130, 130, 126, 126, 126, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 154, 154, 154, 151, 151, 151, 146, 146, 146, 141, 141, 141, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 127, 127, 127, 121, 121, 121, 114, 114, 114, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 88, 88, 88, 83, 83, 83, 77, 77, 77, 142, 142, 142, 139, 139, 139, 137, 137, 137, 138, 138, 138, 142, 142, 142, 148, 148, 148, 153, 153, 153, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 160, 160, 160, 164, 164, 164, 169, 169, 169, 174, 174, 174, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 157, 157, 157, 154, 154, 154, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 162, 162, 162, 164, 164, 164, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 166, 166, 166, 169, 169, 169, 172, 172, 172, 172, 172, 172, 170, 170, 170, 166, 166, 166, 163, 163, 163, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 141, 141, 141, 135, 135, 135, 127, 127, 127, 120, 120, 120, 113, 113, 113, 106, 106, 106, 101, 101, 101, 97, 97, 97, 92, 92, 92, 87, 87, 87, 82, 82, 82, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 79, 79, 79, 81, 81, 81, 84, 84, 84, 86, 86, 86, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 100, 100, 100, 105, 105, 105, 110, 110, 110, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 123, 123, 123, 117, 117, 117, 110, 110, 110, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 82, 82, 82, 78, 78, 78, 145, 145, 145, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 150, 150, 150, 154, 154, 154, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 157, 157, 157, 161, 161, 161, 166, 166, 166, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 175, 175, 175, 172, 172, 172, 169, 169, 169, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 136, 136, 136, 130, 130, 130, 123, 123, 123, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 96, 96, 96, 91, 91, 91, 86, 86, 86, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 84, 84, 84, 88, 88, 88, 91, 91, 91, 91, 91, 91, 91, 91, 91, 93, 93, 93, 95, 95, 95, 98, 98, 98, 101, 101, 101, 105, 105, 105, 111, 111, 111, 117, 117, 117, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 119, 119, 119, 112, 112, 112, 105, 105, 105, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 83, 83, 83, 81, 81, 81, 78, 78, 78, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 170, 170, 170, 168, 168, 168, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 148, 148, 148, 150, 150, 150, 153, 153, 153, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 175, 175, 175, 177, 177, 177, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 158, 158, 158, 154, 154, 154, 149, 149, 149, 145, 145, 145, 141, 141, 141, 136, 136, 136, 131, 131, 131, 125, 125, 125, 120, 120, 120, 115, 115, 115, 111, 111, 111, 107, 107, 107, 101, 101, 101, 96, 96, 96, 91, 91, 91, 87, 87, 87, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 82, 82, 82, 86, 86, 86, 90, 90, 90, 93, 93, 93, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 89, 89, 89, 92, 92, 92, 93, 93, 93, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 116, 116, 116, 122, 122, 122, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 132, 132, 132, 135, 135, 135, 138, 138, 138, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 116, 116, 116, 110, 110, 110, 103, 103, 103, 97, 97, 97, 92, 92, 92, 89, 89, 89, 85, 85, 85, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 170, 170, 170, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 166, 166, 166, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 152, 152, 152, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 179, 179, 179, 177, 177, 177, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 165, 165, 165, 161, 161, 161, 158, 158, 158, 154, 154, 154, 148, 148, 148, 142, 142, 142, 137, 137, 137, 132, 132, 132, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 77, 77, 77, 80, 80, 80, 84, 84, 84, 88, 88, 88, 92, 92, 92, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 88, 88, 88, 89, 89, 89, 90, 90, 90, 93, 93, 93, 95, 95, 95, 99, 99, 99, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 117, 117, 117, 113, 113, 113, 108, 108, 108, 101, 101, 101, 94, 94, 94, 88, 88, 88, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 75, 75, 75, 74, 74, 74, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 158, 158, 158, 160, 160, 160, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 169, 169, 169, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 161, 161, 161, 158, 158, 158, 154, 154, 154, 148, 148, 148, 141, 141, 141, 134, 134, 134, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 103, 103, 103, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 78, 78, 78, 78, 78, 78, 80, 80, 80, 85, 85, 85, 90, 90, 90, 93, 93, 93, 94, 94, 94, 94, 94, 94, 92, 92, 92, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 103, 103, 103, 109, 109, 109, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 129, 129, 129, 133, 133, 133, 138, 138, 138, 142, 142, 142, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 141, 141, 141, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 104, 104, 104, 98, 98, 98, 91, 91, 91, 85, 85, 85, 79, 79, 79, 76, 76, 76, 73, 73, 73, 72, 72, 72, 71, 71, 71, 71, 71, 71, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 158, 158, 158, 160, 160, 160, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 166, 166, 166, 170, 170, 170, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 167, 167, 167, 163, 163, 163, 159, 159, 159, 154, 154, 154, 147, 147, 147, 139, 139, 139, 131, 131, 131, 126, 126, 126, 122, 122, 122, 117, 117, 117, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 94, 94, 94, 92, 92, 92, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 82, 82, 82, 86, 86, 86, 91, 91, 91, 94, 94, 94, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 106, 106, 106, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 136, 136, 136, 140, 140, 140, 144, 144, 144, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 99, 99, 99, 94, 94, 94, 89, 89, 89, 83, 83, 83, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 68, 68, 68, 68, 68, 68, 160, 160, 160, 163, 163, 163, 165, 165, 165, 165, 165, 165, 163, 163, 163, 162, 162, 162, 162, 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 166, 166, 166, 171, 171, 171, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 180, 180, 180, 181, 181, 181, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 158, 158, 158, 151, 151, 151, 143, 143, 143, 135, 135, 135, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 110, 110, 110, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 115, 115, 115, 121, 121, 121, 125, 125, 125, 129, 129, 129, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 141, 141, 141, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 83, 83, 83, 78, 78, 78, 74, 74, 74, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 152, 152, 152, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 159, 159, 159, 165, 165, 165, 170, 170, 170, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 178, 178, 178, 179, 179, 179, 178, 178, 178, 176, 176, 176, 174, 174, 174, 171, 171, 171, 169, 169, 169, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 155, 155, 155, 148, 148, 148, 140, 140, 140, 132, 132, 132, 126, 126, 126, 122, 122, 122, 119, 119, 119, 114, 114, 114, 108, 108, 108, 102, 102, 102, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 87, 87, 87, 90, 90, 90, 95, 95, 95, 98, 98, 98, 99, 99, 99, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 112, 112, 112, 117, 117, 117, 123, 123, 123, 129, 129, 129, 134, 134, 134, 138, 138, 138, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 130, 130, 130, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 80, 80, 80, 76, 76, 76, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 167, 167, 167, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 154, 154, 154, 161, 161, 161, 168, 168, 168, 174, 174, 174, 178, 178, 178, 180, 180, 180, 179, 179, 179, 177, 177, 177, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 156, 156, 156, 151, 151, 151, 145, 145, 145, 138, 138, 138, 132, 132, 132, 126, 126, 126, 122, 122, 122, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 91, 91, 91, 91, 91, 91, 93, 93, 93, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 113, 113, 113, 118, 118, 118, 125, 125, 125, 131, 131, 131, 137, 137, 137, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 77, 77, 77, 74, 74, 74, 72, 72, 72, 69, 69, 69, 68, 68, 68, 161, 161, 161, 163, 163, 163, 165, 165, 165, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 178, 178, 178, 177, 177, 177, 174, 174, 174, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 150, 150, 150, 156, 156, 156, 163, 163, 163, 170, 170, 170, 175, 175, 175, 178, 178, 178, 179, 179, 179, 177, 177, 177, 174, 174, 174, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 138, 138, 138, 133, 133, 133, 127, 127, 127, 122, 122, 122, 117, 117, 117, 112, 112, 112, 106, 106, 106, 102, 102, 102, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 115, 115, 115, 120, 120, 120, 126, 126, 126, 132, 132, 132, 137, 137, 137, 141, 141, 141, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 130, 130, 130, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 89, 89, 89, 84, 84, 84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 69, 69, 69, 161, 161, 161, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 172, 172, 172, 176, 176, 176, 180, 180, 180, 183, 183, 183, 183, 183, 183, 182, 182, 182, 178, 178, 178, 173, 173, 173, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 148, 148, 148, 154, 154, 154, 161, 161, 161, 167, 167, 167, 173, 173, 173, 177, 177, 177, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 134, 134, 134, 128, 128, 128, 121, 121, 121, 116, 116, 116, 111, 111, 111, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 136, 136, 136, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 85, 85, 85, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 70, 70, 70, 163, 163, 163, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 171, 171, 171, 171, 171, 171, 173, 173, 173, 176, 176, 176, 181, 181, 181, 185, 185, 185, 188, 188, 188, 188, 188, 188, 186, 186, 186, 182, 182, 182, 177, 177, 177, 173, 173, 173, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 147, 147, 147, 154, 154, 154, 160, 160, 160, 166, 166, 166, 171, 171, 171, 175, 175, 175, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 136, 136, 136, 128, 128, 128, 121, 121, 121, 115, 115, 115, 110, 110, 110, 104, 104, 104, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 173, 173, 173, 176, 176, 176, 181, 181, 181, 186, 186, 186, 189, 189, 189, 191, 191, 191, 191, 191, 191, 189, 189, 189, 185, 185, 185, 180, 180, 180, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 178, 178, 178, 176, 176, 176, 174, 174, 174, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 165, 165, 165, 161, 161, 161, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 142, 142, 142, 147, 147, 147, 154, 154, 154, 160, 160, 160, 166, 166, 166, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 170, 170, 170, 168, 168, 168, 165, 165, 165, 164, 164, 164, 164, 164, 164, 162, 162, 162, 157, 157, 157, 153, 153, 153, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 143, 143, 143, 136, 136, 136, 129, 129, 129, 122, 122, 122, 116, 116, 116, 109, 109, 109, 103, 103, 103, 98, 98, 98, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 103, 103, 103, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 79, 79, 79, 77, 77, 77, 74, 74, 74, 72, 72, 72, 167, 167, 167, 168, 168, 168, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 175, 175, 175, 179, 179, 179, 185, 185, 185, 189, 189, 189, 191, 191, 191, 193, 193, 193, 192, 192, 192, 189, 189, 189, 185, 185, 185, 181, 181, 181, 177, 177, 177, 174, 174, 174, 174, 174, 174, 175, 175, 175, 178, 178, 178, 180, 180, 180, 181, 181, 181, 180, 180, 180, 177, 177, 177, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 165, 165, 165, 160, 160, 160, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 146, 146, 146, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 163, 163, 163, 162, 162, 162, 159, 159, 159, 154, 154, 154, 151, 151, 151, 149, 149, 149, 150, 150, 150, 150, 150, 150, 147, 147, 147, 141, 141, 141, 134, 134, 134, 127, 127, 127, 122, 122, 122, 116, 116, 116, 110, 110, 110, 104, 104, 104, 99, 99, 99, 96, 96, 96, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 141, 141, 141, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 140, 140, 140, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 77, 77, 77, 74, 74, 74, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 173, 173, 173, 175, 175, 175, 178, 178, 178, 181, 181, 181, 185, 185, 185, 189, 189, 189, 191, 191, 191, 192, 192, 192, 191, 191, 191, 189, 189, 189, 185, 185, 185, 181, 181, 181, 177, 177, 177, 175, 175, 175, 175, 175, 175, 177, 177, 177, 180, 180, 180, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 178, 178, 178, 178, 178, 178, 179, 179, 179, 178, 178, 178, 176, 176, 176, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 131, 131, 131, 128, 128, 128, 127, 127, 127, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 141, 141, 141, 146, 146, 146, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 153, 153, 153, 149, 149, 149, 147, 147, 147, 148, 148, 148, 148, 148, 148, 144, 144, 144, 138, 138, 138, 131, 131, 131, 125, 125, 125, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 125, 125, 125, 126, 126, 126, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 134, 134, 134, 137, 137, 137, 142, 142, 142, 146, 146, 146, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 118, 118, 118, 113, 113, 113, 106, 106, 106, 101, 101, 101, 97, 97, 97, 92, 92, 92, 86, 86, 86, 81, 81, 81, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 167, 167, 167, 168, 168, 168, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 180, 180, 180, 182, 182, 182, 184, 184, 184, 187, 187, 187, 189, 189, 189, 191, 191, 191, 191, 191, 191, 188, 188, 188, 184, 184, 184, 180, 180, 180, 178, 178, 178, 176, 176, 176, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 182, 182, 182, 180, 180, 180, 178, 178, 178, 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 176, 176, 176, 172, 172, 172, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 149, 149, 149, 153, 153, 153, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 162, 162, 162, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 145, 145, 145, 144, 144, 144, 141, 141, 141, 135, 135, 135, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 121, 121, 121, 114, 114, 114, 107, 107, 107, 102, 102, 102, 98, 98, 98, 92, 92, 92, 86, 86, 86, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 166, 166, 166, 168, 168, 168, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 180, 180, 180, 181, 181, 181, 182, 182, 182, 185, 185, 185, 189, 189, 189, 191, 191, 191, 191, 191, 191, 188, 188, 188, 184, 184, 184, 181, 181, 181, 179, 179, 179, 178, 178, 178, 179, 179, 179, 180, 180, 180, 182, 182, 182, 182, 182, 182, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 178, 178, 178, 174, 174, 174, 170, 170, 170, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 148, 148, 148, 143, 143, 143, 141, 141, 141, 140, 140, 140, 138, 138, 138, 133, 133, 133, 127, 127, 127, 122, 122, 122, 117, 117, 117, 112, 112, 112, 106, 106, 106, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 110, 110, 110, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 121, 121, 121, 114, 114, 114, 107, 107, 107, 102, 102, 102, 98, 98, 98, 92, 92, 92, 86, 86, 86, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 164, 164, 164, 167, 167, 167, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 179, 179, 179, 180, 180, 180, 181, 181, 181, 184, 184, 184, 188, 188, 188, 192, 192, 192, 191, 191, 191, 188, 188, 188, 185, 185, 185, 182, 182, 182, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 178, 178, 178, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 177, 177, 177, 173, 173, 173, 168, 168, 168, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 140, 140, 140, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 146, 146, 146, 150, 150, 150, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 145, 145, 145, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 122, 122, 122, 117, 117, 117, 111, 111, 111, 105, 105, 105, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 111, 111, 111, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 130, 130, 130, 128, 128, 128, 130, 130, 130, 134, 134, 134, 137, 137, 137, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 114, 114, 114, 107, 107, 107, 102, 102, 102, 97, 97, 97, 92, 92, 92, 86, 86, 86, 81, 81, 81, 79, 79, 79, 76, 76, 76, 74, 74, 74, 73, 73, 73, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 183, 183, 183, 187, 187, 187, 191, 191, 191, 190, 190, 190, 187, 187, 187, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 172, 172, 172, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 129, 129, 129, 125, 125, 125, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 141, 141, 141, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 117, 117, 117, 112, 112, 112, 107, 107, 107, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 106, 106, 106, 112, 112, 112, 117, 117, 117, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 144, 144, 144, 149, 149, 149, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 147, 147, 147, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 129, 129, 129, 132, 132, 132, 133, 133, 133, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 113, 113, 113, 108, 108, 108, 103, 103, 103, 97, 97, 97, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 77, 77, 77, 74, 74, 74, 72, 72, 72, 159, 159, 159, 163, 163, 163, 167, 167, 167, 170, 170, 170, 174, 174, 174, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 179, 181, 181, 181, 185, 185, 185, 188, 188, 188, 188, 188, 188, 186, 186, 186, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 181, 181, 181, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 173, 173, 173, 170, 170, 170, 166, 166, 166, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 106, 106, 106, 111, 111, 111, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 141, 141, 141, 146, 146, 146, 151, 151, 151, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 131, 131, 131, 126, 126, 126, 121, 121, 121, 118, 118, 118, 116, 116, 116, 113, 113, 113, 108, 108, 108, 103, 103, 103, 98, 98, 98, 92, 92, 92, 88, 88, 88, 86, 86, 86, 84, 84, 84, 80, 80, 80, 75, 75, 75, 72, 72, 72, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 180, 180, 180, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 123, 123, 123, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 114, 114, 114, 117, 117, 117, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 129, 129, 129, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 117, 117, 117, 119, 119, 119, 122, 122, 122, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 146, 146, 146, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 108, 108, 108, 103, 103, 103, 98, 98, 98, 94, 94, 94, 91, 91, 91, 89, 89, 89, 87, 87, 87, 83, 83, 83, 79, 79, 79, 75, 75, 75, 157, 157, 157, 163, 163, 163, 168, 168, 168, 172, 172, 172, 176, 176, 176, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 160, 160, 160, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 108, 108, 108, 106, 106, 106, 103, 103, 103, 99, 99, 99, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 112, 112, 112, 117, 117, 117, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 121, 121, 121, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 126, 126, 126, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 113, 113, 113, 110, 110, 110, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 92, 92, 92, 90, 90, 90, 86, 86, 86, 82, 82, 82, 79, 79, 79, 157, 157, 157, 163, 163, 163, 169, 169, 169, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 158, 158, 158, 155, 155, 155, 155, 155, 155, 154, 154, 154, 151, 151, 151, 148, 148, 148, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 132, 132, 132, 125, 125, 125, 118, 118, 118, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 107, 107, 107, 106, 106, 106, 103, 103, 103, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 103, 103, 103, 107, 107, 107, 112, 112, 112, 117, 117, 117, 122, 122, 122, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 84, 84, 84, 82, 82, 82, 158, 158, 158, 164, 164, 164, 170, 170, 170, 173, 173, 173, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 145, 145, 145, 141, 141, 141, 139, 139, 139, 137, 137, 137, 133, 133, 133, 127, 127, 127, 120, 120, 120, 113, 113, 113, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 98, 98, 98, 101, 101, 101, 106, 106, 106, 111, 111, 111, 116, 116, 116, 120, 120, 120, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 124, 124, 124, 127, 127, 127, 131, 131, 131, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 135, 135, 135, 136, 136, 136, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 110, 110, 110, 105, 105, 105, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 100, 100, 100, 97, 97, 97, 92, 92, 92, 88, 88, 88, 85, 85, 85, 83, 83, 83, 158, 158, 158, 163, 163, 163, 169, 169, 169, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 122, 122, 122, 115, 115, 115, 110, 110, 110, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 95, 95, 95, 99, 99, 99, 104, 104, 104, 109, 109, 109, 114, 114, 114, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 134, 134, 134, 135, 135, 135, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 101, 101, 101, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 85, 85, 85, 157, 157, 157, 163, 163, 163, 169, 169, 169, 172, 172, 172, 173, 173, 173, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 158, 158, 158, 153, 153, 153, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 111, 111, 111, 106, 106, 106, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 93, 93, 93, 97, 97, 97, 102, 102, 102, 107, 107, 107, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 121, 121, 121, 117, 117, 117, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 87, 87, 87, 157, 157, 157, 162, 162, 162, 169, 169, 169, 173, 173, 173, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 159, 159, 159, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 148, 148, 148, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 134, 134, 134, 128, 128, 128, 121, 121, 121, 117, 117, 117, 114, 114, 114, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 91, 91, 91, 89, 89, 89, 91, 91, 91, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 94, 94, 94, 98, 98, 98, 103, 103, 103, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 101, 101, 101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 157, 157, 157, 162, 162, 162, 168, 168, 168, 173, 173, 173, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 162, 162, 162, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 143, 143, 143, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 128, 128, 128, 123, 123, 123, 116, 116, 116, 111, 111, 111, 108, 108, 108, 105, 105, 105, 101, 101, 101, 97, 97, 97, 95, 95, 95, 95, 95, 95, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 96, 96, 96, 101, 101, 101, 105, 105, 105, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 97, 97, 97, 97, 97, 97, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 116, 116, 116, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 159, 159, 159, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 118, 118, 118, 113, 113, 113, 110, 110, 110, 108, 108, 108, 104, 104, 104, 100, 100, 100, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 158, 158, 158, 163, 163, 163, 169, 169, 169, 173, 173, 173, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 118, 118, 118, 112, 112, 112, 107, 107, 107, 104, 104, 104, 102, 102, 102, 99, 99, 99, 95, 95, 95, 93, 93, 93, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 85, 85, 85, 87, 87, 87, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 91, 91, 91, 91, 91, 91, 93, 93, 93, 98, 98, 98, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 94, 94, 94, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 87, 87, 87, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, 89, 89, 92, 92, 92, 96, 96, 96, 101, 101, 101, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 152, 152, 152, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 161, 161, 161, 166, 166, 166, 170, 170, 170, 173, 173, 173, 173, 173, 173, 170, 170, 170, 166, 166, 166, 162, 162, 162, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 113, 113, 113, 107, 107, 107, 102, 102, 102, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 93, 93, 93, 92, 92, 92, 90, 90, 90, 87, 87, 87, 84, 84, 84, 83, 83, 83, 85, 85, 85, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 91, 91, 91, 96, 96, 96, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 97, 97, 97, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 95, 95, 95, 99, 99, 99, 102, 102, 102, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 117, 117, 117, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 124, 124, 124, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 120, 120, 120, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 100, 100, 100, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 104, 104, 104, 163, 163, 163, 168, 168, 168, 171, 171, 171, 173, 173, 173, 172, 172, 172, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 150, 150, 150, 151, 151, 151, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 108, 108, 108, 103, 103, 103, 98, 98, 98, 97, 97, 97, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 95, 95, 95, 95, 95, 95, 93, 93, 93, 91, 91, 91, 90, 90, 90, 89, 89, 89, 89, 89, 89, 91, 91, 91, 94, 94, 94, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 101, 101, 101, 96, 96, 96, 92, 92, 92, 88, 88, 88, 87, 87, 87, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 114, 114, 114, 118, 118, 118, 122, 122, 122, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 120, 120, 120, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 146, 146, 146, 149, 149, 149, 152, 152, 152, 157, 157, 157, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 165, 165, 165, 169, 169, 169, 171, 171, 171, 171, 171, 171, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 132, 132, 132, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 95, 95, 95, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 87, 87, 87, 83, 83, 83, 80, 80, 80, 80, 80, 80, 82, 82, 82, 87, 87, 87, 92, 92, 92, 95, 95, 95, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 95, 95, 95, 91, 91, 91, 87, 87, 87, 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 87, 87, 87, 85, 85, 85, 81, 81, 81, 78, 78, 78, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 80, 80, 80, 82, 82, 82, 85, 85, 85, 88, 88, 88, 91, 91, 91, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 122, 122, 122, 119, 119, 119, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 164, 164, 164, 163, 163, 163, 161, 161, 161, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 140, 140, 140, 134, 134, 134, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 90, 90, 86, 86, 86, 81, 81, 81, 78, 78, 78, 78, 78, 78, 81, 81, 81, 85, 85, 85, 90, 90, 90, 94, 94, 94, 94, 94, 94, 93, 93, 93, 90, 90, 90, 89, 89, 89, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 98, 98, 98, 94, 94, 94, 90, 90, 90, 87, 87, 87, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 86, 86, 86, 82, 82, 82, 78, 78, 78, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 135, 135, 135, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 140, 140, 140, 143, 143, 143, 146, 146, 146, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 143, 143, 143, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 107, 107, 107, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 165, 165, 165, 162, 162, 162, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 138, 138, 138, 132, 132, 132, 125, 125, 125, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 94, 94, 94, 91, 91, 91, 89, 89, 89, 89, 89, 89, 88, 88, 88, 84, 84, 84, 80, 80, 80, 77, 77, 77, 77, 77, 77, 80, 80, 80, 83, 83, 83, 88, 88, 88, 91, 91, 91, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 92, 92, 92, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 88, 88, 88, 86, 86, 86, 82, 82, 82, 79, 79, 79, 77, 77, 77, 77, 77, 77, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 120, 120, 120, 116, 116, 116, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 139, 139, 139, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 170, 170, 170, 171, 171, 171, 171, 171, 171, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 129, 129, 129, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 84, 84, 84, 81, 81, 81, 78, 78, 78, 76, 76, 76, 77, 77, 77, 79, 79, 79, 82, 82, 82, 85, 85, 85, 87, 87, 87, 88, 88, 88, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 88, 88, 88, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 85, 85, 85, 88, 88, 88, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 138, 138, 138, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 157, 157, 157, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 159, 159, 159, 160, 160, 160, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 149, 149, 149, 145, 145, 145, 140, 140, 140, 137, 137, 137, 132, 132, 132, 126, 126, 126, 120, 120, 120, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 87, 87, 87, 84, 84, 84, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 104, 104, 104, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 96, 96, 96, 91, 91, 91, 88, 88, 88, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 77, 77, 77, 78, 78, 78, 77, 77, 77, 76, 76, 76, 77, 77, 77, 80, 80, 80, 84, 84, 84, 88, 88, 88, 92, 92, 92, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 131, 131, 131, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 138, 138, 138, 141, 141, 141, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 116, 116, 116, 111, 111, 111, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 129, 129, 129, 123, 123, 123, 117, 117, 117, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 93, 93, 93, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 88, 88, 88, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 96, 96, 96, 91, 91, 91, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 85, 85, 85, 81, 81, 81, 75, 75, 75, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 73, 73, 73, 74, 74, 74, 72, 72, 72, 70, 70, 70, 71, 71, 71, 74, 74, 74, 78, 78, 78, 83, 83, 83, 88, 88, 88, 94, 94, 94, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 149, 149, 149, 144, 144, 144, 139, 139, 139, 135, 135, 135, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 107, 107, 107, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 143, 143, 143, 139, 139, 139, 135, 135, 135, 130, 130, 130, 124, 124, 124, 118, 118, 118, 112, 112, 112, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 94, 94, 94, 89, 89, 89, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 72, 72, 72, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 73, 73, 73, 73, 73, 73, 75, 75, 75, 79, 79, 79, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 86, 86, 86, 81, 81, 81, 75, 75, 75, 71, 71, 71, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 72, 72, 72, 71, 71, 71, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 68, 68, 68, 66, 66, 66, 67, 67, 67, 69, 69, 69, 74, 74, 74, 79, 79, 79, 85, 85, 85, 92, 92, 92, 100, 100, 100, 106, 106, 106, 110, 110, 110, 114, 114, 114, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 151, 151, 151, 146, 146, 146, 140, 140, 140, 135, 135, 135, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 115, 115, 115, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 154, 154, 154, 154, 154, 154, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 124, 124, 124, 119, 119, 119, 114, 114, 114, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 74, 74, 74, 78, 78, 78, 82, 82, 82, 86, 86, 86, 88, 88, 88, 89, 89, 89, 92, 92, 92, 95, 95, 95, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 81, 81, 81, 76, 76, 76, 71, 71, 71, 67, 67, 67, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 70, 70, 70, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 77, 77, 77, 84, 84, 84, 90, 90, 90, 97, 97, 97, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 131, 131, 131, 134, 134, 134, 135, 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 147, 147, 147, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 119, 119, 119, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 102, 102, 102, 102, 102, 102, 105, 105, 105, 106, 106, 106, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 140, 140, 140, 141, 141, 141, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 120, 120, 120, 115, 115, 115, 110, 110, 110, 105, 105, 105, 101, 101, 101, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 105, 105, 105, 105, 105, 105, 102, 102, 102, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 88, 88, 88, 85, 85, 85, 80, 80, 80, 76, 76, 76, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 69, 69, 69, 68, 68, 68, 69, 69, 69, 72, 72, 72, 76, 76, 76, 81, 81, 81, 85, 85, 85, 88, 88, 88, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 79, 79, 79, 74, 74, 74, 70, 70, 70, 66, 66, 66, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 68, 68, 68, 69, 69, 69, 68, 68, 68, 66, 66, 66, 63, 63, 63, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 79, 79, 79, 83, 83, 83, 88, 88, 88, 94, 94, 94, 99, 99, 99, 104, 104, 104, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 83, 83, 83, 78, 78, 78, 73, 73, 73, 72, 72, 72, 73, 73, 73, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 74, 74, 74, 79, 79, 79, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 67, 67, 67, 65, 65, 65, 63, 63, 63, 64, 64, 64, 65, 65, 65, 67, 67, 67, 68, 68, 68, 68, 68, 68, 67, 67, 67, 64, 64, 64, 62, 62, 62, 59, 59, 59, 58, 58, 58, 58, 58, 58, 59, 59, 59, 63, 63, 63, 67, 67, 67, 72, 72, 72, 77, 77, 77, 81, 81, 81, 85, 85, 85, 88, 88, 88, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 155, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 132, 132, 132, 128, 128, 128, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 153, 153, 153, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 85, 85, 85, 80, 80, 80, 75, 75, 75, 70, 70, 70, 69, 69, 69, 70, 70, 70, 70, 70, 70, 69, 69, 69, 66, 66, 66, 64, 64, 64, 62, 62, 62, 62, 62, 62, 63, 63, 63, 67, 67, 67, 70, 70, 70, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 82, 82, 82, 82, 82, 82, 80, 80, 80, 77, 77, 77, 72, 72, 72, 68, 68, 68, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 64, 64, 64, 65, 65, 65, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 61, 61, 61, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 64, 64, 64, 69, 69, 69, 75, 75, 75, 80, 80, 80, 84, 84, 84, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 97, 97, 97, 101, 101, 101, 105, 105, 105, 110, 110, 110, 115, 115, 115, 118, 118, 118, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 153, 153, 153, 155, 155, 155, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 98, 98, 98, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 108, 108, 108, 105, 105, 105, 100, 100, 100, 95, 95, 95, 91, 91, 91, 88, 88, 88, 84, 84, 84, 81, 81, 81, 77, 77, 77, 72, 72, 72, 68, 68, 68, 66, 66, 66, 67, 67, 67, 67, 67, 67, 65, 65, 65, 63, 63, 63, 61, 61, 61, 60, 60, 60, 59, 59, 59, 60, 60, 60, 63, 63, 63, 66, 66, 66, 70, 70, 70, 73, 73, 73, 76, 76, 76, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 99, 99, 99, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 99, 99, 99, 93, 93, 93, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 63, 63, 63, 65, 65, 65, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 65, 65, 65, 70, 70, 70, 76, 76, 76, 82, 82, 82, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 105, 105, 105, 111, 111, 111, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 125, 125, 125, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 153, 153, 153, 154, 154, 154, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 109, 109, 109, 109, 109, 109, 105, 105, 105, 100, 100, 100, 94, 94, 94, 89, 89, 89, 85, 85, 85, 81, 81, 81, 77, 77, 77, 74, 74, 74, 71, 71, 71, 67, 67, 67, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 61, 61, 61, 65, 65, 65, 69, 69, 69, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 98, 98, 98, 102, 102, 102, 105, 105, 105, 105, 105, 105, 103, 103, 103, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 70, 70, 70, 69, 69, 69, 69, 69, 69, 67, 67, 67, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 63, 63, 63, 62, 62, 62, 61, 61, 61, 61, 61, 61, 62, 62, 62, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 70, 70, 70, 76, 76, 76, 83, 83, 83, 88, 88, 88, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 97, 97, 97, 102, 102, 102, 107, 107, 107, 112, 112, 112, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 101, 101, 101, 105, 105, 105, 109, 109, 109, 111, 111, 111, 110, 110, 110, 106, 106, 106, 101, 101, 101, 95, 95, 95, 90, 90, 90, 84, 84, 84, 79, 79, 79, 75, 75, 75, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 68, 68, 68, 71, 71, 71, 74, 74, 74, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 104, 104, 104, 102, 102, 102, 97, 97, 97, 91, 91, 91, 85, 85, 85, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 72, 72, 72, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 63, 63, 63, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 67, 67, 67, 71, 71, 71, 78, 78, 78, 84, 84, 84, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 137, 137, 137, 142, 142, 142, 147, 147, 147, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 105, 105, 105, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 101, 101, 101, 100, 100, 100, 102, 102, 102, 107, 107, 107, 111, 111, 111, 112, 112, 112, 111, 111, 111, 108, 108, 108, 103, 103, 103, 98, 98, 98, 93, 93, 93, 87, 87, 87, 80, 80, 80, 76, 76, 76, 75, 75, 75, 73, 73, 73, 69, 69, 69, 66, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 58, 58, 58, 54, 54, 54, 52, 52, 52, 52, 52, 52, 56, 56, 56, 60, 60, 60, 63, 63, 63, 66, 66, 66, 69, 69, 69, 73, 73, 73, 76, 76, 76, 79, 79, 79, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 97, 97, 97, 100, 100, 100, 101, 101, 101, 100, 100, 100, 96, 96, 96, 91, 91, 91, 85, 85, 85, 81, 81, 81, 77, 77, 77, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 72, 72, 72, 73, 73, 73, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 67, 67, 67, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 70, 70, 70, 75, 75, 75, 81, 81, 81, 86, 86, 86, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 110, 110, 110, 114, 114, 114, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 145, 145, 145, 150, 150, 150, 153, 153, 153, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 160, 160, 160, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 170, 170, 170, 167, 167, 167, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 164, 164, 164, 165, 165, 165, 166, 166, 166, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 103, 103, 103, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 115, 115, 115, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 90, 90, 90, 82, 82, 82, 78, 78, 78, 76, 76, 76, 74, 74, 74, 71, 71, 71, 67, 67, 67, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 61, 61, 61, 56, 56, 56, 52, 52, 52, 50, 50, 50, 52, 52, 52, 55, 55, 55, 59, 59, 59, 62, 62, 62, 65, 65, 65, 68, 68, 68, 72, 72, 72, 77, 77, 77, 80, 80, 80, 83, 83, 83, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 95, 95, 95, 90, 90, 90, 85, 85, 85, 79, 79, 79, 75, 75, 75, 72, 72, 72, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 72, 72, 72, 69, 69, 69, 68, 68, 68, 67, 67, 67, 69, 69, 69, 71, 71, 71, 71, 71, 71, 70, 70, 70, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 73, 73, 73, 78, 78, 78, 83, 83, 83, 87, 87, 87, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 159, 159, 159, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 168, 168, 168, 171, 171, 171, 173, 173, 173, 174, 174, 174, 173, 173, 173, 170, 170, 170, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 108, 108, 108, 104, 104, 104, 102, 102, 102, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 133, 133, 133, 135, 135, 135, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 107, 107, 107, 100, 100, 100, 93, 93, 93, 85, 85, 85, 80, 80, 80, 78, 78, 78, 76, 76, 76, 73, 73, 73, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 62, 62, 62, 59, 59, 59, 55, 55, 55, 52, 52, 52, 51, 51, 51, 52, 52, 52, 55, 55, 55, 59, 59, 59, 61, 61, 61, 63, 63, 63, 66, 66, 66, 71, 71, 71, 75, 75, 75, 79, 79, 79, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 90, 90, 90, 84, 84, 84, 77, 77, 77, 72, 72, 72, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 71, 71, 71, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 69, 69, 69, 71, 71, 71, 73, 73, 73, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 74, 74, 74, 76, 76, 76, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 94, 94, 94, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 129, 129, 129, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 168, 168, 168, 171, 171, 171, 174, 174, 174, 175, 175, 175, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 169, 169, 169, 171, 171, 171, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 133, 133, 133, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 95, 95, 95, 88, 88, 88, 82, 82, 82, 79, 79, 79, 77, 77, 77, 74, 74, 74, 70, 70, 70, 66, 66, 66, 64, 64, 64, 63, 63, 63, 61, 61, 61, 58, 58, 58, 55, 55, 55, 53, 53, 53, 53, 53, 53, 54, 54, 54, 56, 56, 56, 58, 58, 58, 60, 60, 60, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 75, 75, 75, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 91, 91, 91, 84, 84, 84, 77, 77, 77, 71, 71, 71, 69, 69, 69, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 72, 72, 72, 74, 74, 74, 72, 72, 72, 69, 69, 69, 66, 66, 66, 64, 64, 64, 65, 65, 65, 67, 67, 67, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 96, 96, 96, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 113, 113, 113, 119, 119, 119, 124, 124, 124, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 159, 159, 159, 165, 165, 165, 169, 169, 169, 171, 171, 171, 171, 171, 171, 173, 173, 173, 176, 176, 176, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 160, 160, 160, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 106, 106, 106, 101, 101, 101, 97, 97, 97, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 109, 109, 109, 103, 103, 103, 96, 96, 96, 89, 89, 89, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 72, 72, 72, 67, 67, 67, 64, 64, 64, 63, 63, 63, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, 59, 61, 61, 61, 65, 65, 65, 68, 68, 68, 70, 70, 70, 71, 71, 71, 73, 73, 73, 74, 74, 74, 77, 77, 77, 81, 81, 81, 85, 85, 85, 89, 89, 89, 91, 91, 91, 93, 93, 93, 95, 95, 95, 94, 94, 94, 91, 91, 91, 85, 85, 85, 78, 78, 78, 73, 73, 73, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 71, 71, 71, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 82, 82, 82, 85, 85, 85, 89, 89, 89, 93, 93, 93, 97, 97, 97, 101, 101, 101, 105, 105, 105, 110, 110, 110, 116, 116, 116, 122, 122, 122, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 160, 160, 160, 166, 166, 166, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 179, 179, 179, 176, 176, 176, 172, 172, 172, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 106, 106, 106, 101, 101, 101, 96, 96, 96, 160, 160, 160, 156, 156, 156, 153, 153, 153, 148, 148, 148, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 136, 136, 136, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 107, 107, 107, 101, 101, 101, 95, 95, 95, 88, 88, 88, 84, 84, 84, 81, 81, 81, 79, 79, 79, 78, 78, 78, 74, 74, 74, 69, 69, 69, 65, 65, 65, 64, 64, 64, 63, 63, 63, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 61, 61, 61, 64, 64, 64, 67, 67, 67, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 90, 90, 90, 85, 85, 85, 79, 79, 79, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 71, 71, 71, 70, 70, 70, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 68, 68, 68, 71, 71, 71, 73, 73, 73, 75, 75, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 90, 90, 90, 95, 95, 95, 100, 100, 100, 105, 105, 105, 111, 111, 111, 118, 118, 118, 125, 125, 125, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 153, 153, 153, 159, 159, 159, 165, 165, 165, 169, 169, 169, 172, 172, 172, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 182, 182, 182, 183, 183, 183, 181, 181, 181, 178, 178, 178, 174, 174, 174, 169, 169, 169, 164, 164, 164, 160, 160, 160, 157, 157, 157, 155, 155, 155, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 103, 103, 103, 99, 99, 99, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 127, 127, 127, 124, 124, 124, 120, 120, 120, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 112, 112, 112, 106, 106, 106, 100, 100, 100, 93, 93, 93, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 79, 79, 79, 75, 75, 75, 70, 70, 70, 66, 66, 66, 64, 64, 64, 64, 64, 64, 62, 62, 62, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 63, 63, 63, 66, 66, 66, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 72, 72, 72, 74, 74, 74, 78, 78, 78, 82, 82, 82, 86, 86, 86, 89, 89, 89, 90, 90, 90, 88, 88, 88, 83, 83, 83, 78, 78, 78, 74, 74, 74, 71, 71, 71, 70, 70, 70, 69, 69, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 67, 67, 67, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 100, 100, 100, 106, 106, 106, 113, 113, 113, 120, 120, 120, 126, 126, 126, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 151, 151, 151, 157, 157, 157, 163, 163, 163, 168, 168, 168, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 180, 180, 180, 180, 180, 180, 178, 178, 178, 175, 175, 175, 174, 174, 174, 175, 175, 175, 177, 177, 177, 180, 180, 180, 180, 180, 180, 179, 179, 179, 178, 178, 178, 179, 179, 179, 181, 181, 181, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 182, 182, 182, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 162, 162, 162, 158, 158, 158, 156, 156, 156, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 103, 103, 103, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 112, 112, 112, 106, 106, 106, 99, 99, 99, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 79, 79, 79, 75, 75, 75, 70, 70, 70, 66, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 62, 62, 61, 61, 61, 60, 60, 60, 61, 61, 61, 62, 62, 62, 61, 61, 61, 59, 59, 59, 59, 59, 59, 62, 62, 62, 64, 64, 64, 65, 65, 65, 66, 66, 66, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 75, 75, 75, 79, 79, 79, 84, 84, 84, 88, 88, 88, 88, 88, 88, 86, 86, 86, 81, 81, 81, 76, 76, 76, 72, 72, 72, 70, 70, 70, 69, 69, 69, 68, 68, 68, 66, 66, 66, 65, 65, 65, 65, 65, 65, 66, 66, 66, 68, 68, 68, 68, 68, 68, 68, 68, 68, 67, 67, 67, 64, 64, 64, 62, 62, 62, 61, 61, 61, 61, 61, 61, 62, 62, 62, 65, 65, 65, 67, 67, 67, 68, 68, 68, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 101, 101, 101, 107, 107, 107, 114, 114, 114, 121, 121, 121, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 151, 151, 151, 157, 157, 157, 162, 162, 162, 168, 168, 168, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 179, 179, 179, 181, 181, 181, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 178, 178, 178, 181, 181, 181, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 182, 182, 182, 185, 185, 185, 187, 187, 187, 188, 188, 188, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 177, 177, 177, 173, 173, 173, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 145, 145, 145, 139, 139, 139, 135, 135, 135, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 165, 165, 165, 161, 161, 161, 156, 156, 156, 151, 151, 151, 147, 147, 147, 142, 142, 142, 138, 138, 138, 133, 133, 133, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 82, 82, 82, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 61, 62, 62, 62, 64, 64, 64, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 73, 73, 73, 78, 78, 78, 83, 83, 83, 86, 86, 86, 87, 87, 87, 85, 85, 85, 80, 80, 80, 76, 76, 76, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 63, 63, 63, 62, 62, 62, 63, 63, 63, 65, 65, 65, 67, 67, 67, 69, 69, 69, 68, 68, 68, 66, 66, 66, 64, 64, 64, 62, 62, 62, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 66, 66, 66, 70, 70, 70, 73, 73, 73, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 101, 101, 101, 108, 108, 108, 116, 116, 116, 121, 121, 121, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 152, 152, 152, 157, 157, 157, 162, 162, 162, 166, 166, 166, 170, 170, 170, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 177, 177, 177, 180, 180, 180, 180, 180, 180, 179, 179, 179, 179, 179, 179, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 188, 188, 188, 186, 186, 186, 186, 186, 186, 187, 187, 187, 189, 189, 189, 190, 190, 190, 189, 189, 189, 187, 187, 187, 185, 185, 185, 184, 184, 184, 183, 183, 183, 182, 182, 182, 179, 179, 179, 176, 176, 176, 172, 172, 172, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 160, 160, 160, 157, 157, 157, 152, 152, 152, 147, 147, 147, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 165, 165, 165, 161, 161, 161, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 137, 137, 137, 132, 132, 132, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 125, 125, 125, 122, 122, 122, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 102, 102, 102, 96, 96, 96, 90, 90, 90, 84, 84, 84, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 72, 72, 72, 69, 69, 69, 68, 68, 68, 66, 66, 66, 64, 64, 64, 62, 62, 62, 60, 60, 60, 60, 60, 60, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 60, 60, 60, 63, 63, 63, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 71, 71, 71, 76, 76, 76, 81, 81, 81, 84, 84, 84, 85, 85, 85, 83, 83, 83, 80, 80, 80, 76, 76, 76, 74, 74, 74, 71, 71, 71, 67, 67, 67, 63, 63, 63, 61, 61, 61, 60, 60, 60, 62, 62, 62, 65, 65, 65, 67, 67, 67, 69, 69, 69, 69, 69, 69, 67, 67, 67, 65, 65, 65, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 76, 76, 76, 78, 78, 78, 79, 79, 79, 82, 82, 82, 84, 84, 84, 87, 87, 87, 92, 92, 92, 99, 99, 99, 107, 107, 107, 115, 115, 115, 122, 122, 122, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 152, 152, 152, 157, 157, 157, 160, 160, 160, 163, 163, 163, 167, 167, 167, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 180, 180, 180, 181, 181, 181, 181, 181, 181, 182, 182, 182, 184, 184, 184, 186, 186, 186, 188, 188, 188, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 190, 190, 190, 188, 188, 188, 185, 185, 185, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 182, 182, 182, 179, 179, 179, 176, 176, 176, 173, 173, 173, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 162, 162, 162, 158, 158, 158, 153, 153, 153, 148, 148, 148, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 131, 131, 131, 129, 129, 129, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 139, 139, 139, 136, 136, 136, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 109, 109, 109, 104, 104, 104, 99, 99, 99, 94, 94, 94, 88, 88, 88, 83, 83, 83, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 80, 80, 80, 77, 77, 77, 74, 74, 74, 72, 72, 72, 69, 69, 69, 66, 66, 66, 63, 63, 63, 61, 61, 61, 59, 59, 59, 56, 56, 56, 53, 53, 53, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 57, 57, 57, 61, 61, 61, 63, 63, 63, 64, 64, 64, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 76, 76, 76, 80, 80, 80, 81, 81, 81, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 65, 65, 65, 61, 61, 61, 59, 59, 59, 60, 60, 60, 62, 62, 62, 65, 65, 65, 68, 68, 68, 70, 70, 70, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 63, 63, 63, 61, 61, 61, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 96, 96, 96, 104, 104, 104, 114, 114, 114, 121, 121, 121, 125, 125, 125, 128, 128, 128, 132, 132, 132, 137, 137, 137, 140, 140, 140, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 177, 177, 177, 181, 181, 181, 183, 183, 183, 183, 183, 183, 185, 185, 185, 187, 187, 187, 188, 188, 188, 190, 190, 190, 192, 192, 192, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195, 195, 193, 193, 193, 190, 190, 190, 186, 186, 186, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 179, 179, 179, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 138, 138, 138, 142, 142, 142, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 127, 127, 127, 122, 122, 122, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 113, 113, 113, 107, 107, 107, 102, 102, 102, 98, 98, 98, 93, 93, 93, 88, 88, 88, 84, 84, 84, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 75, 75, 75, 72, 72, 72, 68, 68, 68, 64, 64, 64, 62, 62, 62, 59, 59, 59, 55, 55, 55, 51, 51, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 51, 51, 54, 54, 54, 59, 59, 59, 61, 61, 61, 62, 62, 62, 64, 64, 64, 67, 67, 67, 69, 69, 69, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 63, 63, 63, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 64, 64, 64, 67, 67, 67, 70, 70, 70, 70, 70, 70, 69, 69, 69, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 66, 66, 66, 70, 70, 70, 74, 74, 74, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 94, 94, 94, 102, 102, 102, 112, 112, 112, 120, 120, 120, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 178, 178, 178, 181, 181, 181, 184, 184, 184, 185, 185, 185, 186, 186, 186, 188, 188, 188, 188, 188, 188, 189, 189, 189, 191, 191, 191, 194, 194, 194, 197, 197, 197, 198, 198, 198, 197, 197, 197, 194, 194, 194, 190, 190, 190, 186, 186, 186, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 183, 183, 183, 182, 182, 182, 181, 181, 181, 179, 179, 179, 175, 175, 175, 171, 171, 171, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 114, 114, 114, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 141, 141, 141, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 122, 122, 122, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 114, 114, 114, 107, 107, 107, 101, 101, 101, 98, 98, 98, 93, 93, 93, 89, 89, 89, 85, 85, 85, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 73, 73, 73, 68, 68, 68, 64, 64, 64, 62, 62, 62, 59, 59, 59, 55, 55, 55, 50, 50, 50, 47, 47, 47, 45, 45, 45, 45, 45, 45, 46, 46, 46, 49, 49, 49, 54, 54, 54, 57, 57, 57, 59, 59, 59, 61, 61, 61, 64, 64, 64, 67, 67, 67, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 68, 68, 69, 69, 69, 68, 68, 68, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 66, 66, 66, 69, 69, 69, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 67, 67, 67, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 65, 65, 65, 67, 67, 67, 71, 71, 71, 74, 74, 74, 77, 77, 77, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 96, 96, 96, 103, 103, 103, 111, 111, 111, 119, 119, 119, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 175, 175, 175, 179, 179, 179, 182, 182, 182, 183, 183, 183, 185, 185, 185, 187, 187, 187, 188, 188, 188, 187, 187, 187, 187, 187, 187, 190, 190, 190, 193, 193, 193, 196, 196, 196, 197, 197, 197, 196, 196, 196, 193, 193, 193, 189, 189, 189, 186, 186, 186, 185, 185, 185, 185, 185, 185, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 177, 177, 177, 173, 173, 173, 169, 169, 169, 165, 165, 165, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 115, 115, 115, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 122, 122, 122, 116, 116, 116, 108, 108, 108, 102, 102, 102, 98, 98, 98, 93, 93, 93, 89, 89, 89, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 76, 76, 76, 71, 71, 71, 66, 66, 66, 62, 62, 62, 60, 60, 60, 58, 58, 58, 54, 54, 54, 49, 49, 49, 44, 44, 44, 41, 41, 41, 41, 41, 41, 44, 44, 44, 48, 48, 48, 53, 53, 53, 56, 56, 56, 57, 57, 57, 59, 59, 59, 62, 62, 62, 66, 66, 66, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 60, 60, 60, 58, 58, 58, 59, 59, 59, 61, 61, 61, 63, 63, 63, 62, 62, 62, 62, 62, 62, 64, 64, 64, 67, 67, 67, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 72, 72, 72, 75, 75, 75, 77, 77, 77, 79, 79, 79, 80, 80, 80, 82, 82, 82, 86, 86, 86, 89, 89, 89, 93, 93, 93, 97, 97, 97, 103, 103, 103, 110, 110, 110, 118, 118, 118, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 133, 133, 133, 137, 137, 137, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 150, 150, 150, 154, 154, 154, 159, 159, 159, 164, 164, 164, 168, 168, 168, 171, 171, 171, 172, 172, 172, 172, 172, 172, 174, 174, 174, 177, 177, 177, 180, 180, 180, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 190, 190, 190, 193, 193, 193, 193, 193, 193, 192, 192, 192, 190, 190, 190, 188, 188, 188, 186, 186, 186, 185, 185, 185, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 177, 177, 177, 174, 174, 174, 169, 169, 169, 165, 165, 165, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 154, 154, 154, 150, 150, 150, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 124, 124, 124, 118, 118, 118, 110, 110, 110, 104, 104, 104, 98, 98, 98, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 69, 69, 69, 64, 64, 64, 60, 60, 60, 57, 57, 57, 56, 56, 56, 52, 52, 52, 47, 47, 47, 42, 42, 42, 40, 40, 40, 40, 40, 40, 42, 42, 42, 47, 47, 47, 51, 51, 51, 53, 53, 53, 54, 54, 54, 56, 56, 56, 60, 60, 60, 64, 64, 64, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 62, 62, 62, 61, 61, 61, 61, 61, 61, 60, 60, 60, 58, 58, 58, 56, 56, 56, 57, 57, 57, 60, 60, 60, 62, 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 74, 74, 74, 75, 75, 75, 77, 77, 77, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 99, 99, 99, 103, 103, 103, 109, 109, 109, 116, 116, 116, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 131, 131, 131, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 133, 133, 133, 138, 138, 138, 144, 144, 144, 147, 147, 147, 148, 148, 148, 148, 148, 148, 151, 151, 151, 156, 156, 156, 161, 161, 161, 166, 166, 166, 170, 170, 170, 173, 173, 173, 174, 174, 174, 174, 174, 174, 176, 176, 176, 180, 180, 180, 182, 182, 182, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 188, 188, 188, 190, 190, 190, 190, 190, 190, 189, 189, 189, 188, 188, 188, 186, 186, 186, 185, 185, 185, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 174, 174, 174, 171, 171, 171, 167, 167, 167, 162, 162, 162, 159, 159, 159, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 155, 155, 155, 150, 150, 150, 146, 146, 146, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 146, 146, 146, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 138, 138, 138, 140, 140, 140, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 118, 118, 118, 111, 111, 111, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 66, 66, 66, 61, 61, 61, 57, 57, 57, 55, 55, 55, 54, 54, 54, 52, 52, 52, 47, 47, 47, 43, 43, 43, 40, 40, 40, 41, 41, 41, 43, 43, 43, 46, 46, 46, 49, 49, 49, 51, 51, 51, 52, 52, 52, 54, 54, 54, 58, 58, 58, 62, 62, 62, 65, 65, 65, 66, 66, 66, 67, 67, 67, 66, 66, 66, 64, 64, 64, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 58, 58, 58, 56, 56, 56, 56, 56, 56, 59, 59, 59, 61, 61, 61, 61, 61, 61, 62, 62, 62, 64, 64, 64, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 72, 72, 72, 74, 74, 74, 75, 75, 75, 77, 77, 77, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 87, 87, 87, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 102, 102, 102, 107, 107, 107, 113, 113, 113, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 129, 129, 129, 134, 134, 134, 139, 139, 139, 144, 144, 144, 147, 147, 147, 148, 148, 148, 149, 149, 149, 153, 153, 153, 157, 157, 157, 162, 162, 162, 167, 167, 167, 172, 172, 172, 175, 175, 175, 176, 176, 176, 177, 177, 177, 179, 179, 179, 183, 183, 183, 185, 185, 185, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 159, 159, 159, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 130, 130, 130, 124, 124, 124, 117, 117, 117, 111, 111, 111, 105, 105, 105, 98, 98, 98, 90, 90, 90, 82, 82, 82, 77, 77, 77, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 59, 59, 59, 56, 56, 56, 55, 55, 55, 54, 54, 54, 52, 52, 52, 49, 49, 49, 45, 45, 45, 43, 43, 43, 43, 43, 43, 44, 44, 44, 46, 46, 46, 48, 48, 48, 51, 51, 51, 52, 52, 52, 54, 54, 54, 57, 57, 57, 62, 62, 62, 65, 65, 65, 67, 67, 67, 67, 67, 67, 66, 66, 66, 63, 63, 63, 60, 60, 60, 59, 59, 59, 60, 60, 60, 60, 60, 60, 58, 58, 58, 57, 57, 57, 56, 56, 56, 57, 57, 57, 59, 59, 59, 60, 60, 60, 63, 63, 63, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 70, 70, 70, 72, 72, 72, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 82, 82, 82, 83, 83, 83, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 111, 111, 111, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 135, 135, 135, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 171, 171, 171, 175, 175, 175, 178, 178, 178, 180, 180, 180, 183, 183, 183, 186, 186, 186, 186, 186, 186, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 180, 180, 180, 177, 177, 177, 173, 173, 173, 169, 169, 169, 165, 165, 165, 161, 161, 161, 157, 157, 157, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 129, 129, 129, 123, 123, 123, 116, 116, 116, 110, 110, 110, 104, 104, 104, 97, 97, 97, 89, 89, 89, 81, 81, 81, 76, 76, 76, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 61, 61, 61, 59, 59, 59, 56, 56, 56, 55, 55, 55, 55, 55, 55, 54, 54, 54, 52, 52, 52, 48, 48, 48, 46, 46, 46, 45, 45, 45, 45, 45, 45, 46, 46, 46, 49, 49, 49, 52, 52, 52, 54, 54, 54, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 67, 67, 67, 67, 67, 67, 65, 65, 65, 62, 62, 62, 59, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 59, 59, 59, 58, 58, 58, 57, 57, 57, 58, 58, 58, 59, 59, 59, 61, 61, 61, 64, 64, 64, 66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 115, 115, 115, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 136, 136, 136, 141, 141, 141, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 175, 175, 175, 179, 179, 179, 183, 183, 183, 186, 186, 186, 187, 187, 187, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 180, 180, 180, 180, 180, 180, 182, 182, 182, 183, 183, 183, 183, 183, 183, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 181, 181, 181, 182, 182, 182, 181, 181, 181, 177, 177, 177, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 157, 157, 157, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 146, 146, 146, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 131, 131, 131, 129, 129, 129, 124, 124, 124, 116, 116, 116, 110, 110, 110, 103, 103, 103, 96, 96, 96, 88, 88, 88, 81, 81, 81, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 61, 61, 61, 59, 59, 59, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 54, 54, 54, 50, 50, 50, 47, 47, 47, 45, 45, 45, 44, 44, 44, 46, 46, 46, 50, 50, 50, 54, 54, 54, 56, 56, 56, 57, 57, 57, 59, 59, 59, 62, 62, 62, 66, 66, 66, 67, 67, 67, 66, 66, 66, 63, 63, 63, 61, 61, 61, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 64, 64, 64, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 74, 74, 74, 76, 76, 76, 80, 80, 80, 84, 84, 84, 86, 86, 86, 86, 86, 86, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 111, 111, 111, 116, 116, 116, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 130, 130, 130, 135, 135, 135, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 174, 174, 174, 178, 178, 178, 183, 183, 183, 186, 186, 186, 186, 186, 186, 183, 183, 183, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 163, 163, 163, 159, 159, 159, 156, 156, 156, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 146, 146, 146, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 132, 132, 132, 126, 126, 126, 122, 122, 122, 119, 119, 119, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 125, 125, 125, 118, 118, 118, 112, 112, 112, 104, 104, 104, 97, 97, 97, 89, 89, 89, 82, 82, 82, 78, 78, 78, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 59, 59, 59, 57, 57, 57, 53, 53, 53, 48, 48, 48, 45, 45, 45, 44, 44, 44, 46, 46, 46, 50, 50, 50, 55, 55, 55, 58, 58, 58, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 65, 65, 65, 64, 64, 64, 62, 62, 62, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 60, 60, 60, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 63, 63, 63, 66, 66, 66, 69, 69, 69, 71, 71, 71, 73, 73, 73, 76, 76, 76, 80, 80, 80, 85, 85, 85, 88, 88, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 110, 110, 110, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 133, 133, 133, 139, 139, 139, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 164, 164, 164, 169, 169, 169, 172, 172, 172, 176, 176, 176, 180, 180, 180, 183, 183, 183, 183, 183, 183, 181, 181, 181, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 179, 179, 179, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 175, 175, 175, 170, 170, 170, 165, 165, 165, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 131, 131, 131, 125, 125, 125, 122, 122, 122, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 132, 132, 132, 128, 128, 128, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 115, 115, 115, 107, 107, 107, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 80, 80, 80, 79, 79, 79, 78, 78, 78, 76, 76, 76, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 64, 64, 64, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 60, 60, 60, 59, 59, 59, 55, 55, 55, 50, 50, 50, 47, 47, 47, 46, 46, 46, 48, 48, 48, 52, 52, 52, 56, 56, 56, 60, 60, 60, 62, 62, 62, 62, 62, 62, 64, 64, 64, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 60, 60, 60, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 60, 60, 60, 61, 61, 61, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 76, 76, 76, 82, 82, 82, 87, 87, 87, 91, 91, 91, 91, 91, 91, 91, 91, 91, 93, 93, 93, 96, 96, 96, 99, 99, 99, 100, 100, 100, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 119, 119, 119, 121, 121, 121, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 142, 142, 142, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 160, 160, 160, 164, 164, 164, 168, 168, 168, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 180, 180, 180, 180, 180, 180, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 174, 174, 174, 173, 173, 173, 171, 171, 171, 170, 170, 170, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 164, 164, 164, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 140, 140, 140, 134, 134, 134, 129, 129, 129, 125, 125, 125, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 128, 128, 128, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 110, 110, 110, 102, 102, 102, 95, 95, 95, 89, 89, 89, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 78, 78, 78, 75, 75, 75, 72, 72, 72, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 60, 60, 60, 57, 57, 57, 53, 53, 53, 51, 51, 51, 51, 51, 51, 52, 52, 52, 54, 54, 54, 58, 58, 58, 63, 63, 63, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 64, 64, 64, 62, 62, 62, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 60, 60, 60, 60, 60, 62, 62, 62, 63, 63, 63, 63, 63, 63, 61, 61, 61, 59, 59, 59, 58, 58, 58, 60, 60, 60, 63, 63, 63, 66, 66, 66, 69, 69, 69, 72, 72, 72, 75, 75, 75, 79, 79, 79, 84, 84, 84, 90, 90, 90, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 100, 100, 100, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 109, 109, 109, 114, 114, 114, 118, 118, 118, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 146, 146, 146, 151, 151, 151, 155, 155, 155, 155, 155, 155, 156, 156, 156, 159, 159, 159, 164, 164, 164, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 175, 175, 175, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 170, 170, 170, 172, 172, 172, 174, 174, 174, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 164, 164, 164, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 146, 146, 146, 146, 146, 146, 143, 143, 143, 137, 137, 137, 132, 132, 132, 128, 128, 128, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 111, 111, 111, 104, 104, 104, 97, 97, 97, 92, 92, 92, 88, 88, 88, 85, 85, 85, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 70, 70, 70, 68, 68, 68, 65, 65, 65, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 60, 60, 60, 57, 57, 57, 55, 55, 55, 54, 54, 54, 55, 55, 55, 55, 55, 55, 57, 57, 57, 61, 61, 61, 65, 65, 65, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 64, 64, 64, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 61, 61, 61, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 59, 59, 59, 63, 63, 63, 66, 66, 66, 70, 70, 70, 74, 74, 74, 78, 78, 78, 83, 83, 83, 88, 88, 88, 94, 94, 94, 98, 98, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 119, 119, 119, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 153, 153, 153, 157, 157, 157, 158, 158, 158, 158, 158, 158, 160, 160, 160, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 168, 168, 168, 171, 171, 171, 173, 173, 173, 173, 173, 173, 170, 170, 170, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 161, 161, 161, 158, 158, 158, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 144, 144, 144, 140, 140, 140, 135, 135, 135, 132, 132, 132, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 110, 110, 110, 104, 104, 104, 98, 98, 98, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 62, 62, 62, 59, 59, 59, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 62, 62, 62, 67, 67, 67, 70, 70, 70, 70, 70, 70, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 63, 63, 63, 60, 60, 60, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 59, 59, 59, 60, 60, 60, 59, 59, 59, 57, 57, 57, 57, 57, 57, 59, 59, 59, 62, 62, 62, 65, 65, 65, 68, 68, 68, 73, 73, 73, 79, 79, 79, 85, 85, 85, 92, 92, 92, 98, 98, 98, 102, 102, 102, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 144, 144, 144, 150, 150, 150, 155, 155, 155, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 111, 111, 111, 104, 104, 104, 98, 98, 98, 94, 94, 94, 90, 90, 90, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 67, 67, 67, 64, 64, 64, 62, 62, 62, 61, 61, 61, 61, 61, 61, 63, 63, 63, 63, 63, 63, 62, 62, 62, 59, 59, 59, 56, 56, 56, 55, 55, 55, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 62, 62, 62, 67, 67, 67, 71, 71, 71, 72, 72, 72, 70, 70, 70, 69, 69, 69, 67, 67, 67, 65, 65, 65, 63, 63, 63, 61, 61, 61, 58, 58, 58, 57, 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 59, 59, 58, 58, 58, 57, 57, 57, 57, 57, 57, 59, 59, 59, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 63, 63, 63, 66, 66, 66, 71, 71, 71, 78, 78, 78, 85, 85, 85, 92, 92, 92, 99, 99, 99, 105, 105, 105, 108, 108, 108, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 135, 135, 135, 139, 139, 139, 144, 144, 144, 150, 150, 150, 156, 156, 156, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 165, 165, 165, 169, 169, 169, 173, 173, 173, 175, 175, 175, 174, 174, 174, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 149, 149, 149, 148, 148, 148, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 119, 119, 119, 113, 113, 113, 107, 107, 107, 101, 101, 101, 96, 96, 96, 91, 91, 91, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 71, 71, 71, 68, 68, 68, 65, 65, 65, 62, 62, 62, 59, 59, 59, 59, 59, 59, 60, 60, 60, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 62, 62, 62, 67, 67, 67, 71, 71, 71, 73, 73, 73, 73, 73, 73, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 60, 60, 60, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 62, 62, 62, 62, 62, 62, 65, 65, 65, 70, 70, 70, 77, 77, 77, 84, 84, 84, 91, 91, 91, 98, 98, 98, 104, 104, 104, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 124, 124, 124, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 127, 127, 127, 131, 131, 131, 137, 137, 137, 143, 143, 143, 150, 150, 150, 156, 156, 156, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 164, 164, 164, 169, 169, 169, 173, 173, 173, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 132, 132, 132, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 98, 98, 98, 93, 93, 93, 88, 88, 88, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 75, 75, 75, 73, 73, 73, 69, 69, 69, 66, 66, 66, 62, 62, 62, 59, 59, 59, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 57, 57, 57, 59, 59, 59, 60, 60, 60, 63, 63, 63, 67, 67, 67, 71, 71, 71, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 61, 61, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 58, 58, 58, 61, 61, 61, 63, 63, 63, 65, 65, 65, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 66, 66, 66, 71, 71, 71, 77, 77, 77, 83, 83, 83, 89, 89, 89, 95, 95, 95, 101, 101, 101, 107, 107, 107, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 134, 134, 134, 141, 141, 141, 148, 148, 148, 154, 154, 154, 158, 158, 158, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 164, 164, 164, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 124, 124, 124, 122, 122, 122, 117, 117, 117, 111, 111, 111, 105, 105, 105, 99, 99, 99, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 73, 73, 73, 70, 70, 70, 66, 66, 66, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 58, 58, 58, 56, 56, 56, 55, 55, 55, 54, 54, 54, 55, 55, 55, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 57, 57, 57, 60, 60, 60, 64, 64, 64, 66, 66, 66, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 67, 67, 67, 72, 72, 72, 78, 78, 78, 83, 83, 83, 88, 88, 88, 93, 93, 93, 99, 99, 99, 105, 105, 105, 110, 110, 110, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 137, 137, 137, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 126, 126, 126, 132, 132, 132, 139, 139, 139, 146, 146, 146, 152, 152, 152, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 160, 160, 160, 163, 163, 163, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 170, 170, 170, 167, 167, 167, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 160, 160, 160, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 136, 136, 136, 134, 134, 134, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 122, 122, 122, 117, 117, 117, 111, 111, 111, 104, 104, 104, 97, 97, 97, 92, 92, 92, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 73, 73, 73, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 58, 58, 58, 57, 57, 57, 56, 56, 56, 56, 56, 56, 55, 55, 55, 54, 54, 54, 54, 54, 54, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 66, 66, 66, 67, 67, 67, 69, 69, 69, 72, 72, 72, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 60, 60, 60, 63, 63, 63, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 65, 65, 67, 67, 67, 72, 72, 72, 78, 78, 78, 83, 83, 83, 88, 88, 88, 92, 92, 92, 98, 98, 98, 104, 104, 104, 109, 109, 109, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 128, 128, 128, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 130, 130, 130, 137, 137, 137, 144, 144, 144, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 157, 157, 157, 162, 162, 162, 166, 166, 166, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 156, 156, 156, 153, 153, 153, 148, 148, 148, 144, 144, 144, 142, 142, 142, 140, 140, 140, 135, 135, 135, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 120, 120, 120, 115, 115, 115, 109, 109, 109, 101, 101, 101, 94, 94, 94, 89, 89, 89, 84, 84, 84, 81, 81, 81, 79, 79, 79, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 66, 66, 66, 62, 62, 62, 58, 58, 58, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 54, 54, 54, 54, 54, 54, 55, 55, 55, 57, 57, 57, 61, 61, 61, 66, 66, 66, 69, 69, 69, 70, 70, 70, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 65, 65, 65, 62, 62, 62, 60, 60, 60, 58, 58, 58, 56, 56, 56, 57, 57, 57, 59, 59, 59, 61, 61, 61, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 60, 60, 60, 63, 63, 63, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 65, 65, 65, 69, 69, 69, 76, 76, 76, 82, 82, 82, 86, 86, 86, 91, 91, 91, 97, 97, 97, 102, 102, 102, 107, 107, 107, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 124, 124, 124, 130, 130, 130, 135, 135, 135, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 154, 154, 154, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 139, 139, 139, 136, 136, 136, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 135, 135, 135, 131, 131, 131, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 118, 118, 118, 113, 113, 113, 106, 106, 106, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 66, 66, 66, 62, 62, 62, 58, 58, 58, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 55, 55, 55, 55, 55, 55, 57, 57, 57, 61, 61, 61, 65, 65, 65, 69, 69, 69, 72, 72, 72, 72, 72, 72, 71, 71, 71, 69, 69, 69, 68, 68, 68, 66, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 60, 60, 60, 62, 62, 62, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 59, 59, 59, 59, 59, 59, 61, 61, 61, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 60, 60, 60, 62, 62, 62, 67, 67, 67, 73, 73, 73, 79, 79, 79, 84, 84, 84, 89, 89, 89, 95, 95, 95, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 120, 120, 120, 125, 125, 125, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 156, 156, 156, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 146, 146, 146, 151, 151, 151, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 115, 115, 115, 110, 110, 110, 103, 103, 103, 98, 98, 98, 92, 92, 92, 87, 87, 87, 81, 81, 81, 78, 78, 78, 76, 76, 76, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 67, 67, 67, 64, 64, 64, 61, 61, 61, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 58, 58, 58, 61, 61, 61, 64, 64, 64, 67, 67, 67, 70, 70, 70, 73, 73, 73, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62, 62, 60, 60, 60, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 61, 61, 61, 63, 63, 63, 64, 64, 64, 63, 63, 63, 62, 62, 62, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 59, 59, 59, 57, 57, 57, 57, 57, 57, 59, 59, 59, 62, 62, 62, 65, 65, 65, 70, 70, 70, 76, 76, 76, 81, 81, 81, 88, 88, 88, 94, 94, 94, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 152, 152, 152, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 147, 147, 147, 143, 143, 143, 140, 140, 140, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 108, 108, 108, 103, 103, 103, 98, 98, 98, 94, 94, 94, 89, 89, 89, 83, 83, 83, 79, 79, 79, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 65, 65, 65, 62, 62, 62, 60, 60, 60, 60, 60, 60, 59, 59, 59, 58, 58, 58, 60, 60, 60, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 73, 73, 73, 73, 73, 73, 71, 71, 71, 68, 68, 68, 64, 64, 64, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 56, 56, 56, 55, 55, 55, 55, 55, 55, 58, 58, 58, 61, 61, 61, 63, 63, 63, 64, 64, 64, 62, 62, 62, 60, 60, 60, 58, 58, 58, 57, 57, 57, 57, 57, 57, 56, 56, 56, 55, 55, 55, 57, 57, 57, 60, 60, 60, 63, 63, 63, 66, 66, 66, 69, 69, 69, 74, 74, 74, 79, 79, 79, 86, 86, 86, 92, 92, 92, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 143, 143, 143, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 158, 158, 158, 160, 160, 160, 163, 163, 163, 164, 164, 164, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 112, 112, 112, 108, 108, 108, 103, 103, 103, 99, 99, 99, 95, 95, 95, 89, 89, 89, 84, 84, 84, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 68, 68, 68, 65, 65, 65, 63, 63, 63, 61, 61, 61, 59, 59, 59, 59, 59, 59, 61, 61, 61, 64, 64, 64, 66, 66, 66, 67, 67, 67, 69, 69, 69, 72, 72, 72, 73, 73, 73, 71, 71, 71, 68, 68, 68, 66, 66, 66, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 57, 57, 57, 55, 55, 55, 53, 53, 53, 54, 54, 54, 57, 57, 57, 60, 60, 60, 62, 62, 62, 63, 63, 63, 62, 62, 62, 60, 60, 60, 57, 57, 57, 55, 55, 55, 54, 54, 54, 55, 55, 55, 56, 56, 56, 58, 58, 58, 61, 61, 61, 63, 63, 63, 66, 66, 66, 68, 68, 68, 73, 73, 73, 78, 78, 78, 85, 85, 85, 91, 91, 91, 97, 97, 97, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 108, 108, 108, 104, 104, 104, 99, 99, 99, 94, 94, 94, 88, 88, 88, 83, 83, 83, 79, 79, 79, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 65, 65, 65, 62, 62, 62, 59, 59, 59, 58, 58, 58, 61, 61, 61, 64, 64, 64, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 72, 72, 72, 71, 71, 71, 69, 69, 69, 68, 68, 68, 65, 65, 65, 63, 63, 63, 60, 60, 60, 58, 58, 58, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 55, 55, 53, 53, 53, 54, 54, 54, 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 57, 57, 57, 55, 55, 55, 53, 53, 53, 54, 54, 54, 56, 56, 56, 58, 58, 58, 60, 60, 60, 61, 61, 61, 63, 63, 63, 65, 65, 65, 69, 69, 69, 74, 74, 74, 79, 79, 79, 86, 86, 86, 92, 92, 92, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 162, 162, 162, 164, 164, 164, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 149, 149, 149, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 152, 152, 152, 147, 147, 147, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 105, 105, 105, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 67, 67, 67, 63, 63, 63, 60, 60, 60, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 75, 75, 75, 75, 75, 75, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 61, 61, 61, 59, 59, 59, 58, 58, 58, 57, 57, 57, 57, 57, 57, 56, 56, 56, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 53, 53, 53, 53, 53, 53, 55, 55, 55, 58, 58, 58, 61, 61, 61, 62, 62, 62, 62, 62, 62, 64, 64, 64, 67, 67, 67, 72, 72, 72, 78, 78, 78, 84, 84, 84, 89, 89, 89, 94, 94, 94, 99, 99, 99, 103, 103, 103, 107, 107, 107, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 133, 133, 133, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 165, 165, 165, 169, 169, 169, 171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 157, 157, 157, 153, 153, 153, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 154, 154, 154, 150, 150, 150, 173, 173, 173, 173, 173, 173, 172, 172, 172, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 151, 151, 151, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 105, 105, 105, 98, 98, 98, 91, 91, 91, 86, 86, 86, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 70, 70, 68, 68, 68, 64, 64, 64, 61, 61, 61, 60, 60, 60, 62, 62, 62, 65, 65, 65, 67, 67, 67, 68, 68, 68, 69, 69, 69, 72, 72, 72, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 65, 65, 65, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 56, 56, 56, 55, 55, 55, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 53, 54, 54, 54, 53, 53, 53, 54, 54, 54, 57, 57, 57, 61, 61, 61, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 71, 71, 71, 77, 77, 77, 84, 84, 84, 89, 89, 89, 94, 94, 94, 99, 99, 99, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 140, 140, 140, 143, 143, 143, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 175, 175, 175, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 157, 157, 157, 156, 156, 156, 153, 153, 153, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 167, 167, 167, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 158, 158, 158, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 97, 97, 97, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 64, 64, 64, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 72, 72, 72, 72, 72, 72, 75, 75, 75, 79, 79, 79, 82, 82, 82, 84, 84, 84, 84, 84, 84, 81, 81, 81, 78, 78, 78, 74, 74, 74, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 52, 52, 52, 49, 49, 49, 49, 49, 49, 50, 50, 50, 52, 52, 52, 54, 54, 54, 54, 54, 54, 56, 56, 56, 60, 60, 60, 65, 65, 65, 68, 68, 68, 70, 70, 70, 72, 72, 72, 74, 74, 74, 78, 78, 78, 83, 83, 83, 89, 89, 89, 94, 94, 94, 98, 98, 98, 103, 103, 103, 109, 109, 109, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 123, 123, 123, 128, 128, 128, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 164, 164, 164, 160, 160, 160, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 156, 156, 156, 181, 181, 181, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 167, 167, 167, 162, 162, 162, 158, 158, 158, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 108, 108, 108, 102, 102, 102, 97, 97, 97, 93, 93, 93, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 68, 68, 68, 67, 67, 67, 68, 68, 68, 72, 72, 72, 75, 75, 75, 76, 76, 76, 76, 76, 76, 78, 78, 78, 82, 82, 82, 85, 85, 85, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 68, 68, 68, 66, 66, 66, 63, 63, 63, 59, 59, 59, 55, 55, 55, 52, 52, 52, 50, 50, 50, 49, 49, 49, 50, 50, 50, 52, 52, 52, 53, 53, 53, 55, 55, 55, 58, 58, 58, 63, 63, 63, 68, 68, 68, 71, 71, 71, 73, 73, 73, 76, 76, 76, 80, 80, 80, 84, 84, 84, 88, 88, 88, 93, 93, 93, 97, 97, 97, 102, 102, 102, 108, 108, 108, 114, 114, 114, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 167, 167, 167, 170, 170, 170, 174, 174, 174, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 165, 165, 165, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 158, 158, 158, 183, 183, 183, 183, 183, 183, 181, 181, 181, 179, 179, 179, 176, 176, 176, 173, 173, 173, 172, 172, 172, 170, 170, 170, 167, 167, 167, 162, 162, 162, 158, 158, 158, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 107, 107, 107, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 72, 72, 72, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 75, 75, 75, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 74, 74, 74, 70, 70, 70, 66, 66, 66, 61, 61, 61, 56, 56, 56, 53, 53, 53, 52, 52, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 55, 55, 55, 60, 60, 60, 66, 66, 66, 70, 70, 70, 73, 73, 73, 76, 76, 76, 79, 79, 79, 83, 83, 83, 88, 88, 88, 92, 92, 92, 96, 96, 96, 101, 101, 101, 106, 106, 106, 112, 112, 112, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 158, 158, 158, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 156, 156, 156, 183, 183, 183, 184, 184, 184, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 132, 132, 132, 127, 127, 127, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 89, 89, 89, 87, 87, 87, 84, 84, 84, 80, 80, 80, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 75, 75, 75, 72, 72, 72, 71, 71, 71, 73, 73, 73, 76, 76, 76, 77, 77, 77, 76, 76, 76, 76, 76, 76, 79, 79, 79, 82, 82, 82, 83, 83, 83, 82, 82, 82, 82, 82, 82, 84, 84, 84, 87, 87, 87, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 83, 83, 83, 80, 80, 80, 76, 76, 76, 70, 70, 70, 64, 64, 64, 59, 59, 59, 56, 56, 56, 55, 55, 55, 54, 54, 54, 52, 52, 52, 51, 51, 51, 51, 51, 51, 55, 55, 55, 62, 62, 62, 68, 68, 68, 73, 73, 73, 75, 75, 75, 78, 78, 78, 81, 81, 81, 85, 85, 85, 90, 90, 90, 96, 96, 96, 101, 101, 101, 106, 106, 106, 112, 112, 112, 117, 117, 117, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 116, 116, 116, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 166, 166, 166, 167, 167, 167, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 157, 157, 157, 153, 153, 153, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 183, 183, 183, 184, 184, 184, 183, 183, 183, 181, 181, 181, 179, 179, 179, 175, 175, 175, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 160, 160, 160, 159, 159, 159, 161, 161, 161, 164, 164, 164, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 103, 103, 103, 99, 99, 99, 95, 95, 95, 92, 92, 92, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 76, 76, 76, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 84, 84, 84, 86, 86, 86, 85, 85, 85, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 89, 89, 89, 87, 87, 87, 86, 86, 86, 88, 88, 88, 90, 90, 90, 91, 91, 91, 89, 89, 89, 85, 85, 85, 81, 81, 81, 75, 75, 75, 69, 69, 69, 64, 64, 64, 60, 60, 60, 57, 57, 57, 55, 55, 55, 53, 53, 53, 52, 52, 52, 53, 53, 53, 57, 57, 57, 64, 64, 64, 71, 71, 71, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 93, 93, 93, 99, 99, 99, 105, 105, 105, 111, 111, 111, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 120, 120, 120, 117, 117, 117, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 167, 167, 167, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 183, 183, 183, 183, 183, 183, 182, 182, 182, 180, 180, 180, 179, 179, 179, 176, 176, 176, 173, 173, 173, 170, 170, 170, 168, 168, 168, 165, 165, 165, 161, 161, 161, 160, 160, 160, 161, 161, 161, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 157, 157, 157, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 139, 139, 139, 135, 135, 135, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 102, 102, 102, 97, 97, 97, 93, 93, 93, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 94, 94, 94, 92, 92, 92, 88, 88, 88, 83, 83, 83, 78, 78, 78, 72, 72, 72, 67, 67, 67, 62, 62, 62, 58, 58, 58, 55, 55, 55, 54, 54, 54, 54, 54, 54, 56, 56, 56, 60, 60, 60, 66, 66, 66, 73, 73, 73, 79, 79, 79, 83, 83, 83, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 100, 100, 100, 107, 107, 107, 114, 114, 114, 120, 120, 120, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 131, 131, 131, 127, 127, 127, 122, 122, 122, 119, 119, 119, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 142, 142, 142, 147, 147, 147, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 165, 165, 165, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 185, 185, 185, 183, 183, 183, 182, 182, 182, 181, 181, 181, 180, 180, 180, 178, 178, 178, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 112, 112, 112, 108, 108, 108, 102, 102, 102, 96, 96, 96, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 83, 83, 83, 86, 86, 86, 88, 88, 88, 89, 89, 89, 87, 87, 87, 87, 87, 87, 88, 88, 88, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 88, 88, 88, 91, 91, 91, 94, 94, 94, 95, 95, 95, 94, 94, 94, 90, 90, 90, 84, 84, 84, 79, 79, 79, 73, 73, 73, 68, 68, 68, 63, 63, 63, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 59, 59, 59, 63, 63, 63, 69, 69, 69, 75, 75, 75, 80, 80, 80, 84, 84, 84, 87, 87, 87, 89, 89, 89, 91, 91, 91, 95, 95, 95, 100, 100, 100, 107, 107, 107, 114, 114, 114, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 121, 121, 121, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 141, 141, 141, 147, 147, 147, 153, 153, 153, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 156, 156, 156, 159, 159, 159, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 188, 188, 188, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 176, 176, 176, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 151, 151, 151, 148, 148, 148, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 118, 118, 118, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 97, 97, 97, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 88, 88, 88, 91, 91, 91, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 91, 91, 91, 94, 94, 94, 96, 96, 96, 95, 95, 95, 91, 91, 91, 85, 85, 85, 79, 79, 79, 74, 74, 74, 69, 69, 69, 66, 66, 66, 63, 63, 63, 61, 61, 61, 60, 60, 60, 61, 61, 61, 64, 64, 64, 68, 68, 68, 73, 73, 73, 77, 77, 77, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 96, 96, 96, 101, 101, 101, 108, 108, 108, 115, 115, 115, 122, 122, 122, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 147, 147, 147, 153, 153, 153, 159, 159, 159, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 169, 169, 169, 172, 172, 172, 176, 176, 176, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 168, 168, 168, 165, 165, 165, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 191, 191, 191, 190, 190, 190, 189, 189, 189, 188, 188, 188, 187, 187, 187, 184, 184, 184, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 170, 170, 170, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 115, 115, 115, 113, 113, 113, 110, 110, 110, 105, 105, 105, 99, 99, 99, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 90, 90, 90, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 93, 93, 93, 87, 87, 87, 81, 81, 81, 76, 76, 76, 73, 73, 73, 70, 70, 70, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 69, 69, 69, 73, 73, 73, 77, 77, 77, 80, 80, 80, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 100, 100, 100, 105, 105, 105, 110, 110, 110, 117, 117, 117, 123, 123, 123, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 141, 141, 141, 146, 146, 146, 153, 153, 153, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 174, 174, 174, 178, 178, 178, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 193, 193, 193, 192, 192, 192, 192, 192, 192, 191, 191, 191, 190, 190, 190, 187, 187, 187, 184, 184, 184, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 127, 127, 127, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 92, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 100, 100, 100, 96, 96, 96, 90, 90, 90, 85, 85, 85, 81, 81, 81, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 85, 85, 85, 88, 88, 88, 90, 90, 90, 94, 94, 94, 99, 99, 99, 105, 105, 105, 110, 110, 110, 115, 115, 115, 119, 119, 119, 124, 124, 124, 130, 130, 130, 134, 134, 134, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 142, 142, 142, 145, 145, 145, 151, 151, 151, 157, 157, 157, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 174, 174, 174, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 175, 175, 175, 174, 174, 174, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 193, 193, 193, 192, 192, 192, 191, 191, 191, 192, 192, 192, 192, 192, 192, 190, 190, 190, 186, 186, 186, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 176, 176, 176, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 158, 158, 158, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 100, 100, 100, 95, 95, 95, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 93, 93, 93, 96, 96, 96, 98, 98, 98, 103, 103, 103, 109, 109, 109, 115, 115, 115, 120, 120, 120, 122, 122, 122, 126, 126, 126, 131, 131, 131, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 127, 127, 127, 123, 123, 123, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 150, 150, 150, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 180, 180, 180, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 164, 164, 164, 166, 166, 166, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 193, 193, 193, 191, 191, 191, 190, 190, 190, 191, 191, 191, 192, 192, 192, 192, 192, 192, 188, 188, 188, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 180, 180, 180, 177, 177, 177, 173, 173, 173, 171, 171, 171, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 139, 139, 139, 134, 134, 134, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 113, 113, 113, 108, 108, 108, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 94, 94, 94, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 105, 105, 105, 99, 99, 99, 94, 94, 94, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 88, 88, 88, 92, 92, 92, 97, 97, 97, 101, 101, 101, 103, 103, 103, 107, 107, 107, 113, 113, 113, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 195, 195, 195, 193, 193, 193, 192, 192, 192, 192, 192, 192, 193, 193, 193, 192, 192, 192, 190, 190, 190, 186, 186, 186, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 171, 171, 171, 171, 171, 171, 172, 172, 172, 171, 171, 171, 169, 169, 169, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 105, 105, 105, 101, 101, 101, 96, 96, 96, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 94, 94, 94, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 99, 99, 99, 104, 104, 104, 108, 108, 108, 111, 111, 111, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 147, 147, 147, 148, 148, 148, 148, 148, 148, 150, 150, 150, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 172, 172, 172, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 166, 166, 166, 169, 169, 169, 173, 173, 173, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 198, 198, 198, 196, 196, 196, 194, 194, 194, 193, 193, 193, 192, 192, 192, 190, 190, 190, 188, 188, 188, 187, 187, 187, 185, 185, 185, 184, 184, 184, 182, 182, 182, 180, 180, 180, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 111, 111, 111, 109, 109, 109, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 107, 107, 107, 103, 103, 103, 98, 98, 98, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 100, 100, 100, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 94, 94, 94, 101, 101, 101, 107, 107, 107, 111, 111, 111, 114, 114, 114, 118, 118, 118, 123, 123, 123, 127, 127, 127, 131, 131, 131, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 130, 130, 130, 128, 128, 128, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 149, 149, 149, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 169, 169, 169, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 200, 200, 200, 198, 198, 198, 196, 196, 196, 193, 193, 193, 190, 190, 190, 188, 188, 188, 186, 186, 186, 185, 185, 185, 185, 185, 185, 183, 183, 183, 180, 180, 180, 177, 177, 177, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 166, 166, 166, 163, 163, 163, 161, 161, 161, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 151, 151, 151, 147, 147, 147, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 131, 131, 131, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 109, 109, 109, 105, 105, 105, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 97, 97, 97, 99, 99, 99, 100, 100, 100, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 115, 115, 115, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 93, 93, 93, 92, 92, 92, 96, 96, 96, 102, 102, 102, 109, 109, 109, 113, 113, 113, 116, 116, 116, 119, 119, 119, 123, 123, 123, 128, 128, 128, 133, 133, 133, 138, 138, 138, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 133, 133, 133, 136, 136, 136, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 137, 137, 137, 140, 140, 140, 141, 141, 141, 140, 140, 140, 142, 142, 142, 146, 146, 146, 151, 151, 151, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 173, 173, 173, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 170, 170, 170, 174, 174, 174, 178, 178, 178, 179, 179, 179, 181, 181, 181, 182, 182, 182, 183, 183, 183, 183, 183, 183, 181, 181, 181, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 164, 164, 164, 162, 162, 162, 199, 199, 199, 199, 199, 199, 197, 197, 197, 195, 195, 195, 191, 191, 191, 187, 187, 187, 184, 184, 184, 183, 183, 183, 183, 183, 183, 180, 180, 180, 177, 177, 177, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 97, 97, 97, 103, 103, 103, 110, 110, 110, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 129, 129, 129, 135, 135, 135, 140, 140, 140, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 138, 138, 138, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 147, 147, 147, 152, 152, 152, 156, 156, 156, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 171, 171, 171, 174, 174, 174, 177, 177, 177, 178, 178, 178, 176, 176, 176, 175, 175, 175, 174, 174, 174, 176, 176, 176, 176, 176, 176, 174, 174, 174, 172, 172, 172, 172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 166, 166, 166, 171, 171, 171, 176, 176, 176, 179, 179, 179, 181, 181, 181, 182, 182, 182, 185, 185, 185, 186, 186, 186, 186, 186, 186, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 176, 176, 176, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 170, 170, 170, 168, 168, 168, 200, 200, 200, 200, 200, 200, 199, 199, 199, 197, 197, 197, 193, 193, 193, 189, 189, 189, 185, 185, 185, 183, 183, 183, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 174, 174, 174, 171, 171, 171, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 125, 125, 125, 120, 120, 120, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 109, 109, 109, 113, 113, 113, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 98, 98, 98, 99, 99, 99, 104, 104, 104, 110, 110, 110, 114, 114, 114, 116, 116, 116, 119, 119, 119, 124, 124, 124, 130, 130, 130, 136, 136, 136, 141, 141, 141, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 161, 161, 161, 165, 165, 165, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 178, 178, 178, 180, 180, 180, 180, 180, 180, 177, 177, 177, 174, 174, 174, 174, 174, 174, 176, 176, 176, 176, 176, 176, 174, 174, 174, 172, 172, 172, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 164, 164, 164, 165, 165, 165, 168, 168, 168, 173, 173, 173, 178, 178, 178, 182, 182, 182, 183, 183, 183, 184, 184, 184, 186, 186, 186, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 179, 179, 179, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 204, 204, 204, 204, 204, 204, 202, 202, 202, 200, 200, 200, 196, 196, 196, 192, 192, 192, 187, 187, 187, 184, 184, 184, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 130, 130, 130, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 115, 115, 115, 120, 120, 120, 123, 123, 123, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 105, 105, 105, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 125, 125, 125, 131, 131, 131, 136, 136, 136, 141, 141, 141, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 148, 148, 148, 153, 153, 153, 157, 157, 157, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 181, 181, 181, 181, 181, 181, 177, 177, 177, 174, 174, 174, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 167, 167, 167, 170, 170, 170, 176, 176, 176, 181, 181, 181, 184, 184, 184, 186, 186, 186, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 185, 185, 185, 185, 185, 185, 185, 185, 185, 208, 208, 208, 207, 207, 207, 205, 205, 205, 202, 202, 202, 198, 198, 198, 194, 194, 194, 190, 190, 190, 187, 187, 187, 183, 183, 183, 178, 178, 178, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 162, 162, 162, 158, 158, 158, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 109, 109, 109, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 122, 122, 122, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 114, 114, 114, 119, 119, 119, 125, 125, 125, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 149, 149, 149, 154, 154, 154, 159, 159, 159, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 178, 178, 178, 180, 180, 180, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 176, 176, 176, 177, 177, 177, 175, 175, 175, 173, 173, 173, 173, 173, 173, 175, 175, 175, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 172, 172, 172, 178, 178, 178, 182, 182, 182, 185, 185, 185, 187, 187, 187, 189, 189, 189, 189, 189, 189, 187, 187, 187, 186, 186, 186, 186, 186, 186, 188, 188, 188, 189, 189, 189, 189, 189, 189, 188, 188, 188, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, 190, 190, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 210, 210, 210, 210, 210, 210, 207, 207, 207, 203, 203, 203, 199, 199, 199, 195, 195, 195, 192, 192, 192, 188, 188, 188, 184, 184, 184, 179, 179, 179, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 178, 178, 178, 178, 178, 178, 176, 176, 176, 172, 172, 172, 169, 169, 169, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 113, 113, 113, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 113, 113, 113, 110, 110, 110, 106, 106, 106, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 119, 119, 119, 124, 124, 124, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 160, 160, 160, 162, 162, 162, 163, 163, 163, 161, 161, 161, 160, 160, 160, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 154, 154, 154, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 145, 145, 145, 150, 150, 150, 155, 155, 155, 160, 160, 160, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 175, 175, 175, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 169, 169, 169, 173, 173, 173, 178, 178, 178, 181, 181, 181, 184, 184, 184, 187, 187, 187, 190, 190, 190, 190, 190, 190, 189, 189, 189, 188, 188, 188, 189, 189, 189, 192, 192, 192, 193, 193, 193, 193, 193, 193, 191, 191, 191, 190, 190, 190, 190, 190, 190, 192, 192, 192, 194, 194, 194, 194, 194, 194, 195, 195, 195, 196, 196, 196, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 210, 210, 210, 211, 211, 211, 208, 208, 208, 204, 204, 204, 199, 199, 199, 195, 195, 195, 192, 192, 192, 189, 189, 189, 184, 184, 184, 180, 180, 180, 177, 177, 177, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 181, 181, 181, 179, 179, 179, 174, 174, 174, 170, 170, 170, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 147, 147, 147, 153, 153, 153, 158, 158, 158, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 145, 145, 145, 151, 151, 151, 157, 157, 157, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 177, 177, 177, 179, 179, 179, 180, 180, 180, 178, 178, 178, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 176, 176, 176, 179, 179, 179, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 175, 175, 175, 172, 172, 172, 170, 170, 170, 168, 168, 168, 168, 168, 168, 169, 169, 169, 173, 173, 173, 178, 178, 178, 180, 180, 180, 182, 182, 182, 185, 185, 185, 189, 189, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 193, 193, 193, 195, 195, 195, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 198, 198, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 202, 202, 202, 205, 205, 205, 207, 207, 207, 207, 207, 207, 207, 207, 207, 206, 206, 206, 205, 205, 205, 209, 209, 209, 210, 210, 210, 208, 208, 208, 205, 205, 205, 200, 200, 200, 196, 196, 196, 193, 193, 193, 190, 190, 190, 186, 186, 186, 181, 181, 181, 179, 179, 179, 178, 178, 178, 179, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 184, 184, 184, 186, 186, 186, 186, 186, 186, 183, 183, 183, 179, 179, 179, 174, 174, 174, 172, 172, 172, 171, 171, 171, 170, 170, 170, 166, 166, 166, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 109, 109, 109, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 134, 134, 134, 137, 137, 137, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 147, 147, 147, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 169, 169, 169, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 144, 144, 144, 150, 150, 150, 156, 156, 156, 161, 161, 161, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 174, 174, 176, 176, 176, 179, 179, 179, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 178, 178, 178, 180, 180, 180, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 175, 175, 175, 172, 172, 172, 170, 170, 170, 170, 170, 170, 171, 171, 171, 175, 175, 175, 178, 178, 178, 180, 180, 180, 181, 181, 181, 184, 184, 184, 187, 187, 187, 190, 190, 190, 191, 191, 191, 193, 193, 193, 196, 196, 196, 198, 198, 198, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, 202, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 207, 207, 207, 210, 210, 210, 213, 213, 213, 213, 213, 213, 212, 212, 212, 210, 210, 210, 209, 209, 209, 208, 208, 208, 209, 209, 209, 207, 207, 207, 204, 204, 204, 200, 200, 200, 197, 197, 197, 195, 195, 195, 192, 192, 192, 188, 188, 188, 184, 184, 184, 182, 182, 182, 181, 181, 181, 181, 181, 181, 182, 182, 182, 183, 183, 183, 185, 185, 185, 187, 187, 187, 189, 189, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 188, 188, 188, 184, 184, 184, 179, 179, 179, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 167, 167, 167, 164, 164, 164, 160, 160, 160, 157, 157, 157, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 121, 121, 121, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 159, 159, 159, 155, 155, 155, 154, 154, 154, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 142, 142, 142, 147, 147, 147, 153, 153, 153, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 174, 174, 174, 176, 176, 176, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 182, 182, 182, 184, 184, 184, 187, 187, 187, 189, 189, 189, 191, 191, 191, 194, 194, 194, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, 199, 201, 201, 201, 203, 203, 203, 205, 205, 205, 207, 207, 207, 208, 208, 208, 208, 208, 208, 209, 209, 209, 211, 211, 211, 214, 214, 214, 216, 216, 216, 215, 215, 215, 213, 213, 213, 212, 212, 212, 212, 212, 212, 205, 205, 205, 207, 207, 207, 205, 205, 205, 203, 203, 203, 200, 200, 200, 199, 199, 199, 197, 197, 197, 193, 193, 193, 189, 189, 189, 186, 186, 186, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 187, 187, 187, 190, 190, 190, 192, 192, 192, 195, 195, 195, 196, 196, 196, 195, 195, 195, 194, 194, 194, 193, 193, 193, 189, 189, 189, 185, 185, 185, 181, 181, 181, 179, 179, 179, 177, 177, 177, 175, 175, 175, 173, 173, 173, 169, 169, 169, 166, 166, 166, 162, 162, 162, 157, 157, 157, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 173, 173, 173, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 172, 172, 172, 172, 172, 172, 169, 169, 169, 163, 163, 163, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 137, 137, 137, 142, 142, 142, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 173, 173, 173, 175, 175, 175, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 182, 182, 182, 185, 185, 185, 187, 187, 187, 188, 188, 188, 190, 190, 190, 194, 194, 194, 199, 199, 199, 200, 200, 200, 200, 200, 200, 199, 199, 199, 200, 200, 200, 203, 203, 203, 206, 206, 206, 208, 208, 208, 210, 210, 210, 211, 211, 211, 213, 213, 213, 214, 214, 214, 216, 216, 216, 216, 216, 216, 214, 214, 214, 213, 213, 213, 212, 212, 212, 213, 213, 213, 203, 203, 203, 204, 204, 204, 203, 203, 203, 201, 201, 201, 199, 199, 199, 198, 198, 198, 196, 196, 196, 192, 192, 192, 188, 188, 188, 186, 186, 186, 186, 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, 189, 191, 191, 191, 193, 193, 193, 196, 196, 196, 198, 198, 198, 198, 198, 198, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 190, 190, 190, 185, 185, 185, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 168, 168, 168, 163, 163, 163, 158, 158, 158, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 169, 169, 169, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 172, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 154, 154, 154, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 136, 136, 136, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 162, 162, 162, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 182, 182, 182, 184, 184, 184, 184, 184, 184, 183, 183, 183, 180, 180, 180, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 181, 181, 181, 186, 186, 186, 188, 188, 188, 189, 189, 189, 190, 190, 190, 194, 194, 194, 199, 199, 199, 201, 201, 201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 202, 202, 202, 205, 205, 205, 209, 209, 209, 211, 211, 211, 212, 212, 212, 214, 214, 214, 215, 215, 215, 215, 215, 215, 213, 213, 213, 212, 212, 212, 211, 211, 211, 212, 212, 212, 214, 214, 214, 200, 200, 200, 201, 201, 201, 200, 200, 200, 198, 198, 198, 197, 197, 197, 196, 196, 196, 194, 194, 194, 190, 190, 190, 186, 186, 186, 185, 185, 185, 186, 186, 186, 187, 187, 187, 189, 189, 189, 191, 191, 191, 193, 193, 193, 195, 195, 195, 197, 197, 197, 198, 198, 198, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 200, 200, 200, 195, 195, 195, 189, 189, 189, 186, 186, 186, 184, 184, 184, 182, 182, 182, 179, 179, 179, 176, 176, 176, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 157, 157, 157, 152, 152, 152, 148, 148, 148, 144, 144, 144, 139, 139, 139, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 137, 137, 137, 141, 141, 141, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 139, 139, 139, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 163, 163, 163, 168, 168, 168, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 173, 173, 173, 169, 169, 169, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 170, 170, 170, 171, 171, 171, 174, 174, 174, 175, 175, 175, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 179, 179, 179, 182, 182, 182, 184, 184, 184, 183, 183, 183, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 177, 177, 177, 177, 177, 177, 180, 180, 180, 185, 185, 185, 188, 188, 188, 189, 189, 189, 191, 191, 191, 194, 194, 194, 198, 198, 198, 201, 201, 201, 201, 201, 201, 200, 200, 200, 199, 199, 199, 201, 201, 201, 204, 204, 204, 207, 207, 207, 209, 209, 209, 210, 210, 210, 212, 212, 212, 212, 212, 212, 211, 211, 211, 209, 209, 209, 208, 208, 208, 209, 209, 209, 211, 211, 211, 214, 214, 214, 196, 196, 196, 197, 197, 197, 196, 196, 196, 195, 195, 195, 193, 193, 193, 193, 193, 193, 191, 191, 191, 188, 188, 188, 185, 185, 185, 184, 184, 184, 185, 185, 185, 186, 186, 186, 188, 188, 188, 191, 191, 191, 195, 195, 195, 197, 197, 197, 198, 198, 198, 199, 199, 199, 199, 199, 199, 200, 200, 200, 202, 202, 202, 203, 203, 203, 202, 202, 202, 198, 198, 198, 192, 192, 192, 189, 189, 189, 186, 186, 186, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 172, 172, 172, 168, 168, 168, 164, 164, 164, 159, 159, 159, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 142, 142, 142, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 136, 136, 136, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 157, 157, 157, 162, 162, 162, 168, 168, 168, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 172, 172, 172, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 183, 183, 183, 182, 182, 182, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 177, 177, 177, 177, 177, 177, 180, 180, 180, 184, 184, 184, 188, 188, 188, 190, 190, 190, 192, 192, 192, 194, 194, 194, 197, 197, 197, 198, 198, 198, 198, 198, 198, 197, 197, 197, 197, 197, 197, 198, 198, 198, 200, 200, 200, 203, 203, 203, 205, 205, 205, 206, 206, 206, 208, 208, 208, 208, 208, 208, 207, 207, 207, 205, 205, 205, 205, 205, 205, 206, 206, 206, 209, 209, 209, 213, 213, 213, 193, 193, 193, 194, 194, 194, 193, 193, 193, 191, 191, 191, 190, 190, 190, 191, 191, 191, 190, 190, 190, 187, 187, 187, 185, 185, 185, 185, 185, 185, 184, 184, 184, 184, 184, 184, 186, 186, 186, 190, 190, 190, 195, 195, 195, 198, 198, 198, 200, 200, 200, 201, 201, 201, 201, 201, 201, 202, 202, 202, 203, 203, 203, 203, 203, 203, 201, 201, 201, 198, 198, 198, 193, 193, 193, 190, 190, 190, 188, 188, 188, 185, 185, 185, 181, 181, 181, 178, 178, 178, 175, 175, 175, 172, 172, 172, 168, 168, 168, 164, 164, 164, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 155, 155, 155, 156, 156, 156, 156, 156, 156, 154, 154, 154, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 161, 161, 161, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 173, 173, 173, 171, 171, 171, 170, 170, 170, 168, 168, 168, 165, 165, 165, 161, 161, 161, 155, 155, 155, 150, 150, 150, 146, 146, 146, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 129, 129, 129, 125, 125, 125, 122, 122, 122, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 134, 134, 134, 139, 139, 139, 144, 144, 144, 150, 150, 150, 154, 154, 154, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 168, 168, 168, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 177, 177, 177, 181, 181, 181, 183, 183, 183, 182, 182, 182, 179, 179, 179, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 178, 178, 178, 180, 180, 180, 183, 183, 183, 186, 186, 186, 189, 189, 189, 192, 192, 192, 194, 194, 194, 195, 195, 195, 194, 194, 194, 193, 193, 193, 192, 192, 192, 191, 191, 191, 192, 192, 192, 195, 195, 195, 198, 198, 198, 200, 200, 200, 202, 202, 202, 203, 203, 203, 204, 204, 204, 204, 204, 204, 203, 203, 203, 202, 202, 202, 204, 204, 204, 208, 208, 208, 212, 212, 212, 188, 188, 188, 190, 190, 190, 189, 189, 189, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 183, 183, 183, 184, 184, 184, 188, 188, 188, 194, 194, 194, 198, 198, 198, 200, 200, 200, 201, 201, 201, 202, 202, 202, 203, 203, 203, 203, 203, 203, 202, 202, 202, 199, 199, 199, 195, 195, 195, 193, 193, 193, 191, 191, 191, 189, 189, 189, 186, 186, 186, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 170, 170, 170, 164, 164, 164, 159, 159, 159, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 142, 142, 142, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 135, 135, 135, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 152, 152, 152, 156, 156, 156, 160, 160, 160, 164, 164, 164, 168, 168, 168, 171, 171, 171, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 181, 181, 181, 180, 180, 180, 179, 179, 179, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 166, 166, 166, 161, 161, 161, 155, 155, 155, 150, 150, 150, 145, 145, 145, 140, 140, 140, 134, 134, 134, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 135, 135, 135, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 171, 171, 171, 171, 171, 171, 173, 173, 173, 173, 173, 173, 172, 172, 172, 173, 173, 173, 176, 176, 176, 180, 180, 180, 182, 182, 182, 181, 181, 181, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 185, 185, 185, 187, 187, 187, 190, 190, 190, 192, 192, 192, 192, 192, 192, 189, 189, 189, 186, 186, 186, 185, 185, 185, 185, 185, 185, 187, 187, 187, 191, 191, 191, 194, 194, 194, 196, 196, 196, 198, 198, 198, 200, 200, 200, 201, 201, 201, 202, 202, 202, 202, 202, 202, 201, 201, 201, 203, 203, 203, 207, 207, 207, 211, 211, 211, 183, 183, 183, 185, 185, 185, 185, 185, 185, 183, 183, 183, 181, 181, 181, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 185, 185, 185, 189, 189, 189, 193, 193, 193, 196, 196, 196, 198, 198, 198, 200, 200, 200, 201, 201, 201, 202, 202, 202, 200, 200, 200, 196, 196, 196, 193, 193, 193, 191, 191, 191, 190, 190, 190, 188, 188, 188, 185, 185, 185, 182, 182, 182, 180, 180, 180, 178, 178, 178, 176, 176, 176, 171, 171, 171, 166, 166, 166, 160, 160, 160, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 127, 127, 127, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 137, 137, 137, 142, 142, 142, 148, 148, 148, 153, 153, 153, 157, 157, 157, 159, 159, 159, 163, 163, 163, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 170, 170, 170, 166, 166, 166, 160, 160, 160, 155, 155, 155, 151, 151, 151, 146, 146, 146, 139, 139, 139, 133, 133, 133, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 118, 118, 118, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 142, 142, 142, 145, 145, 145, 149, 149, 149, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 171, 171, 171, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 175, 175, 175, 178, 178, 178, 180, 180, 180, 180, 180, 180, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 177, 177, 177, 179, 179, 179, 182, 182, 182, 183, 183, 183, 183, 183, 183, 184, 184, 184, 186, 186, 186, 187, 187, 187, 186, 186, 186, 183, 183, 183, 180, 180, 180, 179, 179, 179, 181, 181, 181, 184, 184, 184, 188, 188, 188, 191, 191, 191, 193, 193, 193, 195, 195, 195, 197, 197, 197, 199, 199, 199, 201, 201, 201, 201, 201, 201, 200, 200, 200, 202, 202, 202, 205, 205, 205, 210, 210, 210, 177, 177, 177, 179, 179, 179, 179, 179, 179, 177, 177, 177, 174, 174, 174, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 180, 180, 180, 183, 183, 183, 187, 187, 187, 190, 190, 190, 192, 192, 192, 194, 194, 194, 196, 196, 196, 197, 197, 197, 196, 196, 196, 193, 193, 193, 190, 190, 190, 189, 189, 189, 187, 187, 187, 184, 184, 184, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 175, 175, 175, 172, 172, 172, 166, 166, 166, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 146, 146, 146, 141, 141, 141, 135, 135, 135, 131, 131, 131, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 143, 143, 143, 150, 150, 150, 155, 155, 155, 158, 158, 158, 160, 160, 160, 164, 164, 164, 169, 169, 169, 175, 175, 175, 179, 179, 179, 182, 182, 182, 184, 184, 184, 185, 185, 185, 186, 186, 186, 185, 185, 185, 183, 183, 183, 180, 180, 180, 178, 178, 178, 174, 174, 174, 171, 171, 171, 166, 166, 166, 161, 161, 161, 156, 156, 156, 152, 152, 152, 146, 146, 146, 139, 139, 139, 132, 132, 132, 127, 127, 127, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 119, 119, 119, 121, 121, 121, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 142, 142, 142, 147, 147, 147, 152, 152, 152, 156, 156, 156, 160, 160, 160, 165, 165, 165, 169, 169, 169, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 178, 178, 178, 176, 176, 176, 177, 177, 177, 179, 179, 179, 182, 182, 182, 183, 183, 183, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 179, 179, 179, 177, 177, 177, 175, 175, 175, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 188, 188, 188, 190, 190, 190, 193, 193, 193, 195, 195, 195, 197, 197, 197, 199, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 203, 203, 203, 207, 207, 207, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 187, 187, 187, 189, 189, 189, 190, 190, 190, 192, 192, 192, 191, 191, 191, 190, 190, 190, 188, 188, 188, 186, 186, 186, 183, 183, 183, 178, 178, 178, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 165, 165, 165, 161, 161, 161, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 148, 148, 148, 142, 142, 142, 136, 136, 136, 132, 132, 132, 130, 130, 130, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 152, 152, 152, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 171, 171, 171, 176, 176, 176, 180, 180, 180, 183, 183, 183, 185, 185, 185, 186, 186, 186, 187, 187, 187, 187, 187, 187, 185, 185, 185, 183, 183, 183, 180, 180, 180, 177, 177, 177, 173, 173, 173, 168, 168, 168, 162, 162, 162, 157, 157, 157, 152, 152, 152, 146, 146, 146, 138, 138, 138, 131, 131, 131, 126, 126, 126, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 143, 143, 143, 149, 149, 149, 153, 153, 153, 156, 156, 156, 159, 159, 159, 163, 163, 163, 167, 167, 167, 170, 170, 170, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 181, 181, 181, 180, 180, 180, 179, 179, 179, 179, 179, 179, 176, 176, 176, 173, 173, 173, 172, 172, 172, 172, 172, 172, 174, 174, 174, 177, 177, 177, 180, 180, 180, 182, 182, 182, 185, 185, 185, 187, 187, 187, 190, 190, 190, 192, 192, 192, 194, 194, 194, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 199, 199, 199, 203, 203, 203, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 173, 173, 173, 176, 176, 176, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 184, 184, 184, 182, 182, 182, 178, 178, 178, 173, 173, 173, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 151, 151, 151, 145, 145, 145, 140, 140, 140, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 126, 126, 126, 121, 121, 121, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 160, 160, 160, 164, 164, 164, 169, 169, 169, 173, 173, 173, 177, 177, 177, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 183, 183, 183, 179, 179, 179, 174, 174, 174, 169, 169, 169, 164, 164, 164, 159, 159, 159, 153, 153, 153, 146, 146, 146, 138, 138, 138, 132, 132, 132, 127, 127, 127, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 141, 141, 141, 146, 146, 146, 152, 152, 152, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 172, 172, 172, 170, 170, 170, 169, 169, 169, 171, 171, 171, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 171, 171, 171, 169, 169, 169, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 179, 179, 179, 181, 181, 181, 184, 184, 184, 187, 187, 187, 189, 189, 189, 190, 190, 190, 192, 192, 192, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 199, 199, 199, 162, 162, 162, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 165, 165, 165, 169, 169, 169, 172, 172, 172, 175, 175, 175, 177, 177, 177, 179, 179, 179, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 176, 176, 176, 173, 173, 173, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 145, 145, 145, 140, 140, 140, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 130, 130, 130, 124, 124, 124, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 166, 166, 166, 171, 171, 171, 175, 175, 175, 178, 178, 178, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 184, 184, 184, 180, 180, 180, 174, 174, 174, 168, 168, 168, 164, 164, 164, 160, 160, 160, 154, 154, 154, 147, 147, 147, 140, 140, 140, 134, 134, 134, 129, 129, 129, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 135, 135, 135, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 160, 160, 160, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 167, 167, 167, 169, 169, 169, 171, 171, 171, 174, 174, 174, 177, 177, 177, 179, 179, 179, 182, 182, 182, 184, 184, 184, 185, 185, 185, 185, 185, 185, 188, 188, 188, 191, 191, 191, 192, 192, 192, 192, 192, 192, 193, 193, 193, 196, 196, 196, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 175, 175, 175, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 146, 146, 146, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 134, 134, 134, 129, 129, 129, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 182, 182, 182, 184, 184, 184, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 183, 183, 183, 178, 178, 178, 172, 172, 172, 166, 166, 166, 163, 163, 163, 160, 160, 160, 155, 155, 155, 149, 149, 149, 142, 142, 142, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 135, 135, 135, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 171, 171, 171, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 181, 183, 183, 183, 187, 187, 187, 189, 189, 189, 190, 190, 190, 190, 190, 190, 193, 193, 193, 157, 157, 157, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 169, 169, 169, 172, 172, 172, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 130, 130, 130, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 154, 154, 154, 151, 151, 151, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 162, 162, 162, 158, 158, 158, 154, 154, 154, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 166, 166, 166, 170, 170, 170, 174, 174, 174, 178, 178, 178, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 182, 182, 182, 179, 179, 179, 174, 174, 174, 169, 169, 169, 164, 164, 164, 161, 161, 161, 159, 159, 159, 155, 155, 155, 149, 149, 149, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 132, 132, 132, 137, 137, 137, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 184, 184, 184, 187, 187, 187, 188, 188, 188, 189, 189, 189, 191, 191, 191, 152, 152, 152, 156, 156, 156, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 169, 169, 169, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 130, 130, 130, 129, 129, 129, 130, 130, 130, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 156, 156, 156, 160, 160, 160, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 178, 178, 178, 182, 182, 182, 184, 184, 184, 187, 187, 187, 188, 188, 188, 187, 187, 187, 185, 185, 185, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 170, 170, 170, 165, 165, 165, 161, 161, 161, 158, 158, 158, 157, 157, 157, 153, 153, 153, 147, 147, 147, 141, 141, 141, 135, 135, 135, 130, 130, 130, 126, 126, 126, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 138, 138, 138, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 173, 173, 173, 174, 174, 174, 177, 177, 177, 181, 181, 181, 184, 184, 184, 186, 186, 186, 187, 187, 187, 188, 188, 188, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 164, 164, 164, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 148, 148, 148, 145, 145, 145, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 151, 151, 151, 155, 155, 155, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 140, 140, 140, 138, 138, 138, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 130, 130, 130, 134, 134, 134, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 170, 170, 170, 174, 174, 174, 178, 178, 178, 182, 182, 182, 185, 185, 185, 187, 187, 187, 188, 188, 188, 186, 186, 186, 183, 183, 183, 179, 179, 179, 175, 175, 175, 171, 171, 171, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 145, 145, 145, 139, 139, 139, 132, 132, 132, 127, 127, 127, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 148, 148, 148, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 173, 173, 173, 177, 177, 177, 181, 181, 181, 183, 183, 183, 184, 184, 184, 185, 185, 185, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 163, 163, 163, 161, 161, 161, 157, 157, 157, 152, 152, 152, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 145, 145, 145, 150, 150, 150, 155, 155, 155, 157, 157, 157, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 160, 160, 160, 163, 163, 163, 167, 167, 167, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 131, 131, 131, 136, 136, 136, 142, 142, 142, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 172, 172, 172, 176, 176, 176, 181, 181, 181, 184, 184, 184, 186, 186, 186, 186, 186, 186, 185, 185, 185, 181, 181, 181, 176, 176, 176, 170, 170, 170, 165, 165, 165, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 137, 137, 137, 131, 131, 131, 126, 126, 126, 122, 122, 122, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 145, 145, 145, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 173, 173, 173, 176, 176, 176, 179, 179, 179, 181, 181, 181, 182, 182, 182, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 155, 155, 155, 159, 159, 159, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 138, 138, 138, 143, 143, 143, 148, 148, 148, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 166, 166, 166, 167, 167, 167, 170, 170, 170, 174, 174, 174, 178, 178, 178, 182, 182, 182, 184, 184, 184, 184, 184, 184, 182, 182, 182, 179, 179, 179, 173, 173, 173, 167, 167, 167, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 140, 140, 140, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 119, 119, 119, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 168, 168, 168, 172, 172, 172, 176, 176, 176, 180, 180, 180, 181, 181, 181, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 153, 153, 153, 148, 148, 148, 145, 145, 145, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 130, 130, 130, 126, 126, 126, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 140, 140, 140, 143, 143, 143, 149, 149, 149, 154, 154, 154, 157, 157, 157, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 147, 147, 147, 149, 149, 149, 154, 154, 154, 159, 159, 159, 164, 164, 164, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 149, 149, 149, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 158, 158, 158, 162, 162, 162, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 167, 167, 167, 171, 171, 171, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 175, 175, 175, 170, 170, 170, 163, 163, 163, 157, 157, 157, 152, 152, 152, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 120, 120, 120, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 175, 175, 175, 179, 179, 179, 181, 181, 181, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 149, 149, 149, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 151, 151, 151, 147, 147, 147, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 132, 132, 132, 137, 137, 137, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 144, 144, 144, 148, 148, 148, 153, 153, 153, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 147, 147, 147, 149, 149, 149, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 155, 155, 155, 160, 160, 160, 164, 164, 164, 167, 167, 167, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 167, 167, 167, 171, 171, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 168, 168, 168, 161, 161, 161, 154, 154, 154, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 120, 120, 120, 115, 115, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 146, 146, 146, 148, 148, 148, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 159, 159, 159, 163, 163, 163, 168, 168, 168, 174, 174, 174, 178, 178, 178, 179, 179, 179, 148, 148, 148, 148, 148, 148, 148, 148, 148, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 133, 133, 133, 138, 138, 138, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 149, 149, 149, 153, 153, 153, 157, 157, 157, 159, 159, 159, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 148, 148, 148, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 165, 165, 165, 159, 159, 159, 151, 151, 151, 145, 145, 145, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 109, 109, 109, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 158, 158, 158, 162, 162, 162, 167, 167, 167, 172, 172, 172, 175, 175, 175, 176, 176, 176, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 144, 144, 144, 147, 147, 147, 150, 150, 150, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 163, 163, 163, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 162, 162, 162, 157, 157, 157, 149, 149, 149, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 117, 117, 117, 112, 112, 112, 107, 107, 107, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 152, 152, 152, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 136, 136, 136, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 159, 159, 159, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 159, 159, 159, 154, 154, 154, 147, 147, 147, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 110, 110, 110, 105, 105, 105, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 113, 113, 113, 118, 118, 118, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 124, 124, 124, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 136, 136, 136, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 151, 151, 151, 147, 147, 147, 145, 145, 145, 145, 145, 145, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 160, 160, 160, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 145, 145, 145, 139, 139, 139, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 105, 105, 105, 109, 109, 109, 114, 114, 114, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 145, 145, 145, 140, 140, 140, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 106, 106, 106, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 112, 112, 112, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 142, 142, 142, 145, 145, 145, 150, 150, 150, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 158, 158, 158, 163, 163, 163, 167, 167, 167, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 104, 104, 104, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 111, 111, 111, 115, 115, 115, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 142, 142, 142, 147, 147, 147, 152, 152, 152, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 167, 167, 167, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 106, 106, 106, 109, 109, 109, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 142, 142, 142, 148, 148, 148, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 150, 150, 150, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 144, 144, 144, 146, 146, 146, 150, 150, 150, 152, 152, 152, 152, 152, 152, 149, 149, 149, 145, 145, 145, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 120, 120, 120, 125, 125, 125, 130, 130, 130, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 125, 125, 125, 129, 129, 129, 131, 131, 131, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 149, 149, 149, 155, 155, 155, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 158, 158, 158, 159, 159, 159, 152, 152, 152, 147, 147, 147, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 114, 114, 114, 119, 119, 119, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 164, 164, 164, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 160, 160, 160, 160, 160, 160, 157, 157, 157, 152, 152, 152, 147, 147, 147, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 150, 150, 150, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 150, 150, 150, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 129, 129, 129, 124, 124, 124, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 119, 119, 119, 117, 117, 117, 113, 113, 113, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 128, 128, 128, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 158, 158, 158, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 150, 150, 150, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 148, 148, 148, 154, 154, 154, 159, 159, 159, 164, 164, 164, 168, 168, 168, 171, 171, 171, 174, 174, 174, 176, 176, 176, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 160, 160, 160, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 135, 135, 135, 129, 129, 129, 123, 123, 123, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 124, 124, 124, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 162, 162, 162, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 118, 118, 118, 123, 123, 123, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 129, 129, 129, 128, 128, 128, 130, 130, 130, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 148, 148, 148, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 170, 170, 170, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 158, 158, 158, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 159, 159, 159, 155, 155, 155, 150, 150, 150, 145, 145, 145, 141, 141, 141, 136, 136, 136, 129, 129, 129, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 155, 155, 155, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 165, 165, 165, 166, 166, 166, 164, 164, 164, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 116, 116, 116, 121, 121, 121, 126, 126, 126, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 154, 154, 154, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 177, 177, 177, 176, 176, 176, 173, 173, 173, 171, 171, 171, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 149, 149, 149, 145, 145, 145, 142, 142, 142, 137, 137, 137, 130, 130, 130, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 121, 121, 121, 118, 118, 118, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 113, 113, 113, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 124, 124, 124, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 165, 165, 165, 164, 164, 164, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 129, 129, 129, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 172, 172, 172, 169, 169, 169, 166, 166, 166, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 137, 137, 137, 130, 130, 130, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 100, 100, 100, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 96, 96, 96, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 119, 119, 119, 124, 124, 124, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 125, 125, 125, 129, 129, 129, 134, 134, 134, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 145, 145, 145, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 167, 167, 167, 165, 165, 165, 162, 162, 162, 158, 158, 158, 156, 156, 156, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 131, 131, 131, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 101, 101, 101, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 97, 97, 97, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 116, 116, 116, 120, 120, 120, 125, 125, 125, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 139, 139, 139, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 104, 104, 104, 109, 109, 109, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 141, 141, 141, 136, 136, 136, 130, 130, 130, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 97, 97, 97, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 158, 158, 158, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 130, 130, 130, 126, 126, 126, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 116, 116, 116, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 100, 100, 100, 105, 105, 105, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 155, 155, 155, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 125, 125, 125, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 137, 137, 137, 134, 134, 134, 128, 128, 128, 123, 123, 123, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 97, 97, 97, 100, 100, 100, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 116, 116, 116, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 134, 134, 134, 130, 130, 130, 124, 124, 124, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 92, 92, 92, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 119, 119, 119, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 160, 160, 160, 165, 165, 165, 170, 170, 170, 172, 172, 172, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 157, 157, 157, 154, 154, 154, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 139, 139, 139, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 107, 107, 107, 107, 107, 107, 110, 110, 110, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 158, 158, 158, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 146, 146, 146, 148, 148, 148, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 120, 120, 120, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 119, 119, 119, 126, 126, 126, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 145, 145, 145, 149, 149, 149, 152, 152, 152, 155, 155, 155, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 153, 153, 153, 157, 157, 157, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 138, 138, 138, 138, 138, 138, 141, 141, 141, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 135, 135, 135, 129, 129, 129, 124, 124, 124, 119, 119, 119, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 89, 89, 89, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 108, 108, 108, 115, 115, 115, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 142, 142, 142, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 130, 130, 130, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 158, 158, 158, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 134, 134, 134, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 105, 105, 105, 111, 111, 111, 119, 119, 119, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 134, 134, 134, 139, 139, 139, 145, 145, 145, 150, 150, 150, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 158, 158, 158, 155, 155, 155, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 150, 150, 150, 145, 145, 145, 140, 140, 140, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 120, 120, 120, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 143, 143, 143, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 160, 160, 160, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 132, 132, 132, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 116, 116, 116, 112, 112, 112, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 103, 103, 103, 109, 109, 109, 116, 116, 116, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 132, 132, 132, 137, 137, 137, 143, 143, 143, 149, 149, 149, 153, 153, 153, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 161, 161, 161, 158, 158, 158, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 145, 145, 145, 138, 138, 138, 134, 134, 134, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 116, 116, 116, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 118, 118, 118, 123, 123, 123, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 109, 109, 109, 105, 105, 105, 102, 102, 102, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 103, 103, 103, 108, 108, 108, 114, 114, 114, 119, 119, 119, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 131, 131, 131, 136, 136, 136, 142, 142, 142, 147, 147, 147, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 144, 144, 144, 137, 137, 137, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 118, 118, 118, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 125, 125, 125, 122, 122, 122, 116, 116, 116, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 120, 120, 120, 126, 126, 126, 130, 130, 130, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 139, 139, 139, 143, 143, 143, 146, 146, 146, 150, 150, 150, 155, 155, 155, 160, 160, 160, 163, 163, 163, 165, 165, 165, 167, 167, 167, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 102, 102, 102, 107, 107, 107, 113, 113, 113, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 125, 125, 125, 129, 129, 129, 135, 135, 135, 141, 141, 141, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 146, 146, 146, 141, 141, 141, 135, 135, 135, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 123, 123, 123, 128, 128, 128, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 151, 151, 151, 157, 157, 157, 163, 163, 163, 167, 167, 167, 169, 169, 169, 171, 171, 171, 134, 134, 134, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 120, 120, 120, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 101, 101, 101, 98, 98, 98, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 113, 113, 113, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 95, 95, 95, 96, 96, 96, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 123, 123, 123, 128, 128, 128, 134, 134, 134, 139, 139, 139, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 151, 151, 151, 155, 155, 155, 158, 158, 158, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 151, 151, 151, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 127, 127, 127, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 120, 120, 120, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 120, 120, 120, 122, 122, 122, 126, 126, 126, 131, 131, 131, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 159, 159, 159, 165, 165, 165, 169, 169, 169, 171, 171, 171, 173, 173, 173, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 105, 105, 105, 101, 101, 101, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 94, 94, 94, 95, 95, 95, 99, 99, 99, 103, 103, 103, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 126, 126, 126, 132, 132, 132, 138, 138, 138, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 129, 129, 129, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 161, 161, 161, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 135, 135, 135, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 94, 94, 94, 94, 94, 94, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 114, 114, 114, 119, 119, 119, 125, 125, 125, 131, 131, 131, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 127, 127, 127, 122, 122, 122, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 112, 112, 112, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 95, 95, 95, 95, 95, 95, 98, 98, 98, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 112, 112, 112, 117, 117, 117, 123, 123, 123, 129, 129, 129, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 120, 120, 120, 116, 116, 116, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 125, 125, 125, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 169, 169, 169, 171, 171, 171, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 97, 97, 97, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 111, 111, 111, 117, 117, 117, 122, 122, 122, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 122, 122, 122, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 120, 120, 120, 114, 114, 114, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 133, 133, 133, 137, 137, 137, 142, 142, 142, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 119, 119, 119, 114, 114, 114, 109, 109, 109, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 109, 109, 109, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 167, 167, 167, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 122, 122, 122, 119, 119, 119, 114, 114, 114, 109, 109, 109, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 102, 102, 102, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 97, 97, 97, 92, 92, 92, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 105, 105, 105, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 113, 113, 113, 117, 117, 117, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 135, 135, 135, 138, 138, 138, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 167, 167, 167, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 115, 115, 115, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 100, 100, 100, 103, 103, 103, 104, 104, 104, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 96, 96, 96, 91, 91, 91, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 86, 86, 86, 85, 85, 85, 87, 87, 87, 91, 91, 91, 96, 96, 96, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 101, 101, 101, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 83, 83, 83, 83, 83, 83, 84, 84, 84, 89, 89, 89, 95, 95, 95, 99, 99, 99, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 101, 101, 101, 104, 104, 104, 104, 104, 104, 101, 101, 101, 97, 97, 97, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 105, 105, 105, 106, 106, 106, 104, 104, 104, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 102, 102, 102, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 139, 139, 139, 144, 144, 144, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 127, 127, 127, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 105, 105, 105, 100, 100, 100, 96, 96, 96, 91, 91, 91, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 93, 93, 93, 98, 98, 98, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 101, 101, 101, 98, 98, 98, 96, 96, 96, 96, 96, 96, 99, 99, 99, 102, 102, 102, 106, 106, 106, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 119, 119, 119, 124, 124, 124, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 157, 157, 157, 162, 162, 162, 166, 166, 166, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 128, 128, 128, 126, 126, 126, 122, 122, 122, 119, 119, 119, 115, 115, 115, 113, 113, 113, 111, 111, 111, 108, 108, 108, 104, 104, 104, 99, 99, 99, 94, 94, 94, 88, 88, 88, 83, 83, 83, 81, 81, 81, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 90, 90, 90, 93, 93, 93, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 82, 82, 82, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 105, 105, 105, 106, 106, 106, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 101, 101, 101, 105, 105, 105, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 115, 115, 115, 120, 120, 120, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 157, 157, 157, 162, 162, 162, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 162, 162, 162, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 93, 93, 93, 87, 87, 87, 81, 81, 81, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 79, 79, 79, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 90, 90, 90, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 93, 93, 93, 98, 98, 98, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 108, 108, 108, 105, 105, 105, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 105, 105, 105, 104, 104, 104, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 88, 88, 88, 90, 90, 90, 93, 93, 93, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 116, 116, 116, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 158, 158, 158, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 165, 165, 165, 161, 161, 161, 126, 126, 126, 121, 121, 121, 116, 116, 116, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 92, 92, 92, 86, 86, 86, 81, 81, 81, 79, 79, 79, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 79, 79, 79, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 83, 83, 83, 88, 88, 88, 93, 93, 93, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 101, 101, 101, 97, 97, 97, 92, 92, 92, 89, 89, 89, 87, 87, 87, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 125, 125, 125, 130, 130, 130, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 143, 143, 143, 147, 147, 147, 152, 152, 152, 158, 158, 158, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 161, 161, 161, 125, 125, 125, 120, 120, 120, 115, 115, 115, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 82, 82, 82, 84, 84, 84, 85, 85, 85, 86, 86, 86, 84, 84, 84, 82, 82, 82, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 85, 85, 85, 82, 82, 82, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 87, 87, 87, 91, 91, 91, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 99, 99, 99, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 87, 87, 87, 83, 83, 83, 81, 81, 81, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 113, 113, 113, 118, 118, 118, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 135, 135, 135, 139, 139, 139, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 142, 142, 142, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 97, 97, 97, 93, 93, 93, 88, 88, 88, 84, 84, 84, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 85, 85, 85, 88, 88, 88, 92, 92, 92, 93, 93, 93, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 81, 81, 81, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 87, 87, 87, 87, 85, 85, 85, 81, 81, 81, 79, 79, 79, 79, 79, 79, 80, 80, 80, 83, 83, 83, 87, 87, 87, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 113, 113, 113, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 129, 129, 129, 134, 134, 134, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 141, 141, 141, 145, 145, 145, 149, 149, 149, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 123, 123, 123, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 98, 98, 98, 94, 94, 94, 90, 90, 90, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 89, 89, 89, 86, 86, 86, 82, 82, 82, 79, 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 87, 87, 87, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 102, 102, 102, 106, 106, 106, 110, 110, 110, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 108, 108, 108, 110, 110, 110, 115, 115, 115, 120, 120, 120, 124, 124, 124, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 108, 108, 108, 104, 104, 104, 99, 99, 99, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 91, 91, 91, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 94, 94, 94, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 88, 88, 88, 86, 86, 86, 83, 83, 83, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 80, 80, 80, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 91, 91, 91, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 109, 109, 109, 114, 114, 114, 119, 119, 119, 123, 123, 123, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 148, 148, 148, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 108, 108, 108, 102, 102, 102, 99, 99, 99, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 94, 94, 94, 90, 90, 90, 85, 85, 85, 81, 81, 81, 78, 78, 78, 77, 77, 77, 76, 76, 76, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 92, 92, 92, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 98, 98, 98, 96, 96, 96, 93, 93, 93, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 76, 76, 76, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 86, 86, 86, 90, 90, 90, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 91, 91, 87, 87, 87, 84, 84, 84, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 85, 85, 85, 89, 89, 89, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 91, 91, 91, 94, 94, 94, 98, 98, 98, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 109, 109, 109, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 150, 150, 150, 155, 155, 155, 158, 158, 158, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 113, 113, 113, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 98, 98, 98, 94, 94, 94, 89, 89, 89, 85, 85, 85, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 81, 81, 81, 83, 83, 83, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 76, 76, 76, 76, 76, 76, 78, 78, 78, 81, 81, 81, 81, 81, 81, 78, 78, 78, 75, 75, 75, 72, 72, 72, 71, 71, 71, 72, 72, 72, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 80, 80, 80, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 95, 95, 95, 100, 100, 100, 103, 103, 103, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 109, 109, 109, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 135, 135, 135, 140, 140, 140, 145, 145, 145, 150, 150, 150, 153, 153, 153, 157, 157, 157, 161, 161, 161, 164, 164, 164, 165, 165, 165, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 117, 117, 117, 112, 112, 112, 108, 108, 108, 107, 107, 107, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 81, 81, 81, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 90, 90, 90, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 85, 85, 85, 88, 88, 88, 91, 91, 91, 92, 92, 92, 91, 91, 91, 89, 89, 89, 86, 86, 86, 83, 83, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 76, 76, 76, 73, 73, 73, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 88, 88, 88, 90, 90, 90, 92, 92, 92, 93, 93, 93, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 96, 96, 96, 96, 96, 96, 93, 93, 93, 89, 89, 89, 85, 85, 85, 82, 82, 82, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 89, 89, 89, 92, 92, 92, 92, 92, 92, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 98, 98, 98, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 101, 101, 101, 104, 104, 104, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 150, 150, 150, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 125, 125, 125, 120, 120, 120, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 82, 82, 82, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 90, 90, 90, 95, 95, 95, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 91, 91, 91, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 69, 69, 69, 70, 70, 70, 72, 72, 72, 76, 76, 76, 80, 80, 80, 84, 84, 84, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 87, 87, 87, 88, 88, 88, 86, 86, 86, 83, 83, 83, 79, 79, 79, 76, 76, 76, 75, 75, 75, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 82, 82, 82, 86, 86, 86, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 92, 92, 92, 89, 89, 89, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 88, 88, 88, 89, 89, 89, 92, 92, 92, 96, 96, 96, 98, 98, 98, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 150, 150, 150, 154, 154, 154, 158, 158, 158, 160, 160, 160, 160, 160, 160, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 127, 127, 127, 122, 122, 122, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 109, 109, 109, 105, 105, 105, 101, 101, 101, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 86, 86, 86, 85, 85, 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 95, 95, 95, 100, 100, 100, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 107, 107, 107, 103, 103, 103, 99, 99, 99, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 84, 84, 84, 82, 82, 82, 80, 80, 80, 80, 80, 80, 82, 82, 82, 86, 86, 86, 91, 91, 91, 95, 95, 95, 95, 95, 95, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 79, 75, 75, 75, 72, 72, 72, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 70, 70, 70, 69, 69, 69, 70, 70, 70, 71, 71, 71, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 64, 64, 64, 68, 68, 68, 72, 72, 72, 76, 76, 76, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 79, 75, 75, 75, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 78, 78, 78, 83, 83, 83, 88, 88, 88, 91, 91, 91, 92, 92, 92, 92, 92, 92, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 74, 74, 74, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 80, 80, 80, 79, 79, 79, 77, 77, 77, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 82, 82, 82, 87, 87, 87, 90, 90, 90, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 92, 92, 92, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 102, 102, 102, 106, 106, 106, 110, 110, 110, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 112, 112, 112, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 96, 96, 96, 100, 100, 100, 105, 105, 105, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 87, 87, 87, 92, 92, 92, 96, 96, 96, 97, 97, 97, 96, 96, 96, 93, 93, 93, 91, 91, 91, 88, 88, 88, 86, 86, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 70, 70, 66, 66, 66, 62, 62, 62, 60, 60, 60, 62, 62, 62, 66, 66, 66, 70, 70, 70, 73, 73, 73, 75, 75, 75, 78, 78, 78, 81, 81, 81, 82, 82, 82, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 71, 71, 71, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 69, 69, 69, 71, 71, 71, 72, 72, 72, 71, 71, 71, 70, 70, 70, 71, 71, 71, 74, 74, 74, 80, 80, 80, 85, 85, 85, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 86, 86, 86, 85, 85, 85, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 78, 78, 78, 79, 79, 79, 83, 83, 83, 88, 88, 88, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 91, 91, 91, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 106, 106, 106, 111, 111, 111, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 140, 140, 140, 146, 146, 146, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 158, 158, 158, 146, 146, 146, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 129, 129, 129, 125, 125, 125, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 117, 117, 117, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 92, 92, 92, 96, 96, 96, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 91, 91, 91, 87, 87, 87, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 62, 62, 62, 61, 61, 61, 63, 63, 63, 67, 67, 67, 69, 69, 69, 71, 71, 71, 72, 72, 72, 75, 75, 75, 79, 79, 79, 80, 80, 80, 78, 78, 78, 74, 74, 74, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 59, 59, 59, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 67, 67, 67, 68, 68, 68, 72, 72, 72, 77, 77, 77, 82, 82, 82, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 82, 82, 82, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 79, 79, 79, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 80, 80, 80, 83, 83, 83, 88, 88, 88, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 102, 102, 102, 107, 107, 107, 112, 112, 112, 115, 115, 115, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 140, 140, 140, 145, 145, 145, 150, 150, 150, 155, 155, 155, 158, 158, 158, 158, 158, 158, 156, 156, 156, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 124, 124, 124, 119, 119, 119, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 64, 64, 64, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 73, 73, 73, 76, 76, 76, 77, 77, 77, 76, 76, 76, 72, 72, 72, 68, 68, 68, 64, 64, 64, 61, 61, 61, 58, 58, 58, 56, 56, 56, 56, 56, 56, 58, 58, 58, 61, 61, 61, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 69, 69, 69, 75, 75, 75, 80, 80, 80, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 82, 82, 82, 87, 87, 87, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 110, 110, 110, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 130, 130, 130, 133, 133, 133, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 84, 84, 84, 80, 80, 80, 77, 77, 77, 76, 76, 76, 76, 76, 76, 75, 75, 75, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 70, 70, 70, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 58, 58, 58, 60, 60, 60, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 68, 68, 68, 73, 73, 73, 78, 78, 78, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 101, 101, 101, 104, 104, 104, 109, 109, 109, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 153, 153, 153, 151, 151, 151, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 117, 117, 117, 121, 121, 121, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 85, 85, 85, 80, 80, 80, 77, 77, 77, 77, 77, 77, 78, 78, 78, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 67, 67, 67, 69, 69, 69, 71, 71, 71, 73, 73, 73, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 70, 70, 70, 67, 67, 67, 63, 63, 63, 60, 60, 60, 56, 56, 56, 53, 53, 53, 53, 53, 53, 55, 55, 55, 57, 57, 57, 59, 59, 59, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 76, 76, 76, 79, 79, 79, 81, 81, 81, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 88, 88, 88, 88, 88, 88, 86, 86, 86, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 95, 95, 95, 96, 96, 96, 99, 99, 99, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 149, 149, 149, 151, 151, 151, 152, 152, 152, 151, 151, 151, 148, 148, 148, 162, 162, 162, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 106, 106, 106, 110, 110, 110, 115, 115, 115, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 97, 97, 97, 94, 94, 94, 91, 91, 91, 86, 86, 86, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 73, 73, 73, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 66, 66, 66, 62, 62, 62, 58, 58, 58, 54, 54, 54, 52, 52, 52, 52, 52, 52, 53, 53, 53, 56, 56, 56, 58, 58, 58, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 70, 70, 70, 73, 73, 73, 77, 77, 77, 79, 79, 79, 82, 82, 82, 85, 85, 85, 85, 85, 85, 84, 84, 84, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 83, 83, 83, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 103, 103, 103, 101, 101, 101, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 110, 110, 110, 114, 114, 114, 117, 117, 117, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 139, 139, 139, 143, 143, 143, 147, 147, 147, 149, 149, 149, 150, 150, 150, 148, 148, 148, 146, 146, 146, 167, 167, 167, 165, 165, 165, 163, 163, 163, 159, 159, 159, 155, 155, 155, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 122, 122, 122, 118, 118, 118, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 106, 106, 106, 109, 109, 109, 113, 113, 113, 119, 119, 119, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 105, 105, 105, 100, 100, 100, 96, 96, 96, 92, 92, 92, 88, 88, 88, 84, 84, 84, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 68, 68, 68, 66, 66, 66, 63, 63, 63, 59, 59, 59, 54, 54, 54, 51, 51, 51, 49, 49, 49, 49, 49, 49, 51, 51, 51, 53, 53, 53, 56, 56, 56, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 74, 74, 74, 78, 78, 78, 82, 82, 82, 84, 84, 84, 85, 85, 85, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 145, 145, 145, 144, 144, 144, 172, 172, 172, 170, 170, 170, 168, 168, 168, 163, 163, 163, 159, 159, 159, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 144, 144, 144, 144, 144, 144, 142, 142, 142, 138, 138, 138, 133, 133, 133, 130, 130, 130, 127, 127, 127, 123, 123, 123, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 114, 114, 114, 110, 110, 110, 105, 105, 105, 99, 99, 99, 94, 94, 94, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 69, 69, 69, 66, 66, 66, 64, 64, 64, 63, 63, 63, 59, 59, 59, 54, 54, 54, 50, 50, 50, 47, 47, 47, 46, 46, 46, 47, 47, 47, 49, 49, 49, 53, 53, 53, 56, 56, 56, 59, 59, 59, 62, 62, 62, 63, 63, 63, 63, 63, 63, 64, 64, 64, 67, 67, 67, 73, 73, 73, 78, 78, 78, 81, 81, 81, 82, 82, 82, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 77, 77, 77, 79, 79, 79, 82, 82, 82, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 176, 176, 176, 175, 175, 175, 173, 173, 173, 168, 168, 168, 164, 164, 164, 161, 161, 161, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 143, 143, 143, 138, 138, 138, 133, 133, 133, 129, 129, 129, 126, 126, 126, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 115, 115, 115, 110, 110, 110, 104, 104, 104, 97, 97, 97, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 80, 80, 80, 77, 77, 77, 74, 74, 74, 72, 72, 72, 73, 73, 73, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 63, 63, 63, 62, 62, 62, 59, 59, 59, 55, 55, 55, 50, 50, 50, 47, 47, 47, 46, 46, 46, 46, 46, 46, 48, 48, 48, 52, 52, 52, 56, 56, 56, 58, 58, 58, 60, 60, 60, 60, 60, 60, 61, 61, 61, 63, 63, 63, 67, 67, 67, 73, 73, 73, 77, 77, 77, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 77, 77, 77, 76, 76, 76, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 103, 103, 103, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 177, 177, 177, 178, 178, 178, 177, 177, 177, 174, 174, 174, 170, 170, 170, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 155, 155, 155, 151, 151, 151, 148, 148, 148, 144, 144, 144, 139, 139, 139, 133, 133, 133, 129, 129, 129, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 136, 136, 136, 140, 140, 140, 143, 143, 143, 143, 143, 143, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 114, 114, 114, 108, 108, 108, 100, 100, 100, 93, 93, 93, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 74, 74, 74, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 69, 69, 69, 65, 65, 65, 62, 62, 62, 61, 61, 61, 60, 60, 60, 55, 55, 55, 51, 51, 51, 48, 48, 48, 47, 47, 47, 48, 48, 48, 50, 50, 50, 53, 53, 53, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 63, 63, 63, 68, 68, 68, 74, 74, 74, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 81, 81, 81, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 100, 100, 100, 103, 103, 103, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 129, 129, 129, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 165, 165, 165, 160, 160, 160, 154, 154, 154, 150, 150, 150, 146, 146, 146, 141, 141, 141, 136, 136, 136, 131, 131, 131, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 133, 133, 133, 138, 138, 138, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 124, 124, 124, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 110, 110, 110, 103, 103, 103, 96, 96, 96, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 83, 83, 83, 79, 79, 79, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 72, 72, 72, 69, 69, 69, 66, 66, 66, 63, 63, 63, 62, 62, 62, 60, 60, 60, 57, 57, 57, 52, 52, 52, 49, 49, 49, 49, 49, 49, 51, 51, 51, 53, 53, 53, 55, 55, 55, 57, 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, 59, 61, 61, 61, 65, 65, 65, 70, 70, 70, 75, 75, 75, 78, 78, 78, 80, 80, 80, 82, 82, 82, 83, 83, 83, 84, 84, 84, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 83, 83, 83, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 76, 76, 76, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 83, 83, 83, 87, 87, 87, 90, 90, 90, 92, 92, 92, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 100, 100, 100, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 114, 114, 114, 118, 118, 118, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 143, 143, 143, 181, 181, 181, 182, 182, 182, 184, 184, 184, 184, 184, 184, 181, 181, 181, 178, 178, 178, 175, 175, 175, 172, 172, 172, 168, 168, 168, 162, 162, 162, 157, 157, 157, 152, 152, 152, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 106, 106, 106, 101, 101, 101, 97, 97, 97, 94, 94, 94, 92, 92, 92, 89, 89, 89, 85, 85, 85, 81, 81, 81, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 55, 55, 55, 52, 52, 52, 52, 52, 52, 54, 54, 54, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 63, 63, 63, 68, 68, 68, 73, 73, 73, 77, 77, 77, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 82, 82, 82, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 82, 82, 82, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 109, 109, 109, 115, 115, 115, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 185, 185, 185, 186, 186, 186, 187, 187, 187, 186, 186, 186, 183, 183, 183, 179, 179, 179, 175, 175, 175, 173, 173, 173, 169, 169, 169, 164, 164, 164, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 130, 130, 130, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 118, 118, 118, 121, 121, 121, 126, 126, 126, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 103, 103, 103, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 82, 82, 82, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 78, 78, 78, 80, 80, 80, 81, 81, 81, 79, 79, 79, 77, 77, 77, 74, 74, 74, 71, 71, 71, 68, 68, 68, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 60, 60, 60, 58, 58, 58, 55, 55, 55, 56, 56, 56, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 67, 67, 67, 72, 72, 72, 77, 77, 77, 80, 80, 80, 81, 81, 81, 82, 82, 82, 86, 86, 86, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 91, 91, 91, 88, 88, 88, 84, 84, 84, 81, 81, 81, 78, 78, 78, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 79, 79, 79, 83, 83, 83, 87, 87, 87, 91, 91, 91, 96, 96, 96, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 100, 100, 100, 103, 103, 103, 108, 108, 108, 114, 114, 114, 120, 120, 120, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 188, 188, 188, 189, 189, 189, 189, 189, 189, 187, 187, 187, 183, 183, 183, 178, 178, 178, 174, 174, 174, 172, 172, 172, 169, 169, 169, 164, 164, 164, 158, 158, 158, 153, 153, 153, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 144, 144, 144, 147, 147, 147, 147, 147, 147, 144, 144, 144, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 107, 107, 107, 103, 103, 103, 99, 99, 99, 95, 95, 95, 89, 89, 89, 83, 83, 83, 79, 79, 79, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 77, 77, 77, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 66, 66, 66, 63, 63, 63, 61, 61, 61, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 60, 60, 60, 62, 62, 62, 63, 63, 63, 64, 64, 64, 67, 67, 67, 68, 68, 68, 69, 69, 69, 71, 71, 71, 76, 76, 76, 81, 81, 81, 84, 84, 84, 85, 85, 85, 85, 85, 85, 88, 88, 88, 92, 92, 92, 95, 95, 95, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 101, 101, 101, 99, 99, 99, 95, 95, 95, 93, 93, 93, 91, 91, 91, 88, 88, 88, 83, 83, 83, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 71, 71, 71, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 79, 79, 79, 83, 83, 83, 88, 88, 88, 94, 94, 94, 98, 98, 98, 99, 99, 99, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 114, 114, 114, 120, 120, 120, 126, 126, 126, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 189, 189, 189, 190, 190, 190, 189, 189, 189, 185, 185, 185, 180, 180, 180, 176, 176, 176, 173, 173, 173, 172, 172, 172, 169, 169, 169, 165, 165, 165, 159, 159, 159, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 128, 128, 128, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 122, 122, 122, 119, 119, 119, 114, 114, 114, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 76, 76, 76, 79, 79, 79, 81, 81, 81, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 66, 66, 66, 64, 64, 64, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 74, 74, 74, 74, 74, 74, 76, 76, 76, 80, 80, 80, 85, 85, 85, 88, 88, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 103, 103, 103, 101, 101, 101, 97, 97, 97, 95, 95, 95, 93, 93, 93, 90, 90, 90, 86, 86, 86, 81, 81, 81, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 72, 72, 72, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 81, 81, 81, 86, 86, 86, 91, 91, 91, 96, 96, 96, 98, 98, 98, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 107, 107, 107, 112, 112, 112, 117, 117, 117, 122, 122, 122, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 188, 188, 188, 189, 189, 189, 187, 187, 187, 183, 183, 183, 178, 178, 178, 174, 174, 174, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 151, 151, 151, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 141, 141, 141, 135, 135, 135, 130, 130, 130, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 122, 122, 122, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 95, 95, 95, 88, 88, 88, 82, 82, 82, 79, 79, 79, 78, 78, 78, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 78, 78, 78, 80, 80, 80, 82, 82, 82, 82, 82, 82, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 68, 68, 68, 71, 71, 71, 75, 75, 75, 77, 77, 77, 78, 78, 78, 80, 80, 80, 84, 84, 84, 88, 88, 88, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 87, 87, 87, 83, 83, 83, 79, 79, 79, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 72, 72, 72, 74, 74, 74, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 74, 74, 74, 79, 79, 79, 84, 84, 84, 90, 90, 90, 95, 95, 95, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 106, 106, 106, 110, 110, 110, 115, 115, 115, 121, 121, 121, 125, 125, 125, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 186, 186, 186, 188, 188, 188, 186, 186, 186, 181, 181, 181, 176, 176, 176, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 145, 145, 145, 146, 146, 146, 149, 149, 149, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 155, 155, 155, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 143, 143, 143, 137, 137, 137, 131, 131, 131, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 126, 126, 126, 121, 121, 121, 116, 116, 116, 111, 111, 111, 108, 108, 108, 104, 104, 104, 98, 98, 98, 91, 91, 91, 85, 85, 85, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 75, 75, 75, 74, 74, 74, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 75, 75, 75, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 87, 87, 87, 90, 90, 90, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 104, 104, 104, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 70, 70, 70, 69, 69, 69, 69, 69, 69, 71, 71, 71, 72, 72, 72, 71, 71, 71, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 69, 69, 69, 73, 73, 73, 78, 78, 78, 84, 84, 84, 90, 90, 90, 96, 96, 96, 99, 99, 99, 101, 101, 101, 100, 100, 100, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 109, 109, 109, 107, 107, 107, 108, 108, 108, 113, 113, 113, 119, 119, 119, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 138, 138, 138, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 184, 184, 184, 186, 186, 186, 184, 184, 184, 178, 178, 178, 173, 173, 173, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 148, 148, 148, 151, 151, 151, 156, 156, 156, 158, 158, 158, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 145, 145, 145, 139, 139, 139, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 120, 120, 120, 114, 114, 114, 108, 108, 108, 104, 104, 104, 100, 100, 100, 94, 94, 94, 88, 88, 88, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 76, 76, 76, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 79, 79, 79, 79, 79, 79, 81, 81, 81, 85, 85, 85, 89, 89, 89, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 82, 82, 82, 79, 79, 79, 77, 77, 77, 75, 75, 75, 71, 71, 71, 68, 68, 68, 67, 67, 67, 69, 69, 69, 70, 70, 70, 70, 70, 70, 67, 67, 67, 66, 66, 66, 65, 65, 65, 66, 66, 66, 67, 67, 67, 69, 69, 69, 72, 72, 72, 78, 78, 78, 84, 84, 84, 90, 90, 90, 96, 96, 96, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 136, 136, 136, 141, 141, 141, 144, 144, 144, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 182, 182, 182, 183, 183, 183, 180, 180, 180, 175, 175, 175, 169, 169, 169, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 159, 159, 159, 156, 156, 156, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 141, 141, 141, 136, 136, 136, 132, 132, 132, 130, 130, 130, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 122, 122, 122, 114, 114, 114, 108, 108, 108, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 87, 87, 87, 86, 86, 86, 84, 84, 84, 80, 80, 80, 76, 76, 76, 73, 73, 73, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 81, 81, 81, 82, 82, 82, 81, 81, 81, 80, 80, 80, 82, 82, 82, 86, 86, 86, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 100, 100, 100, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 73, 73, 73, 77, 77, 77, 83, 83, 83, 89, 89, 89, 95, 95, 95, 98, 98, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 99, 99, 99, 97, 97, 97, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 131, 131, 131, 137, 137, 137, 142, 142, 142, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 178, 178, 178, 178, 178, 178, 175, 175, 175, 171, 171, 171, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 143, 143, 143, 139, 139, 139, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 151, 151, 151, 150, 150, 150, 148, 148, 148, 143, 143, 143, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 127, 127, 127, 122, 122, 122, 115, 115, 115, 108, 108, 108, 103, 103, 103, 99, 99, 99, 96, 96, 96, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 74, 74, 74, 72, 72, 72, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 73, 73, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 71, 71, 71, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 84, 84, 84, 88, 88, 88, 92, 92, 92, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 88, 88, 88, 83, 83, 83, 79, 79, 79, 77, 77, 77, 75, 75, 75, 71, 71, 71, 67, 67, 67, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 66, 66, 64, 64, 64, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 70, 70, 70, 73, 73, 73, 77, 77, 77, 82, 82, 82, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 138, 138, 138, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 173, 173, 173, 172, 172, 172, 170, 170, 170, 166, 166, 166, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 165, 165, 165, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 147, 147, 147, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 71, 71, 71, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 85, 85, 85, 84, 84, 84, 85, 85, 85, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 89, 89, 89, 83, 83, 83, 79, 79, 79, 76, 76, 76, 74, 74, 74, 70, 70, 70, 65, 65, 65, 62, 62, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 77, 77, 77, 82, 82, 82, 87, 87, 87, 92, 92, 92, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 132, 132, 132, 138, 138, 138, 144, 144, 144, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 168, 168, 168, 166, 166, 166, 164, 164, 164, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 171, 171, 171, 168, 168, 168, 166, 166, 166, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 167, 167, 167, 162, 162, 162, 158, 158, 158, 155, 155, 155, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 144, 144, 144, 147, 147, 147, 151, 151, 151, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 87, 87, 87, 83, 83, 83, 79, 79, 79, 74, 74, 74, 71, 71, 71, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 73, 73, 71, 71, 71, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 105, 105, 105, 100, 100, 100, 97, 97, 97, 95, 95, 95, 90, 90, 90, 85, 85, 85, 79, 79, 79, 76, 76, 76, 73, 73, 73, 69, 69, 69, 63, 63, 63, 60, 60, 60, 59, 59, 59, 61, 61, 61, 63, 63, 63, 64, 64, 64, 63, 63, 63, 63, 63, 63, 66, 66, 66, 69, 69, 69, 72, 72, 72, 75, 75, 75, 79, 79, 79, 84, 84, 84, 89, 89, 89, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 122, 122, 122, 127, 127, 127, 133, 133, 133, 139, 139, 139, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 159, 159, 159, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 166, 166, 166, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 169, 169, 169, 165, 165, 165, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 152, 152, 152, 156, 156, 156, 158, 158, 158, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 85, 85, 85, 80, 80, 80, 74, 74, 74, 71, 71, 71, 70, 70, 70, 71, 71, 71, 73, 73, 73, 73, 73, 73, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 88, 88, 88, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 109, 109, 109, 104, 104, 104, 98, 98, 98, 96, 96, 96, 95, 95, 95, 92, 92, 92, 87, 87, 87, 81, 81, 81, 77, 77, 77, 73, 73, 73, 68, 68, 68, 63, 63, 63, 59, 59, 59, 58, 58, 58, 61, 61, 61, 64, 64, 64, 66, 66, 66, 67, 67, 67, 67, 67, 67, 69, 69, 69, 72, 72, 72, 75, 75, 75, 78, 78, 78, 82, 82, 82, 86, 86, 86, 91, 91, 91, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 121, 121, 121, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 135, 135, 135, 141, 141, 141, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 170, 170, 170, 172, 172, 172, 172, 172, 172, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 143, 143, 143, 140, 140, 140, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 152, 152, 152, 154, 154, 154, 157, 157, 157, 162, 162, 162, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 165, 165, 165, 161, 161, 161, 158, 158, 158, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 155, 155, 155, 151, 151, 151, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 124, 124, 124, 118, 118, 118, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 91, 91, 86, 86, 86, 80, 80, 80, 74, 74, 74, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 71, 71, 71, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 108, 108, 108, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 92, 92, 92, 88, 88, 88, 83, 83, 83, 78, 78, 78, 74, 74, 74, 70, 70, 70, 65, 65, 65, 60, 60, 60, 59, 59, 59, 62, 62, 62, 66, 66, 66, 69, 69, 69, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 87, 87, 87, 92, 92, 92, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 114, 114, 114, 118, 118, 118, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 127, 127, 127, 132, 132, 132, 138, 138, 138, 144, 144, 144, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 160, 160, 160, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 168, 168, 168, 171, 171, 171, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 150, 150, 150, 146, 146, 146, 142, 142, 142, 141, 141, 141, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 160, 160, 160, 164, 164, 164, 168, 168, 168, 170, 170, 170, 170, 170, 170, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 91, 91, 91, 86, 86, 86, 81, 81, 81, 76, 76, 76, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 74, 74, 74, 78, 78, 78, 83, 83, 83, 86, 86, 86, 88, 88, 88, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 106, 106, 106, 101, 101, 101, 96, 96, 96, 93, 93, 93, 91, 91, 91, 90, 90, 90, 87, 87, 87, 83, 83, 83, 78, 78, 78, 74, 74, 74, 71, 71, 71, 67, 67, 67, 63, 63, 63, 61, 61, 61, 64, 64, 64, 69, 69, 69, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 86, 86, 86, 90, 90, 90, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 131, 131, 131, 136, 136, 136, 142, 142, 142, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 166, 166, 166, 168, 168, 168, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 153, 153, 153, 148, 148, 148, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 160, 160, 160, 164, 164, 164, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 149, 149, 149, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 125, 125, 125, 122, 122, 122, 121, 121, 121, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 112, 112, 112, 108, 108, 108, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 80, 80, 80, 77, 77, 77, 75, 75, 75, 75, 75, 75, 77, 77, 77, 81, 81, 81, 86, 86, 86, 90, 90, 90, 92, 92, 92, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 83, 83, 83, 79, 79, 79, 75, 75, 75, 72, 72, 72, 69, 69, 69, 65, 65, 65, 63, 63, 63, 66, 66, 66, 71, 71, 71, 76, 76, 76, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 86, 86, 86, 89, 89, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 96, 96, 96, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 168, 168, 168, 171, 171, 171, 173, 173, 173, 172, 172, 172, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 135, 135, 135, 129, 129, 129, 124, 124, 124, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 87, 87, 87, 88, 88, 88, 86, 86, 86, 82, 82, 82, 79, 79, 79, 78, 78, 78, 80, 80, 80, 84, 84, 84, 88, 88, 88, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 84, 84, 84, 80, 80, 80, 77, 77, 77, 74, 74, 74, 70, 70, 70, 67, 67, 67, 65, 65, 65, 67, 67, 67, 73, 73, 73, 78, 78, 78, 82, 82, 82, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 91, 91, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 172, 172, 172, 173, 173, 173, 146, 146, 146, 150, 150, 150, 153, 153, 153, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 167, 167, 167, 168, 168, 168, 171, 171, 171, 172, 172, 172, 170, 170, 170, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 134, 134, 134, 128, 128, 128, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 93, 93, 93, 94, 94, 94, 92, 92, 92, 88, 88, 88, 84, 84, 84, 82, 82, 82, 83, 83, 83, 86, 86, 86, 90, 90, 90, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 98, 98, 98, 94, 94, 94, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 72, 72, 72, 68, 68, 68, 67, 67, 67, 70, 70, 70, 74, 74, 74, 79, 79, 79, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 162, 162, 162, 166, 166, 166, 170, 170, 170, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 148, 148, 148, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 169, 169, 169, 170, 170, 170, 168, 168, 168, 165, 165, 165, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 147, 147, 147, 143, 143, 143, 138, 138, 138, 131, 131, 131, 126, 126, 126, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 98, 98, 98, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 78, 78, 78, 75, 75, 75, 72, 72, 72, 72, 72, 72, 74, 74, 74, 77, 77, 77, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 140, 140, 140, 142, 142, 142, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 159, 159, 159, 163, 163, 163, 168, 168, 168, 172, 172, 172, 175, 175, 175, 176, 176, 176, 177, 177, 177, 179, 179, 179, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 160, 160, 160, 164, 164, 164, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 172, 172, 172, 170, 170, 170, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 156, 156, 156, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 163, 163, 163, 166, 166, 166, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 142, 142, 142, 136, 136, 136, 130, 130, 130, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 99, 99, 99, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 118, 118, 118, 120, 120, 120, 119, 119, 119, 116, 116, 116, 112, 112, 112, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, 81, 78, 78, 78, 77, 77, 77, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 131, 131, 131, 134, 134, 134, 137, 137, 137, 140, 140, 140, 141, 141, 141, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 172, 172, 172, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 179, 179, 179, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 158, 158, 158, 156, 156, 156, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 147, 147, 147, 142, 142, 142, 136, 136, 136, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 111, 111, 111, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 120, 120, 120, 118, 118, 118, 113, 113, 113, 109, 109, 109, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 103, 103, 103, 100, 100, 100, 96, 96, 96, 94, 94, 94, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 92, 92, 92, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 123, 123, 123, 128, 128, 128, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 159, 159, 159, 164, 164, 164, 168, 168, 168, 172, 172, 172, 176, 176, 176, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, 171, 171, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 169, 169, 169, 171, 171, 171, 171, 171, 171, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 156, 156, 156, 159, 159, 159, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 148, 148, 148, 149, 149, 149, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 101, 101, 101, 103, 103, 103, 107, 107, 107, 112, 112, 112, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 135, 135, 135, 139, 139, 139, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 153, 153, 153, 157, 157, 157, 162, 162, 162, 167, 167, 167, 170, 170, 170, 175, 175, 175, 179, 179, 179, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 171, 171, 171, 171, 171, 171, 169, 169, 169, 165, 165, 165, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 165, 165, 165, 162, 162, 162, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 146, 146, 146, 148, 148, 148, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 99, 99, 99, 100, 100, 100, 102, 102, 102, 106, 106, 106, 112, 112, 112, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 101, 101, 101, 96, 96, 96, 93, 93, 93, 92, 92, 92, 92, 92, 92, 90, 90, 90, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 152, 152, 152, 153, 153, 153, 156, 156, 156, 159, 159, 159, 164, 164, 164, 168, 168, 168, 171, 171, 171, 176, 176, 176, 181, 181, 181, 185, 185, 185, 187, 187, 187, 186, 186, 186, 186, 186, 186, 187, 187, 187, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 170, 170, 170, 170, 170, 170, 169, 169, 169, 168, 168, 168, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 162, 162, 162, 157, 157, 157, 153, 153, 153, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 106, 106, 106, 111, 111, 111, 117, 117, 117, 121, 121, 121, 122, 122, 122, 122, 122, 122, 119, 119, 119, 117, 117, 117, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 106, 106, 106, 101, 101, 101, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 89, 89, 89, 92, 92, 92, 95, 95, 95, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 157, 157, 157, 161, 161, 161, 166, 166, 166, 170, 170, 170, 174, 174, 174, 179, 179, 179, 185, 185, 185, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 157, 157, 157, 161, 161, 161, 167, 167, 167, 170, 170, 170, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 152, 152, 152, 147, 147, 147, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 112, 112, 112, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 106, 106, 106, 111, 111, 111, 116, 116, 116, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 106, 106, 106, 101, 101, 101, 98, 98, 98, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 90, 90, 90, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 148, 148, 148, 153, 153, 153, 155, 155, 155, 157, 157, 157, 160, 160, 160, 165, 165, 165, 170, 170, 170, 174, 174, 174, 178, 178, 178, 183, 183, 183, 188, 188, 188, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 141, 141, 141, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 170, 170, 170, 168, 168, 168, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 147, 147, 147, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 105, 105, 105, 106, 106, 106, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 111, 111, 111, 107, 107, 107, 102, 102, 102, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 93, 93, 93, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 96, 96, 96, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 104, 104, 104, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 126, 126, 126, 130, 130, 130, 134, 134, 134, 139, 139, 139, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 163, 163, 163, 168, 168, 168, 173, 173, 173, 177, 177, 177, 181, 181, 181, 185, 185, 185, 189, 189, 189, 191, 191, 191, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 140, 140, 140, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 147, 147, 147, 151, 151, 151, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 166, 166, 166, 164, 164, 164, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 142, 142, 142, 138, 138, 138, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 143, 143, 143, 146, 146, 146, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 119, 119, 119, 115, 115, 115, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 120, 120, 120, 117, 117, 117, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 108, 108, 108, 103, 103, 103, 101, 101, 101, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 177, 177, 177, 182, 182, 182, 185, 185, 185, 188, 188, 188, 190, 190, 190, 192, 192, 192, 194, 194, 194, 195, 195, 195, 195, 195, 195, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 171, 171, 171, 175, 175, 175, 180, 180, 180, 184, 184, 184, 186, 186, 186, 188, 188, 188, 191, 191, 191, 194, 194, 194, 196, 196, 196, 195, 195, 195, 141, 141, 141, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 157, 157, 157, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 153, 153, 153, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 110, 110, 110, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 144, 144, 144, 148, 148, 148, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 166, 166, 166, 168, 168, 168, 173, 173, 173, 178, 178, 178, 182, 182, 182, 185, 185, 185, 187, 187, 187, 190, 190, 190, 193, 193, 193, 194, 194, 194, 192, 192, 192, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 156, 156, 156, 161, 161, 161, 165, 165, 165, 167, 167, 167, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 160, 160, 160, 154, 154, 154, 147, 147, 147, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 138, 138, 138, 136, 136, 136, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 136, 136, 136, 131, 131, 131, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 106, 106, 106, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 149, 149, 149, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 171, 171, 171, 176, 176, 176, 180, 180, 180, 182, 182, 182, 184, 184, 184, 187, 187, 187, 189, 189, 189, 189, 189, 189, 187, 187, 187, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 157, 157, 157, 161, 161, 161, 166, 166, 166, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 161, 161, 161, 156, 156, 156, 148, 148, 148, 142, 142, 142, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 109, 109, 109, 108, 108, 108, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 123, 123, 123, 128, 128, 128, 131, 131, 131, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 135, 135, 135, 139, 139, 139, 143, 143, 143, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 174, 174, 174, 176, 176, 176, 178, 178, 178, 180, 180, 180, 182, 182, 182, 184, 184, 184, 184, 184, 184, 183, 183, 183, 145, 145, 145, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 150, 150, 150, 144, 144, 144, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 130, 130, 130, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 144, 144, 144, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 171, 171, 171, 172, 172, 172, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 182, 182, 182, 182, 182, 182, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 171, 171, 171, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 163, 163, 163, 159, 159, 159, 152, 152, 152, 146, 146, 146, 141, 141, 141, 136, 136, 136, 133, 133, 133, 131, 131, 131, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 119, 119, 119, 124, 124, 124, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 155, 155, 155, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 128, 128, 128, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 133, 133, 133, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, 171, 171, 173, 173, 173, 177, 177, 177, 180, 180, 180, 181, 181, 181, 182, 182, 182, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 148, 148, 148, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 174, 174, 174, 170, 170, 170, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 164, 164, 159, 159, 159, 154, 154, 154, 148, 148, 148, 143, 143, 143, 137, 137, 137, 133, 133, 133, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 116, 116, 116, 120, 120, 120, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 144, 144, 144, 149, 149, 149, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 144, 144, 144, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 145, 145, 145, 141, 141, 141, 136, 136, 136, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 131, 131, 131, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 132, 132, 132, 137, 137, 137, 144, 144, 144, 150, 150, 150, 156, 156, 156, 161, 161, 161, 164, 164, 164, 166, 166, 166, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 172, 172, 172, 175, 175, 175, 178, 178, 178, 179, 179, 179, 181, 181, 181, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 150, 150, 150, 157, 157, 157, 163, 163, 163, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 172, 172, 172, 169, 169, 169, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 163, 163, 163, 158, 158, 158, 153, 153, 153, 149, 149, 149, 144, 144, 144, 139, 139, 139, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 138, 138, 138, 143, 143, 143, 148, 148, 148, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 153, 153, 153, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 148, 148, 148, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 146, 146, 146, 141, 141, 141, 137, 137, 137, 135, 135, 135, 135, 135, 135, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 116, 116, 116, 111, 111, 111, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 131, 131, 131, 136, 136, 136, 141, 141, 141, 144, 144, 144, 146, 146, 146, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 129, 129, 129, 123, 123, 123, 118, 118, 118, 114, 114, 114, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 132, 132, 132, 137, 137, 137, 144, 144, 144, 150, 150, 150, 156, 156, 156, 160, 160, 160, 164, 164, 164, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 146, 146, 146, 147, 147, 147, 147, 147, 147, 149, 149, 149, 153, 153, 153, 160, 160, 160, 166, 166, 166, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 172, 172, 172, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 169, 169, 169, 165, 165, 165, 161, 161, 161, 156, 156, 156, 151, 151, 151, 148, 148, 148, 145, 145, 145, 141, 141, 141, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 151, 151, 151, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 142, 142, 142, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 149, 149, 149, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 114, 114, 114, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 126, 126, 126, 131, 131, 131, 137, 137, 137, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 149, 149, 149, 145, 145, 145, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 134, 134, 134, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 158, 158, 158, 162, 162, 162, 164, 164, 164, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 163, 163, 163, 168, 168, 168, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 163, 163, 163, 158, 158, 158, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 131, 131, 131, 135, 135, 135, 139, 139, 139, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 150, 150, 150, 147, 147, 147, 143, 143, 143, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 113, 113, 113, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 118, 118, 118, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 135, 135, 135, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 134, 134, 134, 129, 129, 129, 125, 125, 125, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 138, 138, 138, 141, 141, 141, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 164, 164, 164, 167, 167, 167, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 156, 156, 156, 157, 157, 157, 156, 156, 156, 156, 156, 156, 159, 159, 159, 164, 164, 164, 169, 169, 169, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 160, 160, 160, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 124, 124, 124, 117, 117, 117, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 126, 126, 126, 131, 131, 131, 138, 138, 138, 144, 144, 144, 149, 149, 149, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 159, 159, 159, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 167, 167, 167, 172, 172, 172, 177, 177, 177, 179, 179, 179, 179, 179, 179, 160, 160, 160, 160, 160, 160, 158, 158, 158, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 146, 146, 146, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 127, 127, 127, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 116, 116, 116, 120, 120, 120, 125, 125, 125, 130, 130, 130, 134, 134, 134, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 125, 125, 125, 118, 118, 118, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 123, 123, 123, 127, 127, 127, 132, 132, 132, 139, 139, 139, 145, 145, 145, 150, 150, 150, 153, 153, 153, 154, 154, 154, 153, 153, 153, 153, 153, 153, 155, 155, 155, 157, 157, 157, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 151, 151, 151, 155, 155, 155, 160, 160, 160, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 167, 167, 167, 173, 173, 173, 178, 178, 178, 181, 181, 181, 182, 182, 182, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 144, 144, 144, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 107, 107, 107, 103, 103, 103, 100, 100, 100, 99, 99, 99, 99, 99, 99, 102, 102, 102, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 119, 119, 119, 124, 124, 124, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 133, 133, 133, 127, 127, 127, 120, 120, 120, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 132, 132, 132, 138, 138, 138, 144, 144, 144, 148, 148, 148, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 163, 163, 163, 163, 163, 163, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 168, 168, 168, 173, 173, 173, 179, 179, 179, 182, 182, 182, 183, 183, 183, 163, 163, 163, 162, 162, 162, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 158, 158, 158, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 142, 142, 142, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 105, 105, 105, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 123, 123, 123, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 143, 143, 143, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 127, 127, 127, 121, 121, 121, 117, 117, 117, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 126, 126, 126, 130, 130, 130, 135, 135, 135, 141, 141, 141, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 156, 156, 156, 158, 158, 158, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 155, 155, 155, 160, 160, 160, 164, 164, 164, 165, 165, 165, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 173, 173, 173, 178, 178, 178, 181, 181, 181, 184, 184, 184, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 109, 109, 109, 110, 110, 110, 114, 114, 114, 119, 119, 119, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 147, 147, 147, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 137, 137, 137, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 153, 153, 153, 159, 159, 159, 164, 164, 164, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 171, 171, 171, 175, 175, 175, 178, 178, 178, 181, 181, 181, 184, 184, 184, 160, 160, 160, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 126, 126, 126, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 115, 115, 115, 119, 119, 119, 124, 124, 124, 127, 127, 127, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 135, 135, 135, 129, 129, 129, 125, 125, 125, 122, 122, 122, 120, 120, 120, 116, 116, 116, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 145, 145, 145, 142, 142, 142, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 152, 152, 152, 159, 159, 159, 164, 164, 164, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 177, 177, 177, 179, 179, 179, 181, 181, 181, 185, 185, 185, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 155, 155, 155, 151, 151, 151, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 120, 120, 120, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 140, 140, 140, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 143, 143, 143, 138, 138, 138, 133, 133, 133, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 141, 141, 141, 145, 145, 145, 148, 148, 148, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 151, 151, 151, 157, 157, 157, 163, 163, 163, 166, 166, 166, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 176, 176, 176, 179, 179, 179, 182, 182, 182, 183, 183, 183, 186, 186, 186, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 159, 159, 159, 155, 155, 155, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 135, 135, 135, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 133, 133, 133, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 155, 155, 155, 161, 161, 161, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 178, 178, 178, 182, 182, 182, 184, 184, 184, 186, 186, 186, 188, 188, 188, 156, 156, 156, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 98, 98, 98, 101, 101, 101, 106, 106, 106, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 137, 137, 137, 142, 142, 142, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 159, 159, 159, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 137, 137, 137, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 162, 162, 162, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 187, 187, 187, 189, 189, 189, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 130, 130, 130, 128, 128, 128, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 102, 102, 102, 106, 106, 106, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 132, 132, 132, 138, 138, 138, 145, 145, 145, 149, 149, 149, 152, 152, 152, 155, 155, 155, 159, 159, 159, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 132, 132, 132, 137, 137, 137, 141, 141, 141, 144, 144, 144, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 166, 166, 166, 169, 169, 169, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 178, 178, 178, 179, 179, 179, 181, 181, 181, 183, 183, 183, 185, 185, 185, 188, 188, 188, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 132, 132, 132, 128, 128, 128, 122, 122, 122, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 105, 105, 105, 103, 103, 103, 100, 100, 100, 100, 100, 100, 102, 102, 102, 106, 106, 106, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 129, 129, 129, 135, 135, 135, 143, 143, 143, 148, 148, 148, 152, 152, 152, 155, 155, 155, 159, 159, 159, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 126, 126, 126, 131, 131, 131, 136, 136, 136, 141, 141, 141, 145, 145, 145, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 180, 180, 180, 182, 182, 182, 185, 185, 185, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 134, 134, 134, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 158, 158, 158, 161, 161, 161, 162, 162, 162, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 142, 142, 142, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 121, 121, 121, 126, 126, 126, 132, 132, 132, 138, 138, 138, 144, 144, 144, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 179, 179, 179, 182, 182, 182, 145, 145, 145, 145, 145, 145, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 110, 110, 110, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 128, 128, 128, 133, 133, 133, 135, 135, 135, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 139, 139, 139, 143, 143, 143, 147, 147, 147, 152, 152, 152, 156, 156, 156, 159, 159, 159, 161, 161, 161, 159, 159, 159, 156, 156, 156, 151, 151, 151, 146, 146, 146, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 120, 120, 120, 126, 126, 126, 133, 133, 133, 140, 140, 140, 145, 145, 145, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 148, 148, 148, 150, 150, 150, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 180, 180, 180, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 117, 117, 117, 114, 114, 114, 112, 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 135, 135, 135, 136, 136, 136, 134, 134, 134, 130, 130, 130, 126, 126, 126, 122, 122, 122, 121, 121, 121, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 121, 121, 121, 126, 126, 126, 133, 133, 133, 140, 140, 140, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 157, 157, 157, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 153, 153, 153, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 161, 161, 161, 163, 163, 163, 167, 167, 167, 170, 170, 170, 173, 173, 173, 175, 175, 175, 179, 179, 179, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 104, 104, 104, 105, 105, 105, 107, 107, 107, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 121, 121, 121, 126, 126, 126, 131, 131, 131, 134, 134, 134, 135, 135, 135, 133, 133, 133, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 142, 142, 142, 140, 140, 140, 135, 135, 135, 130, 130, 130, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 122, 122, 122, 127, 127, 127, 134, 134, 134, 141, 141, 141, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 152, 152, 152, 153, 153, 153, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 178, 178, 178, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 110, 110, 110, 114, 114, 114, 116, 116, 116, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 119, 119, 119, 124, 124, 124, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 152, 152, 152, 154, 154, 154, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 132, 132, 132, 127, 127, 127, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 128, 128, 128, 134, 134, 134, 141, 141, 141, 147, 147, 147, 151, 151, 151, 155, 155, 155, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 177, 177, 177, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 105, 105, 105, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 119, 119, 119, 123, 123, 123, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 151, 151, 151, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 130, 130, 130, 125, 125, 125, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 130, 130, 130, 135, 135, 135, 141, 141, 141, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 154, 154, 154, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 156, 156, 156, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 177, 177, 177, 137, 137, 137, 137, 137, 137, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 122, 122, 122, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 104, 104, 104, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 95, 95, 95, 100, 100, 100, 106, 106, 106, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 113, 113, 113, 115, 115, 115, 119, 119, 119, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 135, 135, 135, 140, 140, 140, 145, 145, 145, 150, 150, 150, 154, 154, 154, 158, 158, 158, 163, 163, 163, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 149, 149, 149, 152, 152, 152, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 153, 153, 153, 148, 148, 148, 145, 145, 145, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 155, 155, 155, 159, 159, 159, 161, 161, 161, 164, 164, 164, 167, 167, 167, 171, 171, 171, 175, 175, 175, 138, 138, 138, 138, 138, 138, 135, 135, 135, 132, 132, 132, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 94, 94, 94, 90, 90, 90, 88, 88, 88, 88, 88, 88, 91, 91, 91, 96, 96, 96, 102, 102, 102, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 116, 116, 116, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 138, 138, 138, 143, 143, 143, 147, 147, 147, 152, 152, 152, 157, 157, 157, 163, 163, 163, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 161, 161, 161, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 151, 151, 151, 152, 152, 152, 151, 151, 151, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 153, 153, 153, 148, 148, 148, 145, 145, 145, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 168, 168, 168, 173, 173, 173, 138, 138, 138, 138, 138, 138, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 96, 96, 96, 92, 92, 92, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 85, 85, 85, 88, 88, 88, 93, 93, 93, 98, 98, 98, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 111, 111, 111, 108, 108, 108, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 123, 123, 123, 126, 126, 126, 131, 131, 131, 135, 135, 135, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 135, 135, 135, 140, 140, 140, 145, 145, 145, 150, 150, 150, 156, 156, 156, 162, 162, 162, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 164, 164, 164, 170, 170, 170, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 96, 96, 96, 91, 91, 91, 87, 87, 87, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 85, 85, 85, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 113, 113, 113, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 116, 116, 116, 113, 113, 113, 109, 109, 109, 109, 109, 109, 112, 112, 112, 117, 117, 117, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 132, 132, 132, 136, 136, 136, 141, 141, 141, 147, 147, 147, 153, 153, 153, 158, 158, 158, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 153, 153, 153, 156, 156, 156, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 166, 166, 166, 138, 138, 138, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 99, 99, 99, 94, 94, 94, 89, 89, 89, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 77, 77, 77, 75, 75, 75, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 81, 81, 81, 86, 86, 86, 91, 91, 91, 96, 96, 96, 99, 99, 99, 104, 104, 104, 109, 109, 109, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 144, 144, 144, 149, 149, 149, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 158, 158, 158, 162, 162, 162, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 101, 101, 101, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 81, 81, 81, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 79, 84, 84, 84, 91, 91, 91, 96, 96, 96, 100, 100, 100, 104, 104, 104, 109, 109, 109, 113, 113, 113, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 126, 126, 126, 128, 128, 128, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 136, 136, 136, 140, 140, 140, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 127, 127, 127, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 133, 133, 133, 137, 137, 137, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 138, 138, 138, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 159, 159, 159, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 111, 111, 111, 106, 106, 106, 102, 102, 102, 98, 98, 98, 93, 93, 93, 89, 89, 89, 84, 84, 84, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 77, 77, 77, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 79, 84, 84, 84, 91, 91, 91, 98, 98, 98, 102, 102, 102, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 122, 122, 122, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 115, 115, 115, 116, 116, 116, 120, 120, 120, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 161, 161, 161, 158, 158, 158, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 123, 123, 123, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 158, 158, 158, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 115, 115, 115, 109, 109, 109, 104, 104, 104, 99, 99, 99, 95, 95, 95, 90, 90, 90, 85, 85, 85, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 74, 74, 74, 77, 77, 77, 80, 80, 80, 81, 81, 81, 80, 80, 80, 81, 81, 81, 85, 85, 85, 92, 92, 92, 100, 100, 100, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 122, 122, 122, 120, 120, 120, 115, 115, 115, 112, 112, 112, 108, 108, 108, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 94, 94, 94, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 115, 115, 115, 119, 119, 119, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 154, 154, 154, 158, 158, 158, 160, 160, 160, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 137, 137, 137, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 117, 117, 117, 114, 114, 114, 109, 109, 109, 103, 103, 103, 98, 98, 98, 94, 94, 94, 88, 88, 88, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 75, 75, 75, 73, 73, 73, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 67, 67, 67, 71, 71, 71, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 83, 83, 83, 84, 84, 84, 88, 88, 88, 94, 94, 94, 102, 102, 102, 107, 107, 107, 110, 110, 110, 113, 113, 113, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 108, 108, 108, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 90, 90, 90, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 90, 90, 90, 95, 95, 95, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 119, 119, 119, 124, 124, 124, 129, 129, 129, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 150, 150, 150, 154, 154, 154, 157, 157, 157, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 134, 134, 134, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 125, 125, 125, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 143, 143, 143, 148, 148, 148, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 122, 122, 122, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 95, 95, 95, 90, 90, 90, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 69, 68, 68, 68, 66, 66, 66, 67, 67, 67, 69, 69, 69, 73, 73, 73, 76, 76, 76, 79, 79, 79, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 97, 97, 97, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 111, 111, 111, 109, 109, 109, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 88, 88, 88, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 90, 90, 90, 95, 95, 95, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 119, 119, 119, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 156, 156, 156, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 126, 126, 126, 131, 131, 131, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 139, 139, 139, 144, 144, 144, 149, 149, 149, 152, 152, 152, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 121, 121, 121, 119, 119, 119, 117, 117, 117, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 96, 96, 96, 91, 91, 91, 85, 85, 85, 80, 80, 80, 76, 76, 76, 73, 73, 73, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 69, 69, 69, 71, 71, 71, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 89, 89, 89, 92, 92, 92, 94, 94, 94, 96, 96, 96, 100, 100, 100, 105, 105, 105, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 106, 106, 106, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 88, 88, 88, 86, 86, 86, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, 84, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 90, 90, 90, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 118, 118, 118, 122, 122, 122, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 126, 126, 126, 131, 131, 131, 136, 136, 136, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 138, 138, 138, 143, 143, 143, 149, 149, 149, 152, 152, 152, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 161, 161, 161, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 152, 152, 152, 151, 151, 151, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 99, 99, 99, 95, 95, 95, 90, 90, 90, 84, 84, 84, 79, 79, 79, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 81, 81, 81, 86, 86, 86, 92, 92, 92, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 106, 106, 106, 110, 110, 110, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 114, 114, 114, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 86, 86, 86, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 85, 85, 85, 85, 85, 85, 88, 88, 88, 93, 93, 93, 98, 98, 98, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 152, 152, 152, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 158, 158, 158, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 97, 97, 97, 93, 93, 93, 88, 88, 88, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 69, 69, 69, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 73, 73, 73, 74, 74, 74, 75, 75, 75, 77, 77, 77, 79, 79, 79, 83, 83, 83, 89, 89, 89, 96, 96, 96, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 82, 82, 82, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 129, 129, 129, 134, 134, 134, 138, 138, 138, 140, 140, 140, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 96, 96, 96, 92, 92, 92, 88, 88, 88, 83, 83, 83, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 85, 85, 85, 92, 92, 92, 98, 98, 98, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 124, 124, 124, 128, 128, 128, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 117, 117, 117, 115, 115, 115, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 111, 111, 111, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 91, 91, 91, 97, 97, 97, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 156, 156, 156, 157, 157, 157, 155, 155, 155, 152, 152, 152, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 83, 83, 83, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 82, 82, 82, 87, 87, 87, 94, 94, 94, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 116, 116, 116, 119, 119, 119, 124, 124, 124, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 126, 126, 126, 121, 121, 121, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 86, 86, 86, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 89, 89, 89, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 140, 140, 140, 135, 135, 135, 131, 131, 131, 129, 129, 129, 129, 129, 129, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 82, 82, 82, 78, 78, 78, 75, 75, 75, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 83, 83, 83, 88, 88, 88, 93, 93, 93, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 123, 123, 123, 129, 129, 129, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 120, 120, 120, 113, 113, 113, 107, 107, 107, 103, 103, 103, 102, 102, 102, 99, 99, 99, 95, 95, 95, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 98, 98, 98, 103, 103, 103, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 102, 102, 102, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 127, 127, 127, 127, 127, 127, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 99, 99, 99, 95, 95, 95, 91, 91, 91, 89, 89, 89, 88, 88, 88, 85, 85, 85, 81, 81, 81, 77, 77, 77, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 84, 84, 84, 83, 83, 83, 84, 84, 84, 88, 88, 88, 92, 92, 92, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 118, 118, 118, 124, 124, 124, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 119, 119, 119, 112, 112, 112, 106, 106, 106, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 81, 81, 81, 82, 82, 82, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 92, 92, 92, 97, 97, 97, 102, 102, 102, 106, 106, 106, 107, 107, 107, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 108, 108, 108, 108, 108, 108, 110, 110, 110, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 92, 92, 92, 88, 88, 88, 83, 83, 83, 79, 79, 79, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 84, 84, 84, 86, 86, 86, 90, 90, 90, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 123, 123, 123, 127, 127, 127, 131, 131, 131, 131, 131, 131, 127, 127, 127, 123, 123, 123, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 123, 123, 123, 117, 117, 117, 111, 111, 111, 106, 106, 106, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 85, 85, 85, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 87, 87, 87, 91, 91, 91, 97, 97, 97, 102, 102, 102, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 126, 126, 126, 123, 123, 123, 107, 107, 107, 107, 107, 107, 109, 109, 109, 109, 109, 109, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 95, 95, 95, 91, 91, 91, 86, 86, 86, 82, 82, 82, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 89, 89, 89, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 122, 122, 122, 127, 127, 127, 130, 130, 130, 129, 129, 129, 126, 126, 126, 121, 121, 121, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 121, 121, 121, 116, 116, 116, 111, 111, 111, 106, 106, 106, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 91, 91, 91, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 84, 84, 84, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 81, 81, 81, 83, 83, 83, 86, 86, 86, 90, 90, 90, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 111, 111, 111, 115, 115, 115, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 131, 131, 131, 126, 126, 126, 121, 121, 121, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 94, 94, 94, 89, 89, 89, 84, 84, 84, 81, 81, 81, 81, 81, 81, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 93, 93, 93, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 128, 128, 128, 128, 128, 128, 124, 124, 124, 119, 119, 119, 117, 117, 117, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 120, 120, 120, 115, 115, 115, 110, 110, 110, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 86, 86, 86, 81, 81, 81, 76, 76, 76, 72, 72, 72, 71, 71, 71, 71, 71, 71, 70, 70, 70, 69, 69, 69, 68, 68, 68, 69, 69, 69, 72, 72, 72, 74, 74, 74, 77, 77, 77, 80, 80, 80, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 97, 97, 97, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 132, 132, 132, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 123, 123, 123, 118, 118, 118, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 98, 98, 98, 94, 94, 94, 90, 90, 90, 86, 86, 86, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 90, 90, 90, 92, 92, 92, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 123, 123, 123, 118, 118, 118, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 84, 84, 84, 84, 84, 84, 83, 83, 83, 78, 78, 78, 72, 72, 72, 68, 68, 68, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 75, 75, 75, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 94, 94, 94, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 125, 125, 125, 120, 120, 120, 116, 116, 116, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 121, 121, 121, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 108, 108, 108, 111, 111, 111, 113, 113, 113, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 113, 113, 113, 107, 107, 107, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 89, 89, 89, 86, 86, 86, 83, 83, 83, 81, 81, 81, 80, 80, 80, 79, 79, 79, 75, 75, 75, 69, 69, 69, 64, 64, 64, 63, 63, 63, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 69, 69, 69, 70, 70, 70, 73, 73, 73, 76, 76, 76, 79, 79, 79, 81, 81, 81, 82, 82, 82, 86, 86, 86, 91, 91, 91, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 91, 91, 91, 94, 94, 94, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 117, 117, 117, 122, 122, 122, 125, 125, 125, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 103, 103, 103, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 91, 91, 91, 91, 91, 91, 92, 92, 92, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 105, 105, 105, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 111, 111, 111, 108, 108, 108, 105, 105, 105, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 111, 111, 111, 105, 105, 105, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 75, 75, 75, 72, 72, 72, 67, 67, 67, 62, 62, 62, 61, 61, 61, 63, 63, 63, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 72, 72, 72, 76, 76, 76, 79, 79, 79, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 105, 105, 105, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100, 100, 97, 97, 97, 93, 93, 93, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 106, 106, 106, 103, 103, 103, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 96, 96, 96, 92, 92, 92, 87, 87, 87, 84, 84, 84, 83, 83, 83, 84, 84, 84, 84, 84, 84, 86, 86, 86, 89, 89, 89, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 107, 107, 107, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 113, 113, 113, 109, 109, 109, 104, 104, 104, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 74, 74, 74, 73, 73, 73, 70, 70, 70, 66, 66, 66, 62, 62, 62, 61, 61, 61, 63, 63, 63, 66, 66, 66, 69, 69, 69, 71, 71, 71, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 107, 107, 107, 104, 104, 104, 101, 101, 101, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 94, 94, 94, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 109, 109, 109, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 119, 119, 119, 114, 114, 114, 111, 111, 111, 114, 114, 114, 112, 112, 112, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 97, 97, 97, 92, 92, 92, 87, 87, 87, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 89, 89, 89, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 94, 94, 94, 99, 99, 99, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 108, 108, 108, 103, 103, 103, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 67, 67, 67, 63, 63, 63, 61, 61, 61, 63, 63, 63, 66, 66, 66, 70, 70, 70, 74, 74, 74, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 114, 114, 114, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 97, 97, 97, 92, 92, 92, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 83, 83, 83, 85, 85, 85, 89, 89, 89, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 89, 89, 89, 91, 91, 91, 95, 95, 95, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 105, 105, 105, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 102, 102, 102, 97, 97, 97, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 74, 74, 74, 72, 72, 72, 71, 71, 71, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 63, 63, 63, 67, 67, 67, 71, 71, 71, 75, 75, 75, 78, 78, 78, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 86, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 103, 103, 103, 98, 98, 98, 92, 92, 92, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 85, 85, 85, 88, 88, 88, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 91, 91, 91, 93, 93, 93, 95, 95, 95, 96, 96, 96, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 106, 106, 106, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 101, 101, 101, 96, 96, 96, 90, 90, 90, 84, 84, 84, 79, 79, 79, 77, 77, 77, 77, 77, 77, 76, 76, 76, 74, 74, 74, 71, 71, 71, 71, 71, 71, 71, 71, 71, 70, 70, 70, 67, 67, 67, 65, 65, 65, 65, 65, 65, 68, 68, 68, 72, 72, 72, 75, 75, 75, 79, 79, 79, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 83, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 108, 108, 108, 103, 103, 103, 97, 97, 97, 91, 91, 91, 88, 88, 88, 87, 87, 87, 85, 85, 85, 82, 82, 82, 81, 81, 81, 82, 82, 82, 86, 86, 86, 88, 88, 88, 88, 88, 88, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 88, 88, 88, 90, 90, 90, 92, 92, 92, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 106, 106, 106, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 100, 100, 100, 94, 94, 94, 88, 88, 88, 81, 81, 81, 77, 77, 77, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 71, 71, 71, 68, 68, 68, 68, 68, 68, 70, 70, 70, 74, 74, 74, 77, 77, 77, 80, 80, 80, 84, 84, 84, 87, 87, 87, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 100, 100, 100, 104, 104, 104, 108, 108, 108, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 114, 114, 114, 110, 110, 110, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 102, 102, 102, 96, 96, 96, 90, 90, 90, 86, 86, 86, 85, 85, 85, 84, 84, 84, 81, 81, 81, 79, 79, 79, 80, 80, 80, 84, 84, 84, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 84, 84, 84, 82, 82, 82, 82, 82, 82, 83, 83, 83, 86, 86, 86, 89, 89, 89, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 105, 105, 105, 99, 99, 99, 93, 93, 93, 86, 86, 86, 80, 80, 80, 76, 76, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 72, 72, 73, 73, 73, 77, 77, 77, 81, 81, 81, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 99, 99, 99, 102, 102, 102, 103, 103, 103, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 95, 95, 95, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 106, 106, 106, 111, 111, 111, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 100, 100, 100, 94, 94, 94, 88, 88, 88, 85, 85, 85, 84, 84, 84, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 84, 84, 84, 85, 85, 85, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 120, 120, 120, 117, 117, 117, 112, 112, 112, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 76, 76, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 77, 77, 77, 79, 79, 79, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 81, 81, 81, 85, 85, 85, 88, 88, 88, 91, 91, 91, 95, 95, 95, 99, 99, 99, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 106, 106, 106, 103, 103, 103, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 101, 101, 101, 99, 99, 99, 97, 97, 97, 94, 94, 94, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 82, 82, 82, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 107, 107, 107, 113, 113, 113, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 114, 114, 114, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 108, 108, 108, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 97, 97, 97, 92, 92, 92, 88, 88, 88, 85, 85, 85, 84, 84, 84, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 85, 85, 85, 84, 84, 84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 80, 80, 80, 83, 83, 83, 87, 87, 87, 91, 91, 91, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 113, 113, 113, 106, 106, 106, 99, 99, 99, 92, 92, 92, 85, 85, 85, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 101, 101, 101, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 115, 115, 115, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 79, 79, 79, 82, 82, 82, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 114, 114, 114, 108, 108, 108, 101, 101, 101, 94, 94, 94, 87, 87, 87, 82, 82, 82, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 86, 86, 86, 86, 86, 86, 84, 84, 84, 84, 84, 84, 86, 86, 86, 90, 90, 90, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 101, 101, 101, 97, 97, 97, 94, 94, 94, 89, 89, 89, 85, 85, 85, 80, 80, 80, 78, 78, 78, 78, 78, 78, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 81, 81, 81, 84, 84, 84, 86, 86, 86, 89, 89, 89, 92, 92, 92, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 93, 93, 93, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 116, 116, 116, 116, 116, 116, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 93, 93, 93, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77, 77, 77, 81, 81, 81, 86, 86, 86, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 103, 103, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 94, 94, 94, 96, 96, 96, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 97, 97, 97, 90, 90, 90, 84, 84, 84, 81, 81, 81, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 86, 88, 88, 88, 93, 93, 93, 97, 97, 97, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 98, 98, 98, 96, 96, 96, 96, 96, 96, 99, 99, 99, 102, 102, 102, 105, 105, 105, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 81, 81, 81, 82, 82, 82, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 86, 86, 86, 90, 90, 90, 93, 93, 93, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 111, 111, 111, 113, 113, 113, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 101, 101, 101, 97, 97, 97, 93, 93, 93, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 89, 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, 87, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 75, 75, 75, 79, 79, 79, 84, 84, 84, 89, 89, 89, 93, 93, 93, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 110, 110, 110, 114, 114, 114, 119, 119, 119, 123, 123, 123, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 105, 105, 105, 99, 99, 99, 92, 92, 92, 87, 87, 87, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 87, 87, 87, 90, 90, 90, 95, 95, 95, 100, 100, 100, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 104, 104, 104, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 84, 84, 84, 86, 86, 86, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 118, 118, 118, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 105, 105, 105, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 73, 73, 73, 77, 77, 77, 83, 83, 83, 88, 88, 88, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 99, 99, 99, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 111, 111, 111, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 109, 109, 109, 105, 105, 105, 101, 101, 101, 95, 95, 95, 90, 90, 90, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 82, 82, 82, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 93, 93, 93, 98, 98, 98, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 112, 112, 112, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 100, 100, 100, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 99, 99, 99, 94, 94, 94, 89, 89, 89, 86, 86, 86, 87, 87, 87, 89, 89, 89, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 119, 119, 119, 114, 114, 114, 109, 109, 109, 106, 106, 106, 102, 102, 102, 97, 97, 97, 93, 93, 93, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 91, 91, 91, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 102, 102, 102, 114, 114, 114, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 94, 94, 94, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 89, 89, 89, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 74, 74, 74, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 72, 72, 72, 76, 76, 76, 82, 82, 82, 87, 87, 87, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 115, 115, 115, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 131, 131, 131, 135, 135, 135, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 106, 106, 106, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 84, 84, 84, 84, 84, 84, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 97, 97, 97, 101, 101, 101, 106, 106, 106, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 105, 105, 105, 101, 101, 101, 96, 96, 96, 93, 93, 93, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 120, 120, 120, 116, 116, 116, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 94, 94, 94, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 93, 93, 93, 93, 93, 93, 95, 95, 95, 99, 99, 99, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 91, 91, 91, 87, 87, 87, 82, 82, 82, 77, 77, 77, 74, 74, 74, 74, 74, 74, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 81, 81, 81, 87, 87, 87, 90, 90, 90, 92, 92, 92, 94, 94, 94, 98, 98, 98, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 102, 102, 102, 106, 106, 106, 112, 112, 112, 118, 118, 118, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 113, 113, 113, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 91, 91, 91, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 108, 108, 108, 112, 112, 112, 117, 117, 117, 122, 122, 122, 124, 124, 124, 124, 124, 124, 122, 122, 122, 118, 118, 118, 113, 113, 113, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 103, 103, 103, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 91, 91, 91, 89, 89, 89, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 98, 98, 98, 103, 103, 103, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 99, 99, 99, 93, 93, 93, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 96, 96, 96, 99, 99, 99, 106, 106, 106, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 88, 88, 88, 83, 83, 83, 79, 79, 79, 77, 77, 77, 77, 77, 77, 78, 78, 78, 77, 77, 77, 76, 76, 76, 74, 74, 74, 74, 74, 74, 75, 75, 75, 78, 78, 78, 82, 82, 82, 87, 87, 87, 90, 90, 90, 91, 91, 91, 94, 94, 94, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 107, 107, 107, 113, 113, 113, 118, 118, 118, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 121, 121, 121, 115, 115, 115, 109, 109, 109, 103, 103, 103, 100, 100, 100, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 111, 111, 111, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 90, 90, 90, 90, 90, 92, 92, 92, 96, 96, 96, 101, 101, 101, 107, 107, 107, 110, 110, 110, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 99, 99, 99, 93, 93, 93, 88, 88, 88, 85, 85, 85, 84, 84, 84, 82, 82, 82, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 102, 102, 102, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 103, 103, 103, 105, 105, 105, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 105, 105, 105, 107, 107, 107, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 115, 115, 115, 110, 110, 110, 104, 104, 104, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 113, 113, 113, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 99, 99, 99, 105, 105, 105, 110, 110, 110, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 99, 99, 99, 93, 93, 93, 87, 87, 87, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 81, 81, 81, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 98, 98, 98, 101, 101, 101, 105, 105, 105, 101, 101, 101, 100, 100, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 127, 127, 127, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 108, 108, 108, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 97, 97, 97, 102, 102, 102, 106, 106, 106, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 103, 103, 103, 98, 98, 98, 92, 92, 92, 86, 86, 86, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 127, 127, 127, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 109, 109, 109, 114, 114, 114, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 99, 99, 99, 102, 102, 102, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 97, 97, 97, 91, 91, 91, 86, 86, 86, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 82, 82, 82, 87, 87, 87, 91, 91, 91, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 100, 100, 100, 97, 97, 97, 97, 97, 97, 99, 99, 99, 102, 102, 102, 102, 102, 102, 101, 101, 101, 98, 98, 98, 97, 97, 97, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 133, 133, 133, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 118, 118, 118, 119, 119, 119, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 106, 106, 106, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 95, 95, 95, 91, 91, 91, 85, 85, 85, 81, 81, 81, 81, 81, 81, 82, 82, 82, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 81, 81, 81, 86, 86, 86, 91, 91, 91, 95, 95, 95, 96, 96, 96, 97, 97, 97, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 111, 111, 111, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 102, 102, 102, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 132, 132, 132, 138, 138, 138, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 126, 126, 126, 121, 121, 121, 116, 116, 116, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 123, 123, 123, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 107, 107, 107, 110, 110, 110, 115, 115, 115, 118, 118, 118, 120, 120, 120, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 90, 90, 90, 85, 85, 85, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 81, 81, 81, 86, 86, 86, 91, 91, 91, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 105, 105, 105, 108, 108, 108, 112, 112, 112, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 110, 110, 110, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 138, 138, 138, 144, 144, 144, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 123, 123, 123, 116, 116, 116, 109, 109, 109, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 123, 123, 123, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 101, 101, 101, 105, 105, 105, 111, 111, 111, 114, 114, 114, 115, 115, 115, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 90, 90, 90, 86, 86, 86, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 85, 85, 85, 91, 91, 91, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 109, 109, 109, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 138, 138, 138, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 122, 122, 122, 115, 115, 115, 109, 109, 109, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 101, 101, 101, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 101, 101, 101, 101, 101, 101, 103, 103, 103, 107, 107, 107, 111, 111, 111, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 116, 116, 116, 112, 112, 112, 110, 110, 110, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 87, 87, 87, 84, 84, 84, 83, 83, 83, 84, 84, 84, 86, 86, 86, 87, 87, 87, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 90, 90, 90, 95, 95, 95, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 108, 108, 108, 112, 112, 112, 116, 116, 116, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 112, 112, 112, 117, 117, 117, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 141, 141, 141, 138, 138, 138, 136, 136, 136, 132, 132, 132, 128, 128, 128, 121, 121, 121, 115, 115, 115, 110, 110, 110, 107, 107, 107, 107, 107, 107, 106, 106, 106, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 108, 108, 108, 113, 113, 113, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 140, 140, 140, 138, 138, 138, 134, 134, 134, 129, 129, 129, 126, 126, 126, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 114, 114, 114, 110, 110, 110, 105, 105, 105, 102, 102, 102, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 83, 83, 83, 88, 88, 88, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 111, 111, 111, 116, 116, 116, 121, 121, 121, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 132, 132, 132, 127, 127, 127, 121, 121, 121, 115, 115, 115, 112, 112, 112, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 108, 108, 108, 111, 111, 111, 116, 116, 116, 119, 119, 119, 119, 119, 119, 121, 121, 121, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 127, 127, 127, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 100, 100, 100, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 86, 86, 86, 82, 82, 82, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 88, 88, 88, 94, 94, 94, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 136, 136, 136, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 134, 134, 134, 137, 137, 137, 141, 141, 141, 144, 144, 144, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 128, 128, 128, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 94, 94, 94, 91, 91, 91, 89, 89, 89, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 89, 89, 89, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 79, 79, 79, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 83, 83, 83, 88, 88, 88, 94, 94, 94, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 123, 123, 123, 126, 126, 126, 127, 127, 127, 125, 125, 125, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 138, 138, 138, 135, 135, 135, 132, 132, 132, 127, 127, 127, 123, 123, 123, 118, 118, 118, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 142, 142, 142, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 131, 131, 131, 127, 127, 127, 122, 122, 122, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 112, 112, 112, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 106, 106, 106, 101, 101, 101, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 88, 88, 88, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 75, 75, 75, 76, 76, 76, 79, 79, 79, 80, 80, 80, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 73, 73, 73, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 127, 127, 127, 123, 123, 123, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 135, 135, 135, 139, 139, 139, 143, 143, 143, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 107, 107, 107, 102, 102, 102, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 87, 87, 87, 84, 84, 84, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 71, 71, 71, 73, 73, 73, 75, 75, 75, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 71, 71, 71, 74, 74, 74, 78, 78, 78, 82, 82, 82, 85, 85, 85, 88, 88, 88, 93, 93, 93, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 134, 134, 134, 137, 137, 137, 141, 141, 141, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 145, 145, 145, 141, 141, 141, 137, 137, 137, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 119, 119, 119, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 108, 108, 108, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 93, 93, 93, 87, 87, 87, 83, 83, 83, 82, 82, 82, 83, 83, 83, 85, 85, 85, 85, 85, 85, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 71, 71, 71, 69, 69, 69, 68, 68, 68, 69, 69, 69, 71, 71, 71, 70, 70, 70, 68, 68, 68, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 73, 73, 73, 78, 78, 78, 83, 83, 83, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 143, 143, 143, 146, 146, 146, 145, 145, 145, 141, 141, 141, 137, 137, 137, 136, 136, 136, 135, 135, 135, 132, 132, 132, 127, 127, 127, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 121, 121, 121, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 103, 103, 103, 101, 101, 101, 98, 98, 98, 94, 94, 94, 88, 88, 88, 84, 84, 84, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 80, 80, 80, 76, 76, 76, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 74, 74, 74, 80, 80, 80, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 91, 91, 91, 93, 93, 93, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 130, 130, 130, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 137, 137, 137, 140, 140, 140, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 110, 110, 110, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 122, 122, 122, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 94, 94, 94, 89, 89, 89, 85, 85, 85, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 78, 78, 78, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 75, 75, 75, 80, 80, 80, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 104, 104, 104, 107, 107, 107, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 136, 136, 136, 133, 133, 133, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 113, 113, 113, 108, 108, 108, 102, 102, 102, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 81, 81, 81, 77, 77, 77, 73, 73, 73, 69, 69, 69, 67, 67, 67, 66, 66, 66, 64, 64, 64, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 75, 75, 75, 79, 79, 79, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 89, 89, 89, 92, 92, 92, 96, 96, 96, 99, 99, 99, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 145, 145, 145, 139, 139, 139, 134, 134, 134, 131, 131, 131, 130, 130, 130, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 123, 123, 123, 127, 127, 127, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 109, 109, 109, 102, 102, 102, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 82, 82, 82, 78, 78, 78, 74, 74, 74, 70, 70, 70, 68, 68, 68, 68, 68, 68, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 69, 69, 69, 74, 74, 74, 78, 78, 78, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 94, 94, 94, 98, 98, 98, 103, 103, 103, 107, 107, 107, 110, 110, 110, 113, 113, 113, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 152, 152, 152, 148, 148, 148, 142, 142, 142, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 109, 109, 109, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 121, 121, 121, 126, 126, 126, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 92, 92, 92, 90, 90, 90, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 80, 80, 80, 75, 75, 75, 71, 71, 71, 69, 69, 69, 69, 69, 69, 68, 68, 68, 67, 67, 67, 65, 65, 65, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 65, 65, 65, 69, 69, 69, 74, 74, 74, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 87, 87, 87, 91, 91, 91, 95, 95, 95, 100, 100, 100, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 120, 120, 120, 122, 122, 122, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 146, 146, 146, 140, 140, 140, 135, 135, 135, 132, 132, 132, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 119, 119, 119, 124, 124, 124, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 73, 73, 73, 70, 70, 70, 68, 68, 68, 67, 67, 67, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 69, 69, 69, 74, 74, 74, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 87, 87, 87, 91, 91, 91, 96, 96, 96, 100, 100, 100, 104, 104, 104, 107, 107, 107, 110, 110, 110, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 159, 159, 159, 155, 155, 155, 149, 149, 149, 143, 143, 143, 137, 137, 137, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 139, 139, 139, 137, 137, 137, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 103, 103, 103, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 122, 122, 122, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 67, 67, 67, 65, 65, 65, 62, 62, 62, 59, 59, 59, 58, 58, 58, 58, 58, 58, 59, 59, 59, 61, 61, 61, 62, 62, 62, 64, 64, 64, 69, 69, 69, 74, 74, 74, 76, 76, 76, 76, 76, 76, 77, 77, 77, 80, 80, 80, 85, 85, 85, 90, 90, 90, 94, 94, 94, 98, 98, 98, 102, 102, 102, 106, 106, 106, 110, 110, 110, 115, 115, 115, 110, 110, 110, 110, 110, 110, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 163, 163, 163, 162, 162, 162, 157, 157, 157, 151, 151, 151, 145, 145, 145, 139, 139, 139, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 116, 116, 116, 112, 112, 112, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 113, 113, 113, 118, 118, 118, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 120, 120, 120, 125, 125, 125, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 100, 100, 100, 95, 95, 95, 89, 89, 89, 83, 83, 83, 79, 79, 79, 76, 76, 76, 72, 72, 72, 68, 68, 68, 63, 63, 63, 60, 60, 60, 57, 57, 57, 55, 55, 55, 55, 55, 55, 57, 57, 57, 59, 59, 59, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 77, 77, 77, 82, 82, 82, 88, 88, 88, 92, 92, 92, 96, 96, 96, 100, 100, 100, 104, 104, 104, 109, 109, 109, 115, 115, 115, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 152, 152, 152, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 163, 163, 163, 159, 159, 159, 153, 153, 153, 146, 146, 146, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 134, 134, 134, 130, 130, 130, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 118, 118, 118, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 132, 132, 132, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 135, 135, 135, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 98, 98, 98, 92, 92, 92, 85, 85, 85, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 64, 64, 64, 59, 59, 59, 55, 55, 55, 53, 53, 53, 53, 53, 53, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 69, 69, 69, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 80, 80, 80, 85, 85, 85, 90, 90, 90, 93, 93, 93, 97, 97, 97, 102, 102, 102, 107, 107, 107, 113, 113, 113, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 141, 141, 141, 144, 144, 144, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 148, 148, 148, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 157, 157, 157, 161, 161, 161, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 164, 164, 164, 159, 159, 159, 154, 154, 154, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 139, 139, 139, 136, 136, 136, 132, 132, 132, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 133, 133, 133, 136, 136, 136, 136, 136, 136, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 96, 96, 96, 90, 90, 90, 84, 84, 84, 79, 79, 79, 75, 75, 75, 70, 70, 70, 64, 64, 64, 58, 58, 58, 53, 53, 53, 51, 51, 51, 52, 52, 52, 54, 54, 54, 57, 57, 57, 60, 60, 60, 64, 64, 64, 67, 67, 67, 71, 71, 71, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 79, 79, 79, 83, 83, 83, 88, 88, 88, 92, 92, 92, 95, 95, 95, 99, 99, 99, 105, 105, 105, 110, 110, 110, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 94, 94, 94, 88, 88, 88, 82, 82, 82, 77, 77, 77, 72, 72, 72, 65, 65, 65, 58, 58, 58, 53, 53, 53, 52, 52, 52, 52, 52, 52, 54, 54, 54, 56, 56, 56, 58, 58, 58, 62, 62, 62, 65, 65, 65, 70, 70, 70, 75, 75, 75, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 82, 82, 82, 87, 87, 87, 91, 91, 91, 94, 94, 94, 98, 98, 98, 103, 103, 103, 108, 108, 108, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 140, 140, 140, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 130, 130, 130, 127, 127, 127, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 106, 106, 106, 103, 103, 103, 97, 97, 97, 91, 91, 91, 85, 85, 85, 80, 80, 80, 74, 74, 74, 67, 67, 67, 60, 60, 60, 56, 56, 56, 54, 54, 54, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 60, 60, 60, 64, 64, 64, 69, 69, 69, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 81, 81, 81, 85, 85, 85, 90, 90, 90, 93, 93, 93, 97, 97, 97, 101, 101, 101, 107, 107, 107, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 147, 147, 147, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 150, 150, 150, 153, 153, 153, 157, 157, 157, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 169, 169, 169, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 124, 124, 124, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 110, 110, 110, 114, 114, 114, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 132, 132, 132, 136, 136, 136, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 104, 104, 104, 99, 99, 99, 93, 93, 93, 88, 88, 88, 82, 82, 82, 77, 77, 77, 70, 70, 70, 64, 64, 64, 60, 60, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 62, 62, 62, 66, 66, 66, 70, 70, 70, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 79, 79, 79, 83, 83, 83, 88, 88, 88, 91, 91, 91, 94, 94, 94, 99, 99, 99, 104, 104, 104, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 139, 139, 139, 143, 143, 143, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 158, 158, 158, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 167, 167, 167, 163, 163, 163, 162, 162, 162, 162, 162, 162, 160, 160, 160, 157, 157, 157, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 137, 137, 137, 134, 134, 134, 130, 130, 130, 128, 128, 128, 127, 127, 127, 123, 123, 123, 119, 119, 119, 117, 117, 117, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 144, 144, 144, 147, 147, 147, 152, 152, 152, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 128, 128, 128, 125, 125, 125, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 137, 137, 137, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 102, 102, 102, 96, 96, 96, 91, 91, 91, 85, 85, 85, 80, 80, 80, 74, 74, 74, 69, 69, 69, 66, 66, 66, 64, 64, 64, 62, 62, 62, 60, 60, 60, 61, 61, 61, 63, 63, 63, 66, 66, 66, 69, 69, 69, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 81, 81, 81, 84, 84, 84, 88, 88, 88, 91, 91, 91, 95, 95, 95, 100, 100, 100, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 147, 147, 147, 151, 151, 151, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 158, 158, 158, 161, 161, 161, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 169, 169, 169, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 151, 151, 151, 155, 155, 155, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 165, 165, 165, 161, 161, 161, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 129, 129, 129, 133, 133, 133, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 94, 94, 94, 88, 88, 88, 82, 82, 82, 77, 77, 77, 73, 73, 73, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 74, 74, 74, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 89, 89, 89, 94, 94, 94, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 153, 153, 153, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 138, 138, 138, 143, 143, 143, 146, 146, 146, 146, 146, 146, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 157, 157, 157, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 164, 164, 164, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 112, 112, 112, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 77, 77, 77, 75, 75, 75, 72, 72, 72, 68, 68, 68, 65, 65, 65, 64, 64, 64, 66, 66, 66, 69, 69, 69, 71, 71, 71, 72, 72, 72, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 82, 82, 82, 87, 87, 87, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 155, 155, 155, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 137, 137, 137, 142, 142, 142, 147, 147, 147, 150, 150, 150, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 163, 163, 163, 166, 166, 166, 170, 170, 170, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 176, 176, 176, 173, 173, 173, 168, 168, 168, 162, 162, 162, 158, 158, 158, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 109, 109, 109, 101, 101, 101, 93, 93, 93, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 82, 82, 82, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 154, 154, 154, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 149, 149, 149, 153, 153, 153, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 163, 163, 163, 166, 166, 166, 170, 170, 170, 174, 174, 174, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 176, 176, 176, 170, 170, 170, 165, 165, 165, 160, 160, 160, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 153, 153, 153, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 139, 139, 139, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 138, 138, 138, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 110, 110, 110, 102, 102, 102, 95, 95, 95, 89, 89, 89, 85, 85, 85, 82, 82, 82, 81, 81, 81, 79, 79, 79, 76, 76, 76, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 65, 65, 65, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 68, 68, 68, 72, 72, 72, 79, 79, 79, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 147, 147, 147, 144, 144, 144, 139, 139, 139, 135, 135, 135, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 157, 157, 157, 161, 161, 161, 164, 164, 164, 168, 168, 168, 173, 173, 173, 178, 178, 178, 182, 182, 182, 183, 183, 183, 184, 184, 184, 183, 183, 183, 181, 181, 181, 177, 177, 177, 172, 172, 172, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 142, 142, 142, 146, 146, 146, 152, 152, 152, 157, 157, 157, 161, 161, 161, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 137, 137, 137, 131, 131, 131, 125, 125, 125, 121, 121, 121, 117, 117, 117, 110, 110, 110, 103, 103, 103, 96, 96, 96, 90, 90, 90, 87, 87, 87, 84, 84, 84, 82, 82, 82, 79, 79, 79, 77, 77, 77, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 66, 66, 66, 72, 72, 72, 78, 78, 78, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 136, 136, 136, 131, 131, 131, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 170, 170, 170, 175, 175, 175, 180, 180, 180, 183, 183, 183, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 173, 173, 173, 168, 168, 168, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 139, 139, 139, 133, 133, 133, 126, 126, 126, 121, 121, 121, 116, 116, 116, 110, 110, 110, 103, 103, 103, 96, 96, 96, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 67, 67, 67, 65, 65, 65, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 62, 62, 62, 66, 66, 66, 72, 72, 72, 79, 79, 79, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 130, 130, 130, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 145, 145, 145, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 172, 172, 172, 177, 177, 177, 180, 180, 180, 182, 182, 182, 182, 182, 182, 183, 183, 183, 182, 182, 182, 180, 180, 180, 177, 177, 177, 174, 174, 174, 170, 170, 170, 167, 167, 167, 164, 164, 164, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 134, 134, 134, 127, 127, 127, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 97, 97, 97, 92, 92, 92, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 71, 71, 71, 66, 66, 66, 63, 63, 63, 61, 61, 61, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 62, 62, 62, 59, 59, 59, 56, 56, 56, 55, 55, 55, 56, 56, 56, 58, 58, 58, 60, 60, 60, 63, 63, 63, 68, 68, 68, 73, 73, 73, 79, 79, 79, 160, 160, 160, 157, 157, 157, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 135, 135, 135, 140, 140, 140, 146, 146, 146, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 136, 136, 136, 133, 133, 133, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 169, 169, 169, 173, 173, 173, 176, 176, 176, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 157, 157, 157, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 134, 134, 134, 128, 128, 128, 122, 122, 122, 117, 117, 117, 112, 112, 112, 105, 105, 105, 98, 98, 98, 92, 92, 92, 88, 88, 88, 84, 84, 84, 80, 80, 80, 74, 74, 74, 68, 68, 68, 62, 62, 62, 59, 59, 59, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 59, 59, 59, 63, 63, 63, 66, 66, 66, 71, 71, 71, 75, 75, 75, 79, 79, 79, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 136, 136, 136, 131, 131, 131, 127, 127, 127, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 141, 141, 141, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 178, 178, 178, 176, 176, 176, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 165, 165, 165, 161, 161, 161, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 172, 169, 169, 169, 166, 166, 166, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 115, 115, 115, 108, 108, 108, 99, 99, 99, 92, 92, 92, 87, 87, 87, 83, 83, 83, 78, 78, 78, 72, 72, 72, 65, 65, 65, 60, 60, 60, 57, 57, 57, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 60, 60, 60, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 60, 60, 60, 65, 65, 65, 69, 69, 69, 73, 73, 73, 77, 77, 77, 79, 79, 79, 156, 156, 156, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 124, 124, 124, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 137, 137, 137, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 133, 133, 133, 136, 136, 136, 140, 140, 140, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 178, 178, 178, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 171, 171, 171, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 172, 172, 172, 168, 168, 168, 163, 163, 163, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 123, 123, 123, 118, 118, 118, 110, 110, 110, 101, 101, 101, 94, 94, 94, 88, 88, 88, 84, 84, 84, 79, 79, 79, 72, 72, 72, 66, 66, 66, 60, 60, 60, 57, 57, 57, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 58, 58, 58, 58, 58, 58, 57, 57, 57, 55, 55, 55, 54, 54, 54, 55, 55, 55, 59, 59, 59, 64, 64, 64, 69, 69, 69, 74, 74, 74, 77, 77, 77, 79, 79, 79, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 122, 122, 122, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 129, 129, 129, 135, 135, 135, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 137, 137, 137, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 131, 131, 131, 134, 134, 134, 139, 139, 139, 143, 143, 143, 148, 148, 148, 152, 152, 152, 156, 156, 156, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 182, 182, 182, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 176, 176, 176, 175, 175, 175, 172, 172, 172, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 177, 177, 177, 173, 173, 173, 168, 168, 168, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 145, 145, 145, 142, 142, 142, 142, 142, 142, 143, 143, 143, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 111, 111, 111, 103, 103, 103, 97, 97, 97, 92, 92, 92, 87, 87, 87, 82, 82, 82, 75, 75, 75, 68, 68, 68, 62, 62, 62, 57, 57, 57, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 55, 55, 55, 56, 56, 56, 56, 56, 56, 55, 55, 55, 53, 53, 53, 54, 54, 54, 58, 58, 58, 63, 63, 63, 68, 68, 68, 74, 74, 74, 77, 77, 77, 79, 79, 79, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 142, 142, 142, 136, 136, 136, 131, 131, 131, 127, 127, 127, 126, 126, 126, 126, 126, 126, 124, 124, 124, 120, 120, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 138, 138, 138, 143, 143, 143, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 162, 162, 162, 165, 165, 165, 169, 169, 169, 173, 173, 173, 178, 178, 178, 180, 180, 180, 180, 180, 180, 181, 181, 181, 184, 184, 184, 186, 186, 186, 186, 186, 186, 183, 183, 183, 180, 180, 180, 178, 178, 178, 175, 175, 175, 172, 172, 172, 168, 168, 168, 165, 165, 165, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 170, 170, 170, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 111, 111, 111, 104, 104, 104, 100, 100, 100, 96, 96, 96, 91, 91, 91, 85, 85, 85, 79, 79, 79, 72, 72, 72, 65, 65, 65, 59, 59, 59, 55, 55, 55, 52, 52, 52, 51, 51, 51, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 54, 54, 54, 53, 53, 53, 54, 54, 54, 58, 58, 58, 63, 63, 63, 68, 68, 68, 73, 73, 73, 76, 76, 76, 78, 78, 78, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 132, 132, 132, 126, 126, 126, 122, 122, 122, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 134, 134, 134, 139, 139, 139, 144, 144, 144, 149, 149, 149, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 160, 160, 160, 162, 162, 162, 163, 163, 163, 166, 166, 166, 169, 169, 169, 174, 174, 174, 179, 179, 179, 182, 182, 182, 183, 183, 183, 183, 183, 183, 186, 186, 186, 187, 187, 187, 187, 187, 187, 184, 184, 184, 182, 182, 182, 179, 179, 179, 177, 177, 177, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 134, 134, 134, 131, 131, 131, 128, 128, 128, 124, 124, 124, 118, 118, 118, 111, 111, 111, 105, 105, 105, 102, 102, 102, 98, 98, 98, 93, 93, 93, 87, 87, 87, 81, 81, 81, 74, 74, 74, 67, 67, 67, 60, 60, 60, 56, 56, 56, 54, 54, 54, 52, 52, 52, 49, 49, 49, 49, 49, 49, 50, 50, 50, 52, 52, 52, 53, 53, 53, 53, 53, 53, 55, 55, 55, 59, 59, 59, 63, 63, 63, 67, 67, 67, 71, 71, 71, 74, 74, 74, 77, 77, 77, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 135, 135, 135, 140, 140, 140, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 175, 175, 175, 180, 180, 180, 183, 183, 183, 184, 184, 184, 184, 184, 184, 186, 186, 186, 186, 186, 186, 185, 185, 185, 184, 184, 184, 182, 182, 182, 180, 180, 180, 178, 178, 178, 175, 175, 175, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 155, 155, 155, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 118, 118, 118, 111, 111, 111, 106, 106, 106, 103, 103, 103, 99, 99, 99, 93, 93, 93, 87, 87, 87, 81, 81, 81, 74, 74, 74, 66, 66, 66, 60, 60, 60, 56, 56, 56, 54, 54, 54, 52, 52, 52, 48, 48, 48, 46, 46, 46, 46, 46, 46, 49, 49, 49, 51, 51, 51, 53, 53, 53, 55, 55, 55, 59, 59, 59, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 76, 76, 76, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 127, 127, 127, 122, 122, 122, 116, 116, 116, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 177, 177, 177, 182, 182, 182, 184, 184, 184, 185, 185, 185, 185, 185, 185, 186, 186, 186, 185, 185, 185, 183, 183, 183, 181, 181, 181, 181, 181, 181, 180, 180, 180, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 158, 158, 158, 156, 156, 156, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 167, 167, 167, 162, 162, 162, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 110, 110, 110, 106, 106, 106, 102, 102, 102, 97, 97, 97, 90, 90, 90, 84, 84, 84, 79, 79, 79, 73, 73, 73, 65, 65, 65, 58, 58, 58, 55, 55, 55, 53, 53, 53, 51, 51, 51, 47, 47, 47, 44, 44, 44, 44, 44, 44, 46, 46, 46, 48, 48, 48, 51, 51, 51, 54, 54, 54, 58, 58, 58, 61, 61, 61, 63, 63, 63, 66, 66, 66, 71, 71, 71, 76, 76, 76, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 140, 140, 140, 138, 138, 138, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 112, 112, 112, 106, 106, 106, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 132, 132, 132, 127, 127, 127, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 123, 123, 123, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 133, 133, 133, 138, 138, 138, 142, 142, 142, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 174, 174, 174, 179, 179, 179, 184, 184, 184, 186, 186, 186, 187, 187, 187, 188, 188, 188, 187, 187, 187, 185, 185, 185, 182, 182, 182, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 158, 158, 158, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 94, 94, 94, 86, 86, 86, 81, 81, 81, 76, 76, 76, 71, 71, 71, 64, 64, 64, 57, 57, 57, 53, 53, 53, 52, 52, 52, 50, 50, 50, 46, 46, 46, 43, 43, 43, 43, 43, 43, 44, 44, 44, 46, 46, 46, 49, 49, 49, 53, 53, 53, 57, 57, 57, 60, 60, 60, 62, 62, 62, 65, 65, 65, 72, 72, 72, 78, 78, 78, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 132, 132, 132, 126, 126, 126, 121, 121, 121, 116, 116, 116, 110, 110, 110, 102, 102, 102, 97, 97, 97, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 115, 115, 115, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 126, 126, 126, 131, 131, 131, 136, 136, 136, 140, 140, 140, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 171, 171, 171, 177, 177, 177, 182, 182, 182, 187, 187, 187, 190, 190, 190, 191, 191, 191, 191, 191, 191, 189, 189, 189, 186, 186, 186, 182, 182, 182, 179, 179, 179, 178, 178, 178, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 156, 156, 156, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 170, 170, 170, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 151, 151, 151, 153, 153, 153, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 120, 120, 120, 114, 114, 114, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 92, 92, 92, 84, 84, 84, 78, 78, 78, 74, 74, 74, 69, 69, 69, 62, 62, 62, 56, 56, 56, 53, 53, 53, 50, 50, 50, 48, 48, 48, 45, 45, 45, 44, 44, 44, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 52, 52, 52, 56, 56, 56, 60, 60, 60, 62, 62, 62, 67, 67, 67, 73, 73, 73, 79, 79, 79, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 155, 155, 155, 151, 151, 151, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 131, 131, 131, 124, 124, 124, 118, 118, 118, 114, 114, 114, 108, 108, 108, 101, 101, 101, 95, 95, 95, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 124, 124, 124, 120, 120, 120, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 158, 158, 158, 162, 162, 162, 168, 168, 168, 174, 174, 174, 180, 180, 180, 186, 186, 186, 190, 190, 190, 192, 192, 192, 193, 193, 193, 192, 192, 192, 191, 191, 191, 188, 188, 188, 184, 184, 184, 181, 181, 181, 179, 179, 179, 178, 178, 178, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 155, 155, 155, 155, 155, 155, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 125, 125, 125, 119, 119, 119, 112, 112, 112, 106, 106, 106, 102, 102, 102, 100, 100, 100, 96, 96, 96, 90, 90, 90, 83, 83, 83, 76, 76, 76, 71, 71, 71, 66, 66, 66, 60, 60, 60, 56, 56, 56, 53, 53, 53, 51, 51, 51, 48, 48, 48, 46, 46, 46, 47, 47, 47, 48, 48, 48, 48, 48, 48, 47, 47, 47, 48, 48, 48, 51, 51, 51, 56, 56, 56, 61, 61, 61, 65, 65, 65, 69, 69, 69, 75, 75, 75, 80, 80, 80, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 155, 155, 155, 151, 151, 151, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 136, 136, 136, 130, 130, 130, 123, 123, 123, 117, 117, 117, 111, 111, 111, 106, 106, 106, 100, 100, 100, 94, 94, 94, 91, 91, 91, 92, 92, 92, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 159, 159, 159, 163, 163, 163, 169, 169, 169, 176, 176, 176, 183, 183, 183, 188, 188, 188, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 189, 189, 189, 187, 187, 187, 184, 184, 184, 182, 182, 182, 180, 180, 180, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 118, 118, 118, 111, 111, 111, 105, 105, 105, 100, 100, 100, 98, 98, 98, 95, 95, 95, 90, 90, 90, 83, 83, 83, 77, 77, 77, 70, 70, 70, 63, 63, 63, 58, 58, 58, 56, 56, 56, 55, 55, 55, 53, 53, 53, 50, 50, 50, 50, 50, 50, 51, 51, 51, 53, 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 53, 53, 53, 57, 57, 57, 62, 62, 62, 67, 67, 67, 72, 72, 72, 77, 77, 77, 82, 82, 82, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 154, 154, 154, 150, 150, 150, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 130, 130, 130, 123, 123, 123, 116, 116, 116, 110, 110, 110, 105, 105, 105, 100, 100, 100, 95, 95, 95, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 105, 105, 105, 108, 108, 108, 113, 113, 113, 117, 117, 117, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 116, 116, 116, 112, 112, 112, 109, 109, 109, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 104, 104, 104, 108, 108, 108, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 170, 170, 170, 177, 177, 177, 183, 183, 183, 187, 187, 187, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 186, 186, 186, 184, 184, 184, 182, 182, 182, 181, 181, 181, 180, 180, 180, 178, 178, 178, 175, 175, 175, 173, 173, 173, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 163, 163, 163, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 146, 146, 146, 142, 142, 142, 139, 139, 139, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 136, 136, 136, 132, 132, 132, 127, 127, 127, 122, 122, 122, 117, 117, 117, 111, 111, 111, 105, 105, 105, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 84, 84, 84, 77, 77, 77, 70, 70, 70, 62, 62, 62, 58, 58, 58, 56, 56, 56, 56, 56, 56, 56, 56, 56, 54, 54, 54, 54, 54, 54, 56, 56, 56, 58, 58, 58, 58, 58, 58, 56, 56, 56, 56, 56, 56, 57, 57, 57, 60, 60, 60, 63, 63, 63, 68, 68, 68, 74, 74, 74, 79, 79, 79, 83, 83, 83, 171, 171, 171, 168, 168, 168, 164, 164, 164, 160, 160, 160, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 134, 134, 134, 129, 129, 129, 123, 123, 123, 117, 117, 117, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 94, 94, 94, 93, 93, 93, 90, 90, 90, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 95, 95, 95, 98, 98, 98, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 103, 103, 103, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 127, 127, 127, 128, 128, 128, 131, 131, 131, 137, 137, 137, 142, 142, 142, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 158, 158, 158, 162, 162, 162, 166, 166, 166, 171, 171, 171, 176, 176, 176, 182, 182, 182, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 184, 184, 184, 182, 182, 182, 180, 180, 180, 179, 179, 179, 179, 179, 179, 177, 177, 177, 176, 176, 176, 174, 174, 174, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 163, 163, 163, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 112, 112, 112, 106, 106, 106, 100, 100, 100, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 78, 78, 78, 71, 71, 71, 64, 64, 64, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 58, 58, 58, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 64, 64, 64, 68, 68, 68, 74, 74, 74, 79, 79, 79, 84, 84, 84, 173, 173, 173, 171, 171, 171, 167, 167, 167, 163, 163, 163, 161, 161, 161, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 138, 138, 138, 135, 135, 135, 130, 130, 130, 124, 124, 124, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 100, 100, 100, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 96, 96, 96, 100, 100, 100, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 123, 123, 123, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 107, 107, 107, 103, 103, 103, 99, 99, 99, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 126, 126, 126, 129, 129, 129, 135, 135, 135, 142, 142, 142, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 166, 166, 166, 171, 171, 171, 177, 177, 177, 181, 181, 181, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 185, 185, 185, 183, 183, 183, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 137, 137, 137, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 118, 118, 118, 113, 113, 113, 106, 106, 106, 99, 99, 99, 94, 94, 94, 91, 91, 91, 88, 88, 88, 83, 83, 83, 78, 78, 78, 73, 73, 73, 67, 67, 67, 63, 63, 63, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 69, 69, 69, 73, 73, 73, 78, 78, 78, 82, 82, 82, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 141, 141, 141, 137, 137, 137, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 96, 96, 96, 101, 101, 101, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 110, 110, 110, 106, 106, 106, 101, 101, 101, 97, 97, 97, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 134, 134, 134, 140, 140, 140, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 156, 156, 156, 161, 161, 161, 167, 167, 167, 173, 173, 173, 178, 178, 178, 181, 181, 181, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 182, 182, 182, 179, 179, 179, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 173, 173, 173, 168, 168, 168, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 151, 151, 151, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 134, 134, 134, 131, 131, 131, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 106, 106, 106, 99, 99, 99, 94, 94, 94, 90, 90, 90, 87, 87, 87, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 69, 69, 69, 71, 71, 71, 74, 74, 74, 78, 78, 78, 81, 81, 81, 175, 175, 175, 174, 174, 174, 171, 171, 171, 168, 168, 168, 165, 165, 165, 160, 160, 160, 155, 155, 155, 151, 151, 151, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 102, 102, 102, 96, 96, 96, 92, 92, 92, 90, 90, 90, 90, 90, 90, 93, 93, 93, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 124, 124, 124, 128, 128, 128, 133, 133, 133, 139, 139, 139, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 170, 170, 170, 165, 165, 165, 160, 160, 160, 157, 157, 157, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 129, 129, 129, 124, 124, 124, 119, 119, 119, 116, 116, 116, 111, 111, 111, 105, 105, 105, 98, 98, 98, 93, 93, 93, 90, 90, 90, 89, 89, 89, 86, 86, 86, 83, 83, 83, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 76, 76, 76, 79, 79, 79, 80, 80, 80, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 163, 163, 163, 158, 158, 158, 152, 152, 152, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 131, 131, 131, 126, 126, 126, 120, 120, 120, 114, 114, 114, 109, 109, 109, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 98, 98, 98, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 105, 105, 105, 100, 100, 100, 94, 94, 94, 90, 90, 90, 88, 88, 88, 89, 89, 89, 93, 93, 93, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 128, 128, 128, 133, 133, 133, 138, 138, 138, 142, 142, 142, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 157, 157, 157, 161, 161, 161, 167, 167, 167, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 166, 166, 166, 160, 160, 160, 156, 156, 156, 154, 154, 154, 154, 154, 154, 155, 155, 155, 154, 154, 154, 151, 151, 151, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 114, 114, 114, 110, 110, 110, 103, 103, 103, 97, 97, 97, 93, 93, 93, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 72, 72, 72, 74, 74, 74, 77, 77, 77, 79, 79, 79, 80, 80, 80, 175, 175, 175, 172, 172, 172, 168, 168, 168, 165, 165, 165, 161, 161, 161, 155, 155, 155, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 119, 119, 119, 113, 113, 113, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 94, 94, 94, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 103, 103, 103, 98, 98, 98, 93, 93, 93, 89, 89, 89, 88, 88, 88, 89, 89, 89, 93, 93, 93, 98, 98, 98, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 128, 128, 128, 133, 133, 133, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 151, 151, 151, 155, 155, 155, 160, 160, 160, 164, 164, 164, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 108, 108, 108, 102, 102, 102, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 94, 94, 94, 92, 92, 92, 88, 88, 88, 84, 84, 84, 82, 82, 82, 79, 79, 79, 77, 77, 77, 76, 76, 76, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 68, 68, 68, 70, 70, 70, 72, 72, 72, 75, 75, 75, 77, 77, 77, 78, 78, 78, 176, 176, 176, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 154, 154, 154, 148, 148, 148, 145, 145, 145, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 123, 123, 123, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 98, 98, 98, 93, 93, 93, 90, 90, 90, 89, 89, 89, 91, 91, 91, 95, 95, 95, 99, 99, 99, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 122, 122, 122, 127, 127, 127, 133, 133, 133, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 107, 107, 107, 101, 101, 101, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 96, 96, 96, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 78, 78, 78, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 81, 81, 81, 77, 77, 77, 73, 73, 73, 69, 69, 69, 67, 67, 67, 66, 66, 66, 67, 67, 67, 70, 70, 70, 73, 73, 73, 76, 76, 76, 77, 77, 77, 176, 176, 176, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 155, 155, 155, 149, 149, 149, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 139, 139, 139, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 120, 120, 120, 116, 116, 116, 112, 112, 112, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 91, 91, 91, 93, 93, 93, 97, 97, 97, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 145, 145, 145, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 112, 112, 112, 106, 106, 106, 101, 101, 101, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 93, 93, 93, 89, 89, 89, 84, 84, 84, 80, 80, 80, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 81, 81, 81, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 66, 66, 66, 69, 69, 69, 72, 72, 72, 74, 74, 74, 75, 75, 75, 173, 173, 173, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 156, 156, 156, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 139, 139, 139, 141, 141, 141, 145, 145, 145, 148, 148, 148, 151, 151, 151, 156, 156, 156, 160, 160, 160, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 167, 167, 167, 164, 164, 164, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 106, 106, 106, 102, 102, 102, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 87, 87, 87, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 72, 72, 72, 68, 68, 68, 66, 66, 66, 66, 66, 66, 67, 67, 67, 69, 69, 69, 71, 71, 71, 73, 73, 73, 73, 73, 73, 168, 168, 168, 165, 165, 165, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 121, 121, 121, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 103, 103, 103, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 105, 105, 105, 102, 102, 102, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 94, 94, 94, 96, 96, 96, 99, 99, 99, 102, 102, 102, 104, 104, 104, 103, 103, 103, 103, 103, 103, 105, 105, 105, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 154, 154, 154, 158, 158, 158, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 166, 166, 166, 167, 167, 167, 164, 164, 164, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 86, 86, 86, 83, 83, 83, 79, 79, 79, 74, 74, 74, 70, 70, 70, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 165, 165, 165, 161, 161, 161, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 124, 124, 124, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 96, 96, 96, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 104, 104, 104, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 162, 162, 162, 165, 165, 165, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 145, 145, 145, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 136, 136, 136, 134, 134, 134, 130, 130, 130, 128, 128, 128, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 162, 162, 162, 159, 159, 159, 155, 155, 155, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 96, 96, 96, 97, 97, 97, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 136, 136, 136, 132, 132, 132, 128, 128, 128, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 79, 79, 79, 77, 77, 77, 75, 75, 75, 75, 75, 75, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 159, 159, 159, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 102, 102, 102, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 150, 150, 150, 145, 145, 145, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 126, 126, 126, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 102, 102, 102, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 75, 75, 75, 72, 72, 72, 70, 70, 70, 70, 70, 70, 71, 71, 71, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 109, 109, 109, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 143, 143, 143, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 146, 146, 146, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 94, 94, 94, 91, 91, 91, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 78, 78, 78, 77, 77, 77, 74, 74, 74, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 136, 136, 136, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 132, 132, 132, 127, 127, 127, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 97, 97, 97, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 125, 125, 125, 125, 125, 125, 128, 128, 128, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 93, 93, 93, 89, 89, 89, 84, 84, 84, 81, 81, 81, 78, 78, 78, 78, 78, 78, 77, 77, 77, 73, 73, 73, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 104, 104, 104, 106, 106, 106, 105, 105, 105, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 103, 103, 103, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 101, 101, 101, 97, 97, 97, 91, 91, 91, 86, 86, 86, 81, 81, 81, 79, 79, 79, 78, 78, 78, 76, 76, 76, 73, 73, 73, 69, 69, 69, 68, 68, 68, 69, 69, 69, 70, 70, 70, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 128, 128, 128, 122, 122, 122, 117, 117, 117, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 103, 103, 103, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 142, 142, 142, 146, 146, 146, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 105, 105, 105, 100, 100, 100, 95, 95, 95, 88, 88, 88, 83, 83, 83, 79, 79, 79, 78, 78, 78, 75, 75, 75, 71, 71, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 124, 124, 124, 118, 118, 118, 114, 114, 114, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 100, 100, 100, 96, 96, 96, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 111, 111, 111, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 137, 137, 137, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 144, 144, 144, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 151, 151, 151, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 137, 137, 137, 133, 133, 133, 128, 128, 128, 125, 125, 125, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 109, 109, 109, 104, 104, 104, 99, 99, 99, 92, 92, 92, 85, 85, 85, 81, 81, 81, 77, 77, 77, 74, 74, 74, 70, 70, 70, 68, 68, 68, 68, 68, 68, 69, 69, 69, 68, 68, 68, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 148, 148, 148, 144, 144, 144, 143, 143, 143, 144, 144, 144, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 137, 137, 137, 131, 131, 131, 124, 124, 124, 119, 119, 119, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 114, 114, 114, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 120, 120, 120, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 138, 138, 138, 143, 143, 143, 147, 147, 147, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 148, 148, 148, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 131, 131, 131, 126, 126, 126, 122, 122, 122, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 102, 102, 102, 96, 96, 96, 89, 89, 89, 83, 83, 83, 78, 78, 78, 74, 74, 74, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 151, 151, 151, 147, 147, 147, 145, 145, 145, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 144, 144, 144, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 150, 150, 150, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 129, 129, 129, 123, 123, 123, 120, 120, 120, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 100, 100, 100, 93, 93, 93, 87, 87, 87, 81, 81, 81, 77, 77, 77, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 145, 145, 145, 141, 141, 141, 135, 135, 135, 130, 130, 130, 126, 126, 126, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 119, 119, 119, 114, 114, 114, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 103, 103, 103, 108, 108, 108, 113, 113, 113, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 115, 115, 115, 120, 120, 120, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 104, 104, 104, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 80, 80, 80, 79, 79, 79, 78, 78, 78, 76, 76, 76, 75, 75, 75, 148, 148, 148, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 154, 154, 154, 151, 151, 151, 146, 146, 146, 141, 141, 141, 135, 135, 135, 131, 131, 131, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 122, 122, 122, 117, 117, 117, 112, 112, 112, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 94, 94, 94, 92, 92, 92, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 93, 93, 93, 92, 92, 92, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 104, 104, 104, 109, 109, 109, 116, 116, 116, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 133, 133, 133, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 103, 103, 103, 97, 97, 97, 92, 92, 92, 89, 89, 89, 87, 87, 87, 85, 85, 85, 82, 82, 82, 79, 79, 79, 77, 77, 77, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 155, 155, 155, 154, 154, 154, 150, 150, 150, 146, 146, 146, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 119, 119, 119, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 91, 91, 91, 93, 93, 93, 97, 97, 97, 101, 101, 101, 103, 103, 103, 106, 106, 106, 111, 111, 111, 118, 118, 118, 122, 122, 122, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 151, 151, 151, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 140, 140, 140, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 111, 111, 111, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 126, 126, 126, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 83, 83, 83, 81, 81, 81, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 133, 133, 133, 129, 129, 129, 125, 125, 125, 120, 120, 120, 116, 116, 116, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 106, 106, 106, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 92, 92, 92, 94, 94, 94, 98, 98, 98, 103, 103, 103, 106, 106, 106, 110, 110, 110, 115, 115, 115, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 142, 142, 142, 147, 147, 147, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 133, 133, 133, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 139, 139, 139, 134, 134, 134, 128, 128, 128, 124, 124, 124, 122, 122, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 138, 138, 138, 141, 141, 141, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 106, 106, 106, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 93, 93, 93, 88, 88, 88, 85, 85, 85, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 111, 111, 111, 107, 107, 107, 103, 103, 103, 102, 102, 102, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 95, 95, 95, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 114, 114, 114, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 133, 133, 133, 133, 133, 133, 130, 130, 130, 128, 128, 128, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 136, 136, 136, 141, 141, 141, 146, 146, 146, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 98, 98, 98, 93, 93, 93, 88, 88, 88, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 106, 106, 106, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 99, 99, 99, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 99, 99, 99, 98, 98, 98, 98, 98, 98, 101, 101, 101, 104, 104, 104, 108, 108, 108, 113, 113, 113, 118, 118, 118, 124, 124, 124, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 103, 103, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 151, 151, 151, 149, 149, 149, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 143, 143, 143, 139, 139, 139, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 112, 112, 112, 109, 109, 109, 108, 108, 108, 106, 106, 106, 101, 101, 101, 95, 95, 95, 90, 90, 90, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 110, 110, 110, 106, 106, 106, 103, 103, 103, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 113, 113, 113, 117, 117, 117, 123, 123, 123, 128, 128, 128, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 135, 135, 135, 137, 137, 137, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 126, 126, 126, 122, 122, 122, 117, 117, 117, 113, 113, 113, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 144, 144, 144, 149, 149, 149, 153, 153, 153, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 144, 144, 144, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 113, 113, 113, 110, 110, 110, 105, 105, 105, 99, 99, 99, 93, 93, 93, 149, 149, 149, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 139, 139, 139, 139, 139, 139, 141, 141, 141, 145, 145, 145, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 158, 158, 158, 160, 160, 160, 159, 159, 159, 156, 156, 156, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 111, 111, 111, 107, 107, 107, 105, 105, 105, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 148, 148, 148, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 104, 104, 104, 107, 107, 107, 110, 110, 110, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 126, 126, 126, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 142, 142, 142, 148, 148, 148, 154, 154, 154, 158, 158, 158, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 150, 150, 150, 151, 151, 151, 154, 154, 154, 155, 155, 155, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 109, 109, 109, 103, 103, 103, 97, 97, 97, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 119, 119, 119, 114, 114, 114, 110, 110, 110, 109, 109, 109, 107, 107, 107, 103, 103, 103, 99, 99, 99, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 100, 100, 100, 104, 104, 104, 109, 109, 109, 114, 114, 114, 120, 120, 120, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 138, 138, 138, 144, 144, 144, 151, 151, 151, 158, 158, 158, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 154, 154, 154, 149, 149, 149, 145, 145, 145, 141, 141, 141, 137, 137, 137, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 123, 123, 123, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 89, 89, 89, 92, 92, 92, 94, 94, 94, 95, 95, 95, 98, 98, 98, 102, 102, 102, 108, 108, 108, 113, 113, 113, 119, 119, 119, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 145, 145, 145, 152, 152, 152, 160, 160, 160, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 108, 108, 108, 102, 102, 102, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 81, 81, 81, 82, 82, 82, 85, 85, 85, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 102, 102, 102, 108, 108, 108, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 146, 146, 146, 153, 153, 153, 160, 160, 160, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 165, 165, 165, 163, 163, 163, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 141, 141, 141, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 149, 149, 149, 143, 143, 143, 138, 138, 138, 135, 135, 135, 133, 133, 133, 131, 131, 131, 127, 127, 127, 122, 122, 122, 118, 118, 118, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 143, 143, 143, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 118, 118, 118, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 88, 88, 88, 84, 84, 84, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 76, 76, 76, 80, 80, 80, 86, 86, 86, 89, 89, 89, 92, 92, 92, 97, 97, 97, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 118, 118, 118, 123, 123, 123, 128, 128, 128, 133, 133, 133, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 148, 148, 148, 154, 154, 154, 160, 160, 160, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 153, 153, 153, 155, 155, 155, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 166, 166, 166, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 149, 149, 149, 143, 143, 143, 139, 139, 139, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 127, 127, 127, 133, 133, 133, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 149, 149, 149, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 126, 126, 126, 122, 122, 122, 117, 117, 117, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 100, 100, 100, 94, 94, 94, 88, 88, 88, 83, 83, 83, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 71, 71, 71, 76, 76, 76, 82, 82, 82, 87, 87, 87, 91, 91, 91, 96, 96, 96, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 128, 128, 128, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 156, 156, 156, 160, 160, 160, 165, 165, 165, 168, 168, 168, 170, 170, 170, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 156, 156, 156, 151, 151, 151, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 113, 113, 113, 107, 107, 107, 102, 102, 102, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 159, 159, 159, 163, 163, 163, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 153, 153, 153, 147, 147, 147, 142, 142, 142, 140, 140, 140, 138, 138, 138, 134, 134, 134, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 128, 128, 128, 134, 134, 134, 139, 139, 139, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 146, 146, 146, 152, 152, 152, 159, 159, 159, 164, 164, 164, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 162, 162, 162, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 145, 145, 145, 141, 141, 141, 137, 137, 137, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 125, 125, 125, 120, 120, 120, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 100, 100, 100, 94, 94, 94, 89, 89, 89, 83, 83, 83, 77, 77, 77, 72, 72, 72, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 68, 68, 72, 72, 72, 78, 78, 78, 84, 84, 84, 89, 89, 89, 93, 93, 93, 97, 97, 97, 102, 102, 102, 106, 106, 106, 110, 110, 110, 116, 116, 116, 122, 122, 122, 128, 128, 128, 134, 134, 134, 137, 137, 137, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 153, 153, 153, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 113, 113, 113, 108, 108, 108, 104, 104, 104, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 139, 139, 139, 144, 144, 144, 147, 147, 147, 149, 149, 149, 153, 153, 153, 158, 158, 158, 162, 162, 162, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 134, 134, 134, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 149, 149, 149, 155, 155, 155, 162, 162, 162, 168, 168, 168, 172, 172, 172, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 171, 171, 171, 170, 170, 170, 168, 168, 168, 165, 165, 165, 165, 165, 165, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 165, 165, 165, 167, 167, 167, 167, 167, 167, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 143, 143, 143, 138, 138, 138, 135, 135, 135, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 93, 93, 93, 88, 88, 88, 82, 82, 82, 76, 76, 76, 71, 71, 71, 67, 67, 67, 65, 65, 65, 65, 65, 65, 66, 66, 66, 70, 70, 70, 75, 75, 75, 80, 80, 80, 85, 85, 85, 89, 89, 89, 92, 92, 92, 97, 97, 97, 102, 102, 102, 108, 108, 108, 115, 115, 115, 122, 122, 122, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 163, 163, 163, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 171, 171, 171, 169, 169, 169, 170, 170, 170, 173, 173, 173, 175, 175, 175, 176, 176, 176, 175, 175, 175, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 171, 171, 171, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 109, 109, 109, 105, 105, 105, 154, 154, 154, 156, 156, 156, 155, 155, 155, 152, 152, 152, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 157, 157, 157, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 158, 158, 158, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 121, 121, 121, 125, 125, 125, 128, 128, 128, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 152, 152, 152, 158, 158, 158, 165, 165, 165, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 169, 169, 169, 166, 166, 166, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 161, 161, 161, 158, 158, 158, 153, 153, 153, 147, 147, 147, 142, 142, 142, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 122, 122, 122, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 99, 99, 99, 95, 95, 95, 90, 90, 90, 86, 86, 86, 82, 82, 82, 76, 76, 76, 72, 72, 72, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 68, 68, 68, 72, 72, 72, 77, 77, 77, 81, 81, 81, 85, 85, 85, 88, 88, 88, 93, 93, 93, 99, 99, 99, 106, 106, 106, 114, 114, 114, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 134, 134, 134, 136, 136, 136, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 174, 174, 174, 172, 172, 172, 168, 168, 168, 163, 163, 163, 159, 159, 159, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 115, 115, 115, 111, 111, 111, 108, 108, 108, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 158, 158, 158, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 131, 131, 131, 125, 125, 125, 119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 135, 135, 135, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 149, 149, 149, 154, 154, 154, 161, 161, 161, 167, 167, 167, 172, 172, 172, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 173, 173, 173, 176, 176, 176, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 162, 162, 162, 158, 158, 158, 153, 153, 153, 147, 147, 147, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 126, 126, 126, 121, 121, 121, 116, 116, 116, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 100, 100, 100, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 82, 82, 82, 78, 78, 78, 75, 75, 75, 72, 72, 72, 70, 70, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 71, 71, 71, 74, 74, 74, 77, 77, 77, 81, 81, 81, 86, 86, 86, 92, 92, 92, 98, 98, 98, 105, 105, 105, 113, 113, 113, 120, 120, 120, 125, 125, 125, 127, 127, 127, 128, 128, 128, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 172, 172, 172, 167, 167, 167, 162, 162, 162, 158, 158, 158, 155, 155, 155, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 134, 134, 134, 128, 128, 128, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 148, 148, 148, 152, 152, 152, 157, 157, 157, 160, 160, 160, 161, 161, 161, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 143, 143, 143, 139, 139, 139, 134, 134, 134, 128, 128, 128, 122, 122, 122, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 127, 127, 127, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 145, 145, 145, 151, 151, 151, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 176, 176, 176, 178, 178, 178, 181, 181, 181, 181, 181, 181, 178, 178, 178, 173, 173, 173, 169, 169, 169, 165, 165, 165, 160, 160, 160, 154, 154, 154, 147, 147, 147, 141, 141, 141, 139, 139, 139, 138, 138, 138, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 127, 127, 127, 124, 124, 124, 119, 119, 119, 115, 115, 115, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 85, 85, 85, 81, 81, 81, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 79, 79, 79, 86, 86, 86, 92, 92, 92, 98, 98, 98, 104, 104, 104, 110, 110, 110, 117, 117, 117, 123, 123, 123, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 134, 134, 134, 139, 139, 139, 144, 144, 144, 148, 148, 148, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 176, 176, 176, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 172, 172, 172, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 121, 121, 121, 118, 118, 118, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 133, 133, 133, 136, 136, 136, 140, 140, 140, 144, 144, 144, 149, 149, 149, 154, 154, 154, 158, 158, 158, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 136, 136, 136, 130, 130, 130, 123, 123, 123, 118, 118, 118, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 141, 141, 141, 145, 145, 145, 151, 151, 151, 157, 157, 157, 162, 162, 162, 165, 165, 165, 168, 168, 168, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 175, 175, 175, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 184, 184, 184, 185, 185, 185, 184, 184, 184, 181, 181, 181, 177, 177, 177, 172, 172, 172, 167, 167, 167, 162, 162, 162, 155, 155, 155, 147, 147, 147, 141, 141, 141, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 80, 80, 80, 77, 77, 77, 73, 73, 73, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 73, 73, 73, 74, 74, 74, 79, 79, 79, 86, 86, 86, 93, 93, 93, 98, 98, 98, 103, 103, 103, 108, 108, 108, 115, 115, 115, 121, 121, 121, 125, 125, 125, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 137, 137, 137, 141, 141, 141, 145, 145, 145, 150, 150, 150, 155, 155, 155, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 177, 177, 177, 173, 173, 173, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 127, 127, 127, 123, 123, 123, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 145, 145, 145, 150, 150, 150, 155, 155, 155, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 138, 138, 138, 132, 132, 132, 125, 125, 125, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 128, 128, 128, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 162, 162, 162, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 180, 180, 180, 183, 183, 183, 186, 186, 186, 188, 188, 188, 187, 187, 187, 185, 185, 185, 182, 182, 182, 178, 178, 178, 174, 174, 174, 169, 169, 169, 163, 163, 163, 156, 156, 156, 148, 148, 148, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 133, 133, 133, 128, 128, 128, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 95, 95, 95, 93, 93, 93, 91, 91, 91, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 68, 68, 68, 67, 67, 67, 68, 68, 68, 71, 71, 71, 72, 72, 72, 74, 74, 74, 79, 79, 79, 86, 86, 86, 93, 93, 93, 98, 98, 98, 102, 102, 102, 107, 107, 107, 113, 113, 113, 119, 119, 119, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 146, 146, 146, 153, 153, 153, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 184, 184, 184, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 172, 172, 172, 169, 169, 169, 166, 166, 166, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 133, 133, 133, 130, 130, 130, 128, 128, 128, 129, 129, 129, 132, 132, 132, 135, 135, 135, 138, 138, 138, 143, 143, 143, 147, 147, 147, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 154, 154, 154, 155, 155, 155, 156, 156, 156, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 140, 140, 140, 134, 134, 134, 128, 128, 128, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 137, 137, 137, 140, 140, 140, 142, 142, 142, 145, 145, 145, 149, 149, 149, 154, 154, 154, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 176, 176, 176, 179, 179, 179, 181, 181, 181, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 182, 182, 182, 182, 182, 182, 185, 185, 185, 188, 188, 188, 190, 190, 190, 189, 189, 189, 185, 185, 185, 181, 181, 181, 178, 178, 178, 174, 174, 174, 169, 169, 169, 164, 164, 164, 157, 157, 157, 150, 150, 150, 145, 145, 145, 142, 142, 142, 141, 141, 141, 138, 138, 138, 134, 134, 134, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 86, 86, 86, 82, 82, 82, 78, 78, 78, 74, 74, 74, 69, 69, 69, 66, 66, 66, 64, 64, 64, 65, 65, 65, 68, 68, 68, 71, 71, 71, 74, 74, 74, 79, 79, 79, 85, 85, 85, 91, 91, 91, 96, 96, 96, 101, 101, 101, 106, 106, 106, 112, 112, 112, 117, 117, 117, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 125, 125, 125, 130, 130, 130, 134, 134, 134, 138, 138, 138, 143, 143, 143, 150, 150, 150, 156, 156, 156, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 175, 175, 175, 177, 177, 177, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 184, 184, 184, 186, 186, 186, 187, 187, 187, 186, 186, 186, 184, 184, 184, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 177, 177, 177, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 138, 138, 138, 136, 136, 136, 132, 132, 132), +"format": "RGB8", +"height": 400, +"mipmaps": false, +"width": 200 +} + +[sub_resource type="ImageTexture" id="ImageTexture_bh7st"] +image = SubResource("Image_iltsg") + [node name="PreviewScratchpad" type="Control"] layout_mode = 3 anchors_preset = 0 @@ -18,4 +30,5 @@ show_behind_parent = true layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 +texture = SubResource("ImageTexture_bh7st") stretch_mode = 5 diff --git a/addons/zylann.hterrain/tools/generator/texture_generator.gd b/addons/zylann.hterrain/tools/generator/texture_generator.gd index 3a4db873..c70c78c7 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator.gd @@ -135,7 +135,7 @@ func run(): # float(largest_padding) / padded_size.x, # float(largest_padding) / padded_size.y) - _ci.rect_size = padded_size + _ci.size = padded_size _viewport.size = padded_size _viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 5bfb2460..48171ac2 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -441,7 +441,7 @@ func _get_pointed_cell_position(mouse_position: Vector2, p_camera: Camera3D):# - # Need to do an extra conversion in case the editor viewport is in half-resolution mode var viewport := p_camera.get_viewport() var viewport_container = viewport.get_parent() - var screen_pos = mouse_position * viewport.size / viewport_container.rect_size + var screen_pos = mouse_position * viewport.size / viewport_container.size var origin = p_camera.project_ray_origin(screen_pos) var dir = p_camera.project_ray_normal(screen_pos) diff --git a/addons/zylann.hterrain/tools/util/editor_util.gd b/addons/zylann.hterrain/tools/util/editor_util.gd index 137ea78d..7d53e580 100644 --- a/addons/zylann.hterrain/tools/util/editor_util.gd +++ b/addons/zylann.hterrain/tools/util/editor_util.gd @@ -10,11 +10,13 @@ static func create_open_file_dialog() -> ConfirmationDialog: var d if Engine.is_editor_hint(): - d = EditorFileDialog.new() + # TODO Workaround bug when editor-only classes are created in source code, even if not run + # https://github.com/godotengine/godot/issues/73525 +# d = EditorFileDialog.new() + d = ClassDB.instantiate(&"EditorFileDialog") d.file_mode = EditorFileDialog.FILE_MODE_OPEN_FILE d.access = EditorFileDialog.ACCESS_RESOURCES else: - # Duh. I need to be able to test it. d = FileDialog.new() d.file_mode = FileDialog.FILE_MODE_OPEN_FILE d.access = FileDialog.ACCESS_RESOURCES @@ -25,11 +27,13 @@ static func create_open_file_dialog() -> ConfirmationDialog: static func create_open_dir_dialog() -> ConfirmationDialog: var d if Engine.is_editor_hint(): - d = EditorFileDialog.new() + # TODO Workaround bug when editor-only classes are created in source code, even if not run + # https://github.com/godotengine/godot/issues/73525 +# d = EditorFileDialog.new() + d = ClassDB.instantiate(&"EditorFileDialog") d.file_mode = EditorFileDialog.FILE_MODE_OPEN_DIR d.access = EditorFileDialog.ACCESS_RESOURCES else: - # Duh. I need to be able to test it. d = FileDialog.new() d.file_mode = FileDialog.FILE_MODE_OPEN_DIR d.access = FileDialog.ACCESS_RESOURCES diff --git a/addons/zylann.hterrain/util/util.gd b/addons/zylann.hterrain/util/util.gd index 15e7c2f1..e2cd32c9 100644 --- a/addons/zylann.hterrain/util/util.gd +++ b/addons/zylann.hterrain/util/util.gd @@ -543,5 +543,7 @@ static func update_texture_partial( # # TODO Optimize: Godot 4 has lost the ability to update textures partially! - tex.update(im) + var fuck = tex.get_image() + fuck.blit_rect(im, src_rect, dst_pos) + tex.update(fuck) diff --git a/project.godot b/project.godot index aaf38f54..c820d46e 100644 --- a/project.godot +++ b/project.godot @@ -18,7 +18,6 @@ icon="res://icon.png" [debug] -settings/stdout/print_fps=true gdscript/warnings/unused_variable=false [display] From 843784044ab00b58bb6eae581ad99557290c57d4 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 19:25:52 +0000 Subject: [PATCH 12/94] References to ".shader" should be ".gdshader" --- addons/zylann.hterrain/hterrain.gd | 24 +++++++++---------- .../zylann.hterrain/hterrain_detail_layer.gd | 2 +- addons/zylann.hterrain/tools/brush/decal.gd | 2 +- .../tools/generator/generator_dialog.gd | 2 +- .../tools/minimap/minimap.tscn | 2 +- .../zylann.hterrain/tools/normalmap_baker.gd | 2 +- .../zylann.hterrain/tools/terrain_preview.gd | 2 +- .../set_editor/texture_set_editor.tscn | 4 ++-- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index ee189ff6..4cd1c4ab 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -44,33 +44,33 @@ const _SHADER_TYPE_HINT_STRING = \ const _builtin_shaders = { SHADER_CLASSIC4: { - path = "res://addons/zylann.hterrain/shaders/simple4.shader", - global_path = "res://addons/zylann.hterrain/shaders/simple4_global.shader" + path = "res://addons/zylann.hterrain/shaders/simple4.gdshader", + global_path = "res://addons/zylann.hterrain/shaders/simple4_global.gdshader" }, SHADER_CLASSIC4_LITE: { - path = "res://addons/zylann.hterrain/shaders/simple4_lite.shader", - global_path = "res://addons/zylann.hterrain/shaders/simple4_global.shader" + path = "res://addons/zylann.hterrain/shaders/simple4_lite.gdshader", + global_path = "res://addons/zylann.hterrain/shaders/simple4_global.gdshader" }, SHADER_LOW_POLY: { - path = "res://addons/zylann.hterrain/shaders/low_poly.shader", + path = "res://addons/zylann.hterrain/shaders/low_poly.gdshader", global_path = "" # Not supported }, SHADER_ARRAY: { - path = "res://addons/zylann.hterrain/shaders/array.shader", - global_path = "res://addons/zylann.hterrain/shaders/array_global.shader" + path = "res://addons/zylann.hterrain/shaders/array.gdshader", + global_path = "res://addons/zylann.hterrain/shaders/array_global.gdshader" }, SHADER_MULTISPLAT16: { - path = "res://addons/zylann.hterrain/shaders/multisplat16.shader", - global_path = "res://addons/zylann.hterrain/shaders/multisplat16_global.shader" + path = "res://addons/zylann.hterrain/shaders/multisplat16.gdshader", + global_path = "res://addons/zylann.hterrain/shaders/multisplat16_global.gdshader" }, SHADER_MULTISPLAT16_LITE: { - path = "res://addons/zylann.hterrain/shaders/multisplat16_lite.shader", - global_path = "res://addons/zylann.hterrain/shaders/multisplat16_global.shader" + path = "res://addons/zylann.hterrain/shaders/multisplat16_lite.gdshader", + global_path = "res://addons/zylann.hterrain/shaders/multisplat16_global.gdshader" } } const _NORMAL_BAKER_PATH = "res://addons/zylann.hterrain/tools/normalmap_baker.gd" -const _LOOKDEV_SHADER_PATH = "res://addons/zylann.hterrain/shaders/lookdev.shader" +const _LOOKDEV_SHADER_PATH = "res://addons/zylann.hterrain/shaders/lookdev.gdshader" const SHADER_PARAM_INVERSE_TRANSFORM = "u_terrain_inverse_transform" const SHADER_PARAM_NORMAL_BASIS = "u_terrain_normal_basis" diff --git a/addons/zylann.hterrain/hterrain_detail_layer.gd b/addons/zylann.hterrain/hterrain_detail_layer.gd index f5f9dc6a..30b0deb1 100644 --- a/addons/zylann.hterrain/hterrain_detail_layer.gd +++ b/addons/zylann.hterrain/hterrain_detail_layer.gd @@ -23,7 +23,7 @@ const DEFAULT_MESH_PATH = "res://addons/zylann.hterrain/models/grass_quad.obj" var HTerrain = load("res://addons/zylann.hterrain/hterrain.gd") const CHUNK_SIZE = 32 -const DEFAULT_SHADER_PATH = "res://addons/zylann.hterrain/shaders/detail.shader" +const DEFAULT_SHADER_PATH = "res://addons/zylann.hterrain/shaders/detail.gdshader" const DEBUG = false # These parameters are considered built-in, diff --git a/addons/zylann.hterrain/tools/brush/decal.gd b/addons/zylann.hterrain/tools/brush/decal.gd index a645e113..781c986f 100644 --- a/addons/zylann.hterrain/tools/brush/decal.gd +++ b/addons/zylann.hterrain/tools/brush/decal.gd @@ -18,7 +18,7 @@ var _terrain : HTerrain = null func _init(): - _material.shader = load("res://addons/zylann.hterrain/tools/brush/decal.shader") + _material.shader = load("res://addons/zylann.hterrain/tools/brush/decal.gdshader") _mesh_instance = HT_DirectMeshInstance.new() _mesh_instance.set_material(_material) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 8099ec93..546d06b3 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -38,7 +38,7 @@ var _viewport_resolution := MAX_VIEWPORT_RESOLUTION static func get_shader(shader_name: String) -> Shader: var path := "res://addons/zylann.hterrain/tools/generator/shaders"\ - .path_join(str(shader_name, ".shader")) + .path_join(str(shader_name, ".gdshader")) return load(path) as Shader diff --git a/addons/zylann.hterrain/tools/minimap/minimap.tscn b/addons/zylann.hterrain/tools/minimap/minimap.tscn index 50528343..3aa44325 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap.tscn +++ b/addons/zylann.hterrain/tools/minimap/minimap.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=7 format=2] [ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap_normal.shader" type="Shader" id=2] +[ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap_normal.gdshader" type="Shader" id=2] [ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap_overlay.gd" type="Script" id=3] [ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_minimap_position.svg" type="Texture" id=4] [ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg" type="Texture" id=5] diff --git a/addons/zylann.hterrain/tools/normalmap_baker.gd b/addons/zylann.hterrain/tools/normalmap_baker.gd index 83694c36..f582faa5 100644 --- a/addons/zylann.hterrain/tools/normalmap_baker.gd +++ b/addons/zylann.hterrain/tools/normalmap_baker.gd @@ -33,7 +33,7 @@ func _init(): add_child(_viewport) var mat = ShaderMaterial.new() - mat.shader = load("res://addons/zylann.hterrain/tools/bump2normal_tex.shader") + mat.shader = load("res://addons/zylann.hterrain/tools/bump2normal_tex.gdshader") _ci = Sprite2D.new() _ci.centered = false diff --git a/addons/zylann.hterrain/tools/terrain_preview.gd b/addons/zylann.hterrain/tools/terrain_preview.gd index a3300ebb..1c64b6d3 100644 --- a/addons/zylann.hterrain/tools/terrain_preview.gd +++ b/addons/zylann.hterrain/tools/terrain_preview.gd @@ -14,7 +14,7 @@ signal dragged(relative, button_mask) @onready var _light : DirectionalLight3D = $Viewport/DirectionalLight # Use the simplest shader -var _shader : Shader = load("res://addons/zylann.hterrain/shaders/simple4_lite.shader") +var _shader : Shader = load("res://addons/zylann.hterrain/shaders/simple4_lite.gdshader") var _yaw := 0.0 var _pitch := -PI / 6.0 var _distance := 0.0 diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn index 4ef7ca42..f3760693 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=9 format=2] [ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_alpha.shader" type="Shader" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_color.shader" type="Shader" id=3] +[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_alpha.gdshader" type="Shader" id=2] +[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_color.gdshader" type="Shader" id=3] [ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=5] [sub_resource type="ShaderMaterial" id=1] From 27abdfdec23945df101984a2f23e853ab433b47c Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 19:34:26 +0000 Subject: [PATCH 13/94] Re-save minimap scene to fix shader material warning --- .../tools/minimap/minimap.tscn | 76 +++++++------------ 1 file changed, 28 insertions(+), 48 deletions(-) diff --git a/addons/zylann.hterrain/tools/minimap/minimap.tscn b/addons/zylann.hterrain/tools/minimap/minimap.tscn index 3aa44325..b2a7ef59 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap.tscn +++ b/addons/zylann.hterrain/tools/minimap/minimap.tscn @@ -1,76 +1,56 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=7 format=3 uid="uid://cba6k3hrwhrke"] -[ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap_normal.gdshader" type="Shader" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap_overlay.gd" type="Script" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_minimap_position.svg" type="Texture" id=4] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg" type="Texture" id=5] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/minimap/minimap.gd" id="1"] +[ext_resource type="Shader" path="res://addons/zylann.hterrain/tools/minimap/minimap_normal.gdshader" id="2"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/minimap/minimap_overlay.gd" id="3"] +[ext_resource type="Texture2D" uid="uid://c1el0dmyvaaij" path="res://addons/zylann.hterrain/tools/icons/icon_minimap_position.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://cc47smy24m368" path="res://addons/zylann.hterrain/tools/icons/icon_minimap_out_of_range_position.svg" id="5"] -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 2 ) -shader_param/u_light_direction = Vector3( 0.5, -0.7, 0.2 ) +[sub_resource type="ShaderMaterial" id="1"] +shader = ExtResource("2") +shader_parameter/u_light_direction = Vector3(0.5, -0.7, 0.2) [node name="Minimap" type="Control"] -margin_right = 100.0 -margin_bottom = 104.0 -rect_min_size = Vector2( 100, 0 ) -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +custom_minimum_size = Vector2(100, 0) +layout_mode = 3 +anchors_preset = 0 +offset_right = 100.0 +offset_bottom = 100.0 +script = ExtResource("1") [node name="PopupMenu" type="PopupMenu" parent="."] -margin_right = 20.0 -margin_bottom = 20.0 [node name="ColorRect" type="ColorRect" parent="."] -material = SubResource( 1 ) +material = SubResource("1") +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="X" type="ColorRect" parent="."] -margin_right = 20.0 -margin_bottom = 2.0 -rect_min_size = Vector2( 0, 2 ) +layout_mode = 0 mouse_filter = 2 -color = Color( 0.929412, 0.290196, 0.290196, 0.627451 ) -__meta__ = { -"_edit_use_anchors_": false -} +color = Color(0.929412, 0.290196, 0.290196, 0.627451) [node name="Z" type="ColorRect" parent="."] -margin_right = 2.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 2, 0 ) +layout_mode = 0 mouse_filter = 2 -color = Color( 0.0784314, 0.501961, 1, 0.627451 ) -__meta__ = { -"_edit_use_anchors_": false -} +color = Color(0.0784314, 0.501961, 1, 0.627451) [node name="Y" type="ColorRect" parent="."] -margin_right = 2.0 -margin_bottom = 2.0 -rect_min_size = Vector2( 2, 2 ) +layout_mode = 0 mouse_filter = 2 -color = Color( 0.207843, 0.835294, 0.152941, 0.627451 ) -__meta__ = { -"_edit_use_anchors_": false -} +color = Color(0.207843, 0.835294, 0.152941, 0.627451) [node name="Overlay" type="Control" parent="."] +anchors_preset = 0 anchor_right = 1.0 anchor_bottom = 1.0 -rect_clip_content = true mouse_filter = 2 -script = ExtResource( 3 ) -cursor_texture = ExtResource( 4 ) -out_of_range_texture = ExtResource( 5 ) +script = ExtResource("3") +cursor_texture = ExtResource("4") +out_of_range_texture = ExtResource("5") -[node name="Cursor" type="Sprite" parent="Overlay"] +[node name="Cursor" type="Sprite2D" parent="Overlay"] [connection signal="id_pressed" from="PopupMenu" to="." method="_on_PopupMenu_id_pressed"] From 0cad8a09d6d61de00488bf08511622aa634fefaa Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 19:56:33 +0000 Subject: [PATCH 14/94] Fix scratchpad image was not supposed to be saved in the scene --- .../brush/settings_dialog/preview_scratchpad.gd | 5 +++++ .../brush/settings_dialog/preview_scratchpad.tscn | 15 +-------------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd index 03879444..ed50f1f7 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd @@ -7,6 +7,7 @@ const HT_PreviewPainter = preload("./preview_painter.gd") const HT_Brush = preload("../brush.gd") const HT_Logger = preload("../../../util/logger.gd") const HT_EditorUtil = preload("../../util/editor_util.gd") +const HT_Util = preload("../../../util/util.gd") @onready var _texture_rect : TextureRect = $TextureRect @onready var _painter : HT_PreviewPainter = $Painter @@ -15,6 +16,10 @@ var _logger := HT_Logger.get_for(self) func _ready(): + if HT_Util.is_in_edited_scene(self): + # If it runs in the edited scene, + # saving the scene would also save the ImageTexture in it... + return reset_image() # Default so it doesnt crash when painting and can be tested var default_brush_texture = \ diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn index c41ef99b..6c7c91b1 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn @@ -1,20 +1,8 @@ -[gd_scene load_steps=5 format=3 uid="uid://ng00jipfeucy"] +[gd_scene load_steps=3 format=3 uid="uid://ng00jipfeucy"] [ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.gd" id="1"] [ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd" id="2"] -[sub_resource type="Image" id="Image_iltsg"] -data = { -"data": PackedByteArray(127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 103, 103, 103, 99, 99, 99, 96, 96, 96, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 95, 95, 95, 98, 98, 98, 102, 102, 102, 106, 106, 106, 110, 110, 110, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 115, 115, 115, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 99, 99, 99, 100, 100, 100, 101, 101, 101, 99, 99, 99, 96, 96, 96, 91, 91, 91, 88, 88, 88, 86, 86, 86, 87, 87, 87, 89, 89, 89, 93, 93, 93, 97, 97, 97, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 99, 99, 99, 97, 97, 97, 94, 94, 94, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 101, 101, 101, 102, 102, 102, 105, 105, 105, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 124, 124, 124, 127, 127, 127, 132, 132, 132, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 105, 105, 105, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 86, 86, 86, 81, 81, 81, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 93, 93, 93, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 103, 103, 103, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 81, 81, 81, 79, 79, 79, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 97, 97, 97, 92, 92, 92, 89, 89, 89, 86, 86, 86, 86, 86, 86, 88, 88, 88, 92, 92, 92, 96, 96, 96, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 121, 121, 121, 125, 125, 125, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 114, 114, 114, 116, 116, 116, 121, 121, 121, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 137, 137, 137, 130, 130, 130, 122, 122, 122, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 106, 106, 106, 100, 100, 100, 96, 96, 96, 93, 93, 93, 91, 91, 91, 87, 87, 87, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 92, 92, 92, 96, 96, 96, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 103, 103, 103, 100, 100, 100, 95, 95, 95, 90, 90, 90, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 78, 78, 78, 77, 77, 77, 78, 78, 78, 81, 81, 81, 82, 82, 82, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 87, 87, 87, 86, 86, 86, 87, 87, 87, 90, 90, 90, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 141, 141, 141, 134, 134, 134, 125, 125, 125, 119, 119, 119, 114, 114, 114, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 106, 106, 106, 101, 101, 101, 96, 96, 96, 94, 94, 94, 91, 91, 91, 89, 89, 89, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 92, 92, 92, 93, 93, 93, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 103, 103, 103, 99, 99, 99, 94, 94, 94, 88, 88, 88, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 76, 76, 76, 79, 79, 79, 82, 82, 82, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 98, 98, 98, 100, 100, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 125, 125, 125, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 138, 138, 138, 130, 130, 130, 123, 123, 123, 117, 117, 117, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 101, 101, 101, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 99, 99, 99, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 102, 102, 102, 97, 97, 97, 92, 92, 92, 86, 86, 86, 83, 83, 83, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 75, 75, 75, 78, 78, 78, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 96, 96, 96, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 109, 109, 109, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 123, 123, 123, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 150, 150, 150, 147, 147, 147, 141, 141, 141, 135, 135, 135, 128, 128, 128, 121, 121, 121, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 99, 99, 99, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 103, 103, 103, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 100, 100, 100, 96, 96, 96, 91, 91, 91, 85, 85, 85, 81, 81, 81, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 77, 77, 77, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 93, 93, 93, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 106, 106, 106, 110, 110, 110, 114, 114, 114, 116, 116, 116, 117, 117, 117, 120, 120, 120, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 144, 144, 144, 148, 148, 148, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 148, 148, 148, 143, 143, 143, 137, 137, 137, 130, 130, 130, 124, 124, 124, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 99, 99, 99, 98, 98, 98, 94, 94, 94, 90, 90, 90, 85, 85, 85, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 85, 85, 85, 90, 90, 90, 93, 93, 93, 93, 93, 93, 91, 91, 91, 91, 91, 91, 90, 90, 90, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 85, 85, 85, 90, 90, 90, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 102, 102, 102, 107, 107, 107, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 151, 151, 151, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 146, 146, 146, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 154, 154, 154, 150, 150, 150, 144, 144, 144, 138, 138, 138, 131, 131, 131, 126, 126, 126, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 105, 105, 105, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 78, 78, 78, 75, 75, 75, 73, 73, 73, 74, 74, 74, 74, 74, 74, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 89, 89, 89, 92, 92, 92, 93, 93, 93, 91, 91, 91, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 82, 82, 82, 88, 88, 88, 93, 93, 93, 96, 96, 96, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 104, 104, 104, 110, 110, 110, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 153, 153, 153, 147, 147, 147, 140, 140, 140, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 105, 105, 105, 101, 101, 101, 98, 98, 98, 98, 98, 98, 99, 99, 99, 102, 102, 102, 106, 106, 106, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 86, 86, 86, 82, 82, 82, 76, 76, 76, 73, 73, 73, 72, 72, 72, 73, 73, 73, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 82, 82, 82, 87, 87, 87, 90, 90, 90, 91, 91, 91, 89, 89, 89, 87, 87, 87, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 74, 74, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 74, 74, 74, 79, 79, 79, 85, 85, 85, 90, 90, 90, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 113, 113, 113, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 98, 98, 98, 103, 103, 103, 108, 108, 108, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 152, 152, 152, 145, 145, 145, 138, 138, 138, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 80, 80, 80, 75, 75, 75, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 82, 82, 82, 85, 85, 85, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 72, 72, 72, 76, 76, 76, 82, 82, 82, 88, 88, 88, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 94, 94, 94, 97, 97, 97, 102, 102, 102, 108, 108, 108, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 149, 149, 149, 146, 146, 146, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 166, 166, 166, 163, 163, 163, 157, 157, 157, 150, 150, 150, 143, 143, 143, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 104, 104, 104, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 75, 75, 75, 72, 72, 72, 72, 72, 72, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 74, 74, 74, 80, 80, 80, 86, 86, 86, 90, 90, 90, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 94, 94, 94, 92, 92, 92, 93, 93, 93, 96, 96, 96, 102, 102, 102, 107, 107, 107, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 168, 168, 168, 165, 165, 165, 160, 160, 160, 153, 153, 153, 147, 147, 147, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 105, 105, 105, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 104, 104, 104, 100, 100, 100, 97, 97, 97, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 88, 88, 88, 85, 85, 85, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 76, 76, 76, 74, 74, 74, 74, 74, 74, 75, 75, 75, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 80, 80, 80, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 69, 69, 69, 68, 68, 68, 70, 70, 70, 73, 73, 73, 78, 78, 78, 84, 84, 84, 88, 88, 88, 90, 90, 90, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 93, 93, 93, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 153, 153, 153, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 168, 168, 168, 171, 171, 171, 171, 171, 171, 170, 170, 170, 166, 166, 166, 161, 161, 161, 156, 156, 156, 151, 151, 151, 147, 147, 147, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 102, 102, 102, 98, 98, 98, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 99, 99, 99, 95, 95, 95, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 77, 77, 77, 79, 79, 79, 80, 80, 80, 78, 78, 78, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 84, 84, 84, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 72, 72, 72, 70, 70, 70, 69, 69, 69, 69, 69, 69, 71, 71, 71, 74, 74, 74, 78, 78, 78, 82, 82, 82, 85, 85, 85, 87, 87, 87, 90, 90, 90, 92, 92, 92, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 116, 116, 116, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 94, 94, 94, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 165, 165, 165, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 173, 173, 173, 171, 171, 171, 168, 168, 168, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 170, 170, 170, 167, 167, 167, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 143, 143, 143, 137, 137, 137, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 112, 112, 112, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 104, 104, 104, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 104, 104, 104, 110, 110, 110, 116, 116, 116, 118, 118, 118, 118, 118, 118, 117, 117, 117, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 83, 83, 83, 85, 85, 85, 85, 85, 85, 83, 83, 83, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 92, 92, 92, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 102, 102, 102, 98, 98, 98, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 102, 102, 102, 107, 107, 107, 111, 111, 111, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 170, 170, 170, 168, 168, 168, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 155, 155, 155, 154, 154, 154, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 170, 170, 170, 169, 169, 169, 170, 170, 170, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 150, 150, 150, 144, 144, 144, 137, 137, 137, 132, 132, 132, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 113, 113, 113, 118, 118, 118, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 90, 90, 90, 88, 88, 88, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 78, 78, 78, 80, 80, 80, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 84, 84, 84, 87, 87, 87, 87, 87, 87, 85, 85, 85, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 89, 89, 89, 93, 93, 93, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 102, 102, 102, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 106, 106, 106, 103, 103, 103, 100, 100, 100, 98, 98, 98, 98, 98, 98, 99, 99, 99, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 169, 169, 169, 166, 166, 166, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 162, 162, 162, 158, 158, 158, 157, 157, 157, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 171, 171, 171, 174, 174, 174, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 149, 149, 149, 144, 144, 144, 139, 139, 139, 134, 134, 134, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 98, 98, 98, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 110, 110, 110, 115, 115, 115, 120, 120, 120, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 108, 108, 108, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 85, 85, 85, 88, 88, 88, 89, 89, 89, 87, 87, 87, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 98, 98, 98, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 115, 115, 115, 118, 118, 118, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 108, 108, 108, 104, 104, 104, 100, 100, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 93, 93, 93, 90, 90, 90, 88, 88, 88, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 170, 170, 170, 171, 171, 171, 169, 169, 169, 165, 165, 165, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 170, 170, 170, 173, 173, 173, 175, 175, 175, 176, 176, 176, 174, 174, 174, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 158, 158, 158, 153, 153, 153, 148, 148, 148, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 105, 105, 105, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 100, 100, 100, 96, 96, 96, 92, 92, 92, 90, 90, 90, 88, 88, 88, 87, 87, 87, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 72, 72, 72, 75, 75, 75, 79, 79, 79, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 82, 82, 82, 83, 83, 83, 85, 85, 85, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 91, 91, 91, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 105, 105, 105, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 105, 105, 105, 102, 102, 102, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 91, 91, 91, 87, 87, 87, 86, 86, 86, 153, 153, 153, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 163, 163, 163, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 175, 175, 175, 171, 171, 171, 168, 168, 168, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 167, 167, 167, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 156, 156, 156, 150, 150, 150, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 107, 107, 107, 109, 109, 109, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 121, 121, 121, 116, 116, 116, 111, 111, 111, 107, 107, 107, 104, 104, 104, 100, 100, 100, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 70, 70, 70, 68, 68, 68, 67, 67, 67, 67, 67, 67, 71, 71, 71, 75, 75, 75, 80, 80, 80, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 83, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 105, 105, 105, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 124, 124, 124, 123, 123, 123, 120, 120, 120, 115, 115, 115, 111, 111, 111, 108, 108, 108, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 86, 86, 86, 85, 85, 85, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 176, 176, 176, 172, 172, 172, 169, 169, 169, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 169, 169, 169, 166, 166, 166, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 157, 157, 157, 151, 151, 151, 146, 146, 146, 142, 142, 142, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 122, 122, 122, 119, 119, 119, 114, 114, 114, 111, 111, 111, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 116, 116, 116, 110, 110, 110, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 91, 91, 91, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 64, 64, 64, 67, 67, 67, 71, 71, 71, 76, 76, 76, 80, 80, 80, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 96, 96, 96, 93, 93, 93, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 100, 100, 100, 95, 95, 95, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 102, 102, 102, 105, 105, 105, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 86, 86, 86, 158, 158, 158, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 165, 165, 165, 161, 161, 161, 158, 158, 158, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 171, 171, 171, 172, 172, 172, 172, 172, 172, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 156, 156, 156, 151, 151, 151, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 126, 126, 126, 129, 129, 129, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 115, 115, 115, 110, 110, 110, 105, 105, 105, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 82, 82, 82, 77, 77, 77, 72, 72, 72, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, 64, 64, 64, 62, 62, 62, 61, 61, 61, 61, 61, 61, 63, 63, 63, 67, 67, 67, 72, 72, 72, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 79, 79, 79, 82, 82, 82, 83, 83, 83, 83, 83, 83, 81, 81, 81, 79, 79, 79, 80, 80, 80, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 95, 95, 95, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 99, 99, 99, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 128, 128, 128, 130, 130, 130, 131, 131, 131, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 106, 106, 106, 101, 101, 101, 95, 95, 95, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 115, 115, 115, 109, 109, 109, 103, 103, 103, 98, 98, 98, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 77, 77, 77, 72, 72, 72, 68, 68, 68, 64, 64, 64, 63, 63, 63, 63, 63, 63, 62, 62, 62, 60, 60, 60, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 65, 65, 65, 69, 69, 69, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 77, 77, 77, 80, 80, 80, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 77, 77, 77, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 86, 86, 86, 87, 87, 87, 89, 89, 89, 92, 92, 92, 96, 96, 96, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 93, 93, 93, 89, 89, 89, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 126, 126, 126, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 108, 108, 108, 103, 103, 103, 98, 98, 98, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 165, 165, 165, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 167, 167, 167, 164, 164, 164, 159, 159, 159, 153, 153, 153, 149, 149, 149, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 135, 135, 135, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 112, 112, 112, 106, 106, 106, 100, 100, 100, 94, 94, 94, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 67, 67, 67, 64, 64, 64, 62, 62, 62, 62, 62, 62, 61, 61, 61, 59, 59, 59, 57, 57, 57, 58, 58, 58, 60, 60, 60, 62, 62, 62, 63, 63, 63, 65, 65, 65, 67, 67, 67, 68, 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70, 70, 72, 72, 72, 74, 74, 74, 76, 76, 76, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 75, 75, 75, 79, 79, 79, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 83, 83, 83, 85, 85, 85, 88, 88, 88, 92, 92, 92, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 108, 108, 108, 104, 104, 104, 101, 101, 101, 98, 98, 98, 94, 94, 94, 90, 90, 90, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 158, 158, 158, 152, 152, 152, 149, 149, 149, 148, 148, 148, 148, 148, 148, 146, 146, 146, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 113, 113, 113, 108, 108, 108, 102, 102, 102, 96, 96, 96, 90, 90, 90, 85, 85, 85, 80, 80, 80, 76, 76, 76, 71, 71, 71, 67, 67, 67, 64, 64, 64, 62, 62, 62, 61, 61, 61, 62, 62, 62, 60, 60, 60, 58, 58, 58, 56, 56, 56, 58, 58, 58, 61, 61, 61, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 69, 69, 69, 69, 69, 69, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 71, 71, 71, 72, 72, 72, 72, 72, 72, 70, 70, 70, 71, 71, 71, 74, 74, 74, 78, 78, 78, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 94, 94, 94, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 102, 102, 102, 96, 96, 96, 91, 91, 91, 169, 169, 169, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 166, 166, 166, 167, 167, 167, 170, 170, 170, 173, 173, 173, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 180, 180, 180, 180, 180, 180, 178, 178, 178, 174, 174, 174, 169, 169, 169, 165, 165, 165, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 158, 158, 158, 152, 152, 152, 148, 148, 148, 147, 147, 147, 147, 147, 147, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 111, 111, 111, 104, 104, 104, 98, 98, 98, 93, 93, 93, 89, 89, 89, 84, 84, 84, 80, 80, 80, 74, 74, 74, 70, 70, 70, 66, 66, 66, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 60, 60, 60, 58, 58, 58, 57, 57, 57, 59, 59, 59, 63, 63, 63, 66, 66, 66, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 73, 73, 73, 77, 77, 77, 80, 80, 80, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 110, 110, 110, 115, 115, 115, 121, 121, 121, 125, 125, 125, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 105, 105, 105, 98, 98, 98, 92, 92, 92, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 173, 173, 173, 173, 173, 173, 171, 171, 171, 169, 169, 169, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 178, 178, 178, 181, 181, 181, 182, 182, 182, 181, 181, 181, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 161, 161, 161, 158, 158, 158, 152, 152, 152, 148, 148, 148, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 121, 121, 121, 115, 115, 115, 108, 108, 108, 102, 102, 102, 96, 96, 96, 91, 91, 91, 87, 87, 87, 83, 83, 83, 79, 79, 79, 75, 75, 75, 70, 70, 70, 67, 67, 67, 65, 65, 65, 63, 63, 63, 63, 63, 63, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 61, 61, 61, 64, 64, 64, 68, 68, 68, 68, 68, 68, 67, 67, 67, 65, 65, 65, 64, 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 63, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 69, 69, 69, 73, 73, 73, 78, 78, 78, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 91, 91, 91, 96, 96, 96, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 117, 117, 117, 123, 123, 123, 129, 129, 129, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 112, 112, 112, 106, 106, 106, 100, 100, 100, 94, 94, 94, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 176, 176, 176, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 173, 173, 173, 175, 175, 175, 177, 177, 177, 180, 180, 180, 181, 181, 181, 181, 181, 181, 178, 178, 178, 174, 174, 174, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 159, 159, 159, 159, 159, 159, 159, 159, 159, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 113, 113, 113, 107, 107, 107, 100, 100, 100, 94, 94, 94, 88, 88, 88, 84, 84, 84, 80, 80, 80, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 67, 67, 67, 66, 66, 66, 66, 66, 66, 65, 65, 65, 63, 63, 63, 62, 62, 62, 62, 62, 62, 64, 64, 64, 67, 67, 67, 69, 69, 69, 70, 70, 70, 68, 68, 68, 66, 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 63, 63, 63, 65, 65, 65, 67, 67, 67, 70, 70, 70, 75, 75, 75, 80, 80, 80, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 90, 90, 90, 95, 95, 95, 100, 100, 100, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 105, 105, 105, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 119, 119, 119, 125, 125, 125, 131, 131, 131, 135, 135, 135, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 118, 118, 118, 112, 112, 112, 107, 107, 107, 102, 102, 102, 97, 97, 97, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 177, 177, 177, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 179, 179, 179, 176, 176, 176, 172, 172, 172, 168, 168, 168, 165, 165, 165, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 112, 112, 112, 106, 106, 106, 100, 100, 100, 93, 93, 93, 86, 86, 86, 81, 81, 81, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 66, 66, 66, 64, 64, 64, 63, 63, 63, 64, 64, 64, 67, 67, 67, 70, 70, 70, 74, 74, 74, 78, 78, 78, 82, 82, 82, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 93, 93, 93, 98, 98, 98, 102, 102, 102, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 96, 96, 96, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 115, 115, 115, 120, 120, 120, 126, 126, 126, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 122, 122, 122, 117, 117, 117, 112, 112, 112, 108, 108, 108, 104, 104, 104, 99, 99, 99, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 178, 178, 178, 180, 180, 180, 182, 182, 182, 183, 183, 183, 182, 182, 182, 181, 181, 181, 182, 182, 182, 184, 184, 184, 183, 183, 183, 179, 179, 179, 175, 175, 175, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 180, 180, 180, 181, 181, 181, 179, 179, 179, 174, 174, 174, 170, 170, 170, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 106, 106, 106, 99, 99, 99, 92, 92, 92, 85, 85, 85, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 70, 70, 70, 70, 70, 70, 70, 70, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 67, 67, 67, 65, 65, 65, 66, 66, 66, 69, 69, 69, 74, 74, 74, 78, 78, 78, 81, 81, 81, 83, 83, 83, 86, 86, 86, 89, 89, 89, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 118, 118, 118, 122, 122, 122, 127, 127, 127, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 129, 129, 129, 125, 125, 125, 120, 120, 120, 115, 115, 115, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 165, 165, 165, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 187, 187, 187, 186, 186, 186, 185, 185, 185, 186, 186, 186, 187, 187, 187, 185, 185, 185, 181, 181, 181, 177, 177, 177, 174, 174, 174, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 180, 180, 180, 181, 181, 181, 179, 179, 179, 174, 174, 174, 169, 169, 169, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 147, 147, 147, 143, 143, 143, 141, 141, 141, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 104, 104, 104, 98, 98, 98, 91, 91, 91, 84, 84, 84, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 73, 73, 73, 75, 75, 75, 76, 76, 76, 75, 75, 75, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 70, 70, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 71, 71, 71, 73, 73, 73, 73, 73, 73, 71, 71, 71, 69, 69, 69, 69, 69, 69, 71, 71, 71, 76, 76, 76, 79, 79, 79, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 106, 106, 106, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 153, 153, 153, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 175, 175, 175, 179, 179, 179, 183, 183, 183, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 187, 187, 187, 183, 183, 183, 179, 179, 179, 177, 177, 177, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 175, 175, 175, 170, 170, 170, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 158, 158, 158, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 130, 130, 130, 124, 124, 124, 119, 119, 119, 115, 115, 115, 111, 111, 111, 108, 108, 108, 106, 106, 106, 102, 102, 102, 96, 96, 96, 90, 90, 90, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 73, 73, 73, 77, 77, 77, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 108, 108, 108, 107, 107, 107, 105, 105, 105, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 126, 126, 126, 122, 122, 122, 119, 119, 119, 114, 114, 114, 109, 109, 109, 105, 105, 105, 101, 101, 101, 97, 97, 97, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 154, 154, 154, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 174, 174, 174, 179, 179, 179, 183, 183, 183, 184, 184, 184, 184, 184, 184, 185, 185, 185, 186, 186, 186, 188, 188, 188, 189, 189, 189, 187, 187, 187, 185, 185, 185, 182, 182, 182, 179, 179, 179, 178, 178, 178, 178, 178, 178, 178, 178, 178, 180, 180, 180, 182, 182, 182, 183, 183, 183, 183, 183, 183, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 156, 156, 156, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 137, 137, 137, 131, 131, 131, 124, 124, 124, 117, 117, 117, 111, 111, 111, 106, 106, 106, 103, 103, 103, 102, 102, 102, 99, 99, 99, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 75, 75, 75, 79, 79, 79, 82, 82, 82, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 82, 82, 82, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 73, 73, 73, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 80, 80, 80, 84, 84, 84, 87, 87, 87, 89, 89, 89, 92, 92, 92, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 97, 97, 97, 94, 94, 94, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 172, 172, 172, 177, 177, 177, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 184, 184, 184, 186, 186, 186, 188, 188, 188, 187, 187, 187, 185, 185, 185, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 180, 180, 180, 181, 181, 181, 183, 183, 183, 185, 185, 185, 185, 185, 185, 183, 183, 183, 181, 181, 181, 180, 180, 180, 177, 177, 177, 174, 174, 174, 169, 169, 169, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 137, 137, 137, 130, 130, 130, 122, 122, 122, 114, 114, 114, 107, 107, 107, 101, 101, 101, 98, 98, 98, 97, 97, 97, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 82, 82, 82, 78, 78, 78, 74, 74, 74, 73, 73, 73, 74, 74, 74, 77, 77, 77, 80, 80, 80, 84, 84, 84, 87, 87, 87, 87, 87, 87, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 85, 85, 85, 82, 82, 82, 79, 79, 79, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 110, 110, 110, 103, 103, 103, 97, 97, 97, 93, 93, 93, 92, 92, 92, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 165, 165, 165, 169, 169, 169, 174, 174, 174, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 183, 183, 183, 184, 184, 184, 184, 184, 184, 183, 183, 183, 183, 183, 183, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 183, 183, 183, 185, 185, 185, 186, 186, 186, 185, 185, 185, 182, 182, 182, 180, 180, 180, 178, 178, 178, 176, 176, 176, 172, 172, 172, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 143, 143, 143, 136, 136, 136, 128, 128, 128, 119, 119, 119, 111, 111, 111, 103, 103, 103, 97, 97, 97, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 85, 85, 85, 88, 88, 88, 89, 89, 89, 87, 87, 87, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 89, 89, 89, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 142, 142, 142, 137, 137, 137, 132, 132, 132, 126, 126, 126, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 105, 105, 105, 99, 99, 99, 94, 94, 94, 91, 91, 91, 89, 89, 89, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 166, 166, 166, 170, 170, 170, 174, 174, 174, 176, 176, 176, 175, 175, 175, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 179, 179, 179, 179, 179, 179, 180, 180, 180, 182, 182, 182, 184, 184, 184, 185, 185, 185, 184, 184, 184, 183, 183, 183, 180, 180, 180, 178, 178, 178, 177, 177, 177, 176, 176, 176, 172, 172, 172, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 143, 143, 143, 134, 134, 134, 125, 125, 125, 116, 116, 116, 108, 108, 108, 100, 100, 100, 94, 94, 94, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 88, 88, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 95, 95, 95, 99, 99, 99, 103, 103, 103, 107, 107, 107, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 111, 111, 111, 106, 106, 106, 100, 100, 100, 95, 95, 95, 91, 91, 91, 89, 89, 89, 87, 87, 87, 141, 141, 141, 138, 138, 138, 137, 137, 137, 138, 138, 138, 141, 141, 141, 145, 145, 145, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 142, 142, 142, 133, 133, 133, 123, 123, 123, 114, 114, 114, 106, 106, 106, 98, 98, 98, 92, 92, 92, 89, 89, 89, 87, 87, 87, 88, 88, 88, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 108, 108, 108, 112, 112, 112, 116, 116, 116, 118, 118, 118, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 150, 150, 150, 147, 147, 147, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 140, 140, 140, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 114, 114, 114, 107, 107, 107, 101, 101, 101, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 142, 142, 142, 138, 138, 138, 136, 136, 136, 137, 137, 137, 141, 141, 141, 146, 146, 146, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 154, 154, 154, 154, 154, 154, 157, 157, 157, 161, 161, 161, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 133, 133, 133, 123, 123, 123, 114, 114, 114, 105, 105, 105, 98, 98, 98, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 76, 76, 76, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 84, 84, 84, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 153, 153, 153, 151, 151, 151, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 134, 134, 134, 136, 136, 136, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 132, 132, 132, 129, 129, 129, 125, 125, 125, 119, 119, 119, 111, 111, 111, 104, 104, 104, 99, 99, 99, 95, 95, 95, 92, 92, 92, 90, 90, 90, 86, 86, 86, 80, 80, 80, 143, 143, 143, 138, 138, 138, 136, 136, 136, 136, 136, 136, 140, 140, 140, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 167, 167, 167, 170, 170, 170, 170, 170, 170, 169, 169, 169, 168, 168, 168, 170, 170, 170, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 175, 175, 175, 177, 177, 177, 179, 179, 179, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 162, 162, 162, 163, 163, 163, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 154, 154, 154, 158, 158, 158, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 140, 140, 140, 133, 133, 133, 124, 124, 124, 114, 114, 114, 106, 106, 106, 99, 99, 99, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 81, 81, 81, 78, 78, 78, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 78, 78, 78, 81, 81, 81, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 129, 129, 129, 131, 131, 131, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 128, 128, 128, 124, 124, 124, 117, 117, 117, 109, 109, 109, 103, 103, 103, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 84, 84, 84, 78, 78, 78, 142, 142, 142, 138, 138, 138, 136, 136, 136, 137, 137, 137, 140, 140, 140, 146, 146, 146, 152, 152, 152, 156, 156, 156, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 169, 169, 172, 172, 172, 175, 175, 175, 175, 175, 175, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 167, 167, 167, 171, 171, 171, 176, 176, 176, 178, 178, 178, 177, 177, 177, 174, 174, 174, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 162, 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 138, 138, 138, 131, 131, 131, 123, 123, 123, 114, 114, 114, 106, 106, 106, 100, 100, 100, 96, 96, 96, 91, 91, 91, 87, 87, 87, 83, 83, 83, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 80, 80, 80, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 85, 85, 85, 81, 81, 81, 80, 80, 80, 82, 82, 82, 86, 86, 86, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 134, 134, 134, 133, 133, 133, 130, 130, 130, 126, 126, 126, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 154, 154, 154, 151, 151, 151, 146, 146, 146, 141, 141, 141, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 127, 127, 127, 121, 121, 121, 114, 114, 114, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 88, 88, 88, 83, 83, 83, 77, 77, 77, 142, 142, 142, 139, 139, 139, 137, 137, 137, 138, 138, 138, 142, 142, 142, 148, 148, 148, 153, 153, 153, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 160, 160, 160, 164, 164, 164, 169, 169, 169, 174, 174, 174, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 157, 157, 157, 154, 154, 154, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 162, 162, 162, 164, 164, 164, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 166, 166, 166, 169, 169, 169, 172, 172, 172, 172, 172, 172, 170, 170, 170, 166, 166, 166, 163, 163, 163, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 141, 141, 141, 135, 135, 135, 127, 127, 127, 120, 120, 120, 113, 113, 113, 106, 106, 106, 101, 101, 101, 97, 97, 97, 92, 92, 92, 87, 87, 87, 82, 82, 82, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 79, 79, 79, 81, 81, 81, 84, 84, 84, 86, 86, 86, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 100, 100, 100, 105, 105, 105, 110, 110, 110, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 123, 123, 123, 117, 117, 117, 110, 110, 110, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 82, 82, 82, 78, 78, 78, 145, 145, 145, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 150, 150, 150, 154, 154, 154, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 157, 157, 157, 161, 161, 161, 166, 166, 166, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 175, 175, 175, 172, 172, 172, 169, 169, 169, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 136, 136, 136, 130, 130, 130, 123, 123, 123, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 96, 96, 96, 91, 91, 91, 86, 86, 86, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 84, 84, 84, 88, 88, 88, 91, 91, 91, 91, 91, 91, 91, 91, 91, 93, 93, 93, 95, 95, 95, 98, 98, 98, 101, 101, 101, 105, 105, 105, 111, 111, 111, 117, 117, 117, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 119, 119, 119, 112, 112, 112, 105, 105, 105, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 83, 83, 83, 81, 81, 81, 78, 78, 78, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 170, 170, 170, 168, 168, 168, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 148, 148, 148, 150, 150, 150, 153, 153, 153, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 175, 175, 175, 177, 177, 177, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 158, 158, 158, 154, 154, 154, 149, 149, 149, 145, 145, 145, 141, 141, 141, 136, 136, 136, 131, 131, 131, 125, 125, 125, 120, 120, 120, 115, 115, 115, 111, 111, 111, 107, 107, 107, 101, 101, 101, 96, 96, 96, 91, 91, 91, 87, 87, 87, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 82, 82, 82, 86, 86, 86, 90, 90, 90, 93, 93, 93, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 89, 89, 89, 92, 92, 92, 93, 93, 93, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 116, 116, 116, 122, 122, 122, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 132, 132, 132, 135, 135, 135, 138, 138, 138, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 116, 116, 116, 110, 110, 110, 103, 103, 103, 97, 97, 97, 92, 92, 92, 89, 89, 89, 85, 85, 85, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 170, 170, 170, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 166, 166, 166, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 152, 152, 152, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 179, 179, 179, 177, 177, 177, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 165, 165, 165, 161, 161, 161, 158, 158, 158, 154, 154, 154, 148, 148, 148, 142, 142, 142, 137, 137, 137, 132, 132, 132, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 77, 77, 77, 80, 80, 80, 84, 84, 84, 88, 88, 88, 92, 92, 92, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 88, 88, 88, 89, 89, 89, 90, 90, 90, 93, 93, 93, 95, 95, 95, 99, 99, 99, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 117, 117, 117, 113, 113, 113, 108, 108, 108, 101, 101, 101, 94, 94, 94, 88, 88, 88, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 75, 75, 75, 74, 74, 74, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 158, 158, 158, 160, 160, 160, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 169, 169, 169, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 161, 161, 161, 158, 158, 158, 154, 154, 154, 148, 148, 148, 141, 141, 141, 134, 134, 134, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 103, 103, 103, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 78, 78, 78, 78, 78, 78, 80, 80, 80, 85, 85, 85, 90, 90, 90, 93, 93, 93, 94, 94, 94, 94, 94, 94, 92, 92, 92, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 103, 103, 103, 109, 109, 109, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 129, 129, 129, 133, 133, 133, 138, 138, 138, 142, 142, 142, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 141, 141, 141, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 104, 104, 104, 98, 98, 98, 91, 91, 91, 85, 85, 85, 79, 79, 79, 76, 76, 76, 73, 73, 73, 72, 72, 72, 71, 71, 71, 71, 71, 71, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 158, 158, 158, 160, 160, 160, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 166, 166, 166, 170, 170, 170, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 167, 167, 167, 163, 163, 163, 159, 159, 159, 154, 154, 154, 147, 147, 147, 139, 139, 139, 131, 131, 131, 126, 126, 126, 122, 122, 122, 117, 117, 117, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 94, 94, 94, 92, 92, 92, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 82, 82, 82, 86, 86, 86, 91, 91, 91, 94, 94, 94, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 106, 106, 106, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 136, 136, 136, 140, 140, 140, 144, 144, 144, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 99, 99, 99, 94, 94, 94, 89, 89, 89, 83, 83, 83, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 68, 68, 68, 68, 68, 68, 160, 160, 160, 163, 163, 163, 165, 165, 165, 165, 165, 165, 163, 163, 163, 162, 162, 162, 162, 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 166, 166, 166, 171, 171, 171, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 180, 180, 180, 181, 181, 181, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 158, 158, 158, 151, 151, 151, 143, 143, 143, 135, 135, 135, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 110, 110, 110, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 115, 115, 115, 121, 121, 121, 125, 125, 125, 129, 129, 129, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 141, 141, 141, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 83, 83, 83, 78, 78, 78, 74, 74, 74, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 152, 152, 152, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 159, 159, 159, 165, 165, 165, 170, 170, 170, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 178, 178, 178, 179, 179, 179, 178, 178, 178, 176, 176, 176, 174, 174, 174, 171, 171, 171, 169, 169, 169, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 155, 155, 155, 148, 148, 148, 140, 140, 140, 132, 132, 132, 126, 126, 126, 122, 122, 122, 119, 119, 119, 114, 114, 114, 108, 108, 108, 102, 102, 102, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 87, 87, 87, 90, 90, 90, 95, 95, 95, 98, 98, 98, 99, 99, 99, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 112, 112, 112, 117, 117, 117, 123, 123, 123, 129, 129, 129, 134, 134, 134, 138, 138, 138, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 130, 130, 130, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 80, 80, 80, 76, 76, 76, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 167, 167, 167, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 154, 154, 154, 161, 161, 161, 168, 168, 168, 174, 174, 174, 178, 178, 178, 180, 180, 180, 179, 179, 179, 177, 177, 177, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 156, 156, 156, 151, 151, 151, 145, 145, 145, 138, 138, 138, 132, 132, 132, 126, 126, 126, 122, 122, 122, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 91, 91, 91, 91, 91, 91, 93, 93, 93, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 113, 113, 113, 118, 118, 118, 125, 125, 125, 131, 131, 131, 137, 137, 137, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 77, 77, 77, 74, 74, 74, 72, 72, 72, 69, 69, 69, 68, 68, 68, 161, 161, 161, 163, 163, 163, 165, 165, 165, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 178, 178, 178, 177, 177, 177, 174, 174, 174, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 150, 150, 150, 156, 156, 156, 163, 163, 163, 170, 170, 170, 175, 175, 175, 178, 178, 178, 179, 179, 179, 177, 177, 177, 174, 174, 174, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 138, 138, 138, 133, 133, 133, 127, 127, 127, 122, 122, 122, 117, 117, 117, 112, 112, 112, 106, 106, 106, 102, 102, 102, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 115, 115, 115, 120, 120, 120, 126, 126, 126, 132, 132, 132, 137, 137, 137, 141, 141, 141, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 130, 130, 130, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 89, 89, 89, 84, 84, 84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 69, 69, 69, 161, 161, 161, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 172, 172, 172, 176, 176, 176, 180, 180, 180, 183, 183, 183, 183, 183, 183, 182, 182, 182, 178, 178, 178, 173, 173, 173, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 148, 148, 148, 154, 154, 154, 161, 161, 161, 167, 167, 167, 173, 173, 173, 177, 177, 177, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 134, 134, 134, 128, 128, 128, 121, 121, 121, 116, 116, 116, 111, 111, 111, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 136, 136, 136, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 85, 85, 85, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 70, 70, 70, 163, 163, 163, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 171, 171, 171, 171, 171, 171, 173, 173, 173, 176, 176, 176, 181, 181, 181, 185, 185, 185, 188, 188, 188, 188, 188, 188, 186, 186, 186, 182, 182, 182, 177, 177, 177, 173, 173, 173, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 147, 147, 147, 154, 154, 154, 160, 160, 160, 166, 166, 166, 171, 171, 171, 175, 175, 175, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 136, 136, 136, 128, 128, 128, 121, 121, 121, 115, 115, 115, 110, 110, 110, 104, 104, 104, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 173, 173, 173, 176, 176, 176, 181, 181, 181, 186, 186, 186, 189, 189, 189, 191, 191, 191, 191, 191, 191, 189, 189, 189, 185, 185, 185, 180, 180, 180, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 178, 178, 178, 176, 176, 176, 174, 174, 174, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 165, 165, 165, 161, 161, 161, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 142, 142, 142, 147, 147, 147, 154, 154, 154, 160, 160, 160, 166, 166, 166, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 170, 170, 170, 168, 168, 168, 165, 165, 165, 164, 164, 164, 164, 164, 164, 162, 162, 162, 157, 157, 157, 153, 153, 153, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 143, 143, 143, 136, 136, 136, 129, 129, 129, 122, 122, 122, 116, 116, 116, 109, 109, 109, 103, 103, 103, 98, 98, 98, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 103, 103, 103, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 79, 79, 79, 77, 77, 77, 74, 74, 74, 72, 72, 72, 167, 167, 167, 168, 168, 168, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 175, 175, 175, 179, 179, 179, 185, 185, 185, 189, 189, 189, 191, 191, 191, 193, 193, 193, 192, 192, 192, 189, 189, 189, 185, 185, 185, 181, 181, 181, 177, 177, 177, 174, 174, 174, 174, 174, 174, 175, 175, 175, 178, 178, 178, 180, 180, 180, 181, 181, 181, 180, 180, 180, 177, 177, 177, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 165, 165, 165, 160, 160, 160, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 146, 146, 146, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 163, 163, 163, 162, 162, 162, 159, 159, 159, 154, 154, 154, 151, 151, 151, 149, 149, 149, 150, 150, 150, 150, 150, 150, 147, 147, 147, 141, 141, 141, 134, 134, 134, 127, 127, 127, 122, 122, 122, 116, 116, 116, 110, 110, 110, 104, 104, 104, 99, 99, 99, 96, 96, 96, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 141, 141, 141, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 140, 140, 140, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 77, 77, 77, 74, 74, 74, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 173, 173, 173, 175, 175, 175, 178, 178, 178, 181, 181, 181, 185, 185, 185, 189, 189, 189, 191, 191, 191, 192, 192, 192, 191, 191, 191, 189, 189, 189, 185, 185, 185, 181, 181, 181, 177, 177, 177, 175, 175, 175, 175, 175, 175, 177, 177, 177, 180, 180, 180, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 178, 178, 178, 178, 178, 178, 179, 179, 179, 178, 178, 178, 176, 176, 176, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 131, 131, 131, 128, 128, 128, 127, 127, 127, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 141, 141, 141, 146, 146, 146, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 153, 153, 153, 149, 149, 149, 147, 147, 147, 148, 148, 148, 148, 148, 148, 144, 144, 144, 138, 138, 138, 131, 131, 131, 125, 125, 125, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 125, 125, 125, 126, 126, 126, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 134, 134, 134, 137, 137, 137, 142, 142, 142, 146, 146, 146, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 118, 118, 118, 113, 113, 113, 106, 106, 106, 101, 101, 101, 97, 97, 97, 92, 92, 92, 86, 86, 86, 81, 81, 81, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 167, 167, 167, 168, 168, 168, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 180, 180, 180, 182, 182, 182, 184, 184, 184, 187, 187, 187, 189, 189, 189, 191, 191, 191, 191, 191, 191, 188, 188, 188, 184, 184, 184, 180, 180, 180, 178, 178, 178, 176, 176, 176, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 182, 182, 182, 180, 180, 180, 178, 178, 178, 178, 178, 178, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 176, 176, 176, 172, 172, 172, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 149, 149, 149, 153, 153, 153, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 162, 162, 162, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 145, 145, 145, 144, 144, 144, 141, 141, 141, 135, 135, 135, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 121, 121, 121, 114, 114, 114, 107, 107, 107, 102, 102, 102, 98, 98, 98, 92, 92, 92, 86, 86, 86, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 166, 166, 166, 168, 168, 168, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 180, 180, 180, 181, 181, 181, 182, 182, 182, 185, 185, 185, 189, 189, 189, 191, 191, 191, 191, 191, 191, 188, 188, 188, 184, 184, 184, 181, 181, 181, 179, 179, 179, 178, 178, 178, 179, 179, 179, 180, 180, 180, 182, 182, 182, 182, 182, 182, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 178, 178, 178, 174, 174, 174, 170, 170, 170, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 148, 148, 148, 143, 143, 143, 141, 141, 141, 140, 140, 140, 138, 138, 138, 133, 133, 133, 127, 127, 127, 122, 122, 122, 117, 117, 117, 112, 112, 112, 106, 106, 106, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 110, 110, 110, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 121, 121, 121, 114, 114, 114, 107, 107, 107, 102, 102, 102, 98, 98, 98, 92, 92, 92, 86, 86, 86, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 164, 164, 164, 167, 167, 167, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 179, 179, 179, 180, 180, 180, 181, 181, 181, 184, 184, 184, 188, 188, 188, 192, 192, 192, 191, 191, 191, 188, 188, 188, 185, 185, 185, 182, 182, 182, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 178, 178, 178, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 177, 177, 177, 173, 173, 173, 168, 168, 168, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 140, 140, 140, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 146, 146, 146, 150, 150, 150, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 145, 145, 145, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 122, 122, 122, 117, 117, 117, 111, 111, 111, 105, 105, 105, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 111, 111, 111, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 130, 130, 130, 128, 128, 128, 130, 130, 130, 134, 134, 134, 137, 137, 137, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 114, 114, 114, 107, 107, 107, 102, 102, 102, 97, 97, 97, 92, 92, 92, 86, 86, 86, 81, 81, 81, 79, 79, 79, 76, 76, 76, 74, 74, 74, 73, 73, 73, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 174, 174, 174, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 183, 183, 183, 187, 187, 187, 191, 191, 191, 190, 190, 190, 187, 187, 187, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 172, 172, 172, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 129, 129, 129, 125, 125, 125, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 141, 141, 141, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 117, 117, 117, 112, 112, 112, 107, 107, 107, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 106, 106, 106, 112, 112, 112, 117, 117, 117, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 144, 144, 144, 149, 149, 149, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 147, 147, 147, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 129, 129, 129, 132, 132, 132, 133, 133, 133, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 113, 113, 113, 108, 108, 108, 103, 103, 103, 97, 97, 97, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 77, 77, 77, 74, 74, 74, 72, 72, 72, 159, 159, 159, 163, 163, 163, 167, 167, 167, 170, 170, 170, 174, 174, 174, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 179, 181, 181, 181, 185, 185, 185, 188, 188, 188, 188, 188, 188, 186, 186, 186, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 181, 181, 181, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 173, 173, 173, 170, 170, 170, 166, 166, 166, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 106, 106, 106, 111, 111, 111, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 141, 141, 141, 146, 146, 146, 151, 151, 151, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 131, 131, 131, 126, 126, 126, 121, 121, 121, 118, 118, 118, 116, 116, 116, 113, 113, 113, 108, 108, 108, 103, 103, 103, 98, 98, 98, 92, 92, 92, 88, 88, 88, 86, 86, 86, 84, 84, 84, 80, 80, 80, 75, 75, 75, 72, 72, 72, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 180, 180, 180, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 123, 123, 123, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 114, 114, 114, 117, 117, 117, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 129, 129, 129, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 117, 117, 117, 119, 119, 119, 122, 122, 122, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 146, 146, 146, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 108, 108, 108, 103, 103, 103, 98, 98, 98, 94, 94, 94, 91, 91, 91, 89, 89, 89, 87, 87, 87, 83, 83, 83, 79, 79, 79, 75, 75, 75, 157, 157, 157, 163, 163, 163, 168, 168, 168, 172, 172, 172, 176, 176, 176, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 177, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 160, 160, 160, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 108, 108, 108, 106, 106, 106, 103, 103, 103, 99, 99, 99, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 112, 112, 112, 117, 117, 117, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 121, 121, 121, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 126, 126, 126, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 113, 113, 113, 110, 110, 110, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 92, 92, 92, 90, 90, 90, 86, 86, 86, 82, 82, 82, 79, 79, 79, 157, 157, 157, 163, 163, 163, 169, 169, 169, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 158, 158, 158, 155, 155, 155, 155, 155, 155, 154, 154, 154, 151, 151, 151, 148, 148, 148, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 132, 132, 132, 125, 125, 125, 118, 118, 118, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 107, 107, 107, 106, 106, 106, 103, 103, 103, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 103, 103, 103, 107, 107, 107, 112, 112, 112, 117, 117, 117, 122, 122, 122, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 84, 84, 84, 82, 82, 82, 158, 158, 158, 164, 164, 164, 170, 170, 170, 173, 173, 173, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 145, 145, 145, 141, 141, 141, 139, 139, 139, 137, 137, 137, 133, 133, 133, 127, 127, 127, 120, 120, 120, 113, 113, 113, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 98, 98, 98, 101, 101, 101, 106, 106, 106, 111, 111, 111, 116, 116, 116, 120, 120, 120, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 124, 124, 124, 127, 127, 127, 131, 131, 131, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 135, 135, 135, 136, 136, 136, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 110, 110, 110, 105, 105, 105, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 100, 100, 100, 97, 97, 97, 92, 92, 92, 88, 88, 88, 85, 85, 85, 83, 83, 83, 158, 158, 158, 163, 163, 163, 169, 169, 169, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 122, 122, 122, 115, 115, 115, 110, 110, 110, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 95, 95, 95, 99, 99, 99, 104, 104, 104, 109, 109, 109, 114, 114, 114, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 134, 134, 134, 135, 135, 135, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 101, 101, 101, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 85, 85, 85, 157, 157, 157, 163, 163, 163, 169, 169, 169, 172, 172, 172, 173, 173, 173, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 158, 158, 158, 153, 153, 153, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 111, 111, 111, 106, 106, 106, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 93, 93, 93, 97, 97, 97, 102, 102, 102, 107, 107, 107, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 121, 121, 121, 117, 117, 117, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 87, 87, 87, 157, 157, 157, 162, 162, 162, 169, 169, 169, 173, 173, 173, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 159, 159, 159, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 148, 148, 148, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 134, 134, 134, 128, 128, 128, 121, 121, 121, 117, 117, 117, 114, 114, 114, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 91, 91, 91, 89, 89, 89, 91, 91, 91, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 94, 94, 94, 98, 98, 98, 103, 103, 103, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 101, 101, 101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 157, 157, 157, 162, 162, 162, 168, 168, 168, 173, 173, 173, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 162, 162, 162, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 143, 143, 143, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 128, 128, 128, 123, 123, 123, 116, 116, 116, 111, 111, 111, 108, 108, 108, 105, 105, 105, 101, 101, 101, 97, 97, 97, 95, 95, 95, 95, 95, 95, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 96, 96, 96, 101, 101, 101, 105, 105, 105, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 97, 97, 97, 97, 97, 97, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 116, 116, 116, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 159, 159, 159, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 118, 118, 118, 113, 113, 113, 110, 110, 110, 108, 108, 108, 104, 104, 104, 100, 100, 100, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 158, 158, 158, 163, 163, 163, 169, 169, 169, 173, 173, 173, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 118, 118, 118, 112, 112, 112, 107, 107, 107, 104, 104, 104, 102, 102, 102, 99, 99, 99, 95, 95, 95, 93, 93, 93, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 85, 85, 85, 87, 87, 87, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 91, 91, 91, 91, 91, 91, 93, 93, 93, 98, 98, 98, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 94, 94, 94, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 87, 87, 87, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, 89, 89, 92, 92, 92, 96, 96, 96, 101, 101, 101, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 152, 152, 152, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 161, 161, 161, 166, 166, 166, 170, 170, 170, 173, 173, 173, 173, 173, 173, 170, 170, 170, 166, 166, 166, 162, 162, 162, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 113, 113, 113, 107, 107, 107, 102, 102, 102, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 93, 93, 93, 92, 92, 92, 90, 90, 90, 87, 87, 87, 84, 84, 84, 83, 83, 83, 85, 85, 85, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 91, 91, 91, 96, 96, 96, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 97, 97, 97, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 95, 95, 95, 99, 99, 99, 102, 102, 102, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 117, 117, 117, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 124, 124, 124, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 120, 120, 120, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 100, 100, 100, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 104, 104, 104, 163, 163, 163, 168, 168, 168, 171, 171, 171, 173, 173, 173, 172, 172, 172, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 150, 150, 150, 151, 151, 151, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 108, 108, 108, 103, 103, 103, 98, 98, 98, 97, 97, 97, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 95, 95, 95, 95, 95, 95, 93, 93, 93, 91, 91, 91, 90, 90, 90, 89, 89, 89, 89, 89, 89, 91, 91, 91, 94, 94, 94, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 101, 101, 101, 96, 96, 96, 92, 92, 92, 88, 88, 88, 87, 87, 87, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 114, 114, 114, 118, 118, 118, 122, 122, 122, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 120, 120, 120, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 146, 146, 146, 149, 149, 149, 152, 152, 152, 157, 157, 157, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 165, 165, 165, 169, 169, 169, 171, 171, 171, 171, 171, 171, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 132, 132, 132, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 95, 95, 95, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 87, 87, 87, 83, 83, 83, 80, 80, 80, 80, 80, 80, 82, 82, 82, 87, 87, 87, 92, 92, 92, 95, 95, 95, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 95, 95, 95, 91, 91, 91, 87, 87, 87, 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 87, 87, 87, 85, 85, 85, 81, 81, 81, 78, 78, 78, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 80, 80, 80, 82, 82, 82, 85, 85, 85, 88, 88, 88, 91, 91, 91, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 122, 122, 122, 119, 119, 119, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 164, 164, 164, 163, 163, 163, 161, 161, 161, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 123, 123, 123, 120, 120, 120, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 140, 140, 140, 134, 134, 134, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 90, 90, 86, 86, 86, 81, 81, 81, 78, 78, 78, 78, 78, 78, 81, 81, 81, 85, 85, 85, 90, 90, 90, 94, 94, 94, 94, 94, 94, 93, 93, 93, 90, 90, 90, 89, 89, 89, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 98, 98, 98, 94, 94, 94, 90, 90, 90, 87, 87, 87, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 86, 86, 86, 82, 82, 82, 78, 78, 78, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 135, 135, 135, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 140, 140, 140, 143, 143, 143, 146, 146, 146, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 143, 143, 143, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 107, 107, 107, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 165, 165, 165, 162, 162, 162, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 138, 138, 138, 132, 132, 132, 125, 125, 125, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 94, 94, 94, 91, 91, 91, 89, 89, 89, 89, 89, 89, 88, 88, 88, 84, 84, 84, 80, 80, 80, 77, 77, 77, 77, 77, 77, 80, 80, 80, 83, 83, 83, 88, 88, 88, 91, 91, 91, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 92, 92, 92, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 88, 88, 88, 86, 86, 86, 82, 82, 82, 79, 79, 79, 77, 77, 77, 77, 77, 77, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 120, 120, 120, 116, 116, 116, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 139, 139, 139, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 170, 170, 170, 171, 171, 171, 171, 171, 171, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 129, 129, 129, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 86, 86, 86, 84, 84, 84, 81, 81, 81, 78, 78, 78, 76, 76, 76, 77, 77, 77, 79, 79, 79, 82, 82, 82, 85, 85, 85, 87, 87, 87, 88, 88, 88, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 88, 88, 88, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 85, 85, 85, 88, 88, 88, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 138, 138, 138, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 157, 157, 157, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 159, 159, 159, 160, 160, 160, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 149, 149, 149, 145, 145, 145, 140, 140, 140, 137, 137, 137, 132, 132, 132, 126, 126, 126, 120, 120, 120, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 87, 87, 87, 84, 84, 84, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 104, 104, 104, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 96, 96, 96, 91, 91, 91, 88, 88, 88, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 77, 77, 77, 78, 78, 78, 77, 77, 77, 76, 76, 76, 77, 77, 77, 80, 80, 80, 84, 84, 84, 88, 88, 88, 92, 92, 92, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 131, 131, 131, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 138, 138, 138, 141, 141, 141, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 116, 116, 116, 111, 111, 111, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 129, 129, 129, 123, 123, 123, 117, 117, 117, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 93, 93, 93, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 88, 88, 88, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 96, 96, 96, 91, 91, 91, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 85, 85, 85, 81, 81, 81, 75, 75, 75, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 73, 73, 73, 74, 74, 74, 72, 72, 72, 70, 70, 70, 71, 71, 71, 74, 74, 74, 78, 78, 78, 83, 83, 83, 88, 88, 88, 94, 94, 94, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 149, 149, 149, 144, 144, 144, 139, 139, 139, 135, 135, 135, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 107, 107, 107, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 143, 143, 143, 139, 139, 139, 135, 135, 135, 130, 130, 130, 124, 124, 124, 118, 118, 118, 112, 112, 112, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 94, 94, 94, 89, 89, 89, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 72, 72, 72, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 73, 73, 73, 73, 73, 73, 75, 75, 75, 79, 79, 79, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 86, 86, 86, 81, 81, 81, 75, 75, 75, 71, 71, 71, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 72, 72, 72, 71, 71, 71, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 68, 68, 68, 66, 66, 66, 67, 67, 67, 69, 69, 69, 74, 74, 74, 79, 79, 79, 85, 85, 85, 92, 92, 92, 100, 100, 100, 106, 106, 106, 110, 110, 110, 114, 114, 114, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 151, 151, 151, 146, 146, 146, 140, 140, 140, 135, 135, 135, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 115, 115, 115, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 154, 154, 154, 154, 154, 154, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 124, 124, 124, 119, 119, 119, 114, 114, 114, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 74, 74, 74, 78, 78, 78, 82, 82, 82, 86, 86, 86, 88, 88, 88, 89, 89, 89, 92, 92, 92, 95, 95, 95, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 81, 81, 81, 76, 76, 76, 71, 71, 71, 67, 67, 67, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 70, 70, 70, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 77, 77, 77, 84, 84, 84, 90, 90, 90, 97, 97, 97, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 131, 131, 131, 134, 134, 134, 135, 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 147, 147, 147, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 119, 119, 119, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 102, 102, 102, 102, 102, 102, 105, 105, 105, 106, 106, 106, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 140, 140, 140, 141, 141, 141, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 120, 120, 120, 115, 115, 115, 110, 110, 110, 105, 105, 105, 101, 101, 101, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 105, 105, 105, 105, 105, 105, 102, 102, 102, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 88, 88, 88, 85, 85, 85, 80, 80, 80, 76, 76, 76, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 69, 69, 69, 68, 68, 68, 69, 69, 69, 72, 72, 72, 76, 76, 76, 81, 81, 81, 85, 85, 85, 88, 88, 88, 89, 89, 89, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 79, 79, 79, 74, 74, 74, 70, 70, 70, 66, 66, 66, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 68, 68, 68, 69, 69, 69, 68, 68, 68, 66, 66, 66, 63, 63, 63, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 79, 79, 79, 83, 83, 83, 88, 88, 88, 94, 94, 94, 99, 99, 99, 104, 104, 104, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 83, 83, 83, 78, 78, 78, 73, 73, 73, 72, 72, 72, 73, 73, 73, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 74, 74, 74, 79, 79, 79, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 67, 67, 67, 65, 65, 65, 63, 63, 63, 64, 64, 64, 65, 65, 65, 67, 67, 67, 68, 68, 68, 68, 68, 68, 67, 67, 67, 64, 64, 64, 62, 62, 62, 59, 59, 59, 58, 58, 58, 58, 58, 58, 59, 59, 59, 63, 63, 63, 67, 67, 67, 72, 72, 72, 77, 77, 77, 81, 81, 81, 85, 85, 85, 88, 88, 88, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 155, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 132, 132, 132, 128, 128, 128, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 153, 153, 153, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 85, 85, 85, 80, 80, 80, 75, 75, 75, 70, 70, 70, 69, 69, 69, 70, 70, 70, 70, 70, 70, 69, 69, 69, 66, 66, 66, 64, 64, 64, 62, 62, 62, 62, 62, 62, 63, 63, 63, 67, 67, 67, 70, 70, 70, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 82, 82, 82, 82, 82, 82, 80, 80, 80, 77, 77, 77, 72, 72, 72, 68, 68, 68, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 64, 64, 64, 65, 65, 65, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 61, 61, 61, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 64, 64, 64, 69, 69, 69, 75, 75, 75, 80, 80, 80, 84, 84, 84, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 97, 97, 97, 101, 101, 101, 105, 105, 105, 110, 110, 110, 115, 115, 115, 118, 118, 118, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 153, 153, 153, 155, 155, 155, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 98, 98, 98, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 108, 108, 108, 105, 105, 105, 100, 100, 100, 95, 95, 95, 91, 91, 91, 88, 88, 88, 84, 84, 84, 81, 81, 81, 77, 77, 77, 72, 72, 72, 68, 68, 68, 66, 66, 66, 67, 67, 67, 67, 67, 67, 65, 65, 65, 63, 63, 63, 61, 61, 61, 60, 60, 60, 59, 59, 59, 60, 60, 60, 63, 63, 63, 66, 66, 66, 70, 70, 70, 73, 73, 73, 76, 76, 76, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 99, 99, 99, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 99, 99, 99, 93, 93, 93, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 63, 63, 63, 65, 65, 65, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 65, 65, 65, 70, 70, 70, 76, 76, 76, 82, 82, 82, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 105, 105, 105, 111, 111, 111, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 125, 125, 125, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 153, 153, 153, 154, 154, 154, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 109, 109, 109, 109, 109, 109, 105, 105, 105, 100, 100, 100, 94, 94, 94, 89, 89, 89, 85, 85, 85, 81, 81, 81, 77, 77, 77, 74, 74, 74, 71, 71, 71, 67, 67, 67, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 61, 61, 61, 65, 65, 65, 69, 69, 69, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 98, 98, 98, 102, 102, 102, 105, 105, 105, 105, 105, 105, 103, 103, 103, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 70, 70, 70, 69, 69, 69, 69, 69, 69, 67, 67, 67, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 63, 63, 63, 62, 62, 62, 61, 61, 61, 61, 61, 61, 62, 62, 62, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 70, 70, 70, 76, 76, 76, 83, 83, 83, 88, 88, 88, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 97, 97, 97, 102, 102, 102, 107, 107, 107, 112, 112, 112, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 101, 101, 101, 105, 105, 105, 109, 109, 109, 111, 111, 111, 110, 110, 110, 106, 106, 106, 101, 101, 101, 95, 95, 95, 90, 90, 90, 84, 84, 84, 79, 79, 79, 75, 75, 75, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 68, 68, 68, 71, 71, 71, 74, 74, 74, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 104, 104, 104, 102, 102, 102, 97, 97, 97, 91, 91, 91, 85, 85, 85, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 72, 72, 72, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 63, 63, 63, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 67, 67, 67, 71, 71, 71, 78, 78, 78, 84, 84, 84, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 137, 137, 137, 142, 142, 142, 147, 147, 147, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 105, 105, 105, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 101, 101, 101, 100, 100, 100, 102, 102, 102, 107, 107, 107, 111, 111, 111, 112, 112, 112, 111, 111, 111, 108, 108, 108, 103, 103, 103, 98, 98, 98, 93, 93, 93, 87, 87, 87, 80, 80, 80, 76, 76, 76, 75, 75, 75, 73, 73, 73, 69, 69, 69, 66, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 58, 58, 58, 54, 54, 54, 52, 52, 52, 52, 52, 52, 56, 56, 56, 60, 60, 60, 63, 63, 63, 66, 66, 66, 69, 69, 69, 73, 73, 73, 76, 76, 76, 79, 79, 79, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 97, 97, 97, 100, 100, 100, 101, 101, 101, 100, 100, 100, 96, 96, 96, 91, 91, 91, 85, 85, 85, 81, 81, 81, 77, 77, 77, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 72, 72, 72, 73, 73, 73, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 67, 67, 67, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 70, 70, 70, 75, 75, 75, 81, 81, 81, 86, 86, 86, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 110, 110, 110, 114, 114, 114, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 145, 145, 145, 150, 150, 150, 153, 153, 153, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 160, 160, 160, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 170, 170, 170, 167, 167, 167, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 164, 164, 164, 165, 165, 165, 166, 166, 166, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 103, 103, 103, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 115, 115, 115, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 90, 90, 90, 82, 82, 82, 78, 78, 78, 76, 76, 76, 74, 74, 74, 71, 71, 71, 67, 67, 67, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 61, 61, 61, 56, 56, 56, 52, 52, 52, 50, 50, 50, 52, 52, 52, 55, 55, 55, 59, 59, 59, 62, 62, 62, 65, 65, 65, 68, 68, 68, 72, 72, 72, 77, 77, 77, 80, 80, 80, 83, 83, 83, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 95, 95, 95, 90, 90, 90, 85, 85, 85, 79, 79, 79, 75, 75, 75, 72, 72, 72, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 72, 72, 72, 69, 69, 69, 68, 68, 68, 67, 67, 67, 69, 69, 69, 71, 71, 71, 71, 71, 71, 70, 70, 70, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 73, 73, 73, 78, 78, 78, 83, 83, 83, 87, 87, 87, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 159, 159, 159, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 168, 168, 168, 171, 171, 171, 173, 173, 173, 174, 174, 174, 173, 173, 173, 170, 170, 170, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 108, 108, 108, 104, 104, 104, 102, 102, 102, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 133, 133, 133, 135, 135, 135, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 107, 107, 107, 100, 100, 100, 93, 93, 93, 85, 85, 85, 80, 80, 80, 78, 78, 78, 76, 76, 76, 73, 73, 73, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 62, 62, 62, 59, 59, 59, 55, 55, 55, 52, 52, 52, 51, 51, 51, 52, 52, 52, 55, 55, 55, 59, 59, 59, 61, 61, 61, 63, 63, 63, 66, 66, 66, 71, 71, 71, 75, 75, 75, 79, 79, 79, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 90, 90, 90, 84, 84, 84, 77, 77, 77, 72, 72, 72, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 71, 71, 71, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 69, 69, 69, 71, 71, 71, 73, 73, 73, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 74, 74, 74, 76, 76, 76, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 94, 94, 94, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 129, 129, 129, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 168, 168, 168, 171, 171, 171, 174, 174, 174, 175, 175, 175, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 169, 169, 169, 171, 171, 171, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 133, 133, 133, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 95, 95, 95, 88, 88, 88, 82, 82, 82, 79, 79, 79, 77, 77, 77, 74, 74, 74, 70, 70, 70, 66, 66, 66, 64, 64, 64, 63, 63, 63, 61, 61, 61, 58, 58, 58, 55, 55, 55, 53, 53, 53, 53, 53, 53, 54, 54, 54, 56, 56, 56, 58, 58, 58, 60, 60, 60, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 75, 75, 75, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 91, 91, 91, 84, 84, 84, 77, 77, 77, 71, 71, 71, 69, 69, 69, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 72, 72, 72, 74, 74, 74, 72, 72, 72, 69, 69, 69, 66, 66, 66, 64, 64, 64, 65, 65, 65, 67, 67, 67, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 96, 96, 96, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 113, 113, 113, 119, 119, 119, 124, 124, 124, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 159, 159, 159, 165, 165, 165, 169, 169, 169, 171, 171, 171, 171, 171, 171, 173, 173, 173, 176, 176, 176, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 160, 160, 160, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 106, 106, 106, 101, 101, 101, 97, 97, 97, 159, 159, 159, 156, 156, 156, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 109, 109, 109, 103, 103, 103, 96, 96, 96, 89, 89, 89, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 72, 72, 72, 67, 67, 67, 64, 64, 64, 63, 63, 63, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, 59, 61, 61, 61, 65, 65, 65, 68, 68, 68, 70, 70, 70, 71, 71, 71, 73, 73, 73, 74, 74, 74, 77, 77, 77, 81, 81, 81, 85, 85, 85, 89, 89, 89, 91, 91, 91, 93, 93, 93, 95, 95, 95, 94, 94, 94, 91, 91, 91, 85, 85, 85, 78, 78, 78, 73, 73, 73, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 71, 71, 71, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 82, 82, 82, 85, 85, 85, 89, 89, 89, 93, 93, 93, 97, 97, 97, 101, 101, 101, 105, 105, 105, 110, 110, 110, 116, 116, 116, 122, 122, 122, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 160, 160, 160, 166, 166, 166, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 179, 179, 179, 176, 176, 176, 172, 172, 172, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 106, 106, 106, 101, 101, 101, 96, 96, 96, 160, 160, 160, 156, 156, 156, 153, 153, 153, 148, 148, 148, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 136, 136, 136, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 107, 107, 107, 101, 101, 101, 95, 95, 95, 88, 88, 88, 84, 84, 84, 81, 81, 81, 79, 79, 79, 78, 78, 78, 74, 74, 74, 69, 69, 69, 65, 65, 65, 64, 64, 64, 63, 63, 63, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 61, 61, 61, 64, 64, 64, 67, 67, 67, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 90, 90, 90, 85, 85, 85, 79, 79, 79, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 68, 68, 68, 68, 68, 68, 69, 69, 69, 71, 71, 71, 70, 70, 70, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 68, 68, 68, 71, 71, 71, 73, 73, 73, 75, 75, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 90, 90, 90, 95, 95, 95, 100, 100, 100, 105, 105, 105, 111, 111, 111, 118, 118, 118, 125, 125, 125, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 153, 153, 153, 159, 159, 159, 165, 165, 165, 169, 169, 169, 172, 172, 172, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 182, 182, 182, 183, 183, 183, 181, 181, 181, 178, 178, 178, 174, 174, 174, 169, 169, 169, 164, 164, 164, 160, 160, 160, 157, 157, 157, 155, 155, 155, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 103, 103, 103, 99, 99, 99, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 127, 127, 127, 124, 124, 124, 120, 120, 120, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 112, 112, 112, 106, 106, 106, 100, 100, 100, 93, 93, 93, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 79, 79, 79, 75, 75, 75, 70, 70, 70, 66, 66, 66, 64, 64, 64, 64, 64, 64, 62, 62, 62, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 63, 63, 63, 66, 66, 66, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 72, 72, 72, 74, 74, 74, 78, 78, 78, 82, 82, 82, 86, 86, 86, 89, 89, 89, 90, 90, 90, 88, 88, 88, 83, 83, 83, 78, 78, 78, 74, 74, 74, 71, 71, 71, 70, 70, 70, 69, 69, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 67, 67, 67, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 100, 100, 100, 106, 106, 106, 113, 113, 113, 120, 120, 120, 126, 126, 126, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 151, 151, 151, 157, 157, 157, 163, 163, 163, 168, 168, 168, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 180, 180, 180, 180, 180, 180, 178, 178, 178, 175, 175, 175, 174, 174, 174, 175, 175, 175, 177, 177, 177, 180, 180, 180, 180, 180, 180, 179, 179, 179, 178, 178, 178, 179, 179, 179, 181, 181, 181, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 182, 182, 182, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 162, 162, 162, 158, 158, 158, 156, 156, 156, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 103, 103, 103, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 112, 112, 112, 106, 106, 106, 99, 99, 99, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 79, 79, 79, 75, 75, 75, 70, 70, 70, 66, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 62, 62, 61, 61, 61, 60, 60, 60, 61, 61, 61, 62, 62, 62, 61, 61, 61, 59, 59, 59, 59, 59, 59, 62, 62, 62, 64, 64, 64, 65, 65, 65, 66, 66, 66, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 75, 75, 75, 79, 79, 79, 84, 84, 84, 88, 88, 88, 88, 88, 88, 86, 86, 86, 81, 81, 81, 76, 76, 76, 72, 72, 72, 70, 70, 70, 69, 69, 69, 68, 68, 68, 66, 66, 66, 65, 65, 65, 65, 65, 65, 66, 66, 66, 68, 68, 68, 68, 68, 68, 68, 68, 68, 67, 67, 67, 64, 64, 64, 62, 62, 62, 61, 61, 61, 61, 61, 61, 62, 62, 62, 65, 65, 65, 67, 67, 67, 68, 68, 68, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 101, 101, 101, 107, 107, 107, 114, 114, 114, 121, 121, 121, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 151, 151, 151, 157, 157, 157, 162, 162, 162, 168, 168, 168, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 179, 179, 179, 181, 181, 181, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 178, 178, 178, 181, 181, 181, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 182, 182, 182, 185, 185, 185, 187, 187, 187, 188, 188, 188, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 177, 177, 177, 173, 173, 173, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 145, 145, 145, 139, 139, 139, 135, 135, 135, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 165, 165, 165, 161, 161, 161, 156, 156, 156, 151, 151, 151, 147, 147, 147, 142, 142, 142, 138, 138, 138, 133, 133, 133, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 82, 82, 82, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 61, 62, 62, 62, 64, 64, 64, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 73, 73, 73, 78, 78, 78, 83, 83, 83, 86, 86, 86, 87, 87, 87, 85, 85, 85, 80, 80, 80, 76, 76, 76, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 63, 63, 63, 62, 62, 62, 63, 63, 63, 65, 65, 65, 67, 67, 67, 69, 69, 69, 68, 68, 68, 66, 66, 66, 64, 64, 64, 62, 62, 62, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 66, 66, 66, 70, 70, 70, 73, 73, 73, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 101, 101, 101, 108, 108, 108, 116, 116, 116, 121, 121, 121, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 152, 152, 152, 157, 157, 157, 162, 162, 162, 166, 166, 166, 170, 170, 170, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 177, 177, 177, 180, 180, 180, 180, 180, 180, 179, 179, 179, 179, 179, 179, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 188, 188, 188, 186, 186, 186, 186, 186, 186, 187, 187, 187, 189, 189, 189, 190, 190, 190, 189, 189, 189, 187, 187, 187, 185, 185, 185, 184, 184, 184, 183, 183, 183, 182, 182, 182, 179, 179, 179, 176, 176, 176, 172, 172, 172, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 160, 160, 160, 157, 157, 157, 152, 152, 152, 147, 147, 147, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 165, 165, 165, 161, 161, 161, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 137, 137, 137, 132, 132, 132, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 125, 125, 125, 122, 122, 122, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 102, 102, 102, 96, 96, 96, 90, 90, 90, 84, 84, 84, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 72, 72, 72, 69, 69, 69, 68, 68, 68, 66, 66, 66, 64, 64, 64, 62, 62, 62, 60, 60, 60, 60, 60, 60, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 60, 60, 60, 63, 63, 63, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 71, 71, 71, 76, 76, 76, 81, 81, 81, 84, 84, 84, 85, 85, 85, 83, 83, 83, 80, 80, 80, 76, 76, 76, 74, 74, 74, 71, 71, 71, 67, 67, 67, 63, 63, 63, 61, 61, 61, 60, 60, 60, 62, 62, 62, 65, 65, 65, 67, 67, 67, 69, 69, 69, 69, 69, 69, 67, 67, 67, 65, 65, 65, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 76, 76, 76, 78, 78, 78, 79, 79, 79, 82, 82, 82, 84, 84, 84, 87, 87, 87, 92, 92, 92, 99, 99, 99, 107, 107, 107, 115, 115, 115, 122, 122, 122, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 152, 152, 152, 157, 157, 157, 160, 160, 160, 163, 163, 163, 167, 167, 167, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 180, 180, 180, 181, 181, 181, 181, 181, 181, 182, 182, 182, 184, 184, 184, 186, 186, 186, 188, 188, 188, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 190, 190, 190, 188, 188, 188, 185, 185, 185, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 182, 182, 182, 179, 179, 179, 176, 176, 176, 173, 173, 173, 170, 170, 170, 166, 166, 166, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 162, 162, 162, 158, 158, 158, 153, 153, 153, 148, 148, 148, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 131, 131, 131, 129, 129, 129, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 139, 139, 139, 136, 136, 136, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 109, 109, 109, 104, 104, 104, 99, 99, 99, 94, 94, 94, 88, 88, 88, 83, 83, 83, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 80, 80, 80, 77, 77, 77, 74, 74, 74, 72, 72, 72, 69, 69, 69, 66, 66, 66, 63, 63, 63, 61, 61, 61, 59, 59, 59, 56, 56, 56, 53, 53, 53, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 57, 57, 57, 61, 61, 61, 63, 63, 63, 64, 64, 64, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 76, 76, 76, 80, 80, 80, 81, 81, 81, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 65, 65, 65, 61, 61, 61, 59, 59, 59, 60, 60, 60, 62, 62, 62, 65, 65, 65, 68, 68, 68, 70, 70, 70, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 63, 63, 63, 61, 61, 61, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 96, 96, 96, 104, 104, 104, 114, 114, 114, 121, 121, 121, 125, 125, 125, 128, 128, 128, 132, 132, 132, 137, 137, 137, 140, 140, 140, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 177, 177, 177, 181, 181, 181, 183, 183, 183, 183, 183, 183, 185, 185, 185, 187, 187, 187, 188, 188, 188, 190, 190, 190, 192, 192, 192, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195, 195, 193, 193, 193, 190, 190, 190, 186, 186, 186, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 179, 179, 179, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 138, 138, 138, 142, 142, 142, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 127, 127, 127, 122, 122, 122, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 113, 113, 113, 107, 107, 107, 102, 102, 102, 98, 98, 98, 93, 93, 93, 88, 88, 88, 84, 84, 84, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 75, 75, 75, 72, 72, 72, 68, 68, 68, 64, 64, 64, 62, 62, 62, 59, 59, 59, 55, 55, 55, 51, 51, 51, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 51, 51, 51, 54, 54, 54, 59, 59, 59, 61, 61, 61, 62, 62, 62, 64, 64, 64, 67, 67, 67, 69, 69, 69, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 63, 63, 63, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 64, 64, 64, 67, 67, 67, 70, 70, 70, 70, 70, 70, 69, 69, 69, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 66, 66, 66, 70, 70, 70, 74, 74, 74, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 94, 94, 94, 102, 102, 102, 112, 112, 112, 120, 120, 120, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 178, 178, 178, 181, 181, 181, 184, 184, 184, 185, 185, 185, 186, 186, 186, 188, 188, 188, 188, 188, 188, 189, 189, 189, 191, 191, 191, 194, 194, 194, 197, 197, 197, 198, 198, 198, 197, 197, 197, 194, 194, 194, 190, 190, 190, 186, 186, 186, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 183, 183, 183, 182, 182, 182, 181, 181, 181, 179, 179, 179, 175, 175, 175, 171, 171, 171, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 114, 114, 114, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 141, 141, 141, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 122, 122, 122, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 114, 114, 114, 107, 107, 107, 101, 101, 101, 98, 98, 98, 93, 93, 93, 89, 89, 89, 85, 85, 85, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 73, 73, 73, 68, 68, 68, 64, 64, 64, 62, 62, 62, 59, 59, 59, 55, 55, 55, 50, 50, 50, 47, 47, 47, 45, 45, 45, 45, 45, 45, 46, 46, 46, 49, 49, 49, 54, 54, 54, 57, 57, 57, 59, 59, 59, 61, 61, 61, 64, 64, 64, 67, 67, 67, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 68, 68, 69, 69, 69, 68, 68, 68, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 66, 66, 66, 69, 69, 69, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 67, 67, 67, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 65, 65, 65, 67, 67, 67, 71, 71, 71, 74, 74, 74, 77, 77, 77, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 96, 96, 96, 103, 103, 103, 111, 111, 111, 119, 119, 119, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 175, 175, 175, 179, 179, 179, 182, 182, 182, 183, 183, 183, 185, 185, 185, 187, 187, 187, 188, 188, 188, 187, 187, 187, 187, 187, 187, 190, 190, 190, 193, 193, 193, 196, 196, 196, 197, 197, 197, 196, 196, 196, 193, 193, 193, 189, 189, 189, 186, 186, 186, 185, 185, 185, 185, 185, 185, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 177, 177, 177, 173, 173, 173, 169, 169, 169, 165, 165, 165, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 115, 115, 115, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 122, 122, 122, 116, 116, 116, 108, 108, 108, 102, 102, 102, 98, 98, 98, 93, 93, 93, 89, 89, 89, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 76, 76, 76, 71, 71, 71, 66, 66, 66, 62, 62, 62, 60, 60, 60, 58, 58, 58, 54, 54, 54, 49, 49, 49, 44, 44, 44, 41, 41, 41, 41, 41, 41, 44, 44, 44, 48, 48, 48, 53, 53, 53, 56, 56, 56, 57, 57, 57, 59, 59, 59, 62, 62, 62, 66, 66, 66, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 60, 60, 60, 58, 58, 58, 59, 59, 59, 61, 61, 61, 63, 63, 63, 62, 62, 62, 62, 62, 62, 64, 64, 64, 67, 67, 67, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 72, 72, 72, 75, 75, 75, 77, 77, 77, 79, 79, 79, 80, 80, 80, 82, 82, 82, 86, 86, 86, 89, 89, 89, 93, 93, 93, 97, 97, 97, 103, 103, 103, 110, 110, 110, 118, 118, 118, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 133, 133, 133, 137, 137, 137, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 150, 150, 150, 154, 154, 154, 159, 159, 159, 164, 164, 164, 168, 168, 168, 171, 171, 171, 172, 172, 172, 172, 172, 172, 174, 174, 174, 177, 177, 177, 180, 180, 180, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 190, 190, 190, 193, 193, 193, 193, 193, 193, 192, 192, 192, 190, 190, 190, 188, 188, 188, 186, 186, 186, 185, 185, 185, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 177, 177, 177, 174, 174, 174, 169, 169, 169, 165, 165, 165, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 154, 154, 154, 150, 150, 150, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 124, 124, 124, 118, 118, 118, 110, 110, 110, 104, 104, 104, 98, 98, 98, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 69, 69, 69, 64, 64, 64, 60, 60, 60, 57, 57, 57, 56, 56, 56, 52, 52, 52, 47, 47, 47, 42, 42, 42, 40, 40, 40, 40, 40, 40, 42, 42, 42, 47, 47, 47, 51, 51, 51, 53, 53, 53, 54, 54, 54, 56, 56, 56, 60, 60, 60, 64, 64, 64, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 62, 62, 62, 61, 61, 61, 61, 61, 61, 60, 60, 60, 58, 58, 58, 56, 56, 56, 57, 57, 57, 60, 60, 60, 62, 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 74, 74, 74, 75, 75, 75, 77, 77, 77, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 99, 99, 99, 103, 103, 103, 109, 109, 109, 116, 116, 116, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 131, 131, 131, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 133, 133, 133, 138, 138, 138, 144, 144, 144, 147, 147, 147, 148, 148, 148, 148, 148, 148, 151, 151, 151, 156, 156, 156, 161, 161, 161, 166, 166, 166, 170, 170, 170, 173, 173, 173, 174, 174, 174, 174, 174, 174, 176, 176, 176, 180, 180, 180, 182, 182, 182, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 188, 188, 188, 190, 190, 190, 190, 190, 190, 189, 189, 189, 188, 188, 188, 186, 186, 186, 185, 185, 185, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 174, 174, 174, 171, 171, 171, 167, 167, 167, 162, 162, 162, 159, 159, 159, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 155, 155, 155, 150, 150, 150, 146, 146, 146, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 146, 146, 146, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 138, 138, 138, 140, 140, 140, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 118, 118, 118, 111, 111, 111, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 66, 66, 66, 61, 61, 61, 57, 57, 57, 55, 55, 55, 54, 54, 54, 52, 52, 52, 47, 47, 47, 43, 43, 43, 40, 40, 40, 41, 41, 41, 43, 43, 43, 46, 46, 46, 49, 49, 49, 51, 51, 51, 52, 52, 52, 54, 54, 54, 58, 58, 58, 62, 62, 62, 65, 65, 65, 66, 66, 66, 67, 67, 67, 66, 66, 66, 64, 64, 64, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 58, 58, 58, 56, 56, 56, 56, 56, 56, 59, 59, 59, 61, 61, 61, 61, 61, 61, 62, 62, 62, 64, 64, 64, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 72, 72, 72, 74, 74, 74, 75, 75, 75, 77, 77, 77, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 87, 87, 87, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 102, 102, 102, 107, 107, 107, 113, 113, 113, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 129, 129, 129, 134, 134, 134, 139, 139, 139, 144, 144, 144, 147, 147, 147, 148, 148, 148, 149, 149, 149, 153, 153, 153, 157, 157, 157, 162, 162, 162, 167, 167, 167, 172, 172, 172, 175, 175, 175, 176, 176, 176, 177, 177, 177, 179, 179, 179, 183, 183, 183, 185, 185, 185, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 159, 159, 159, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 130, 130, 130, 124, 124, 124, 117, 117, 117, 111, 111, 111, 105, 105, 105, 98, 98, 98, 90, 90, 90, 82, 82, 82, 77, 77, 77, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 59, 59, 59, 56, 56, 56, 55, 55, 55, 54, 54, 54, 52, 52, 52, 49, 49, 49, 45, 45, 45, 43, 43, 43, 43, 43, 43, 44, 44, 44, 46, 46, 46, 48, 48, 48, 51, 51, 51, 52, 52, 52, 54, 54, 54, 57, 57, 57, 62, 62, 62, 65, 65, 65, 67, 67, 67, 67, 67, 67, 66, 66, 66, 63, 63, 63, 60, 60, 60, 59, 59, 59, 60, 60, 60, 60, 60, 60, 58, 58, 58, 57, 57, 57, 56, 56, 56, 57, 57, 57, 59, 59, 59, 60, 60, 60, 63, 63, 63, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 70, 70, 70, 72, 72, 72, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 82, 82, 82, 83, 83, 83, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 111, 111, 111, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 135, 135, 135, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 171, 171, 171, 175, 175, 175, 178, 178, 178, 180, 180, 180, 183, 183, 183, 186, 186, 186, 186, 186, 186, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 180, 180, 180, 177, 177, 177, 173, 173, 173, 169, 169, 169, 165, 165, 165, 161, 161, 161, 157, 157, 157, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 129, 129, 129, 123, 123, 123, 116, 116, 116, 110, 110, 110, 104, 104, 104, 97, 97, 97, 89, 89, 89, 81, 81, 81, 76, 76, 76, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 61, 61, 61, 59, 59, 59, 56, 56, 56, 55, 55, 55, 55, 55, 55, 54, 54, 54, 52, 52, 52, 48, 48, 48, 46, 46, 46, 45, 45, 45, 45, 45, 45, 46, 46, 46, 49, 49, 49, 52, 52, 52, 54, 54, 54, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 67, 67, 67, 67, 67, 67, 65, 65, 65, 62, 62, 62, 59, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 59, 59, 59, 58, 58, 58, 57, 57, 57, 58, 58, 58, 59, 59, 59, 61, 61, 61, 64, 64, 64, 66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 115, 115, 115, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 136, 136, 136, 141, 141, 141, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 175, 175, 175, 179, 179, 179, 183, 183, 183, 186, 186, 186, 187, 187, 187, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 180, 180, 180, 180, 180, 180, 182, 182, 182, 183, 183, 183, 183, 183, 183, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 181, 181, 181, 182, 182, 182, 181, 181, 181, 177, 177, 177, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 157, 157, 157, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 146, 146, 146, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 131, 131, 131, 129, 129, 129, 124, 124, 124, 116, 116, 116, 110, 110, 110, 103, 103, 103, 96, 96, 96, 88, 88, 88, 81, 81, 81, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 61, 61, 61, 59, 59, 59, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 54, 54, 54, 50, 50, 50, 47, 47, 47, 45, 45, 45, 44, 44, 44, 46, 46, 46, 50, 50, 50, 54, 54, 54, 56, 56, 56, 57, 57, 57, 59, 59, 59, 62, 62, 62, 66, 66, 66, 67, 67, 67, 66, 66, 66, 63, 63, 63, 61, 61, 61, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 60, 60, 60, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 64, 64, 64, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 74, 74, 74, 76, 76, 76, 80, 80, 80, 84, 84, 84, 86, 86, 86, 86, 86, 86, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 111, 111, 111, 116, 116, 116, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 130, 130, 130, 135, 135, 135, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 174, 174, 174, 178, 178, 178, 183, 183, 183, 186, 186, 186, 186, 186, 186, 183, 183, 183, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 179, 179, 179, 175, 175, 175, 170, 170, 170, 166, 166, 166, 163, 163, 163, 159, 159, 159, 156, 156, 156, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 146, 146, 146, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 132, 132, 132, 126, 126, 126, 122, 122, 122, 119, 119, 119, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 125, 125, 125, 118, 118, 118, 112, 112, 112, 104, 104, 104, 97, 97, 97, 89, 89, 89, 82, 82, 82, 78, 78, 78, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 63, 63, 63, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 59, 59, 59, 57, 57, 57, 53, 53, 53, 48, 48, 48, 45, 45, 45, 44, 44, 44, 46, 46, 46, 50, 50, 50, 55, 55, 55, 58, 58, 58, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 65, 65, 65, 64, 64, 64, 62, 62, 62, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 60, 60, 60, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 63, 63, 63, 66, 66, 66, 69, 69, 69, 71, 71, 71, 73, 73, 73, 76, 76, 76, 80, 80, 80, 85, 85, 85, 88, 88, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 110, 110, 110, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 133, 133, 133, 139, 139, 139, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 164, 164, 164, 169, 169, 169, 172, 172, 172, 176, 176, 176, 180, 180, 180, 183, 183, 183, 183, 183, 183, 181, 181, 181, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 179, 179, 179, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 175, 175, 175, 170, 170, 170, 165, 165, 165, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 131, 131, 131, 125, 125, 125, 122, 122, 122, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 132, 132, 132, 128, 128, 128, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 115, 115, 115, 107, 107, 107, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 80, 80, 80, 79, 79, 79, 78, 78, 78, 76, 76, 76, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 64, 64, 64, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 60, 60, 60, 59, 59, 59, 55, 55, 55, 50, 50, 50, 47, 47, 47, 46, 46, 46, 48, 48, 48, 52, 52, 52, 56, 56, 56, 60, 60, 60, 62, 62, 62, 62, 62, 62, 64, 64, 64, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 60, 60, 60, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 60, 60, 60, 61, 61, 61, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 76, 76, 76, 82, 82, 82, 87, 87, 87, 91, 91, 91, 91, 91, 91, 91, 91, 91, 93, 93, 93, 96, 96, 96, 99, 99, 99, 100, 100, 100, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 119, 119, 119, 121, 121, 121, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 142, 142, 142, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 160, 160, 160, 164, 164, 164, 168, 168, 168, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 180, 180, 180, 180, 180, 180, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 174, 174, 174, 173, 173, 173, 171, 171, 171, 170, 170, 170, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 164, 164, 164, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 140, 140, 140, 134, 134, 134, 129, 129, 129, 125, 125, 125, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 128, 128, 128, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 110, 110, 110, 102, 102, 102, 95, 95, 95, 89, 89, 89, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 78, 78, 78, 75, 75, 75, 72, 72, 72, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 60, 60, 60, 57, 57, 57, 53, 53, 53, 51, 51, 51, 51, 51, 51, 52, 52, 52, 54, 54, 54, 58, 58, 58, 63, 63, 63, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 64, 64, 64, 62, 62, 62, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 60, 60, 60, 60, 60, 62, 62, 62, 63, 63, 63, 63, 63, 63, 61, 61, 61, 59, 59, 59, 58, 58, 58, 60, 60, 60, 63, 63, 63, 66, 66, 66, 69, 69, 69, 72, 72, 72, 75, 75, 75, 79, 79, 79, 84, 84, 84, 90, 90, 90, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 100, 100, 100, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 109, 109, 109, 114, 114, 114, 118, 118, 118, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 146, 146, 146, 151, 151, 151, 155, 155, 155, 155, 155, 155, 156, 156, 156, 159, 159, 159, 164, 164, 164, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 175, 175, 175, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 170, 170, 170, 172, 172, 172, 174, 174, 174, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 164, 164, 164, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 146, 146, 146, 146, 146, 146, 143, 143, 143, 137, 137, 137, 132, 132, 132, 128, 128, 128, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 111, 111, 111, 104, 104, 104, 97, 97, 97, 92, 92, 92, 88, 88, 88, 85, 85, 85, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 70, 70, 70, 68, 68, 68, 65, 65, 65, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 60, 60, 60, 57, 57, 57, 55, 55, 55, 54, 54, 54, 55, 55, 55, 55, 55, 55, 57, 57, 57, 61, 61, 61, 65, 65, 65, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 64, 64, 64, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 61, 61, 61, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 59, 59, 59, 63, 63, 63, 66, 66, 66, 70, 70, 70, 74, 74, 74, 78, 78, 78, 83, 83, 83, 88, 88, 88, 94, 94, 94, 98, 98, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 119, 119, 119, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 153, 153, 153, 157, 157, 157, 158, 158, 158, 158, 158, 158, 160, 160, 160, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 168, 168, 168, 171, 171, 171, 173, 173, 173, 173, 173, 173, 170, 170, 170, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 161, 161, 161, 158, 158, 158, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 130, 130, 130, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 144, 144, 144, 140, 140, 140, 135, 135, 135, 132, 132, 132, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 110, 110, 110, 104, 104, 104, 98, 98, 98, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 62, 62, 62, 59, 59, 59, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 62, 62, 62, 67, 67, 67, 70, 70, 70, 70, 70, 70, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 63, 63, 63, 60, 60, 60, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 59, 59, 59, 60, 60, 60, 59, 59, 59, 57, 57, 57, 57, 57, 57, 59, 59, 59, 62, 62, 62, 65, 65, 65, 68, 68, 68, 73, 73, 73, 79, 79, 79, 85, 85, 85, 92, 92, 92, 98, 98, 98, 102, 102, 102, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 144, 144, 144, 150, 150, 150, 155, 155, 155, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 111, 111, 111, 104, 104, 104, 98, 98, 98, 94, 94, 94, 90, 90, 90, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 67, 67, 67, 64, 64, 64, 62, 62, 62, 61, 61, 61, 61, 61, 61, 63, 63, 63, 63, 63, 63, 62, 62, 62, 59, 59, 59, 56, 56, 56, 55, 55, 55, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 62, 62, 62, 67, 67, 67, 71, 71, 71, 72, 72, 72, 70, 70, 70, 69, 69, 69, 67, 67, 67, 65, 65, 65, 63, 63, 63, 61, 61, 61, 58, 58, 58, 57, 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 59, 59, 58, 58, 58, 57, 57, 57, 57, 57, 57, 59, 59, 59, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 63, 63, 63, 66, 66, 66, 71, 71, 71, 78, 78, 78, 85, 85, 85, 92, 92, 92, 99, 99, 99, 105, 105, 105, 108, 108, 108, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 135, 135, 135, 139, 139, 139, 144, 144, 144, 150, 150, 150, 156, 156, 156, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 165, 165, 165, 169, 169, 169, 173, 173, 173, 175, 175, 175, 174, 174, 174, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 149, 149, 149, 148, 148, 148, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 119, 119, 119, 113, 113, 113, 107, 107, 107, 101, 101, 101, 96, 96, 96, 91, 91, 91, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 71, 71, 71, 68, 68, 68, 65, 65, 65, 62, 62, 62, 59, 59, 59, 59, 59, 59, 60, 60, 60, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 62, 62, 62, 67, 67, 67, 71, 71, 71, 73, 73, 73, 73, 73, 73, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 60, 60, 60, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 62, 62, 62, 62, 62, 62, 65, 65, 65, 70, 70, 70, 77, 77, 77, 84, 84, 84, 91, 91, 91, 98, 98, 98, 104, 104, 104, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 124, 124, 124, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 127, 127, 127, 131, 131, 131, 137, 137, 137, 143, 143, 143, 150, 150, 150, 156, 156, 156, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 164, 164, 164, 169, 169, 169, 173, 173, 173, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 141, 141, 141, 137, 137, 137, 133, 133, 133, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 132, 132, 132, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 98, 98, 98, 93, 93, 93, 88, 88, 88, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 75, 75, 75, 73, 73, 73, 69, 69, 69, 66, 66, 66, 62, 62, 62, 59, 59, 59, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 57, 57, 57, 59, 59, 59, 60, 60, 60, 63, 63, 63, 67, 67, 67, 71, 71, 71, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 61, 61, 61, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 58, 58, 58, 61, 61, 61, 63, 63, 63, 65, 65, 65, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 66, 66, 66, 71, 71, 71, 77, 77, 77, 83, 83, 83, 89, 89, 89, 95, 95, 95, 101, 101, 101, 107, 107, 107, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 134, 134, 134, 141, 141, 141, 148, 148, 148, 154, 154, 154, 158, 158, 158, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 164, 164, 164, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 124, 124, 124, 122, 122, 122, 117, 117, 117, 111, 111, 111, 105, 105, 105, 99, 99, 99, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 73, 73, 73, 70, 70, 70, 66, 66, 66, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 58, 58, 58, 56, 56, 56, 55, 55, 55, 54, 54, 54, 55, 55, 55, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 57, 57, 57, 60, 60, 60, 64, 64, 64, 66, 66, 66, 67, 67, 67, 66, 66, 66, 65, 65, 65, 65, 65, 65, 67, 67, 67, 72, 72, 72, 78, 78, 78, 83, 83, 83, 88, 88, 88, 93, 93, 93, 99, 99, 99, 105, 105, 105, 110, 110, 110, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 137, 137, 137, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 126, 126, 126, 132, 132, 132, 139, 139, 139, 146, 146, 146, 152, 152, 152, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 160, 160, 160, 163, 163, 163, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 170, 170, 170, 167, 167, 167, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 160, 160, 160, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 136, 136, 136, 134, 134, 134, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 122, 122, 122, 117, 117, 117, 111, 111, 111, 104, 104, 104, 97, 97, 97, 92, 92, 92, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 73, 73, 73, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 58, 58, 58, 57, 57, 57, 56, 56, 56, 56, 56, 56, 55, 55, 55, 54, 54, 54, 54, 54, 54, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 66, 66, 66, 67, 67, 67, 69, 69, 69, 72, 72, 72, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 60, 60, 60, 63, 63, 63, 66, 66, 66, 66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 65, 65, 67, 67, 67, 72, 72, 72, 78, 78, 78, 83, 83, 83, 88, 88, 88, 92, 92, 92, 98, 98, 98, 104, 104, 104, 109, 109, 109, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 128, 128, 128, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 130, 130, 130, 137, 137, 137, 144, 144, 144, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 157, 157, 157, 162, 162, 162, 166, 166, 166, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 156, 156, 156, 153, 153, 153, 148, 148, 148, 144, 144, 144, 142, 142, 142, 140, 140, 140, 135, 135, 135, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 120, 120, 120, 115, 115, 115, 109, 109, 109, 101, 101, 101, 94, 94, 94, 89, 89, 89, 84, 84, 84, 81, 81, 81, 79, 79, 79, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 66, 66, 66, 62, 62, 62, 58, 58, 58, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 54, 54, 54, 54, 54, 54, 55, 55, 55, 57, 57, 57, 61, 61, 61, 66, 66, 66, 69, 69, 69, 70, 70, 70, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 65, 65, 65, 62, 62, 62, 60, 60, 60, 58, 58, 58, 56, 56, 56, 57, 57, 57, 59, 59, 59, 61, 61, 61, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 60, 60, 60, 63, 63, 63, 65, 65, 65, 65, 65, 65, 64, 64, 64, 63, 63, 63, 62, 62, 62, 65, 65, 65, 69, 69, 69, 76, 76, 76, 82, 82, 82, 86, 86, 86, 91, 91, 91, 97, 97, 97, 102, 102, 102, 107, 107, 107, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 124, 124, 124, 130, 130, 130, 135, 135, 135, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 154, 154, 154, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 139, 139, 139, 136, 136, 136, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 135, 135, 135, 131, 131, 131, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 118, 118, 118, 113, 113, 113, 106, 106, 106, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 66, 66, 66, 62, 62, 62, 58, 58, 58, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 55, 55, 55, 55, 55, 55, 57, 57, 57, 61, 61, 61, 65, 65, 65, 69, 69, 69, 72, 72, 72, 72, 72, 72, 71, 71, 71, 69, 69, 69, 68, 68, 68, 66, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 59, 59, 59, 58, 58, 58, 58, 58, 58, 60, 60, 60, 62, 62, 62, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 59, 59, 59, 59, 59, 59, 61, 61, 61, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 60, 60, 60, 62, 62, 62, 67, 67, 67, 73, 73, 73, 79, 79, 79, 84, 84, 84, 89, 89, 89, 95, 95, 95, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 120, 120, 120, 125, 125, 125, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 156, 156, 156, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 146, 146, 146, 151, 151, 151, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 115, 115, 115, 110, 110, 110, 103, 103, 103, 98, 98, 98, 92, 92, 92, 87, 87, 87, 81, 81, 81, 78, 78, 78, 76, 76, 76, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 67, 67, 67, 64, 64, 64, 61, 61, 61, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 58, 58, 58, 61, 61, 61, 64, 64, 64, 67, 67, 67, 70, 70, 70, 73, 73, 73, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62, 62, 60, 60, 60, 59, 59, 59, 57, 57, 57, 57, 57, 57, 58, 58, 58, 61, 61, 61, 63, 63, 63, 64, 64, 64, 63, 63, 63, 62, 62, 62, 60, 60, 60, 59, 59, 59, 59, 59, 59, 60, 60, 60, 59, 59, 59, 57, 57, 57, 57, 57, 57, 59, 59, 59, 62, 62, 62, 65, 65, 65, 70, 70, 70, 76, 76, 76, 81, 81, 81, 88, 88, 88, 94, 94, 94, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 152, 152, 152, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 147, 147, 147, 143, 143, 143, 140, 140, 140, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 108, 108, 108, 103, 103, 103, 98, 98, 98, 94, 94, 94, 89, 89, 89, 83, 83, 83, 79, 79, 79, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 65, 65, 65, 62, 62, 62, 60, 60, 60, 60, 60, 60, 59, 59, 59, 58, 58, 58, 60, 60, 60, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 73, 73, 73, 73, 73, 73, 71, 71, 71, 68, 68, 68, 64, 64, 64, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 56, 56, 56, 55, 55, 55, 55, 55, 55, 58, 58, 58, 61, 61, 61, 63, 63, 63, 64, 64, 64, 62, 62, 62, 60, 60, 60, 58, 58, 58, 57, 57, 57, 57, 57, 57, 56, 56, 56, 55, 55, 55, 57, 57, 57, 60, 60, 60, 63, 63, 63, 66, 66, 66, 69, 69, 69, 74, 74, 74, 79, 79, 79, 86, 86, 86, 92, 92, 92, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 143, 143, 143, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 158, 158, 158, 160, 160, 160, 163, 163, 163, 164, 164, 164, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 112, 112, 112, 108, 108, 108, 103, 103, 103, 99, 99, 99, 95, 95, 95, 89, 89, 89, 84, 84, 84, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 68, 68, 68, 65, 65, 65, 63, 63, 63, 61, 61, 61, 59, 59, 59, 59, 59, 59, 61, 61, 61, 64, 64, 64, 66, 66, 66, 67, 67, 67, 69, 69, 69, 72, 72, 72, 73, 73, 73, 71, 71, 71, 68, 68, 68, 66, 66, 66, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 57, 57, 57, 57, 57, 57, 57, 57, 57, 55, 55, 55, 53, 53, 53, 54, 54, 54, 57, 57, 57, 60, 60, 60, 62, 62, 62, 63, 63, 63, 62, 62, 62, 60, 60, 60, 57, 57, 57, 55, 55, 55, 54, 54, 54, 55, 55, 55, 56, 56, 56, 58, 58, 58, 61, 61, 61, 63, 63, 63, 66, 66, 66, 68, 68, 68, 73, 73, 73, 78, 78, 78, 85, 85, 85, 91, 91, 91, 97, 97, 97, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 108, 108, 108, 104, 104, 104, 99, 99, 99, 94, 94, 94, 88, 88, 88, 83, 83, 83, 79, 79, 79, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 65, 65, 65, 62, 62, 62, 59, 59, 59, 58, 58, 58, 61, 61, 61, 64, 64, 64, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 72, 72, 72, 71, 71, 71, 69, 69, 69, 68, 68, 68, 65, 65, 65, 63, 63, 63, 60, 60, 60, 58, 58, 58, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 55, 55, 53, 53, 53, 54, 54, 54, 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 57, 57, 57, 55, 55, 55, 53, 53, 53, 54, 54, 54, 56, 56, 56, 58, 58, 58, 60, 60, 60, 61, 61, 61, 63, 63, 63, 65, 65, 65, 69, 69, 69, 74, 74, 74, 79, 79, 79, 86, 86, 86, 92, 92, 92, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 162, 162, 162, 164, 164, 164, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 149, 149, 149, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 152, 152, 152, 147, 147, 147, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 105, 105, 105, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 67, 67, 67, 63, 63, 63, 60, 60, 60, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 65, 65, 65, 67, 67, 67, 70, 70, 70, 73, 73, 73, 75, 75, 75, 75, 75, 75, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 61, 61, 61, 59, 59, 59, 58, 58, 58, 57, 57, 57, 57, 57, 57, 56, 56, 56, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 53, 53, 53, 53, 53, 53, 55, 55, 55, 58, 58, 58, 61, 61, 61, 62, 62, 62, 62, 62, 62, 64, 64, 64, 67, 67, 67, 72, 72, 72, 78, 78, 78, 84, 84, 84, 89, 89, 89, 94, 94, 94, 99, 99, 99, 103, 103, 103, 107, 107, 107, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 133, 133, 133, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 165, 165, 165, 169, 169, 169, 171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 157, 157, 157, 153, 153, 153, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 154, 154, 154, 150, 150, 150, 173, 173, 173, 173, 173, 173, 172, 172, 172, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 151, 151, 151, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 110, 110, 110, 105, 105, 105, 98, 98, 98, 91, 91, 91, 86, 86, 86, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 70, 70, 68, 68, 68, 64, 64, 64, 61, 61, 61, 60, 60, 60, 62, 62, 62, 65, 65, 65, 67, 67, 67, 68, 68, 68, 69, 69, 69, 72, 72, 72, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 65, 65, 65, 62, 62, 62, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 56, 56, 56, 55, 55, 55, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 53, 54, 54, 54, 53, 53, 53, 54, 54, 54, 57, 57, 57, 61, 61, 61, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 71, 71, 71, 77, 77, 77, 84, 84, 84, 89, 89, 89, 94, 94, 94, 99, 99, 99, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 140, 140, 140, 143, 143, 143, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 175, 175, 175, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 157, 157, 157, 156, 156, 156, 153, 153, 153, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 167, 167, 167, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 158, 158, 158, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 97, 97, 97, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 64, 64, 64, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 72, 72, 72, 72, 72, 72, 75, 75, 75, 79, 79, 79, 82, 82, 82, 84, 84, 84, 84, 84, 84, 81, 81, 81, 78, 78, 78, 74, 74, 74, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 52, 52, 52, 49, 49, 49, 49, 49, 49, 50, 50, 50, 52, 52, 52, 54, 54, 54, 54, 54, 54, 56, 56, 56, 60, 60, 60, 65, 65, 65, 68, 68, 68, 70, 70, 70, 72, 72, 72, 74, 74, 74, 78, 78, 78, 83, 83, 83, 89, 89, 89, 94, 94, 94, 98, 98, 98, 103, 103, 103, 109, 109, 109, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 123, 123, 123, 128, 128, 128, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 164, 164, 164, 160, 160, 160, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 156, 156, 156, 181, 181, 181, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 167, 167, 167, 162, 162, 162, 158, 158, 158, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 108, 108, 108, 102, 102, 102, 97, 97, 97, 93, 93, 93, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 68, 68, 68, 67, 67, 67, 68, 68, 68, 72, 72, 72, 75, 75, 75, 76, 76, 76, 76, 76, 76, 78, 78, 78, 82, 82, 82, 85, 85, 85, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 73, 73, 73, 70, 70, 70, 68, 68, 68, 66, 66, 66, 63, 63, 63, 59, 59, 59, 55, 55, 55, 52, 52, 52, 50, 50, 50, 49, 49, 49, 50, 50, 50, 52, 52, 52, 53, 53, 53, 55, 55, 55, 58, 58, 58, 63, 63, 63, 68, 68, 68, 71, 71, 71, 73, 73, 73, 76, 76, 76, 80, 80, 80, 84, 84, 84, 88, 88, 88, 93, 93, 93, 97, 97, 97, 102, 102, 102, 108, 108, 108, 114, 114, 114, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 156, 156, 156, 160, 160, 160, 163, 163, 163, 165, 165, 165, 167, 167, 167, 170, 170, 170, 174, 174, 174, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 176, 176, 176, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 165, 165, 165, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 158, 158, 158, 183, 183, 183, 183, 183, 183, 181, 181, 181, 179, 179, 179, 176, 176, 176, 173, 173, 173, 172, 172, 172, 170, 170, 170, 167, 167, 167, 162, 162, 162, 158, 158, 158, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 107, 107, 107, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 72, 72, 72, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 75, 75, 75, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 74, 74, 74, 70, 70, 70, 66, 66, 66, 61, 61, 61, 56, 56, 56, 53, 53, 53, 52, 52, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 55, 55, 55, 60, 60, 60, 66, 66, 66, 70, 70, 70, 73, 73, 73, 76, 76, 76, 79, 79, 79, 83, 83, 83, 88, 88, 88, 92, 92, 92, 96, 96, 96, 101, 101, 101, 106, 106, 106, 112, 112, 112, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 158, 158, 158, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 156, 156, 156, 183, 183, 183, 184, 184, 184, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 132, 132, 132, 127, 127, 127, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 89, 89, 89, 87, 87, 87, 84, 84, 84, 80, 80, 80, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 75, 75, 75, 72, 72, 72, 71, 71, 71, 73, 73, 73, 76, 76, 76, 77, 77, 77, 76, 76, 76, 76, 76, 76, 79, 79, 79, 82, 82, 82, 83, 83, 83, 82, 82, 82, 82, 82, 82, 84, 84, 84, 87, 87, 87, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 83, 83, 83, 80, 80, 80, 76, 76, 76, 70, 70, 70, 64, 64, 64, 59, 59, 59, 56, 56, 56, 55, 55, 55, 54, 54, 54, 52, 52, 52, 51, 51, 51, 51, 51, 51, 55, 55, 55, 62, 62, 62, 68, 68, 68, 73, 73, 73, 75, 75, 75, 78, 78, 78, 81, 81, 81, 85, 85, 85, 90, 90, 90, 96, 96, 96, 101, 101, 101, 106, 106, 106, 112, 112, 112, 117, 117, 117, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 116, 116, 116, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 166, 166, 166, 167, 167, 167, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 157, 157, 157, 153, 153, 153, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 183, 183, 183, 184, 184, 184, 183, 183, 183, 181, 181, 181, 179, 179, 179, 175, 175, 175, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 160, 160, 160, 159, 159, 159, 161, 161, 161, 164, 164, 164, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 103, 103, 103, 99, 99, 99, 95, 95, 95, 92, 92, 92, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 76, 76, 76, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 84, 84, 84, 86, 86, 86, 85, 85, 85, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 89, 89, 89, 87, 87, 87, 86, 86, 86, 88, 88, 88, 90, 90, 90, 91, 91, 91, 89, 89, 89, 85, 85, 85, 81, 81, 81, 75, 75, 75, 69, 69, 69, 64, 64, 64, 60, 60, 60, 57, 57, 57, 55, 55, 55, 53, 53, 53, 52, 52, 52, 53, 53, 53, 57, 57, 57, 64, 64, 64, 71, 71, 71, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 93, 93, 93, 99, 99, 99, 105, 105, 105, 111, 111, 111, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 120, 120, 120, 117, 117, 117, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 167, 167, 167, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 183, 183, 183, 183, 183, 183, 182, 182, 182, 180, 180, 180, 179, 179, 179, 176, 176, 176, 173, 173, 173, 170, 170, 170, 168, 168, 168, 165, 165, 165, 161, 161, 161, 160, 160, 160, 161, 161, 161, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 157, 157, 157, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 139, 139, 139, 135, 135, 135, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 102, 102, 102, 97, 97, 97, 93, 93, 93, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 94, 94, 94, 92, 92, 92, 88, 88, 88, 83, 83, 83, 78, 78, 78, 72, 72, 72, 67, 67, 67, 62, 62, 62, 58, 58, 58, 55, 55, 55, 54, 54, 54, 54, 54, 54, 56, 56, 56, 60, 60, 60, 66, 66, 66, 73, 73, 73, 79, 79, 79, 83, 83, 83, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 100, 100, 100, 107, 107, 107, 114, 114, 114, 120, 120, 120, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 131, 131, 131, 127, 127, 127, 122, 122, 122, 119, 119, 119, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 142, 142, 142, 147, 147, 147, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 165, 165, 165, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 185, 185, 185, 183, 183, 183, 182, 182, 182, 181, 181, 181, 180, 180, 180, 178, 178, 178, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 112, 112, 112, 108, 108, 108, 102, 102, 102, 96, 96, 96, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 83, 83, 83, 86, 86, 86, 88, 88, 88, 89, 89, 89, 87, 87, 87, 87, 87, 87, 88, 88, 88, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 88, 88, 88, 91, 91, 91, 94, 94, 94, 95, 95, 95, 94, 94, 94, 90, 90, 90, 84, 84, 84, 79, 79, 79, 73, 73, 73, 68, 68, 68, 63, 63, 63, 59, 59, 59, 57, 57, 57, 56, 56, 56, 57, 57, 57, 59, 59, 59, 63, 63, 63, 69, 69, 69, 75, 75, 75, 80, 80, 80, 84, 84, 84, 87, 87, 87, 89, 89, 89, 91, 91, 91, 95, 95, 95, 100, 100, 100, 107, 107, 107, 114, 114, 114, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 121, 121, 121, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 141, 141, 141, 147, 147, 147, 153, 153, 153, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 156, 156, 156, 159, 159, 159, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 188, 188, 188, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 176, 176, 176, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 151, 151, 151, 148, 148, 148, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 118, 118, 118, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 97, 97, 97, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 88, 88, 88, 91, 91, 91, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 91, 91, 91, 94, 94, 94, 96, 96, 96, 95, 95, 95, 91, 91, 91, 85, 85, 85, 79, 79, 79, 74, 74, 74, 69, 69, 69, 66, 66, 66, 63, 63, 63, 61, 61, 61, 60, 60, 60, 61, 61, 61, 64, 64, 64, 68, 68, 68, 73, 73, 73, 77, 77, 77, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 96, 96, 96, 101, 101, 101, 108, 108, 108, 115, 115, 115, 122, 122, 122, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 147, 147, 147, 153, 153, 153, 159, 159, 159, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 169, 169, 169, 172, 172, 172, 176, 176, 176, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 168, 168, 168, 165, 165, 165, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 191, 191, 191, 190, 190, 190, 189, 189, 189, 188, 188, 188, 187, 187, 187, 184, 184, 184, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 170, 170, 170, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 115, 115, 115, 113, 113, 113, 110, 110, 110, 105, 105, 105, 99, 99, 99, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 90, 90, 90, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 93, 93, 93, 87, 87, 87, 81, 81, 81, 76, 76, 76, 73, 73, 73, 70, 70, 70, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 69, 69, 69, 73, 73, 73, 77, 77, 77, 80, 80, 80, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 100, 100, 100, 105, 105, 105, 110, 110, 110, 117, 117, 117, 123, 123, 123, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 141, 141, 141, 146, 146, 146, 153, 153, 153, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 174, 174, 174, 178, 178, 178, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 193, 193, 193, 192, 192, 192, 192, 192, 192, 191, 191, 191, 190, 190, 190, 187, 187, 187, 184, 184, 184, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 127, 127, 127, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 92, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 100, 100, 100, 96, 96, 96, 90, 90, 90, 85, 85, 85, 81, 81, 81, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 85, 85, 85, 88, 88, 88, 90, 90, 90, 94, 94, 94, 99, 99, 99, 105, 105, 105, 110, 110, 110, 115, 115, 115, 119, 119, 119, 124, 124, 124, 130, 130, 130, 134, 134, 134, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 142, 142, 142, 145, 145, 145, 151, 151, 151, 157, 157, 157, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 174, 174, 174, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 175, 175, 175, 174, 174, 174, 173, 173, 173, 171, 171, 171, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 193, 193, 193, 192, 192, 192, 191, 191, 191, 192, 192, 192, 192, 192, 192, 190, 190, 190, 186, 186, 186, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 176, 176, 176, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 158, 158, 158, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 100, 100, 100, 95, 95, 95, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 89, 89, 89, 93, 93, 93, 96, 96, 96, 98, 98, 98, 103, 103, 103, 109, 109, 109, 115, 115, 115, 120, 120, 120, 122, 122, 122, 126, 126, 126, 131, 131, 131, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 127, 127, 127, 123, 123, 123, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 150, 150, 150, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 180, 180, 180, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 164, 164, 164, 166, 166, 166, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 193, 193, 193, 191, 191, 191, 190, 190, 190, 191, 191, 191, 192, 192, 192, 192, 192, 192, 188, 188, 188, 185, 185, 185, 183, 183, 183, 182, 182, 182, 182, 182, 182, 180, 180, 180, 177, 177, 177, 173, 173, 173, 171, 171, 171, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 139, 139, 139, 134, 134, 134, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 113, 113, 113, 108, 108, 108, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 94, 94, 94, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 105, 105, 105, 99, 99, 99, 94, 94, 94, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 88, 88, 88, 92, 92, 92, 97, 97, 97, 101, 101, 101, 103, 103, 103, 107, 107, 107, 113, 113, 113, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 134, 134, 134, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 195, 195, 195, 193, 193, 193, 192, 192, 192, 192, 192, 192, 193, 193, 193, 192, 192, 192, 190, 190, 190, 186, 186, 186, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 171, 171, 171, 171, 171, 171, 172, 172, 172, 171, 171, 171, 169, 169, 169, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 105, 105, 105, 101, 101, 101, 96, 96, 96, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 94, 94, 94, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 99, 99, 99, 104, 104, 104, 108, 108, 108, 111, 111, 111, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 127, 127, 127, 130, 130, 130, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 147, 147, 147, 148, 148, 148, 148, 148, 148, 150, 150, 150, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 172, 172, 172, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 166, 166, 166, 169, 169, 169, 173, 173, 173, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 198, 198, 198, 196, 196, 196, 194, 194, 194, 193, 193, 193, 192, 192, 192, 190, 190, 190, 188, 188, 188, 187, 187, 187, 185, 185, 185, 184, 184, 184, 182, 182, 182, 180, 180, 180, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 111, 111, 111, 109, 109, 109, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 107, 107, 107, 103, 103, 103, 98, 98, 98, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 100, 100, 100, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 94, 94, 94, 101, 101, 101, 107, 107, 107, 111, 111, 111, 114, 114, 114, 118, 118, 118, 123, 123, 123, 127, 127, 127, 131, 131, 131, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 130, 130, 130, 128, 128, 128, 130, 130, 130, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 149, 149, 149, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 169, 169, 169, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 200, 200, 200, 198, 198, 198, 196, 196, 196, 193, 193, 193, 190, 190, 190, 188, 188, 188, 186, 186, 186, 185, 185, 185, 185, 185, 185, 183, 183, 183, 180, 180, 180, 177, 177, 177, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 166, 166, 166, 163, 163, 163, 161, 161, 161, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 151, 151, 151, 147, 147, 147, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 131, 131, 131, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 109, 109, 109, 105, 105, 105, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 94, 94, 94, 97, 97, 97, 99, 99, 99, 100, 100, 100, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 115, 115, 115, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 93, 93, 93, 92, 92, 92, 96, 96, 96, 102, 102, 102, 109, 109, 109, 113, 113, 113, 116, 116, 116, 119, 119, 119, 123, 123, 123, 128, 128, 128, 133, 133, 133, 138, 138, 138, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 133, 133, 133, 136, 136, 136, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 137, 137, 137, 140, 140, 140, 141, 141, 141, 140, 140, 140, 142, 142, 142, 146, 146, 146, 151, 151, 151, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 173, 173, 173, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 170, 170, 170, 174, 174, 174, 178, 178, 178, 179, 179, 179, 181, 181, 181, 182, 182, 182, 183, 183, 183, 183, 183, 183, 181, 181, 181, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 164, 164, 164, 162, 162, 162, 199, 199, 199, 199, 199, 199, 197, 197, 197, 195, 195, 195, 191, 191, 191, 187, 187, 187, 184, 184, 184, 183, 183, 183, 183, 183, 183, 180, 180, 180, 177, 177, 177, 175, 175, 175, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 97, 97, 97, 103, 103, 103, 110, 110, 110, 114, 114, 114, 116, 116, 116, 119, 119, 119, 123, 123, 123, 129, 129, 129, 135, 135, 135, 140, 140, 140, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 138, 138, 138, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 147, 147, 147, 152, 152, 152, 156, 156, 156, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 171, 171, 171, 174, 174, 174, 177, 177, 177, 178, 178, 178, 176, 176, 176, 175, 175, 175, 174, 174, 174, 176, 176, 176, 176, 176, 176, 174, 174, 174, 172, 172, 172, 172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 166, 166, 166, 171, 171, 171, 176, 176, 176, 179, 179, 179, 181, 181, 181, 182, 182, 182, 185, 185, 185, 186, 186, 186, 186, 186, 186, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 176, 176, 176, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 170, 170, 170, 168, 168, 168, 200, 200, 200, 200, 200, 200, 199, 199, 199, 197, 197, 197, 193, 193, 193, 189, 189, 189, 185, 185, 185, 183, 183, 183, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 174, 174, 174, 171, 171, 171, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 125, 125, 125, 120, 120, 120, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 109, 109, 109, 113, 113, 113, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 98, 98, 98, 99, 99, 99, 104, 104, 104, 110, 110, 110, 114, 114, 114, 116, 116, 116, 119, 119, 119, 124, 124, 124, 130, 130, 130, 136, 136, 136, 141, 141, 141, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 161, 161, 161, 165, 165, 165, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 178, 178, 178, 180, 180, 180, 180, 180, 180, 177, 177, 177, 174, 174, 174, 174, 174, 174, 176, 176, 176, 176, 176, 176, 174, 174, 174, 172, 172, 172, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 164, 164, 164, 165, 165, 165, 168, 168, 168, 173, 173, 173, 178, 178, 178, 182, 182, 182, 183, 183, 183, 184, 184, 184, 186, 186, 186, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 179, 179, 179, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 204, 204, 204, 204, 204, 204, 202, 202, 202, 200, 200, 200, 196, 196, 196, 192, 192, 192, 187, 187, 187, 184, 184, 184, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 130, 130, 130, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 115, 115, 115, 120, 120, 120, 123, 123, 123, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 105, 105, 105, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 125, 125, 125, 131, 131, 131, 136, 136, 136, 141, 141, 141, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 148, 148, 148, 153, 153, 153, 157, 157, 157, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 181, 181, 181, 181, 181, 181, 177, 177, 177, 174, 174, 174, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 167, 167, 167, 170, 170, 170, 176, 176, 176, 181, 181, 181, 184, 184, 184, 186, 186, 186, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 182, 182, 182, 182, 182, 182, 183, 183, 183, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 185, 185, 185, 185, 185, 185, 185, 185, 185, 208, 208, 208, 207, 207, 207, 205, 205, 205, 202, 202, 202, 198, 198, 198, 194, 194, 194, 190, 190, 190, 187, 187, 187, 183, 183, 183, 178, 178, 178, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 162, 162, 162, 158, 158, 158, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 109, 109, 109, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 122, 122, 122, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 114, 114, 114, 119, 119, 119, 125, 125, 125, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 149, 149, 149, 154, 154, 154, 159, 159, 159, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 178, 178, 178, 180, 180, 180, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 176, 176, 176, 177, 177, 177, 175, 175, 175, 173, 173, 173, 173, 173, 173, 175, 175, 175, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 172, 172, 172, 178, 178, 178, 182, 182, 182, 185, 185, 185, 187, 187, 187, 189, 189, 189, 189, 189, 189, 187, 187, 187, 186, 186, 186, 186, 186, 186, 188, 188, 188, 189, 189, 189, 189, 189, 189, 188, 188, 188, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, 190, 190, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 210, 210, 210, 210, 210, 210, 207, 207, 207, 203, 203, 203, 199, 199, 199, 195, 195, 195, 192, 192, 192, 188, 188, 188, 184, 184, 184, 179, 179, 179, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 174, 174, 174, 174, 174, 174, 175, 175, 175, 178, 178, 178, 178, 178, 178, 176, 176, 176, 172, 172, 172, 169, 169, 169, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 113, 113, 113, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 124, 124, 124, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 113, 113, 113, 110, 110, 110, 106, 106, 106, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 119, 119, 119, 124, 124, 124, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 160, 160, 160, 162, 162, 162, 163, 163, 163, 161, 161, 161, 160, 160, 160, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 154, 154, 154, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 145, 145, 145, 150, 150, 150, 155, 155, 155, 160, 160, 160, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 175, 175, 175, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 169, 169, 169, 173, 173, 173, 178, 178, 178, 181, 181, 181, 184, 184, 184, 187, 187, 187, 190, 190, 190, 190, 190, 190, 189, 189, 189, 188, 188, 188, 189, 189, 189, 192, 192, 192, 193, 193, 193, 193, 193, 193, 191, 191, 191, 190, 190, 190, 190, 190, 190, 192, 192, 192, 194, 194, 194, 194, 194, 194, 195, 195, 195, 196, 196, 196, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 210, 210, 210, 211, 211, 211, 208, 208, 208, 204, 204, 204, 199, 199, 199, 195, 195, 195, 192, 192, 192, 189, 189, 189, 184, 184, 184, 180, 180, 180, 177, 177, 177, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 181, 181, 181, 179, 179, 179, 174, 174, 174, 170, 170, 170, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 147, 147, 147, 153, 153, 153, 158, 158, 158, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 145, 145, 145, 151, 151, 151, 157, 157, 157, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 174, 174, 174, 175, 175, 175, 175, 175, 175, 177, 177, 177, 179, 179, 179, 180, 180, 180, 178, 178, 178, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 176, 176, 176, 179, 179, 179, 180, 180, 180, 179, 179, 179, 177, 177, 177, 176, 176, 176, 175, 175, 175, 172, 172, 172, 170, 170, 170, 168, 168, 168, 168, 168, 168, 169, 169, 169, 173, 173, 173, 178, 178, 178, 180, 180, 180, 182, 182, 182, 185, 185, 185, 189, 189, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 193, 193, 193, 195, 195, 195, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 198, 198, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 202, 202, 202, 205, 205, 205, 207, 207, 207, 207, 207, 207, 207, 207, 207, 206, 206, 206, 205, 205, 205, 209, 209, 209, 210, 210, 210, 208, 208, 208, 205, 205, 205, 200, 200, 200, 196, 196, 196, 193, 193, 193, 190, 190, 190, 186, 186, 186, 181, 181, 181, 179, 179, 179, 178, 178, 178, 179, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 184, 184, 184, 186, 186, 186, 186, 186, 186, 183, 183, 183, 179, 179, 179, 174, 174, 174, 172, 172, 172, 171, 171, 171, 170, 170, 170, 166, 166, 166, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 109, 109, 109, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 134, 134, 134, 137, 137, 137, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 147, 147, 147, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 169, 169, 169, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 144, 144, 144, 150, 150, 150, 156, 156, 156, 161, 161, 161, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 174, 174, 176, 176, 176, 179, 179, 179, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 178, 178, 178, 180, 180, 180, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 175, 175, 175, 172, 172, 172, 170, 170, 170, 170, 170, 170, 171, 171, 171, 175, 175, 175, 178, 178, 178, 180, 180, 180, 181, 181, 181, 184, 184, 184, 187, 187, 187, 190, 190, 190, 191, 191, 191, 193, 193, 193, 196, 196, 196, 198, 198, 198, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, 202, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 207, 207, 207, 210, 210, 210, 213, 213, 213, 213, 213, 213, 212, 212, 212, 210, 210, 210, 209, 209, 209, 208, 208, 208, 209, 209, 209, 207, 207, 207, 204, 204, 204, 200, 200, 200, 197, 197, 197, 195, 195, 195, 192, 192, 192, 188, 188, 188, 184, 184, 184, 182, 182, 182, 181, 181, 181, 181, 181, 181, 182, 182, 182, 183, 183, 183, 185, 185, 185, 187, 187, 187, 189, 189, 189, 191, 191, 191, 191, 191, 191, 191, 191, 191, 188, 188, 188, 184, 184, 184, 179, 179, 179, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 167, 167, 167, 164, 164, 164, 160, 160, 160, 157, 157, 157, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 121, 121, 121, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 159, 159, 159, 155, 155, 155, 154, 154, 154, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 142, 142, 142, 147, 147, 147, 153, 153, 153, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 174, 174, 174, 176, 176, 176, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 172, 172, 172, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 182, 182, 182, 184, 184, 184, 187, 187, 187, 189, 189, 189, 191, 191, 191, 194, 194, 194, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, 199, 201, 201, 201, 203, 203, 203, 205, 205, 205, 207, 207, 207, 208, 208, 208, 208, 208, 208, 209, 209, 209, 211, 211, 211, 214, 214, 214, 216, 216, 216, 215, 215, 215, 213, 213, 213, 212, 212, 212, 212, 212, 212, 205, 205, 205, 207, 207, 207, 205, 205, 205, 203, 203, 203, 200, 200, 200, 199, 199, 199, 197, 197, 197, 193, 193, 193, 189, 189, 189, 186, 186, 186, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 187, 187, 187, 190, 190, 190, 192, 192, 192, 195, 195, 195, 196, 196, 196, 195, 195, 195, 194, 194, 194, 193, 193, 193, 189, 189, 189, 185, 185, 185, 181, 181, 181, 179, 179, 179, 177, 177, 177, 175, 175, 175, 173, 173, 173, 169, 169, 169, 166, 166, 166, 162, 162, 162, 157, 157, 157, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 173, 173, 173, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 172, 172, 172, 172, 172, 172, 169, 169, 169, 163, 163, 163, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 137, 137, 137, 142, 142, 142, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 173, 173, 173, 175, 175, 175, 175, 175, 175, 173, 173, 173, 172, 172, 172, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 182, 182, 182, 185, 185, 185, 187, 187, 187, 188, 188, 188, 190, 190, 190, 194, 194, 194, 199, 199, 199, 200, 200, 200, 200, 200, 200, 199, 199, 199, 200, 200, 200, 203, 203, 203, 206, 206, 206, 208, 208, 208, 210, 210, 210, 211, 211, 211, 213, 213, 213, 214, 214, 214, 216, 216, 216, 216, 216, 216, 214, 214, 214, 213, 213, 213, 212, 212, 212, 213, 213, 213, 203, 203, 203, 204, 204, 204, 203, 203, 203, 201, 201, 201, 199, 199, 199, 198, 198, 198, 196, 196, 196, 192, 192, 192, 188, 188, 188, 186, 186, 186, 186, 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, 189, 191, 191, 191, 193, 193, 193, 196, 196, 196, 198, 198, 198, 198, 198, 198, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, 195, 190, 190, 190, 185, 185, 185, 182, 182, 182, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 171, 171, 171, 168, 168, 168, 163, 163, 163, 158, 158, 158, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 169, 169, 169, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 172, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 154, 154, 154, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 136, 136, 136, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 162, 162, 162, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 182, 182, 182, 184, 184, 184, 184, 184, 184, 183, 183, 183, 180, 180, 180, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 181, 181, 181, 186, 186, 186, 188, 188, 188, 189, 189, 189, 190, 190, 190, 194, 194, 194, 199, 199, 199, 201, 201, 201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 202, 202, 202, 205, 205, 205, 209, 209, 209, 211, 211, 211, 212, 212, 212, 214, 214, 214, 215, 215, 215, 215, 215, 215, 213, 213, 213, 212, 212, 212, 211, 211, 211, 212, 212, 212, 214, 214, 214, 200, 200, 200, 201, 201, 201, 200, 200, 200, 198, 198, 198, 197, 197, 197, 196, 196, 196, 194, 194, 194, 190, 190, 190, 186, 186, 186, 185, 185, 185, 186, 186, 186, 187, 187, 187, 189, 189, 189, 191, 191, 191, 193, 193, 193, 195, 195, 195, 197, 197, 197, 198, 198, 198, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 200, 200, 200, 195, 195, 195, 189, 189, 189, 186, 186, 186, 184, 184, 184, 182, 182, 182, 179, 179, 179, 176, 176, 176, 174, 174, 174, 171, 171, 171, 167, 167, 167, 163, 163, 163, 157, 157, 157, 152, 152, 152, 148, 148, 148, 144, 144, 144, 139, 139, 139, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 137, 137, 137, 141, 141, 141, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 139, 139, 139, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 163, 163, 163, 168, 168, 168, 173, 173, 173, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 173, 173, 173, 169, 169, 169, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 170, 170, 170, 171, 171, 171, 174, 174, 174, 175, 175, 175, 175, 175, 175, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 179, 179, 179, 182, 182, 182, 184, 184, 184, 183, 183, 183, 181, 181, 181, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 177, 177, 177, 177, 177, 177, 180, 180, 180, 185, 185, 185, 188, 188, 188, 189, 189, 189, 191, 191, 191, 194, 194, 194, 198, 198, 198, 201, 201, 201, 201, 201, 201, 200, 200, 200, 199, 199, 199, 201, 201, 201, 204, 204, 204, 207, 207, 207, 209, 209, 209, 210, 210, 210, 212, 212, 212, 212, 212, 212, 211, 211, 211, 209, 209, 209, 208, 208, 208, 209, 209, 209, 211, 211, 211, 214, 214, 214, 196, 196, 196, 197, 197, 197, 196, 196, 196, 195, 195, 195, 193, 193, 193, 193, 193, 193, 191, 191, 191, 188, 188, 188, 185, 185, 185, 184, 184, 184, 185, 185, 185, 186, 186, 186, 188, 188, 188, 191, 191, 191, 195, 195, 195, 197, 197, 197, 198, 198, 198, 199, 199, 199, 199, 199, 199, 200, 200, 200, 202, 202, 202, 203, 203, 203, 202, 202, 202, 198, 198, 198, 192, 192, 192, 189, 189, 189, 186, 186, 186, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 172, 172, 172, 168, 168, 168, 164, 164, 164, 159, 159, 159, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 142, 142, 142, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 136, 136, 136, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 157, 157, 157, 162, 162, 162, 168, 168, 168, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 146, 146, 146, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 172, 172, 172, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 183, 183, 183, 182, 182, 182, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 177, 177, 177, 177, 177, 177, 180, 180, 180, 184, 184, 184, 188, 188, 188, 190, 190, 190, 192, 192, 192, 194, 194, 194, 197, 197, 197, 198, 198, 198, 198, 198, 198, 197, 197, 197, 197, 197, 197, 198, 198, 198, 200, 200, 200, 203, 203, 203, 205, 205, 205, 206, 206, 206, 208, 208, 208, 208, 208, 208, 207, 207, 207, 205, 205, 205, 205, 205, 205, 206, 206, 206, 209, 209, 209, 213, 213, 213, 193, 193, 193, 194, 194, 194, 193, 193, 193, 191, 191, 191, 190, 190, 190, 191, 191, 191, 190, 190, 190, 187, 187, 187, 185, 185, 185, 185, 185, 185, 184, 184, 184, 184, 184, 184, 186, 186, 186, 190, 190, 190, 195, 195, 195, 198, 198, 198, 200, 200, 200, 201, 201, 201, 201, 201, 201, 202, 202, 202, 203, 203, 203, 203, 203, 203, 201, 201, 201, 198, 198, 198, 193, 193, 193, 190, 190, 190, 188, 188, 188, 185, 185, 185, 181, 181, 181, 178, 178, 178, 175, 175, 175, 172, 172, 172, 168, 168, 168, 164, 164, 164, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 155, 155, 155, 156, 156, 156, 156, 156, 156, 154, 154, 154, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 161, 161, 161, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 173, 173, 173, 171, 171, 171, 170, 170, 170, 168, 168, 168, 165, 165, 165, 161, 161, 161, 155, 155, 155, 150, 150, 150, 146, 146, 146, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 129, 129, 129, 125, 125, 125, 122, 122, 122, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 134, 134, 134, 139, 139, 139, 144, 144, 144, 150, 150, 150, 154, 154, 154, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 168, 168, 168, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 177, 177, 177, 181, 181, 181, 183, 183, 183, 182, 182, 182, 179, 179, 179, 179, 179, 179, 179, 179, 179, 178, 178, 178, 177, 177, 177, 178, 178, 178, 180, 180, 180, 183, 183, 183, 186, 186, 186, 189, 189, 189, 192, 192, 192, 194, 194, 194, 195, 195, 195, 194, 194, 194, 193, 193, 193, 192, 192, 192, 191, 191, 191, 192, 192, 192, 195, 195, 195, 198, 198, 198, 200, 200, 200, 202, 202, 202, 203, 203, 203, 204, 204, 204, 204, 204, 204, 203, 203, 203, 202, 202, 202, 204, 204, 204, 208, 208, 208, 212, 212, 212, 188, 188, 188, 190, 190, 190, 189, 189, 189, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 183, 183, 183, 183, 183, 183, 184, 184, 184, 188, 188, 188, 194, 194, 194, 198, 198, 198, 200, 200, 200, 201, 201, 201, 202, 202, 202, 203, 203, 203, 203, 203, 203, 202, 202, 202, 199, 199, 199, 195, 195, 195, 193, 193, 193, 191, 191, 191, 189, 189, 189, 186, 186, 186, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 170, 170, 170, 164, 164, 164, 159, 159, 159, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 142, 142, 142, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 135, 135, 135, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 152, 152, 152, 156, 156, 156, 160, 160, 160, 164, 164, 164, 168, 168, 168, 171, 171, 171, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 181, 181, 181, 180, 180, 180, 179, 179, 179, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 166, 166, 166, 161, 161, 161, 155, 155, 155, 150, 150, 150, 145, 145, 145, 140, 140, 140, 134, 134, 134, 131, 131, 131, 130, 130, 130, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 135, 135, 135, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 171, 171, 171, 171, 171, 171, 173, 173, 173, 173, 173, 173, 172, 172, 172, 173, 173, 173, 176, 176, 176, 180, 180, 180, 182, 182, 182, 181, 181, 181, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 185, 185, 185, 187, 187, 187, 190, 190, 190, 192, 192, 192, 192, 192, 192, 189, 189, 189, 186, 186, 186, 185, 185, 185, 185, 185, 185, 187, 187, 187, 191, 191, 191, 194, 194, 194, 196, 196, 196, 198, 198, 198, 200, 200, 200, 201, 201, 201, 202, 202, 202, 202, 202, 202, 201, 201, 201, 203, 203, 203, 207, 207, 207, 211, 211, 211, 183, 183, 183, 185, 185, 185, 185, 185, 185, 183, 183, 183, 181, 181, 181, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 185, 185, 185, 189, 189, 189, 193, 193, 193, 196, 196, 196, 198, 198, 198, 200, 200, 200, 201, 201, 201, 202, 202, 202, 200, 200, 200, 196, 196, 196, 193, 193, 193, 191, 191, 191, 190, 190, 190, 188, 188, 188, 185, 185, 185, 182, 182, 182, 180, 180, 180, 178, 178, 178, 176, 176, 176, 171, 171, 171, 166, 166, 166, 160, 160, 160, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 127, 127, 127, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 137, 137, 137, 142, 142, 142, 148, 148, 148, 153, 153, 153, 157, 157, 157, 159, 159, 159, 163, 163, 163, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 175, 175, 175, 173, 173, 173, 170, 170, 170, 166, 166, 166, 160, 160, 160, 155, 155, 155, 151, 151, 151, 146, 146, 146, 139, 139, 139, 133, 133, 133, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 118, 118, 118, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 134, 134, 134, 138, 138, 138, 142, 142, 142, 145, 145, 145, 149, 149, 149, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 171, 171, 171, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 175, 175, 175, 178, 178, 178, 180, 180, 180, 180, 180, 180, 179, 179, 179, 179, 179, 179, 178, 178, 178, 176, 176, 176, 177, 177, 177, 179, 179, 179, 182, 182, 182, 183, 183, 183, 183, 183, 183, 184, 184, 184, 186, 186, 186, 187, 187, 187, 186, 186, 186, 183, 183, 183, 180, 180, 180, 179, 179, 179, 181, 181, 181, 184, 184, 184, 188, 188, 188, 191, 191, 191, 193, 193, 193, 195, 195, 195, 197, 197, 197, 199, 199, 199, 201, 201, 201, 201, 201, 201, 200, 200, 200, 202, 202, 202, 205, 205, 205, 210, 210, 210, 177, 177, 177, 179, 179, 179, 179, 179, 179, 177, 177, 177, 174, 174, 174, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 180, 180, 180, 183, 183, 183, 187, 187, 187, 190, 190, 190, 192, 192, 192, 194, 194, 194, 196, 196, 196, 197, 197, 197, 196, 196, 196, 193, 193, 193, 190, 190, 190, 189, 189, 189, 187, 187, 187, 184, 184, 184, 180, 180, 180, 178, 178, 178, 177, 177, 177, 177, 177, 177, 175, 175, 175, 172, 172, 172, 166, 166, 166, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 146, 146, 146, 141, 141, 141, 135, 135, 135, 131, 131, 131, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 143, 143, 143, 150, 150, 150, 155, 155, 155, 158, 158, 158, 160, 160, 160, 164, 164, 164, 169, 169, 169, 175, 175, 175, 179, 179, 179, 182, 182, 182, 184, 184, 184, 185, 185, 185, 186, 186, 186, 185, 185, 185, 183, 183, 183, 180, 180, 180, 178, 178, 178, 174, 174, 174, 171, 171, 171, 166, 166, 166, 161, 161, 161, 156, 156, 156, 152, 152, 152, 146, 146, 146, 139, 139, 139, 132, 132, 132, 127, 127, 127, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 119, 119, 119, 121, 121, 121, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 142, 142, 142, 147, 147, 147, 152, 152, 152, 156, 156, 156, 160, 160, 160, 165, 165, 165, 169, 169, 169, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 178, 178, 178, 176, 176, 176, 177, 177, 177, 179, 179, 179, 182, 182, 182, 183, 183, 183, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 179, 179, 179, 177, 177, 177, 175, 175, 175, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 188, 188, 188, 190, 190, 190, 193, 193, 193, 195, 195, 195, 197, 197, 197, 199, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 203, 203, 203, 207, 207, 207, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 187, 187, 187, 189, 189, 189, 190, 190, 190, 192, 192, 192, 191, 191, 191, 190, 190, 190, 188, 188, 188, 186, 186, 186, 183, 183, 183, 178, 178, 178, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 165, 165, 165, 161, 161, 161, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 148, 148, 148, 142, 142, 142, 136, 136, 136, 132, 132, 132, 130, 130, 130, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 116, 116, 116, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 152, 152, 152, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 171, 171, 171, 176, 176, 176, 180, 180, 180, 183, 183, 183, 185, 185, 185, 186, 186, 186, 187, 187, 187, 187, 187, 187, 185, 185, 185, 183, 183, 183, 180, 180, 180, 177, 177, 177, 173, 173, 173, 168, 168, 168, 162, 162, 162, 157, 157, 157, 152, 152, 152, 146, 146, 146, 138, 138, 138, 131, 131, 131, 126, 126, 126, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 143, 143, 143, 149, 149, 149, 153, 153, 153, 156, 156, 156, 159, 159, 159, 163, 163, 163, 167, 167, 167, 170, 170, 170, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 175, 175, 175, 176, 176, 176, 178, 178, 178, 180, 180, 180, 181, 181, 181, 180, 180, 180, 179, 179, 179, 179, 179, 179, 176, 176, 176, 173, 173, 173, 172, 172, 172, 172, 172, 172, 174, 174, 174, 177, 177, 177, 180, 180, 180, 182, 182, 182, 185, 185, 185, 187, 187, 187, 190, 190, 190, 192, 192, 192, 194, 194, 194, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 199, 199, 199, 203, 203, 203, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 173, 173, 173, 176, 176, 176, 179, 179, 179, 181, 181, 181, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 184, 184, 184, 182, 182, 182, 178, 178, 178, 173, 173, 173, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 151, 151, 151, 145, 145, 145, 140, 140, 140, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 126, 126, 126, 121, 121, 121, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 160, 160, 160, 164, 164, 164, 169, 169, 169, 173, 173, 173, 177, 177, 177, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 183, 183, 183, 179, 179, 179, 174, 174, 174, 169, 169, 169, 164, 164, 164, 159, 159, 159, 153, 153, 153, 146, 146, 146, 138, 138, 138, 132, 132, 132, 127, 127, 127, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 141, 141, 141, 146, 146, 146, 152, 152, 152, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 172, 172, 172, 170, 170, 170, 169, 169, 169, 171, 171, 171, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 171, 171, 171, 169, 169, 169, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 179, 179, 179, 181, 181, 181, 184, 184, 184, 187, 187, 187, 189, 189, 189, 190, 190, 190, 192, 192, 192, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 199, 199, 199, 162, 162, 162, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 165, 165, 165, 169, 169, 169, 172, 172, 172, 175, 175, 175, 177, 177, 177, 179, 179, 179, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 180, 180, 180, 179, 179, 179, 176, 176, 176, 173, 173, 173, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 145, 145, 145, 140, 140, 140, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 130, 130, 130, 124, 124, 124, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 166, 166, 166, 171, 171, 171, 175, 175, 175, 178, 178, 178, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 184, 184, 184, 180, 180, 180, 174, 174, 174, 168, 168, 168, 164, 164, 164, 160, 160, 160, 154, 154, 154, 147, 147, 147, 140, 140, 140, 134, 134, 134, 129, 129, 129, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 135, 135, 135, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 160, 160, 160, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 167, 167, 167, 169, 169, 169, 171, 171, 171, 174, 174, 174, 177, 177, 177, 179, 179, 179, 182, 182, 182, 184, 184, 184, 185, 185, 185, 185, 185, 185, 188, 188, 188, 191, 191, 191, 192, 192, 192, 192, 192, 192, 193, 193, 193, 196, 196, 196, 160, 160, 160, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 175, 175, 175, 177, 177, 177, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 146, 146, 146, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 134, 134, 134, 129, 129, 129, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 182, 182, 182, 184, 184, 184, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 183, 183, 183, 178, 178, 178, 172, 172, 172, 166, 166, 166, 163, 163, 163, 160, 160, 160, 155, 155, 155, 149, 149, 149, 142, 142, 142, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 135, 135, 135, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 171, 171, 171, 174, 174, 174, 177, 177, 177, 179, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 181, 183, 183, 183, 187, 187, 187, 189, 189, 189, 190, 190, 190, 190, 190, 190, 193, 193, 193, 157, 157, 157, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 169, 169, 169, 172, 172, 172, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 130, 130, 130, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 154, 154, 154, 151, 151, 151, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 162, 162, 162, 158, 158, 158, 154, 154, 154, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 166, 166, 166, 170, 170, 170, 174, 174, 174, 178, 178, 178, 180, 180, 180, 183, 183, 183, 185, 185, 185, 187, 187, 187, 187, 187, 187, 186, 186, 186, 185, 185, 185, 184, 184, 184, 182, 182, 182, 179, 179, 179, 174, 174, 174, 169, 169, 169, 164, 164, 164, 161, 161, 161, 159, 159, 159, 155, 155, 155, 149, 149, 149, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 132, 132, 132, 137, 137, 137, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 180, 180, 180, 184, 184, 184, 187, 187, 187, 188, 188, 188, 189, 189, 189, 191, 191, 191, 152, 152, 152, 156, 156, 156, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 155, 155, 155, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 169, 169, 169, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 129, 129, 129, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 130, 130, 130, 129, 129, 129, 130, 130, 130, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 156, 156, 156, 160, 160, 160, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 178, 178, 178, 182, 182, 182, 184, 184, 184, 187, 187, 187, 188, 188, 188, 187, 187, 187, 185, 185, 185, 183, 183, 183, 180, 180, 180, 177, 177, 177, 174, 174, 174, 170, 170, 170, 165, 165, 165, 161, 161, 161, 158, 158, 158, 157, 157, 157, 153, 153, 153, 147, 147, 147, 141, 141, 141, 135, 135, 135, 130, 130, 130, 126, 126, 126, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 138, 138, 138, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 173, 173, 173, 174, 174, 174, 177, 177, 177, 181, 181, 181, 184, 184, 184, 186, 186, 186, 187, 187, 187, 188, 188, 188, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 164, 164, 164, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 148, 148, 148, 145, 145, 145, 141, 141, 141, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 151, 151, 151, 155, 155, 155, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 140, 140, 140, 138, 138, 138, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 130, 130, 130, 134, 134, 134, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 170, 170, 170, 174, 174, 174, 178, 178, 178, 182, 182, 182, 185, 185, 185, 187, 187, 187, 188, 188, 188, 186, 186, 186, 183, 183, 183, 179, 179, 179, 175, 175, 175, 171, 171, 171, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 145, 145, 145, 139, 139, 139, 132, 132, 132, 127, 127, 127, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 148, 148, 148, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 173, 173, 173, 177, 177, 177, 181, 181, 181, 183, 183, 183, 184, 184, 184, 185, 185, 185, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 163, 163, 163, 161, 161, 161, 157, 157, 157, 152, 152, 152, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 145, 145, 145, 150, 150, 150, 155, 155, 155, 157, 157, 157, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 160, 160, 160, 163, 163, 163, 167, 167, 167, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 131, 131, 131, 136, 136, 136, 142, 142, 142, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 172, 172, 172, 176, 176, 176, 181, 181, 181, 184, 184, 184, 186, 186, 186, 186, 186, 186, 185, 185, 185, 181, 181, 181, 176, 176, 176, 170, 170, 170, 165, 165, 165, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 137, 137, 137, 131, 131, 131, 126, 126, 126, 122, 122, 122, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 145, 145, 145, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 173, 173, 173, 176, 176, 176, 179, 179, 179, 181, 181, 181, 182, 182, 182, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 155, 155, 155, 159, 159, 159, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 138, 138, 138, 143, 143, 143, 148, 148, 148, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 166, 166, 166, 167, 167, 167, 170, 170, 170, 174, 174, 174, 178, 178, 178, 182, 182, 182, 184, 184, 184, 184, 184, 184, 182, 182, 182, 179, 179, 179, 173, 173, 173, 167, 167, 167, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 140, 140, 140, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 119, 119, 119, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 168, 168, 168, 172, 172, 172, 176, 176, 176, 180, 180, 180, 181, 181, 181, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 153, 153, 153, 148, 148, 148, 145, 145, 145, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 130, 130, 130, 126, 126, 126, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 140, 140, 140, 143, 143, 143, 149, 149, 149, 154, 154, 154, 157, 157, 157, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 147, 147, 147, 149, 149, 149, 154, 154, 154, 159, 159, 159, 164, 164, 164, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 149, 149, 149, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 158, 158, 158, 162, 162, 162, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 167, 167, 167, 171, 171, 171, 175, 175, 175, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 175, 175, 175, 170, 170, 170, 163, 163, 163, 157, 157, 157, 152, 152, 152, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 120, 120, 120, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 175, 175, 175, 179, 179, 179, 181, 181, 181, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 149, 149, 149, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 151, 151, 151, 147, 147, 147, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 132, 132, 132, 137, 137, 137, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 144, 144, 144, 148, 148, 148, 153, 153, 153, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 147, 147, 147, 149, 149, 149, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 155, 155, 155, 160, 160, 160, 164, 164, 164, 167, 167, 167, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 167, 167, 167, 171, 171, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 168, 168, 168, 161, 161, 161, 154, 154, 154, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 120, 120, 120, 115, 115, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 142, 142, 142, 146, 146, 146, 148, 148, 148, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 159, 159, 159, 163, 163, 163, 168, 168, 168, 174, 174, 174, 178, 178, 178, 179, 179, 179, 148, 148, 148, 148, 148, 148, 148, 148, 148, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 133, 133, 133, 138, 138, 138, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 149, 149, 149, 153, 153, 153, 157, 157, 157, 159, 159, 159, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 148, 148, 148, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 165, 165, 165, 159, 159, 159, 151, 151, 151, 145, 145, 145, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 109, 109, 109, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 158, 158, 158, 162, 162, 162, 167, 167, 167, 172, 172, 172, 175, 175, 175, 176, 176, 176, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 151, 151, 151, 148, 148, 148, 145, 145, 145, 140, 140, 140, 136, 136, 136, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 144, 144, 144, 147, 147, 147, 150, 150, 150, 152, 152, 152, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 163, 163, 163, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 162, 162, 162, 157, 157, 157, 149, 149, 149, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 117, 117, 117, 112, 112, 112, 107, 107, 107, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 152, 152, 152, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 136, 136, 136, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 159, 159, 159, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 159, 159, 159, 154, 154, 154, 147, 147, 147, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 110, 110, 110, 105, 105, 105, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 113, 113, 113, 118, 118, 118, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 124, 124, 124, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 136, 136, 136, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 151, 151, 151, 147, 147, 147, 145, 145, 145, 145, 145, 145, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 160, 160, 160, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 145, 145, 145, 139, 139, 139, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 105, 105, 105, 109, 109, 109, 114, 114, 114, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 145, 145, 145, 140, 140, 140, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 106, 106, 106, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 112, 112, 112, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 142, 142, 142, 145, 145, 145, 150, 150, 150, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 158, 158, 158, 163, 163, 163, 167, 167, 167, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 104, 104, 104, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 111, 111, 111, 115, 115, 115, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 142, 142, 142, 147, 147, 147, 152, 152, 152, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 167, 167, 167, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 106, 106, 106, 109, 109, 109, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 142, 142, 142, 148, 148, 148, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 150, 150, 150, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 144, 144, 144, 146, 146, 146, 150, 150, 150, 152, 152, 152, 152, 152, 152, 149, 149, 149, 145, 145, 145, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 120, 120, 120, 125, 125, 125, 130, 130, 130, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 125, 125, 125, 129, 129, 129, 131, 131, 131, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 149, 149, 149, 155, 155, 155, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 158, 158, 158, 159, 159, 159, 152, 152, 152, 147, 147, 147, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 114, 114, 114, 119, 119, 119, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 139, 139, 139, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 157, 157, 157, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 164, 164, 164, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 160, 160, 160, 160, 160, 160, 157, 157, 157, 152, 152, 152, 147, 147, 147, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 150, 150, 150, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 150, 150, 150, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 129, 129, 129, 124, 124, 124, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 119, 119, 119, 117, 117, 117, 113, 113, 113, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 128, 128, 128, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 158, 158, 158, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 150, 150, 150, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 148, 148, 148, 154, 154, 154, 159, 159, 159, 164, 164, 164, 168, 168, 168, 171, 171, 171, 174, 174, 174, 176, 176, 176, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 160, 160, 160, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 135, 135, 135, 129, 129, 129, 123, 123, 123, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 124, 124, 124, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 142, 142, 142, 147, 147, 147, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 162, 162, 162, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 118, 118, 118, 123, 123, 123, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 129, 129, 129, 128, 128, 128, 130, 130, 130, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 148, 148, 148, 153, 153, 153, 159, 159, 159, 164, 164, 164, 168, 168, 168, 170, 170, 170, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 160, 160, 160, 158, 158, 158, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 159, 159, 159, 155, 155, 155, 150, 150, 150, 145, 145, 145, 141, 141, 141, 136, 136, 136, 129, 129, 129, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 155, 155, 155, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 165, 165, 165, 166, 166, 166, 164, 164, 164, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 116, 116, 116, 121, 121, 121, 126, 126, 126, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 154, 154, 154, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 178, 178, 177, 177, 177, 176, 176, 176, 173, 173, 173, 171, 171, 171, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 149, 149, 149, 145, 145, 145, 142, 142, 142, 137, 137, 137, 130, 130, 130, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 121, 121, 121, 118, 118, 118, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 113, 113, 113, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 124, 124, 124, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 164, 164, 164, 165, 165, 165, 164, 164, 164, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 129, 129, 129, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 172, 172, 172, 169, 169, 169, 166, 166, 166, 165, 165, 165, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 142, 142, 142, 137, 137, 137, 130, 130, 130, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 100, 100, 100, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 96, 96, 96, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 119, 119, 119, 124, 124, 124, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 125, 125, 125, 129, 129, 129, 134, 134, 134, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 145, 145, 145, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 167, 167, 167, 165, 165, 165, 162, 162, 162, 158, 158, 158, 156, 156, 156, 157, 157, 157, 160, 160, 160, 163, 163, 163, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 131, 131, 131, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 101, 101, 101, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 97, 97, 97, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 116, 116, 116, 120, 120, 120, 125, 125, 125, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 139, 139, 139, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 104, 104, 104, 109, 109, 109, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 141, 141, 141, 136, 136, 136, 130, 130, 130, 123, 123, 123, 117, 117, 117, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 97, 97, 97, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 158, 158, 158, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 130, 130, 130, 126, 126, 126, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 116, 116, 116, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 100, 100, 100, 105, 105, 105, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 155, 155, 155, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 125, 125, 125, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 137, 137, 137, 134, 134, 134, 128, 128, 128, 123, 123, 123, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 97, 97, 97, 100, 100, 100, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 171, 171, 171, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 116, 116, 116, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 114, 114, 114, 110, 110, 110, 108, 108, 108, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 137, 137, 137, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 134, 134, 134, 130, 130, 130, 124, 124, 124, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 92, 92, 92, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 119, 119, 119, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 160, 160, 160, 165, 165, 165, 170, 170, 170, 172, 172, 172, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 157, 157, 157, 154, 154, 154, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 139, 139, 139, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 107, 107, 107, 107, 107, 107, 110, 110, 110, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 158, 158, 158, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 146, 146, 146, 148, 148, 148, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 120, 120, 120, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 119, 119, 119, 126, 126, 126, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 145, 145, 145, 149, 149, 149, 152, 152, 152, 155, 155, 155, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 161, 161, 161, 158, 158, 158, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 153, 153, 153, 157, 157, 157, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 138, 138, 138, 138, 138, 138, 141, 141, 141, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 135, 135, 135, 129, 129, 129, 124, 124, 124, 119, 119, 119, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 89, 89, 89, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 108, 108, 108, 115, 115, 115, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 142, 142, 142, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 159, 159, 159, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 130, 130, 130, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 158, 158, 158, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 134, 134, 134, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 105, 105, 105, 111, 111, 111, 119, 119, 119, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 134, 134, 134, 139, 139, 139, 145, 145, 145, 150, 150, 150, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 158, 158, 158, 155, 155, 155, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 150, 150, 150, 145, 145, 145, 140, 140, 140, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 120, 120, 120, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 143, 143, 143, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 160, 160, 160, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 132, 132, 132, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 116, 116, 116, 112, 112, 112, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 103, 103, 103, 109, 109, 109, 116, 116, 116, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 132, 132, 132, 137, 137, 137, 143, 143, 143, 149, 149, 149, 153, 153, 153, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 161, 161, 161, 158, 158, 158, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 145, 145, 145, 138, 138, 138, 134, 134, 134, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 116, 116, 116, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 118, 118, 118, 123, 123, 123, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 136, 136, 136, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 109, 109, 109, 105, 105, 105, 102, 102, 102, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 103, 103, 103, 108, 108, 108, 114, 114, 114, 119, 119, 119, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 131, 131, 131, 136, 136, 136, 142, 142, 142, 147, 147, 147, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 144, 144, 144, 137, 137, 137, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 118, 118, 118, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 125, 125, 125, 122, 122, 122, 116, 116, 116, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 120, 120, 120, 126, 126, 126, 130, 130, 130, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 139, 139, 139, 143, 143, 143, 146, 146, 146, 150, 150, 150, 155, 155, 155, 160, 160, 160, 163, 163, 163, 165, 165, 165, 167, 167, 167, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 102, 102, 102, 107, 107, 107, 113, 113, 113, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 125, 125, 125, 129, 129, 129, 135, 135, 135, 141, 141, 141, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 146, 146, 146, 141, 141, 141, 135, 135, 135, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 123, 123, 123, 128, 128, 128, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 151, 151, 151, 157, 157, 157, 163, 163, 163, 167, 167, 167, 169, 169, 169, 171, 171, 171, 134, 134, 134, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 120, 120, 120, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 101, 101, 101, 98, 98, 98, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 113, 113, 113, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 95, 95, 95, 96, 96, 96, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 123, 123, 123, 128, 128, 128, 134, 134, 134, 139, 139, 139, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 151, 151, 151, 155, 155, 155, 158, 158, 158, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 151, 151, 151, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 127, 127, 127, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 120, 120, 120, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 120, 120, 120, 122, 122, 122, 126, 126, 126, 131, 131, 131, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 159, 159, 159, 165, 165, 165, 169, 169, 169, 171, 171, 171, 173, 173, 173, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 109, 109, 109, 105, 105, 105, 101, 101, 101, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 94, 94, 94, 95, 95, 95, 99, 99, 99, 103, 103, 103, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 126, 126, 126, 132, 132, 132, 138, 138, 138, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 132, 132, 132, 128, 128, 128, 124, 124, 124, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 129, 129, 129, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 161, 161, 161, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 135, 135, 135, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 94, 94, 94, 94, 94, 94, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 114, 114, 114, 119, 119, 119, 125, 125, 125, 131, 131, 131, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 127, 127, 127, 122, 122, 122, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 112, 112, 112, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 98, 98, 98, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 95, 95, 95, 95, 95, 95, 98, 98, 98, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 112, 112, 112, 117, 117, 117, 123, 123, 123, 129, 129, 129, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 125, 125, 125, 120, 120, 120, 116, 116, 116, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 125, 125, 125, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 169, 169, 169, 171, 171, 171, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 97, 97, 97, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 111, 111, 111, 117, 117, 117, 122, 122, 122, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 115, 115, 115, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 122, 122, 122, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 120, 120, 120, 114, 114, 114, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 117, 117, 117, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 133, 133, 133, 137, 137, 137, 142, 142, 142, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 119, 119, 119, 114, 114, 114, 109, 109, 109, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 109, 109, 109, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 167, 167, 167, 123, 123, 123, 122, 122, 122, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 122, 122, 122, 119, 119, 119, 114, 114, 114, 109, 109, 109, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 102, 102, 102, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 97, 97, 97, 92, 92, 92, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 105, 105, 105, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 113, 113, 113, 117, 117, 117, 122, 122, 122, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 135, 135, 135, 138, 138, 138, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 167, 167, 167, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 115, 115, 115, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 100, 100, 100, 103, 103, 103, 104, 104, 104, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 96, 96, 96, 91, 91, 91, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 86, 86, 86, 85, 85, 85, 87, 87, 87, 91, 91, 91, 96, 96, 96, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 101, 101, 101, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 83, 83, 83, 83, 83, 83, 84, 84, 84, 89, 89, 89, 95, 95, 95, 99, 99, 99, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 101, 101, 101, 104, 104, 104, 104, 104, 104, 101, 101, 101, 97, 97, 97, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 105, 105, 105, 106, 106, 106, 104, 104, 104, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 102, 102, 102, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 139, 139, 139, 144, 144, 144, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 127, 127, 127, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 105, 105, 105, 100, 100, 100, 96, 96, 96, 91, 91, 91, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 93, 93, 93, 98, 98, 98, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 101, 101, 101, 98, 98, 98, 96, 96, 96, 96, 96, 96, 99, 99, 99, 102, 102, 102, 106, 106, 106, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 119, 119, 119, 124, 124, 124, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 157, 157, 157, 162, 162, 162, 166, 166, 166, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 128, 128, 128, 126, 126, 126, 122, 122, 122, 119, 119, 119, 115, 115, 115, 113, 113, 113, 111, 111, 111, 108, 108, 108, 104, 104, 104, 99, 99, 99, 94, 94, 94, 88, 88, 88, 83, 83, 83, 81, 81, 81, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 90, 90, 90, 93, 93, 93, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 82, 82, 82, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 105, 105, 105, 106, 106, 106, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 93, 93, 93, 94, 94, 94, 96, 96, 96, 101, 101, 101, 105, 105, 105, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 115, 115, 115, 120, 120, 120, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 157, 157, 157, 162, 162, 162, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 162, 162, 162, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 93, 93, 93, 87, 87, 87, 81, 81, 81, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 79, 79, 79, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 90, 90, 90, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 93, 93, 93, 98, 98, 98, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 108, 108, 108, 105, 105, 105, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 105, 105, 105, 104, 104, 104, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 88, 88, 88, 90, 90, 90, 93, 93, 93, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 116, 116, 116, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 158, 158, 158, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 165, 165, 165, 161, 161, 161, 126, 126, 126, 121, 121, 121, 116, 116, 116, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 92, 92, 92, 86, 86, 86, 81, 81, 81, 79, 79, 79, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 79, 79, 79, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 83, 83, 83, 88, 88, 88, 93, 93, 93, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 101, 101, 101, 97, 97, 97, 92, 92, 92, 89, 89, 89, 87, 87, 87, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 125, 125, 125, 130, 130, 130, 136, 136, 136, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 143, 143, 143, 147, 147, 147, 152, 152, 152, 158, 158, 158, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 165, 165, 165, 166, 166, 166, 164, 164, 164, 161, 161, 161, 125, 125, 125, 120, 120, 120, 115, 115, 115, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 82, 82, 82, 84, 84, 84, 85, 85, 85, 86, 86, 86, 84, 84, 84, 82, 82, 82, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 85, 85, 85, 82, 82, 82, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 87, 87, 87, 91, 91, 91, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 99, 99, 99, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 87, 87, 87, 83, 83, 83, 81, 81, 81, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 113, 113, 113, 118, 118, 118, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 135, 135, 135, 139, 139, 139, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 142, 142, 142, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 97, 97, 97, 93, 93, 93, 88, 88, 88, 84, 84, 84, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 85, 85, 85, 88, 88, 88, 92, 92, 92, 93, 93, 93, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 81, 81, 81, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 87, 87, 87, 87, 85, 85, 85, 81, 81, 81, 79, 79, 79, 79, 79, 79, 80, 80, 80, 83, 83, 83, 87, 87, 87, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 113, 113, 113, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 129, 129, 129, 134, 134, 134, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 141, 141, 141, 145, 145, 145, 149, 149, 149, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 123, 123, 123, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 98, 98, 98, 94, 94, 94, 90, 90, 90, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 89, 89, 89, 86, 86, 86, 82, 82, 82, 79, 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 87, 87, 87, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 109, 109, 109, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 100, 100, 100, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 102, 102, 102, 106, 106, 106, 110, 110, 110, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 108, 108, 108, 110, 110, 110, 115, 115, 115, 120, 120, 120, 124, 124, 124, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 108, 108, 108, 104, 104, 104, 99, 99, 99, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 91, 91, 91, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 94, 94, 94, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 99, 99, 99, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 92, 92, 92, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 88, 88, 88, 86, 86, 86, 83, 83, 83, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 80, 80, 80, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 91, 91, 91, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 109, 109, 109, 114, 114, 114, 119, 119, 119, 123, 123, 123, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 148, 148, 148, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 112, 112, 112, 108, 108, 108, 102, 102, 102, 99, 99, 99, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 94, 94, 94, 90, 90, 90, 85, 85, 85, 81, 81, 81, 78, 78, 78, 77, 77, 77, 76, 76, 76, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 92, 92, 92, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 98, 98, 98, 96, 96, 96, 93, 93, 93, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 85, 85, 85, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 76, 76, 76, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 86, 86, 86, 90, 90, 90, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 91, 91, 87, 87, 87, 84, 84, 84, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 85, 85, 85, 89, 89, 89, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 91, 91, 91, 94, 94, 94, 98, 98, 98, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 109, 109, 109, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 135, 135, 135, 138, 138, 138, 143, 143, 143, 150, 150, 150, 155, 155, 155, 158, 158, 158, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 113, 113, 113, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 98, 98, 98, 94, 94, 94, 89, 89, 89, 85, 85, 85, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 81, 81, 81, 83, 83, 83, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 76, 76, 76, 76, 76, 76, 78, 78, 78, 81, 81, 81, 81, 81, 81, 78, 78, 78, 75, 75, 75, 72, 72, 72, 71, 71, 71, 72, 72, 72, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 80, 80, 80, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 92, 92, 92, 89, 89, 89, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 95, 95, 95, 100, 100, 100, 103, 103, 103, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 104, 104, 104, 109, 109, 109, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 135, 135, 135, 140, 140, 140, 145, 145, 145, 150, 150, 150, 153, 153, 153, 157, 157, 157, 161, 161, 161, 164, 164, 164, 165, 165, 165, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 117, 117, 117, 112, 112, 112, 108, 108, 108, 107, 107, 107, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 81, 81, 81, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 90, 90, 90, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 85, 85, 85, 88, 88, 88, 91, 91, 91, 92, 92, 92, 91, 91, 91, 89, 89, 89, 86, 86, 86, 83, 83, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 79, 78, 78, 78, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 76, 76, 76, 73, 73, 73, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 88, 88, 88, 90, 90, 90, 92, 92, 92, 93, 93, 93, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 96, 96, 96, 96, 96, 96, 93, 93, 93, 89, 89, 89, 85, 85, 85, 82, 82, 82, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 89, 89, 89, 92, 92, 92, 92, 92, 92, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 98, 98, 98, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 101, 101, 101, 104, 104, 104, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 138, 138, 138, 142, 142, 142, 146, 146, 146, 150, 150, 150, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 125, 125, 125, 120, 120, 120, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 82, 82, 82, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 90, 90, 90, 95, 95, 95, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 91, 91, 91, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 69, 69, 69, 68, 68, 68, 69, 69, 69, 70, 70, 70, 72, 72, 72, 76, 76, 76, 80, 80, 80, 84, 84, 84, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 87, 87, 87, 88, 88, 88, 86, 86, 86, 83, 83, 83, 79, 79, 79, 76, 76, 76, 75, 75, 75, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 82, 82, 82, 86, 86, 86, 90, 90, 90, 93, 93, 93, 95, 95, 95, 95, 95, 95, 92, 92, 92, 89, 89, 89, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 79, 79, 79, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 83, 83, 83, 87, 87, 87, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 89, 89, 89, 88, 88, 88, 89, 89, 89, 92, 92, 92, 96, 96, 96, 98, 98, 98, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 150, 150, 150, 154, 154, 154, 158, 158, 158, 160, 160, 160, 160, 160, 160, 138, 138, 138, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 127, 127, 127, 122, 122, 122, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 109, 109, 109, 105, 105, 105, 101, 101, 101, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 86, 86, 86, 85, 85, 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 95, 95, 95, 100, 100, 100, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 107, 107, 107, 103, 103, 103, 99, 99, 99, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 84, 84, 84, 82, 82, 82, 80, 80, 80, 80, 80, 80, 82, 82, 82, 86, 86, 86, 91, 91, 91, 95, 95, 95, 95, 95, 95, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 79, 75, 75, 75, 72, 72, 72, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 70, 70, 70, 69, 69, 69, 70, 70, 70, 71, 71, 71, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 64, 64, 64, 68, 68, 68, 72, 72, 72, 76, 76, 76, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 79, 75, 75, 75, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 78, 78, 78, 83, 83, 83, 88, 88, 88, 91, 91, 91, 92, 92, 92, 92, 92, 92, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 79, 79, 79, 76, 76, 76, 74, 74, 74, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 80, 80, 80, 79, 79, 79, 77, 77, 77, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 82, 82, 82, 87, 87, 87, 90, 90, 90, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 92, 92, 92, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 102, 102, 102, 106, 106, 106, 110, 110, 110, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 112, 112, 112, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 96, 96, 96, 100, 100, 100, 105, 105, 105, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 87, 87, 87, 92, 92, 92, 96, 96, 96, 97, 97, 97, 96, 96, 96, 93, 93, 93, 91, 91, 91, 88, 88, 88, 86, 86, 86, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 70, 70, 70, 66, 66, 66, 62, 62, 62, 60, 60, 60, 62, 62, 62, 66, 66, 66, 70, 70, 70, 73, 73, 73, 75, 75, 75, 78, 78, 78, 81, 81, 81, 82, 82, 82, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 71, 71, 71, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 69, 69, 69, 71, 71, 71, 72, 72, 72, 71, 71, 71, 70, 70, 70, 71, 71, 71, 74, 74, 74, 80, 80, 80, 85, 85, 85, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 86, 86, 86, 85, 85, 85, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 78, 78, 78, 79, 79, 79, 83, 83, 83, 88, 88, 88, 91, 91, 91, 90, 90, 90, 88, 88, 88, 88, 88, 88, 90, 90, 90, 92, 92, 92, 91, 91, 91, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 106, 106, 106, 111, 111, 111, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 140, 140, 140, 146, 146, 146, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 158, 158, 158, 146, 146, 146, 145, 145, 145, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 129, 129, 129, 125, 125, 125, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 117, 117, 117, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 92, 92, 92, 96, 96, 96, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 91, 91, 91, 87, 87, 87, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 62, 62, 62, 61, 61, 61, 63, 63, 63, 67, 67, 67, 69, 69, 69, 71, 71, 71, 72, 72, 72, 75, 75, 75, 79, 79, 79, 80, 80, 80, 78, 78, 78, 74, 74, 74, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 59, 59, 59, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 67, 67, 67, 68, 68, 68, 72, 72, 72, 77, 77, 77, 82, 82, 82, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 84, 84, 84, 82, 82, 82, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 79, 79, 79, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 80, 80, 80, 83, 83, 83, 88, 88, 88, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 102, 102, 102, 107, 107, 107, 112, 112, 112, 115, 115, 115, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 140, 140, 140, 145, 145, 145, 150, 150, 150, 155, 155, 155, 158, 158, 158, 158, 158, 158, 156, 156, 156, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 124, 124, 124, 119, 119, 119, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 100, 100, 100, 97, 97, 97, 94, 94, 94, 93, 93, 93, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 91, 91, 91, 89, 89, 89, 87, 87, 87, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 70, 70, 70, 67, 67, 67, 64, 64, 64, 63, 63, 63, 64, 64, 64, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 73, 73, 73, 76, 76, 76, 77, 77, 77, 76, 76, 76, 72, 72, 72, 68, 68, 68, 64, 64, 64, 61, 61, 61, 58, 58, 58, 56, 56, 56, 56, 56, 56, 58, 58, 58, 61, 61, 61, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 69, 69, 69, 75, 75, 75, 80, 80, 80, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 81, 81, 81, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 82, 82, 82, 87, 87, 87, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 110, 110, 110, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 130, 130, 130, 133, 133, 133, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 153, 153, 153, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 84, 84, 84, 80, 80, 80, 77, 77, 77, 76, 76, 76, 76, 76, 76, 75, 75, 75, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 70, 70, 70, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 71, 71, 71, 68, 68, 68, 64, 64, 64, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 58, 58, 58, 60, 60, 60, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 68, 68, 68, 73, 73, 73, 78, 78, 78, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 101, 101, 101, 104, 104, 104, 109, 109, 109, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 153, 153, 153, 151, 151, 151, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 145, 145, 145, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 117, 117, 117, 121, 121, 121, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 85, 85, 85, 80, 80, 80, 77, 77, 77, 77, 77, 77, 78, 78, 78, 77, 77, 77, 74, 74, 74, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 66, 66, 66, 67, 67, 67, 69, 69, 69, 71, 71, 71, 73, 73, 73, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 70, 70, 70, 67, 67, 67, 63, 63, 63, 60, 60, 60, 56, 56, 56, 53, 53, 53, 53, 53, 53, 55, 55, 55, 57, 57, 57, 59, 59, 59, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 76, 76, 76, 79, 79, 79, 81, 81, 81, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 88, 88, 88, 88, 88, 88, 86, 86, 86, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 95, 95, 95, 96, 96, 96, 99, 99, 99, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 149, 149, 149, 151, 151, 151, 152, 152, 152, 151, 151, 151, 148, 148, 148, 162, 162, 162, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 106, 106, 106, 110, 110, 110, 115, 115, 115, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 97, 97, 97, 94, 94, 94, 91, 91, 91, 86, 86, 86, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 73, 73, 73, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 69, 69, 69, 66, 66, 66, 62, 62, 62, 58, 58, 58, 54, 54, 54, 52, 52, 52, 52, 52, 52, 53, 53, 53, 56, 56, 56, 58, 58, 58, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 70, 70, 70, 73, 73, 73, 77, 77, 77, 79, 79, 79, 82, 82, 82, 85, 85, 85, 85, 85, 85, 84, 84, 84, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 83, 83, 83, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 103, 103, 103, 101, 101, 101, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 110, 110, 110, 114, 114, 114, 117, 117, 117, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 139, 139, 139, 143, 143, 143, 147, 147, 147, 149, 149, 149, 150, 150, 150, 148, 148, 148, 146, 146, 146, 167, 167, 167, 165, 165, 165, 163, 163, 163, 159, 159, 159, 155, 155, 155, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 122, 122, 122, 118, 118, 118, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 106, 106, 106, 109, 109, 109, 113, 113, 113, 119, 119, 119, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 105, 105, 105, 100, 100, 100, 96, 96, 96, 92, 92, 92, 88, 88, 88, 84, 84, 84, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 68, 68, 68, 66, 66, 66, 63, 63, 63, 59, 59, 59, 54, 54, 54, 51, 51, 51, 49, 49, 49, 49, 49, 49, 51, 51, 51, 53, 53, 53, 56, 56, 56, 59, 59, 59, 61, 61, 61, 63, 63, 63, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 74, 74, 74, 78, 78, 78, 82, 82, 82, 84, 84, 84, 85, 85, 85, 83, 83, 83, 80, 80, 80, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 103, 103, 103, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 145, 145, 145, 144, 144, 144, 172, 172, 172, 170, 170, 170, 168, 168, 168, 163, 163, 163, 159, 159, 159, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 145, 145, 145, 144, 144, 144, 144, 144, 144, 142, 142, 142, 138, 138, 138, 133, 133, 133, 130, 130, 130, 127, 127, 127, 123, 123, 123, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 114, 114, 114, 110, 110, 110, 105, 105, 105, 99, 99, 99, 94, 94, 94, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 81, 81, 81, 79, 79, 79, 77, 77, 77, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 69, 69, 69, 66, 66, 66, 64, 64, 64, 63, 63, 63, 59, 59, 59, 54, 54, 54, 50, 50, 50, 47, 47, 47, 46, 46, 46, 47, 47, 47, 49, 49, 49, 53, 53, 53, 56, 56, 56, 59, 59, 59, 62, 62, 62, 63, 63, 63, 63, 63, 63, 64, 64, 64, 67, 67, 67, 73, 73, 73, 78, 78, 78, 81, 81, 81, 82, 82, 82, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 77, 77, 77, 79, 79, 79, 82, 82, 82, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 141, 141, 141, 176, 176, 176, 175, 175, 175, 173, 173, 173, 168, 168, 168, 164, 164, 164, 161, 161, 161, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 143, 143, 143, 138, 138, 138, 133, 133, 133, 129, 129, 129, 126, 126, 126, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 115, 115, 115, 110, 110, 110, 104, 104, 104, 97, 97, 97, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 80, 80, 80, 77, 77, 77, 74, 74, 74, 72, 72, 72, 73, 73, 73, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 72, 72, 72, 69, 69, 69, 65, 65, 65, 63, 63, 63, 62, 62, 62, 59, 59, 59, 55, 55, 55, 50, 50, 50, 47, 47, 47, 46, 46, 46, 46, 46, 46, 48, 48, 48, 52, 52, 52, 56, 56, 56, 58, 58, 58, 60, 60, 60, 60, 60, 60, 61, 61, 61, 63, 63, 63, 67, 67, 67, 73, 73, 73, 77, 77, 77, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 77, 77, 77, 76, 76, 76, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 103, 103, 103, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 177, 177, 177, 178, 178, 178, 177, 177, 177, 174, 174, 174, 170, 170, 170, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 155, 155, 155, 151, 151, 151, 148, 148, 148, 144, 144, 144, 139, 139, 139, 133, 133, 133, 129, 129, 129, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 136, 136, 136, 140, 140, 140, 143, 143, 143, 143, 143, 143, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 115, 115, 115, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 114, 114, 114, 108, 108, 108, 100, 100, 100, 93, 93, 93, 89, 89, 89, 87, 87, 87, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 74, 74, 74, 74, 74, 74, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 69, 69, 69, 65, 65, 65, 62, 62, 62, 61, 61, 61, 60, 60, 60, 55, 55, 55, 51, 51, 51, 48, 48, 48, 47, 47, 47, 48, 48, 48, 50, 50, 50, 53, 53, 53, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 63, 63, 63, 68, 68, 68, 74, 74, 74, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 81, 81, 81, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 79, 79, 79, 80, 80, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 100, 100, 100, 103, 103, 103, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 129, 129, 129, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 176, 176, 176, 174, 174, 174, 172, 172, 172, 169, 169, 169, 165, 165, 165, 160, 160, 160, 154, 154, 154, 150, 150, 150, 146, 146, 146, 141, 141, 141, 136, 136, 136, 131, 131, 131, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 133, 133, 133, 138, 138, 138, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 124, 124, 124, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 110, 110, 110, 103, 103, 103, 96, 96, 96, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 83, 83, 83, 79, 79, 79, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, 77, 75, 75, 75, 73, 73, 73, 73, 73, 73, 72, 72, 72, 69, 69, 69, 66, 66, 66, 63, 63, 63, 62, 62, 62, 60, 60, 60, 57, 57, 57, 52, 52, 52, 49, 49, 49, 49, 49, 49, 51, 51, 51, 53, 53, 53, 55, 55, 55, 57, 57, 57, 57, 57, 57, 58, 58, 58, 59, 59, 59, 61, 61, 61, 65, 65, 65, 70, 70, 70, 75, 75, 75, 78, 78, 78, 80, 80, 80, 82, 82, 82, 83, 83, 83, 84, 84, 84, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 83, 83, 83, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 76, 76, 76, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 83, 83, 83, 87, 87, 87, 90, 90, 90, 92, 92, 92, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 100, 100, 100, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 114, 114, 114, 118, 118, 118, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 143, 143, 143, 181, 181, 181, 182, 182, 182, 184, 184, 184, 184, 184, 184, 181, 181, 181, 178, 178, 178, 175, 175, 175, 172, 172, 172, 168, 168, 168, 162, 162, 162, 157, 157, 157, 152, 152, 152, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 119, 119, 119, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 131, 131, 131, 126, 126, 126, 123, 123, 123, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 106, 106, 106, 101, 101, 101, 97, 97, 97, 94, 94, 94, 92, 92, 92, 89, 89, 89, 85, 85, 85, 81, 81, 81, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 80, 80, 80, 79, 79, 79, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 68, 68, 68, 65, 65, 65, 63, 63, 63, 62, 62, 62, 61, 61, 61, 59, 59, 59, 55, 55, 55, 52, 52, 52, 52, 52, 52, 54, 54, 54, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 63, 63, 63, 68, 68, 68, 73, 73, 73, 77, 77, 77, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 82, 82, 82, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 77, 77, 77, 75, 75, 75, 74, 74, 74, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 82, 82, 82, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 109, 109, 109, 115, 115, 115, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 185, 185, 185, 186, 186, 186, 187, 187, 187, 186, 186, 186, 183, 183, 183, 179, 179, 179, 175, 175, 175, 173, 173, 173, 169, 169, 169, 164, 164, 164, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 130, 130, 130, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 118, 118, 118, 121, 121, 121, 126, 126, 126, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 144, 144, 144, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 103, 103, 103, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 82, 82, 82, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 78, 78, 78, 80, 80, 80, 81, 81, 81, 79, 79, 79, 77, 77, 77, 74, 74, 74, 71, 71, 71, 68, 68, 68, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 60, 60, 60, 58, 58, 58, 55, 55, 55, 56, 56, 56, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 67, 67, 67, 72, 72, 72, 77, 77, 77, 80, 80, 80, 81, 81, 81, 82, 82, 82, 86, 86, 86, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 91, 91, 91, 88, 88, 88, 84, 84, 84, 81, 81, 81, 78, 78, 78, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 79, 79, 79, 83, 83, 83, 87, 87, 87, 91, 91, 91, 96, 96, 96, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 100, 100, 100, 103, 103, 103, 108, 108, 108, 114, 114, 114, 120, 120, 120, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 188, 188, 188, 189, 189, 189, 189, 189, 189, 187, 187, 187, 183, 183, 183, 178, 178, 178, 174, 174, 174, 172, 172, 172, 169, 169, 169, 164, 164, 164, 158, 158, 158, 153, 153, 153, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 144, 144, 144, 147, 147, 147, 147, 147, 147, 144, 144, 144, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 107, 107, 107, 103, 103, 103, 99, 99, 99, 95, 95, 95, 89, 89, 89, 83, 83, 83, 79, 79, 79, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 74, 74, 74, 77, 77, 77, 80, 80, 80, 81, 81, 81, 81, 81, 81, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 66, 66, 66, 63, 63, 63, 61, 61, 61, 61, 61, 61, 60, 60, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 60, 60, 60, 62, 62, 62, 63, 63, 63, 64, 64, 64, 67, 67, 67, 68, 68, 68, 69, 69, 69, 71, 71, 71, 76, 76, 76, 81, 81, 81, 84, 84, 84, 85, 85, 85, 85, 85, 85, 88, 88, 88, 92, 92, 92, 95, 95, 95, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 101, 101, 101, 99, 99, 99, 95, 95, 95, 93, 93, 93, 91, 91, 91, 88, 88, 88, 83, 83, 83, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 71, 71, 71, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 79, 79, 79, 83, 83, 83, 88, 88, 88, 94, 94, 94, 98, 98, 98, 99, 99, 99, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 114, 114, 114, 120, 120, 120, 126, 126, 126, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 189, 189, 189, 190, 190, 190, 189, 189, 189, 185, 185, 185, 180, 180, 180, 176, 176, 176, 173, 173, 173, 172, 172, 172, 169, 169, 169, 165, 165, 165, 159, 159, 159, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 130, 130, 130, 128, 128, 128, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 122, 122, 122, 119, 119, 119, 114, 114, 114, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 77, 77, 77, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 76, 76, 76, 79, 79, 79, 81, 81, 81, 83, 83, 83, 82, 82, 82, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 66, 66, 66, 64, 64, 64, 62, 62, 62, 62, 62, 62, 61, 61, 61, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 74, 74, 74, 74, 74, 74, 76, 76, 76, 80, 80, 80, 85, 85, 85, 88, 88, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 103, 103, 103, 101, 101, 101, 97, 97, 97, 95, 95, 95, 93, 93, 93, 90, 90, 90, 86, 86, 86, 81, 81, 81, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 72, 72, 72, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 81, 81, 81, 86, 86, 86, 91, 91, 91, 96, 96, 96, 98, 98, 98, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 107, 107, 107, 112, 112, 112, 117, 117, 117, 122, 122, 122, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 188, 188, 188, 189, 189, 189, 187, 187, 187, 183, 183, 183, 178, 178, 178, 174, 174, 174, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 151, 151, 151, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 141, 141, 141, 135, 135, 135, 130, 130, 130, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 122, 122, 122, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 95, 95, 95, 88, 88, 88, 82, 82, 82, 79, 79, 79, 78, 78, 78, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 78, 78, 78, 80, 80, 80, 82, 82, 82, 82, 82, 82, 81, 81, 81, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 69, 69, 69, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 68, 68, 68, 71, 71, 71, 75, 75, 75, 77, 77, 77, 78, 78, 78, 80, 80, 80, 84, 84, 84, 88, 88, 88, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 87, 87, 87, 83, 83, 83, 79, 79, 79, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 72, 72, 72, 74, 74, 74, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 74, 74, 74, 79, 79, 79, 84, 84, 84, 90, 90, 90, 95, 95, 95, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 106, 106, 106, 110, 110, 110, 115, 115, 115, 121, 121, 121, 125, 125, 125, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 186, 186, 186, 188, 188, 188, 186, 186, 186, 181, 181, 181, 176, 176, 176, 172, 172, 172, 171, 171, 171, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 145, 145, 145, 145, 145, 145, 146, 146, 146, 149, 149, 149, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 155, 155, 155, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 143, 143, 143, 137, 137, 137, 131, 131, 131, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 126, 126, 126, 121, 121, 121, 116, 116, 116, 111, 111, 111, 108, 108, 108, 104, 104, 104, 98, 98, 98, 91, 91, 91, 85, 85, 85, 81, 81, 81, 81, 81, 81, 80, 80, 80, 78, 78, 78, 75, 75, 75, 74, 74, 74, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, 78, 77, 77, 77, 75, 75, 75, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 75, 75, 75, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 87, 87, 87, 90, 90, 90, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 104, 104, 104, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 70, 70, 70, 69, 69, 69, 69, 69, 69, 71, 71, 71, 72, 72, 72, 71, 71, 71, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 69, 69, 69, 73, 73, 73, 78, 78, 78, 84, 84, 84, 90, 90, 90, 96, 96, 96, 99, 99, 99, 101, 101, 101, 100, 100, 100, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 109, 109, 109, 107, 107, 107, 108, 108, 108, 113, 113, 113, 119, 119, 119, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 138, 138, 138, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 184, 184, 184, 186, 186, 186, 184, 184, 184, 178, 178, 178, 173, 173, 173, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 148, 148, 148, 151, 151, 151, 156, 156, 156, 158, 158, 158, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 145, 145, 145, 139, 139, 139, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 120, 120, 120, 114, 114, 114, 108, 108, 108, 104, 104, 104, 100, 100, 100, 94, 94, 94, 88, 88, 88, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 76, 76, 76, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 79, 79, 79, 79, 79, 79, 81, 81, 81, 85, 85, 85, 89, 89, 89, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 82, 82, 82, 79, 79, 79, 77, 77, 77, 75, 75, 75, 71, 71, 71, 68, 68, 68, 67, 67, 67, 69, 69, 69, 70, 70, 70, 70, 70, 70, 67, 67, 67, 66, 66, 66, 65, 65, 65, 66, 66, 66, 67, 67, 67, 69, 69, 69, 72, 72, 72, 78, 78, 78, 84, 84, 84, 90, 90, 90, 96, 96, 96, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 136, 136, 136, 141, 141, 141, 144, 144, 144, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 182, 182, 182, 183, 183, 183, 180, 180, 180, 175, 175, 175, 169, 169, 169, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 159, 159, 159, 156, 156, 156, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 141, 141, 141, 136, 136, 136, 132, 132, 132, 130, 130, 130, 128, 128, 128, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 122, 122, 122, 114, 114, 114, 108, 108, 108, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 87, 87, 87, 86, 86, 86, 84, 84, 84, 80, 80, 80, 76, 76, 76, 73, 73, 73, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 81, 81, 81, 82, 82, 82, 81, 81, 81, 80, 80, 80, 82, 82, 82, 86, 86, 86, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 100, 100, 100, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 67, 67, 67, 68, 68, 68, 68, 68, 68, 65, 65, 65, 64, 64, 64, 64, 64, 64, 66, 66, 66, 68, 68, 68, 70, 70, 70, 73, 73, 73, 77, 77, 77, 83, 83, 83, 89, 89, 89, 95, 95, 95, 98, 98, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 99, 99, 99, 97, 97, 97, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 131, 131, 131, 137, 137, 137, 142, 142, 142, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 178, 178, 178, 178, 178, 178, 175, 175, 175, 171, 171, 171, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 155, 155, 155, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 143, 143, 143, 139, 139, 139, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 150, 150, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 159, 159, 159, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 151, 151, 151, 150, 150, 150, 148, 148, 148, 143, 143, 143, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 127, 127, 127, 122, 122, 122, 115, 115, 115, 108, 108, 108, 103, 103, 103, 99, 99, 99, 96, 96, 96, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 74, 74, 74, 72, 72, 72, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 73, 73, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 71, 71, 71, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 84, 84, 84, 88, 88, 88, 92, 92, 92, 96, 96, 96, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 88, 88, 88, 83, 83, 83, 79, 79, 79, 77, 77, 77, 75, 75, 75, 71, 71, 71, 67, 67, 67, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 66, 66, 64, 64, 64, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 70, 70, 70, 73, 73, 73, 77, 77, 77, 82, 82, 82, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 138, 138, 138, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 173, 173, 173, 172, 172, 172, 170, 170, 170, 166, 166, 166, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 161, 161, 161, 165, 165, 165, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 151, 151, 151, 147, 147, 147, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 140, 140, 140, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 73, 73, 73, 72, 72, 72, 71, 71, 71, 71, 71, 71, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 85, 85, 85, 84, 84, 84, 85, 85, 85, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 89, 89, 89, 83, 83, 83, 79, 79, 79, 76, 76, 76, 74, 74, 74, 70, 70, 70, 65, 65, 65, 62, 62, 62, 62, 62, 62, 63, 63, 63, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 65, 65, 65, 68, 68, 68, 71, 71, 71, 73, 73, 73, 77, 77, 77, 82, 82, 82, 87, 87, 87, 92, 92, 92, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 100, 100, 100, 103, 103, 103, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 132, 132, 132, 138, 138, 138, 144, 144, 144, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 168, 168, 168, 166, 166, 166, 164, 164, 164, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 165, 165, 165, 168, 168, 168, 171, 171, 171, 172, 172, 172, 171, 171, 171, 168, 168, 168, 166, 166, 166, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 167, 167, 167, 162, 162, 162, 158, 158, 158, 155, 155, 155, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 144, 144, 144, 147, 147, 147, 151, 151, 151, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 90, 90, 90, 87, 87, 87, 83, 83, 83, 79, 79, 79, 74, 74, 74, 71, 71, 71, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 73, 73, 73, 71, 71, 71, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 105, 105, 105, 100, 100, 100, 97, 97, 97, 95, 95, 95, 90, 90, 90, 85, 85, 85, 79, 79, 79, 76, 76, 76, 73, 73, 73, 69, 69, 69, 63, 63, 63, 60, 60, 60, 59, 59, 59, 61, 61, 61, 63, 63, 63, 64, 64, 64, 63, 63, 63, 63, 63, 63, 66, 66, 66, 69, 69, 69, 72, 72, 72, 75, 75, 75, 79, 79, 79, 84, 84, 84, 89, 89, 89, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 122, 122, 122, 127, 127, 127, 133, 133, 133, 139, 139, 139, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 159, 159, 159, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 166, 166, 166, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 169, 169, 169, 165, 165, 165, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 152, 152, 152, 156, 156, 156, 158, 158, 158, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 148, 148, 148, 149, 149, 149, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 150, 150, 150, 147, 147, 147, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 120, 120, 120, 116, 116, 116, 112, 112, 112, 107, 107, 107, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 85, 85, 85, 80, 80, 80, 74, 74, 74, 71, 71, 71, 70, 70, 70, 71, 71, 71, 73, 73, 73, 73, 73, 73, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 88, 88, 88, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 109, 109, 109, 104, 104, 104, 98, 98, 98, 96, 96, 96, 95, 95, 95, 92, 92, 92, 87, 87, 87, 81, 81, 81, 77, 77, 77, 73, 73, 73, 68, 68, 68, 63, 63, 63, 59, 59, 59, 58, 58, 58, 61, 61, 61, 64, 64, 64, 66, 66, 66, 67, 67, 67, 67, 67, 67, 69, 69, 69, 72, 72, 72, 75, 75, 75, 78, 78, 78, 82, 82, 82, 86, 86, 86, 91, 91, 91, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 121, 121, 121, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 120, 120, 120, 124, 124, 124, 129, 129, 129, 135, 135, 135, 141, 141, 141, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 158, 158, 158, 162, 162, 162, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 170, 170, 170, 170, 170, 170, 170, 170, 170, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 170, 170, 170, 172, 172, 172, 172, 172, 172, 169, 169, 169, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 143, 143, 143, 140, 140, 140, 140, 140, 140, 142, 142, 142, 146, 146, 146, 150, 150, 150, 152, 152, 152, 154, 154, 154, 157, 157, 157, 162, 162, 162, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 165, 165, 165, 161, 161, 161, 158, 158, 158, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 155, 155, 155, 151, 151, 151, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 124, 124, 124, 118, 118, 118, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 91, 91, 86, 86, 86, 80, 80, 80, 74, 74, 74, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 71, 71, 71, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 88, 88, 88, 93, 93, 93, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 108, 108, 108, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 92, 92, 92, 88, 88, 88, 83, 83, 83, 78, 78, 78, 74, 74, 74, 70, 70, 70, 65, 65, 65, 60, 60, 60, 59, 59, 59, 62, 62, 62, 66, 66, 66, 69, 69, 69, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 87, 87, 87, 92, 92, 92, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 114, 114, 114, 118, 118, 118, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 127, 127, 127, 132, 132, 132, 138, 138, 138, 144, 144, 144, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 160, 160, 160, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 168, 168, 168, 171, 171, 171, 173, 173, 173, 171, 171, 171, 169, 169, 169, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 150, 150, 150, 146, 146, 146, 142, 142, 142, 141, 141, 141, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 156, 156, 156, 160, 160, 160, 164, 164, 164, 168, 168, 168, 170, 170, 170, 170, 170, 170, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 91, 91, 91, 86, 86, 86, 81, 81, 81, 76, 76, 76, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 74, 74, 74, 78, 78, 78, 83, 83, 83, 86, 86, 86, 88, 88, 88, 91, 91, 91, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 106, 106, 106, 101, 101, 101, 96, 96, 96, 93, 93, 93, 91, 91, 91, 90, 90, 90, 87, 87, 87, 83, 83, 83, 78, 78, 78, 74, 74, 74, 71, 71, 71, 67, 67, 67, 63, 63, 63, 61, 61, 61, 64, 64, 64, 69, 69, 69, 73, 73, 73, 75, 75, 75, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 86, 86, 86, 90, 90, 90, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 97, 97, 97, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 131, 131, 131, 136, 136, 136, 142, 142, 142, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 166, 166, 166, 168, 168, 168, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 153, 153, 153, 148, 148, 148, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 152, 152, 152, 155, 155, 155, 157, 157, 157, 160, 160, 160, 164, 164, 164, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 149, 149, 149, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 125, 125, 125, 122, 122, 122, 121, 121, 121, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 112, 112, 112, 108, 108, 108, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 80, 80, 80, 77, 77, 77, 75, 75, 75, 75, 75, 75, 77, 77, 77, 81, 81, 81, 86, 86, 86, 90, 90, 90, 92, 92, 92, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 83, 83, 83, 79, 79, 79, 75, 75, 75, 72, 72, 72, 69, 69, 69, 65, 65, 65, 63, 63, 63, 66, 66, 66, 71, 71, 71, 76, 76, 76, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 86, 86, 86, 89, 89, 89, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 96, 96, 96, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 168, 168, 168, 171, 171, 171, 173, 173, 173, 172, 172, 172, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 135, 135, 135, 129, 129, 129, 124, 124, 124, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 87, 87, 87, 88, 88, 88, 86, 86, 86, 82, 82, 82, 79, 79, 79, 78, 78, 78, 80, 80, 80, 84, 84, 84, 88, 88, 88, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 84, 84, 84, 80, 80, 80, 77, 77, 77, 74, 74, 74, 70, 70, 70, 67, 67, 67, 65, 65, 65, 67, 67, 67, 73, 73, 73, 78, 78, 78, 82, 82, 82, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 91, 91, 89, 89, 89, 90, 90, 90, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 172, 172, 172, 173, 173, 173, 146, 146, 146, 150, 150, 150, 153, 153, 153, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 167, 167, 167, 168, 168, 168, 171, 171, 171, 172, 172, 172, 170, 170, 170, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 149, 149, 149, 147, 147, 147, 144, 144, 144, 140, 140, 140, 134, 134, 134, 128, 128, 128, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 93, 93, 93, 94, 94, 94, 92, 92, 92, 88, 88, 88, 84, 84, 84, 82, 82, 82, 83, 83, 83, 86, 86, 86, 90, 90, 90, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 112, 112, 112, 107, 107, 107, 102, 102, 102, 98, 98, 98, 94, 94, 94, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 72, 72, 72, 68, 68, 68, 67, 67, 67, 70, 70, 70, 74, 74, 74, 79, 79, 79, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 162, 162, 162, 166, 166, 166, 170, 170, 170, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 148, 148, 148, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 169, 169, 169, 170, 170, 170, 168, 168, 168, 165, 165, 165, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 147, 147, 147, 143, 143, 143, 138, 138, 138, 131, 131, 131, 126, 126, 126, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 110, 110, 110, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 98, 98, 98, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 83, 83, 83, 81, 81, 81, 78, 78, 78, 75, 75, 75, 72, 72, 72, 72, 72, 72, 74, 74, 74, 77, 77, 77, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 140, 140, 140, 142, 142, 142, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 159, 159, 159, 163, 163, 163, 168, 168, 168, 172, 172, 172, 175, 175, 175, 176, 176, 176, 177, 177, 177, 179, 179, 179, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 168, 168, 168, 170, 170, 170, 172, 172, 172, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 160, 160, 160, 164, 164, 164, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 173, 173, 173, 172, 172, 172, 170, 170, 170, 167, 167, 167, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 156, 156, 156, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 163, 163, 163, 166, 166, 166, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 142, 142, 142, 136, 136, 136, 130, 130, 130, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 99, 99, 99, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 118, 118, 118, 120, 120, 120, 119, 119, 119, 116, 116, 116, 112, 112, 112, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, 81, 78, 78, 78, 77, 77, 77, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 131, 131, 131, 134, 134, 134, 137, 137, 137, 140, 140, 140, 141, 141, 141, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 172, 172, 172, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 178, 178, 179, 179, 179, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 158, 158, 158, 156, 156, 156, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 157, 157, 157, 161, 161, 161, 165, 165, 165, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 150, 150, 150, 147, 147, 147, 142, 142, 142, 136, 136, 136, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 111, 111, 111, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 119, 119, 119, 120, 120, 120, 118, 118, 118, 113, 113, 113, 109, 109, 109, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 103, 103, 103, 100, 100, 100, 96, 96, 96, 94, 94, 94, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 95, 95, 95, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 92, 92, 92, 91, 91, 91, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 123, 123, 123, 128, 128, 128, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 159, 159, 159, 164, 164, 164, 168, 168, 168, 172, 172, 172, 176, 176, 176, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, 171, 171, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 169, 169, 169, 171, 171, 171, 171, 171, 171, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 156, 156, 156, 159, 159, 159, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 148, 148, 148, 149, 149, 149, 147, 147, 147, 143, 143, 143, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 101, 101, 101, 103, 103, 103, 107, 107, 107, 112, 112, 112, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 135, 135, 135, 139, 139, 139, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 153, 153, 153, 157, 157, 157, 162, 162, 162, 167, 167, 167, 170, 170, 170, 175, 175, 175, 179, 179, 179, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 171, 171, 171, 171, 171, 171, 169, 169, 169, 165, 165, 165, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 165, 165, 165, 162, 162, 162, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 146, 146, 146, 148, 148, 148, 147, 147, 147, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 99, 99, 99, 100, 100, 100, 102, 102, 102, 106, 106, 106, 112, 112, 112, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 101, 101, 101, 96, 96, 96, 93, 93, 93, 92, 92, 92, 92, 92, 92, 90, 90, 90, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 83, 83, 83, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 90, 90, 90, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 152, 152, 152, 153, 153, 153, 156, 156, 156, 159, 159, 159, 164, 164, 164, 168, 168, 168, 171, 171, 171, 176, 176, 176, 181, 181, 181, 185, 185, 185, 187, 187, 187, 186, 186, 186, 186, 186, 186, 187, 187, 187, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 170, 170, 170, 170, 170, 170, 169, 169, 169, 168, 168, 168, 169, 169, 169, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 162, 162, 162, 157, 157, 157, 153, 153, 153, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 106, 106, 106, 111, 111, 111, 117, 117, 117, 121, 121, 121, 122, 122, 122, 122, 122, 122, 119, 119, 119, 117, 117, 117, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 106, 106, 106, 101, 101, 101, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 89, 89, 89, 92, 92, 92, 95, 95, 95, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 157, 157, 157, 161, 161, 161, 166, 166, 166, 170, 170, 170, 174, 174, 174, 179, 179, 179, 185, 185, 185, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 157, 157, 157, 161, 161, 161, 167, 167, 167, 170, 170, 170, 171, 171, 171, 169, 169, 169, 167, 167, 167, 166, 166, 166, 166, 166, 166, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 152, 152, 152, 147, 147, 147, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 112, 112, 112, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 106, 106, 106, 111, 111, 111, 116, 116, 116, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 106, 106, 106, 101, 101, 101, 98, 98, 98, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 93, 93, 93, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 90, 90, 90, 87, 87, 87, 87, 87, 87, 89, 89, 89, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 148, 148, 148, 153, 153, 153, 155, 155, 155, 157, 157, 157, 160, 160, 160, 165, 165, 165, 170, 170, 170, 174, 174, 174, 178, 178, 178, 183, 183, 183, 188, 188, 188, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 141, 141, 141, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 166, 166, 166, 170, 170, 170, 170, 170, 170, 168, 168, 168, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 147, 147, 147, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 105, 105, 105, 106, 106, 106, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 111, 111, 111, 107, 107, 107, 102, 102, 102, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 93, 93, 93, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 96, 96, 96, 95, 95, 95, 97, 97, 97, 100, 100, 100, 103, 103, 103, 104, 104, 104, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 126, 126, 126, 130, 130, 130, 134, 134, 134, 139, 139, 139, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 152, 152, 152, 156, 156, 156, 159, 159, 159, 160, 160, 160, 163, 163, 163, 168, 168, 168, 173, 173, 173, 177, 177, 177, 181, 181, 181, 185, 185, 185, 189, 189, 189, 191, 191, 191, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 140, 140, 140, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 147, 147, 147, 151, 151, 151, 156, 156, 156, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 166, 166, 166, 164, 164, 164, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 142, 142, 142, 138, 138, 138, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 143, 143, 143, 146, 146, 146, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 119, 119, 119, 115, 115, 115, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 120, 120, 120, 117, 117, 117, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 108, 108, 108, 103, 103, 103, 101, 101, 101, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 177, 177, 177, 182, 182, 182, 185, 185, 185, 188, 188, 188, 190, 190, 190, 192, 192, 192, 194, 194, 194, 195, 195, 195, 195, 195, 195, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 151, 151, 151, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 114, 114, 114, 109, 109, 109, 104, 104, 104, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 171, 171, 171, 175, 175, 175, 180, 180, 180, 184, 184, 184, 186, 186, 186, 188, 188, 188, 191, 191, 191, 194, 194, 194, 196, 196, 196, 195, 195, 195, 141, 141, 141, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 154, 154, 154, 157, 157, 157, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 153, 153, 153, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 110, 110, 110, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 107, 107, 107, 109, 109, 109, 113, 113, 113, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 144, 144, 144, 148, 148, 148, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 166, 166, 166, 168, 168, 168, 173, 173, 173, 178, 178, 178, 182, 182, 182, 185, 185, 185, 187, 187, 187, 190, 190, 190, 193, 193, 193, 194, 194, 194, 192, 192, 192, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 156, 156, 156, 161, 161, 161, 165, 165, 165, 167, 167, 167, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 160, 160, 160, 154, 154, 154, 147, 147, 147, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 138, 138, 138, 138, 138, 138, 136, 136, 136, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 136, 136, 136, 131, 131, 131, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 106, 106, 106, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 149, 149, 149, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 165, 165, 165, 167, 167, 167, 171, 171, 171, 176, 176, 176, 180, 180, 180, 182, 182, 182, 184, 184, 184, 187, 187, 187, 189, 189, 189, 189, 189, 189, 187, 187, 187, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 157, 157, 157, 161, 161, 161, 166, 166, 166, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 161, 161, 161, 156, 156, 156, 148, 148, 148, 142, 142, 142, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 125, 125, 125, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 109, 109, 109, 108, 108, 108, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 123, 123, 123, 128, 128, 128, 131, 131, 131, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 135, 135, 135, 139, 139, 139, 143, 143, 143, 144, 144, 144, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 174, 174, 174, 176, 176, 176, 178, 178, 178, 180, 180, 180, 182, 182, 182, 184, 184, 184, 184, 184, 184, 183, 183, 183, 145, 145, 145, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 150, 150, 150, 144, 144, 144, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 124, 124, 124, 128, 128, 128, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 140, 140, 140, 135, 135, 135, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 130, 130, 130, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 103, 103, 103, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 144, 144, 144, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 171, 171, 171, 172, 172, 172, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 182, 182, 182, 182, 182, 182, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 148, 148, 148, 152, 152, 152, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 171, 171, 171, 167, 167, 167, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 163, 163, 163, 159, 159, 159, 152, 152, 152, 146, 146, 146, 141, 141, 141, 136, 136, 136, 133, 133, 133, 131, 131, 131, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 119, 119, 119, 124, 124, 124, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 155, 155, 155, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 117, 117, 117, 115, 115, 115, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 128, 128, 128, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 131, 131, 131, 127, 127, 127, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 133, 133, 133, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, 171, 171, 173, 173, 173, 177, 177, 177, 180, 180, 180, 181, 181, 181, 182, 182, 182, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 148, 148, 148, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 174, 174, 174, 170, 170, 170, 167, 167, 167, 166, 166, 166, 166, 166, 166, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 164, 164, 164, 159, 159, 159, 154, 154, 154, 148, 148, 148, 143, 143, 143, 137, 137, 137, 133, 133, 133, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 116, 116, 116, 120, 120, 120, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 144, 144, 144, 149, 149, 149, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 144, 144, 144, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 145, 145, 145, 141, 141, 141, 136, 136, 136, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 131, 131, 131, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 132, 132, 132, 137, 137, 137, 144, 144, 144, 150, 150, 150, 156, 156, 156, 161, 161, 161, 164, 164, 164, 166, 166, 166, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 172, 172, 172, 175, 175, 175, 178, 178, 178, 179, 179, 179, 181, 181, 181, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 150, 150, 150, 157, 157, 157, 163, 163, 163, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 172, 172, 172, 169, 169, 169, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 163, 163, 163, 158, 158, 158, 153, 153, 153, 149, 149, 149, 144, 144, 144, 139, 139, 139, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 138, 138, 138, 143, 143, 143, 148, 148, 148, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 153, 153, 153, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 148, 148, 148, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 146, 146, 146, 141, 141, 141, 137, 137, 137, 135, 135, 135, 135, 135, 135, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 116, 116, 116, 111, 111, 111, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 131, 131, 131, 136, 136, 136, 141, 141, 141, 144, 144, 144, 146, 146, 146, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 134, 134, 134, 129, 129, 129, 123, 123, 123, 118, 118, 118, 114, 114, 114, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 132, 132, 132, 137, 137, 137, 144, 144, 144, 150, 150, 150, 156, 156, 156, 160, 160, 160, 164, 164, 164, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 146, 146, 146, 147, 147, 147, 147, 147, 147, 149, 149, 149, 153, 153, 153, 160, 160, 160, 166, 166, 166, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 172, 172, 172, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 169, 169, 169, 165, 165, 165, 161, 161, 161, 156, 156, 156, 151, 151, 151, 148, 148, 148, 145, 145, 145, 141, 141, 141, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 141, 141, 141, 145, 145, 145, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 151, 151, 151, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 142, 142, 142, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 149, 149, 149, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 114, 114, 114, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 126, 126, 126, 131, 131, 131, 137, 137, 137, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 149, 149, 149, 145, 145, 145, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 134, 134, 134, 139, 139, 139, 144, 144, 144, 149, 149, 149, 154, 154, 154, 158, 158, 158, 162, 162, 162, 164, 164, 164, 165, 165, 165, 163, 163, 163, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 163, 163, 163, 168, 168, 168, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 171, 171, 171, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 163, 163, 163, 158, 158, 158, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 131, 131, 131, 135, 135, 135, 139, 139, 139, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 152, 152, 152, 154, 154, 154, 157, 157, 157, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 150, 150, 150, 147, 147, 147, 143, 143, 143, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 113, 113, 113, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 118, 118, 118, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 135, 135, 135, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 134, 134, 134, 129, 129, 129, 125, 125, 125, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 138, 138, 138, 141, 141, 141, 145, 145, 145, 148, 148, 148, 152, 152, 152, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 167, 167, 167, 169, 169, 169, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 164, 164, 164, 167, 167, 167, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 156, 156, 156, 157, 157, 157, 156, 156, 156, 156, 156, 156, 159, 159, 159, 164, 164, 164, 169, 169, 169, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 173, 173, 173, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 160, 160, 160, 156, 156, 156, 152, 152, 152, 148, 148, 148, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 145, 145, 145, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 124, 124, 124, 117, 117, 117, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 126, 126, 126, 131, 131, 131, 138, 138, 138, 144, 144, 144, 149, 149, 149, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 155, 155, 155, 159, 159, 159, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 169, 169, 169, 166, 166, 166, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 167, 167, 167, 172, 172, 172, 177, 177, 177, 179, 179, 179, 179, 179, 179, 160, 160, 160, 160, 160, 160, 158, 158, 158, 158, 158, 158, 161, 161, 161, 165, 165, 165, 169, 169, 169, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 163, 163, 163, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 146, 146, 146, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 127, 127, 127, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 105, 105, 105, 109, 109, 109, 113, 113, 113, 116, 116, 116, 120, 120, 120, 125, 125, 125, 130, 130, 130, 134, 134, 134, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 125, 125, 125, 118, 118, 118, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 123, 123, 123, 127, 127, 127, 132, 132, 132, 139, 139, 139, 145, 145, 145, 150, 150, 150, 153, 153, 153, 154, 154, 154, 153, 153, 153, 153, 153, 153, 155, 155, 155, 157, 157, 157, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 151, 151, 151, 155, 155, 155, 160, 160, 160, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 164, 164, 164, 167, 167, 167, 173, 173, 173, 178, 178, 178, 181, 181, 181, 182, 182, 182, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 163, 163, 163, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 166, 166, 166, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 149, 149, 149, 144, 144, 144, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 107, 107, 107, 103, 103, 103, 100, 100, 100, 99, 99, 99, 99, 99, 99, 102, 102, 102, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 119, 119, 119, 124, 124, 124, 129, 129, 129, 134, 134, 134, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 152, 152, 152, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 141, 141, 141, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 133, 133, 133, 127, 127, 127, 120, 120, 120, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 132, 132, 132, 138, 138, 138, 144, 144, 144, 148, 148, 148, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 163, 163, 163, 163, 163, 163, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 170, 170, 170, 169, 169, 169, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 168, 168, 168, 173, 173, 173, 179, 179, 179, 182, 182, 182, 183, 183, 183, 163, 163, 163, 162, 162, 162, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 167, 167, 167, 166, 166, 166, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 158, 158, 158, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 142, 142, 142, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 105, 105, 105, 109, 109, 109, 111, 111, 111, 112, 112, 112, 114, 114, 114, 118, 118, 118, 123, 123, 123, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 143, 143, 143, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 127, 127, 127, 121, 121, 121, 117, 117, 117, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 126, 126, 126, 130, 130, 130, 135, 135, 135, 141, 141, 141, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 156, 156, 156, 158, 158, 158, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 138, 138, 138, 140, 140, 140, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 155, 155, 155, 160, 160, 160, 164, 164, 164, 165, 165, 165, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 167, 167, 167, 169, 169, 169, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 173, 173, 173, 178, 178, 178, 181, 181, 181, 184, 184, 184, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 107, 107, 107, 109, 109, 109, 109, 109, 109, 110, 110, 110, 114, 114, 114, 119, 119, 119, 124, 124, 124, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 147, 147, 147, 149, 149, 149, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 137, 137, 137, 140, 140, 140, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 153, 153, 153, 159, 159, 159, 164, 164, 164, 166, 166, 166, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 171, 171, 171, 175, 175, 175, 178, 178, 178, 181, 181, 181, 184, 184, 184, 160, 160, 160, 162, 162, 162, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 126, 126, 126, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 115, 115, 115, 119, 119, 119, 124, 124, 124, 127, 127, 127, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 135, 135, 135, 129, 129, 129, 125, 125, 125, 122, 122, 122, 120, 120, 120, 116, 116, 116, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 145, 145, 145, 142, 142, 142, 139, 139, 139, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 138, 138, 138, 141, 141, 141, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 152, 152, 152, 159, 159, 159, 164, 164, 164, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 177, 177, 177, 179, 179, 179, 181, 181, 181, 185, 185, 185, 159, 159, 159, 161, 161, 161, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 155, 155, 155, 151, 151, 151, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 120, 120, 120, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 145, 145, 145, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 140, 140, 140, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 143, 143, 143, 138, 138, 138, 133, 133, 133, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 135, 135, 135, 138, 138, 138, 141, 141, 141, 145, 145, 145, 148, 148, 148, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 151, 151, 151, 157, 157, 157, 163, 163, 163, 166, 166, 166, 167, 167, 167, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 163, 163, 163, 162, 162, 162, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 176, 176, 176, 179, 179, 179, 182, 182, 182, 183, 183, 183, 186, 186, 186, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 108, 108, 108, 106, 106, 106, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 137, 137, 137, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 149, 149, 149, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 161, 161, 161, 159, 159, 159, 155, 155, 155, 151, 151, 151, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 135, 135, 135, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 133, 133, 133, 130, 130, 130, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 144, 144, 144, 147, 147, 147, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 143, 143, 143, 141, 141, 141, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 155, 155, 155, 161, 161, 161, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 178, 178, 178, 182, 182, 182, 184, 184, 184, 186, 186, 186, 188, 188, 188, 156, 156, 156, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 141, 141, 141, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 98, 98, 98, 101, 101, 101, 106, 106, 106, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 134, 134, 134, 131, 131, 131, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 137, 137, 137, 142, 142, 142, 147, 147, 147, 150, 150, 150, 152, 152, 152, 155, 155, 155, 159, 159, 159, 161, 161, 161, 159, 159, 159, 156, 156, 156, 154, 154, 154, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 137, 137, 137, 140, 140, 140, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 162, 162, 162, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 173, 173, 173, 176, 176, 176, 179, 179, 179, 182, 182, 182, 185, 185, 185, 187, 187, 187, 189, 189, 189, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 149, 149, 149, 145, 145, 145, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 130, 130, 130, 128, 128, 128, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 102, 102, 102, 106, 106, 106, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 132, 132, 132, 138, 138, 138, 145, 145, 145, 149, 149, 149, 152, 152, 152, 155, 155, 155, 159, 159, 159, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 132, 132, 132, 137, 137, 137, 141, 141, 141, 144, 144, 144, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 163, 163, 163, 162, 162, 162, 163, 163, 163, 166, 166, 166, 169, 169, 169, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 178, 178, 178, 179, 179, 179, 181, 181, 181, 183, 183, 183, 185, 185, 185, 188, 188, 188, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 142, 142, 142, 138, 138, 138, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 132, 132, 132, 128, 128, 128, 122, 122, 122, 118, 118, 118, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 105, 105, 105, 103, 103, 103, 100, 100, 100, 100, 100, 100, 102, 102, 102, 106, 106, 106, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 129, 129, 129, 135, 135, 135, 143, 143, 143, 148, 148, 148, 152, 152, 152, 155, 155, 155, 159, 159, 159, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 121, 121, 121, 126, 126, 126, 131, 131, 131, 136, 136, 136, 141, 141, 141, 145, 145, 145, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 174, 174, 174, 176, 176, 176, 178, 178, 178, 179, 179, 179, 180, 180, 180, 182, 182, 182, 185, 185, 185, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 138, 138, 138, 135, 135, 135, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 134, 134, 134, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 158, 158, 158, 161, 161, 161, 162, 162, 162, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 142, 142, 142, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 121, 121, 121, 126, 126, 126, 132, 132, 132, 138, 138, 138, 144, 144, 144, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 172, 172, 172, 174, 174, 174, 175, 175, 175, 177, 177, 177, 179, 179, 179, 182, 182, 182, 145, 145, 145, 145, 145, 145, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 110, 110, 110, 115, 115, 115, 118, 118, 118, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 128, 128, 128, 133, 133, 133, 135, 135, 135, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 139, 139, 139, 143, 143, 143, 147, 147, 147, 152, 152, 152, 156, 156, 156, 159, 159, 159, 161, 161, 161, 159, 159, 159, 156, 156, 156, 151, 151, 151, 146, 146, 146, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 120, 120, 120, 126, 126, 126, 133, 133, 133, 140, 140, 140, 145, 145, 145, 150, 150, 150, 152, 152, 152, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 148, 148, 148, 150, 150, 150, 153, 153, 153, 155, 155, 155, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 149, 149, 149, 146, 146, 146, 144, 144, 144, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 180, 180, 180, 140, 140, 140, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 117, 117, 117, 114, 114, 114, 112, 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 108, 108, 108, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 135, 135, 135, 136, 136, 136, 134, 134, 134, 130, 130, 130, 126, 126, 126, 122, 122, 122, 121, 121, 121, 121, 121, 121, 123, 123, 123, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 154, 154, 154, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 121, 121, 121, 126, 126, 126, 133, 133, 133, 140, 140, 140, 146, 146, 146, 151, 151, 151, 154, 154, 154, 155, 155, 155, 157, 157, 157, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 161, 161, 161, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 153, 153, 153, 153, 153, 153, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 161, 161, 161, 163, 163, 163, 167, 167, 167, 170, 170, 170, 173, 173, 173, 175, 175, 175, 179, 179, 179, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 104, 104, 104, 105, 105, 105, 107, 107, 107, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 117, 117, 117, 121, 121, 121, 126, 126, 126, 131, 131, 131, 134, 134, 134, 135, 135, 135, 133, 133, 133, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 142, 142, 142, 140, 140, 140, 135, 135, 135, 130, 130, 130, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 122, 122, 122, 127, 127, 127, 134, 134, 134, 141, 141, 141, 147, 147, 147, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 161, 161, 161, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 162, 162, 162, 160, 160, 160, 158, 158, 158, 157, 157, 157, 156, 156, 156, 152, 152, 152, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 152, 152, 152, 153, 153, 153, 155, 155, 155, 157, 157, 157, 157, 157, 157, 157, 157, 157, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 172, 172, 172, 175, 175, 175, 178, 178, 178, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 110, 110, 110, 114, 114, 114, 116, 116, 116, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 119, 119, 119, 124, 124, 124, 130, 130, 130, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 152, 152, 152, 154, 154, 154, 156, 156, 156, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 138, 138, 138, 132, 132, 132, 127, 127, 127, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 128, 128, 128, 134, 134, 134, 141, 141, 141, 147, 147, 147, 151, 151, 151, 155, 155, 155, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 158, 158, 158, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 155, 155, 155, 158, 158, 158, 162, 162, 162, 166, 166, 166, 169, 169, 169, 171, 171, 171, 174, 174, 174, 177, 177, 177, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 104, 104, 104, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 105, 105, 105, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 115, 115, 115, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 119, 119, 119, 123, 123, 123, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 151, 151, 151, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 130, 130, 130, 125, 125, 125, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 130, 130, 130, 135, 135, 135, 141, 141, 141, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 159, 159, 159, 158, 158, 158, 154, 154, 154, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 152, 152, 152, 156, 156, 156, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 177, 177, 177, 137, 137, 137, 137, 137, 137, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 122, 122, 122, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 104, 104, 104, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 95, 95, 95, 100, 100, 100, 106, 106, 106, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 113, 113, 113, 115, 115, 115, 119, 119, 119, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 135, 135, 135, 140, 140, 140, 145, 145, 145, 150, 150, 150, 154, 154, 154, 158, 158, 158, 163, 163, 163, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 149, 149, 149, 152, 152, 152, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 153, 153, 153, 148, 148, 148, 145, 145, 145, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 155, 155, 155, 159, 159, 159, 161, 161, 161, 164, 164, 164, 167, 167, 167, 171, 171, 171, 175, 175, 175, 138, 138, 138, 138, 138, 138, 135, 135, 135, 132, 132, 132, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 94, 94, 94, 90, 90, 90, 88, 88, 88, 88, 88, 88, 91, 91, 91, 96, 96, 96, 102, 102, 102, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 116, 116, 116, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 112, 112, 112, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 133, 133, 133, 138, 138, 138, 143, 143, 143, 147, 147, 147, 152, 152, 152, 157, 157, 157, 163, 163, 163, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 161, 161, 161, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 146, 146, 146, 150, 150, 150, 151, 151, 151, 152, 152, 152, 151, 151, 151, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 153, 153, 153, 148, 148, 148, 145, 145, 145, 144, 144, 144, 141, 141, 141, 138, 138, 138, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 145, 145, 145, 149, 149, 149, 153, 153, 153, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 168, 168, 168, 173, 173, 173, 138, 138, 138, 138, 138, 138, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 96, 96, 96, 92, 92, 92, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 89, 89, 89, 91, 91, 91, 92, 92, 92, 92, 92, 92, 89, 89, 89, 86, 86, 86, 84, 84, 84, 85, 85, 85, 88, 88, 88, 93, 93, 93, 98, 98, 98, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 111, 111, 111, 108, 108, 108, 108, 108, 108, 112, 112, 112, 116, 116, 116, 120, 120, 120, 123, 123, 123, 126, 126, 126, 131, 131, 131, 135, 135, 135, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 126, 126, 126, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 130, 130, 130, 135, 135, 135, 140, 140, 140, 145, 145, 145, 150, 150, 150, 156, 156, 156, 162, 162, 162, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 164, 164, 164, 170, 170, 170, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 96, 96, 96, 91, 91, 91, 87, 87, 87, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 80, 80, 80, 80, 80, 80, 81, 81, 81, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 85, 85, 85, 82, 82, 82, 81, 81, 81, 83, 83, 83, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 113, 113, 113, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 116, 116, 116, 113, 113, 113, 109, 109, 109, 109, 109, 109, 112, 112, 112, 117, 117, 117, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 127, 127, 127, 132, 132, 132, 136, 136, 136, 141, 141, 141, 147, 147, 147, 153, 153, 153, 158, 158, 158, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 155, 155, 155, 151, 151, 151, 148, 148, 148, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 153, 153, 153, 156, 156, 156, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 166, 166, 166, 138, 138, 138, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 107, 107, 107, 103, 103, 103, 99, 99, 99, 94, 94, 94, 89, 89, 89, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 77, 77, 77, 75, 75, 75, 75, 75, 75, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 81, 81, 81, 86, 86, 86, 91, 91, 91, 96, 96, 96, 99, 99, 99, 104, 104, 104, 109, 109, 109, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 111, 111, 111, 113, 113, 113, 117, 117, 117, 120, 120, 120, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 130, 130, 130, 127, 127, 127, 124, 124, 124, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 144, 144, 144, 149, 149, 149, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 157, 157, 157, 158, 158, 158, 158, 158, 158, 157, 157, 157, 158, 158, 158, 162, 162, 162, 136, 136, 136, 135, 135, 135, 133, 133, 133, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 101, 101, 101, 96, 96, 96, 92, 92, 92, 87, 87, 87, 83, 83, 83, 81, 81, 81, 80, 80, 80, 81, 81, 81, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 72, 72, 72, 72, 72, 72, 73, 73, 73, 75, 75, 75, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 79, 84, 84, 84, 91, 91, 91, 96, 96, 96, 100, 100, 100, 104, 104, 104, 109, 109, 109, 113, 113, 113, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 132, 132, 132, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 126, 126, 126, 128, 128, 128, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 136, 136, 136, 140, 140, 140, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 156, 156, 156, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 160, 160, 160, 158, 158, 158, 154, 154, 154, 150, 150, 150, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 127, 127, 127, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 133, 133, 133, 137, 137, 137, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 138, 138, 138, 140, 140, 140, 144, 144, 144, 148, 148, 148, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 159, 159, 159, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 116, 116, 116, 111, 111, 111, 106, 106, 106, 102, 102, 102, 98, 98, 98, 93, 93, 93, 89, 89, 89, 84, 84, 84, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 75, 75, 75, 77, 77, 77, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 79, 84, 84, 84, 91, 91, 91, 98, 98, 98, 102, 102, 102, 106, 106, 106, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 125, 125, 125, 122, 122, 122, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 108, 108, 108, 105, 105, 105, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 115, 115, 115, 116, 116, 116, 120, 120, 120, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 149, 149, 149, 152, 152, 152, 155, 155, 155, 158, 158, 158, 161, 161, 161, 162, 162, 162, 161, 161, 161, 158, 158, 158, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 123, 123, 123, 126, 126, 126, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 145, 145, 145, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 158, 158, 158, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 115, 115, 115, 109, 109, 109, 104, 104, 104, 99, 99, 99, 95, 95, 95, 90, 90, 90, 85, 85, 85, 81, 81, 81, 79, 79, 79, 76, 76, 76, 75, 75, 75, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 72, 72, 72, 70, 70, 70, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 74, 74, 74, 77, 77, 77, 80, 80, 80, 81, 81, 81, 80, 80, 80, 81, 81, 81, 85, 85, 85, 92, 92, 92, 100, 100, 100, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 131, 131, 131, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 122, 122, 122, 120, 120, 120, 115, 115, 115, 112, 112, 112, 108, 108, 108, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 91, 91, 91, 94, 94, 94, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 109, 109, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 114, 114, 114, 115, 115, 115, 119, 119, 119, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 154, 154, 154, 158, 158, 158, 160, 160, 160, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 137, 137, 137, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 137, 137, 137, 141, 141, 141, 146, 146, 146, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 117, 117, 117, 114, 114, 114, 109, 109, 109, 103, 103, 103, 98, 98, 98, 94, 94, 94, 88, 88, 88, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 75, 75, 75, 73, 73, 73, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 72, 72, 72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 66, 66, 66, 67, 67, 67, 71, 71, 71, 75, 75, 75, 78, 78, 78, 81, 81, 81, 83, 83, 83, 83, 83, 83, 84, 84, 84, 88, 88, 88, 94, 94, 94, 102, 102, 102, 107, 107, 107, 110, 110, 110, 113, 113, 113, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 126, 126, 126, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 108, 108, 108, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 90, 90, 90, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 90, 90, 90, 95, 95, 95, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 119, 119, 119, 124, 124, 124, 129, 129, 129, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 147, 147, 147, 150, 150, 150, 154, 154, 154, 157, 157, 157, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 134, 134, 134, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 125, 125, 125, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 135, 135, 135, 137, 137, 137, 143, 143, 143, 148, 148, 148, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 154, 154, 154, 156, 156, 156, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 122, 122, 122, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 113, 113, 113, 109, 109, 109, 104, 104, 104, 100, 100, 100, 95, 95, 95, 90, 90, 90, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, 72, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 69, 69, 69, 68, 68, 68, 66, 66, 66, 67, 67, 67, 69, 69, 69, 73, 73, 73, 76, 76, 76, 79, 79, 79, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 97, 97, 97, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 111, 111, 111, 109, 109, 109, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 88, 88, 88, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 90, 90, 90, 95, 95, 95, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 119, 119, 119, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 153, 153, 153, 156, 156, 156, 156, 156, 156, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 126, 126, 126, 131, 131, 131, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 139, 139, 139, 144, 144, 144, 149, 149, 149, 152, 152, 152, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 121, 121, 121, 119, 119, 119, 117, 117, 117, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 96, 96, 96, 91, 91, 91, 85, 85, 85, 80, 80, 80, 76, 76, 76, 73, 73, 73, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 68, 68, 68, 69, 69, 69, 71, 71, 71, 75, 75, 75, 77, 77, 77, 80, 80, 80, 84, 84, 84, 89, 89, 89, 92, 92, 92, 94, 94, 94, 96, 96, 96, 100, 100, 100, 105, 105, 105, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 119, 119, 119, 115, 115, 115, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 106, 106, 106, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 88, 88, 88, 86, 86, 86, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, 84, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 90, 90, 90, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 118, 118, 118, 122, 122, 122, 126, 126, 126, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 126, 126, 126, 131, 131, 131, 136, 136, 136, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 138, 138, 138, 143, 143, 143, 149, 149, 149, 152, 152, 152, 153, 153, 153, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 158, 158, 158, 161, 161, 161, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 152, 152, 152, 152, 152, 152, 151, 151, 151, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 99, 99, 99, 95, 95, 95, 90, 90, 90, 84, 84, 84, 79, 79, 79, 74, 74, 74, 71, 71, 71, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 81, 81, 81, 86, 86, 86, 92, 92, 92, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 106, 106, 106, 110, 110, 110, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 127, 127, 127, 130, 130, 130, 134, 134, 134, 137, 137, 137, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 114, 114, 114, 110, 110, 110, 109, 109, 109, 109, 109, 109, 108, 108, 108, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 90, 90, 90, 86, 86, 86, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 85, 85, 85, 85, 85, 85, 88, 88, 88, 93, 93, 93, 98, 98, 98, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 146, 146, 146, 141, 141, 141, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 152, 152, 152, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 157, 157, 157, 160, 160, 160, 161, 161, 161, 158, 158, 158, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 97, 97, 97, 93, 93, 93, 88, 88, 88, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 69, 69, 69, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 73, 73, 73, 74, 74, 74, 75, 75, 75, 77, 77, 77, 79, 79, 79, 83, 83, 83, 89, 89, 89, 96, 96, 96, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 129, 129, 129, 132, 132, 132, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 93, 93, 93, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 82, 82, 82, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 87, 87, 87, 92, 92, 92, 97, 97, 97, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 129, 129, 129, 134, 134, 134, 138, 138, 138, 140, 140, 140, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 96, 96, 96, 92, 92, 92, 88, 88, 88, 83, 83, 83, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 85, 85, 85, 92, 92, 92, 98, 98, 98, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 119, 119, 119, 124, 124, 124, 128, 128, 128, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 117, 117, 117, 115, 115, 115, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 111, 111, 111, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 91, 91, 91, 97, 97, 97, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 121, 121, 121, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 156, 156, 156, 157, 157, 157, 155, 155, 155, 152, 152, 152, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 100, 100, 100, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 83, 83, 83, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 80, 80, 82, 82, 82, 87, 87, 87, 94, 94, 94, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 116, 116, 116, 119, 119, 119, 124, 124, 124, 129, 129, 129, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 129, 129, 129, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 116, 116, 116, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 126, 126, 126, 121, 121, 121, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 98, 98, 98, 95, 95, 95, 92, 92, 92, 91, 91, 91, 89, 89, 89, 88, 88, 88, 86, 86, 86, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 89, 89, 89, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 140, 140, 140, 135, 135, 135, 131, 131, 131, 129, 129, 129, 129, 129, 129, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 85, 85, 85, 84, 84, 84, 82, 82, 82, 78, 78, 78, 75, 75, 75, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 83, 83, 83, 88, 88, 88, 93, 93, 93, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 115, 115, 115, 118, 118, 118, 123, 123, 123, 129, 129, 129, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 131, 131, 131, 127, 127, 127, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 125, 125, 125, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 120, 120, 120, 113, 113, 113, 107, 107, 107, 103, 103, 103, 102, 102, 102, 99, 99, 99, 95, 95, 95, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 98, 98, 98, 103, 103, 103, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 102, 102, 102, 106, 106, 106, 108, 108, 108, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 127, 127, 127, 127, 127, 127, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 99, 99, 99, 95, 95, 95, 91, 91, 91, 89, 89, 89, 88, 88, 88, 85, 85, 85, 81, 81, 81, 77, 77, 77, 76, 76, 76, 78, 78, 78, 81, 81, 81, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 84, 84, 84, 83, 83, 83, 84, 84, 84, 88, 88, 88, 92, 92, 92, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 118, 118, 118, 124, 124, 124, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 119, 119, 119, 112, 112, 112, 106, 106, 106, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 88, 88, 88, 85, 85, 85, 82, 82, 82, 81, 81, 81, 82, 82, 82, 81, 81, 81, 79, 79, 79, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 92, 92, 92, 97, 97, 97, 102, 102, 102, 106, 106, 106, 107, 107, 107, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 108, 108, 108, 108, 108, 108, 110, 110, 110, 109, 109, 109, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 92, 92, 92, 88, 88, 88, 83, 83, 83, 79, 79, 79, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 84, 84, 84, 86, 86, 86, 90, 90, 90, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 123, 123, 123, 127, 127, 127, 131, 131, 131, 131, 131, 131, 127, 127, 127, 123, 123, 123, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 126, 126, 126, 123, 123, 123, 117, 117, 117, 111, 111, 111, 106, 106, 106, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 89, 89, 89, 90, 90, 90, 90, 90, 90, 89, 89, 89, 85, 85, 85, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 79, 76, 76, 76, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 87, 87, 87, 91, 91, 91, 97, 97, 97, 102, 102, 102, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 127, 127, 127, 131, 131, 131, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 138, 138, 138, 141, 141, 141, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 126, 126, 126, 123, 123, 123, 107, 107, 107, 107, 107, 107, 109, 109, 109, 109, 109, 109, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 95, 95, 95, 91, 91, 91, 86, 86, 86, 82, 82, 82, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 88, 88, 88, 88, 88, 88, 87, 87, 87, 89, 89, 89, 94, 94, 94, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 123, 123, 123, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 119, 119, 119, 122, 122, 122, 127, 127, 127, 130, 130, 130, 129, 129, 129, 126, 126, 126, 121, 121, 121, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 121, 121, 121, 116, 116, 116, 111, 111, 111, 106, 106, 106, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 91, 91, 91, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 84, 84, 84, 79, 79, 79, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 74, 74, 74, 76, 76, 76, 78, 78, 78, 81, 81, 81, 83, 83, 83, 86, 86, 86, 90, 90, 90, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 97, 97, 97, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 111, 111, 111, 115, 115, 115, 118, 118, 118, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 126, 126, 126, 130, 130, 130, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 138, 138, 138, 137, 137, 137, 136, 136, 136, 137, 137, 137, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 131, 131, 131, 126, 126, 126, 121, 121, 121, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 105, 105, 105, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 98, 98, 98, 94, 94, 94, 89, 89, 89, 84, 84, 84, 81, 81, 81, 81, 81, 81, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 93, 93, 93, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 128, 128, 128, 128, 128, 128, 124, 124, 124, 119, 119, 119, 117, 117, 117, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 120, 120, 120, 115, 115, 115, 110, 110, 110, 105, 105, 105, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 87, 87, 87, 87, 87, 87, 86, 86, 86, 81, 81, 81, 76, 76, 76, 72, 72, 72, 71, 71, 71, 71, 71, 71, 70, 70, 70, 69, 69, 69, 68, 68, 68, 69, 69, 69, 72, 72, 72, 74, 74, 74, 77, 77, 77, 80, 80, 80, 82, 82, 82, 84, 84, 84, 88, 88, 88, 93, 93, 93, 97, 97, 97, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 132, 132, 132, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 123, 123, 123, 118, 118, 118, 109, 109, 109, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 98, 98, 98, 94, 94, 94, 90, 90, 90, 86, 86, 86, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 90, 90, 90, 92, 92, 92, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 110, 110, 110, 113, 113, 113, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 124, 124, 124, 126, 126, 126, 126, 126, 126, 123, 123, 123, 118, 118, 118, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 84, 84, 84, 84, 84, 84, 83, 83, 83, 78, 78, 78, 72, 72, 72, 68, 68, 68, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 66, 66, 66, 68, 68, 68, 70, 70, 70, 72, 72, 72, 75, 75, 75, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 94, 94, 94, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 103, 103, 103, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 125, 125, 125, 120, 120, 120, 116, 116, 116, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 92, 92, 92, 95, 95, 95, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 121, 121, 121, 123, 123, 123, 122, 122, 122, 120, 120, 120, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 108, 108, 108, 111, 111, 111, 113, 113, 113, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 113, 113, 113, 107, 107, 107, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 89, 89, 89, 86, 86, 86, 83, 83, 83, 81, 81, 81, 80, 80, 80, 79, 79, 79, 75, 75, 75, 69, 69, 69, 64, 64, 64, 63, 63, 63, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 69, 69, 69, 70, 70, 70, 73, 73, 73, 76, 76, 76, 79, 79, 79, 81, 81, 81, 82, 82, 82, 86, 86, 86, 91, 91, 91, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 102, 102, 102, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 98, 98, 98, 94, 94, 94, 91, 91, 91, 91, 91, 91, 94, 94, 94, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 117, 117, 117, 122, 122, 122, 125, 125, 125, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 103, 103, 103, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 91, 91, 91, 91, 91, 91, 92, 92, 92, 96, 96, 96, 100, 100, 100, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 105, 105, 105, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 111, 111, 111, 108, 108, 108, 105, 105, 105, 105, 105, 105, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 111, 111, 111, 105, 105, 105, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 87, 87, 87, 84, 84, 84, 81, 81, 81, 78, 78, 78, 77, 77, 77, 75, 75, 75, 72, 72, 72, 67, 67, 67, 62, 62, 62, 61, 61, 61, 63, 63, 63, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 72, 72, 72, 76, 76, 76, 79, 79, 79, 80, 80, 80, 82, 82, 82, 85, 85, 85, 89, 89, 89, 94, 94, 94, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 105, 105, 105, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100, 100, 97, 97, 97, 93, 93, 93, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 117, 117, 117, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 125, 125, 125, 121, 121, 121, 116, 116, 116, 112, 112, 112, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 106, 106, 106, 103, 103, 103, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 96, 96, 96, 92, 92, 92, 87, 87, 87, 84, 84, 84, 83, 83, 83, 84, 84, 84, 84, 84, 84, 86, 86, 86, 89, 89, 89, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 96, 96, 96, 100, 100, 100, 104, 104, 104, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 110, 110, 110, 107, 107, 107, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 113, 113, 113, 109, 109, 109, 104, 104, 104, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 85, 85, 85, 82, 82, 82, 79, 79, 79, 76, 76, 76, 74, 74, 74, 73, 73, 73, 70, 70, 70, 66, 66, 66, 62, 62, 62, 61, 61, 61, 63, 63, 63, 66, 66, 66, 69, 69, 69, 71, 71, 71, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 85, 85, 85, 89, 89, 89, 93, 93, 93, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 107, 107, 107, 104, 104, 104, 101, 101, 101, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 94, 94, 94, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 109, 109, 109, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 119, 119, 119, 114, 114, 114, 111, 111, 111, 114, 114, 114, 112, 112, 112, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 97, 97, 97, 92, 92, 92, 87, 87, 87, 84, 84, 84, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 89, 89, 89, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 94, 94, 94, 99, 99, 99, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 109, 109, 109, 106, 106, 106, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 108, 108, 108, 103, 103, 103, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 67, 67, 67, 63, 63, 63, 61, 61, 61, 63, 63, 63, 66, 66, 66, 70, 70, 70, 74, 74, 74, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 94, 94, 94, 97, 97, 97, 98, 98, 98, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 89, 89, 89, 91, 91, 91, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 114, 114, 114, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 97, 97, 97, 92, 92, 92, 87, 87, 87, 85, 85, 85, 84, 84, 84, 83, 83, 83, 83, 83, 83, 85, 85, 85, 89, 89, 89, 91, 91, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 89, 89, 89, 91, 91, 91, 95, 95, 95, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 105, 105, 105, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 102, 102, 102, 97, 97, 97, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 74, 74, 74, 72, 72, 72, 71, 71, 71, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 63, 63, 63, 67, 67, 67, 71, 71, 71, 75, 75, 75, 78, 78, 78, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 90, 90, 90, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 89, 89, 89, 87, 87, 87, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 86, 89, 89, 89, 92, 92, 92, 93, 93, 93, 93, 93, 93, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 111, 111, 111, 111, 111, 111, 113, 113, 113, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 103, 103, 103, 98, 98, 98, 92, 92, 92, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 85, 85, 85, 88, 88, 88, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 87, 87, 87, 88, 88, 88, 91, 91, 91, 93, 93, 93, 95, 95, 95, 96, 96, 96, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 107, 107, 107, 106, 106, 106, 104, 104, 104, 103, 103, 103, 106, 106, 106, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 101, 101, 101, 96, 96, 96, 90, 90, 90, 84, 84, 84, 79, 79, 79, 77, 77, 77, 77, 77, 77, 76, 76, 76, 74, 74, 74, 71, 71, 71, 71, 71, 71, 71, 71, 71, 70, 70, 70, 67, 67, 67, 65, 65, 65, 65, 65, 65, 68, 68, 68, 72, 72, 72, 75, 75, 75, 79, 79, 79, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 85, 85, 85, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 83, 84, 84, 84, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 108, 108, 108, 103, 103, 103, 97, 97, 97, 91, 91, 91, 88, 88, 88, 87, 87, 87, 85, 85, 85, 82, 82, 82, 81, 81, 81, 82, 82, 82, 86, 86, 86, 88, 88, 88, 88, 88, 88, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 88, 88, 88, 90, 90, 90, 92, 92, 92, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 105, 105, 105, 106, 106, 106, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 106, 106, 106, 100, 100, 100, 94, 94, 94, 88, 88, 88, 81, 81, 81, 77, 77, 77, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 71, 71, 71, 68, 68, 68, 68, 68, 68, 70, 70, 70, 74, 74, 74, 77, 77, 77, 80, 80, 80, 84, 84, 84, 87, 87, 87, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 109, 109, 109, 107, 107, 107, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 83, 83, 83, 84, 84, 84, 85, 85, 85, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 100, 100, 100, 104, 104, 104, 108, 108, 108, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 119, 119, 119, 119, 119, 119, 117, 117, 117, 114, 114, 114, 110, 110, 110, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 102, 102, 102, 96, 96, 96, 90, 90, 90, 86, 86, 86, 85, 85, 85, 84, 84, 84, 81, 81, 81, 79, 79, 79, 80, 80, 80, 84, 84, 84, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 84, 84, 84, 82, 82, 82, 82, 82, 82, 83, 83, 83, 86, 86, 86, 89, 89, 89, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 105, 105, 105, 99, 99, 99, 93, 93, 93, 86, 86, 86, 80, 80, 80, 76, 76, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 72, 72, 73, 73, 73, 77, 77, 77, 81, 81, 81, 84, 84, 84, 87, 87, 87, 91, 91, 91, 95, 95, 95, 99, 99, 99, 102, 102, 102, 103, 103, 103, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 97, 97, 97, 95, 95, 95, 94, 94, 94, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 95, 95, 95, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 106, 106, 106, 111, 111, 111, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 111, 111, 111, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 100, 100, 100, 94, 94, 94, 88, 88, 88, 85, 85, 85, 84, 84, 84, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 84, 84, 84, 85, 85, 85, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 80, 80, 80, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 120, 120, 120, 117, 117, 117, 112, 112, 112, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 76, 76, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 77, 77, 77, 79, 79, 79, 79, 79, 79, 77, 77, 77, 76, 76, 76, 77, 77, 77, 81, 81, 81, 85, 85, 85, 88, 88, 88, 91, 91, 91, 95, 95, 95, 99, 99, 99, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 106, 106, 106, 103, 103, 103, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 101, 101, 101, 99, 99, 99, 97, 97, 97, 94, 94, 94, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 82, 82, 82, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 107, 107, 107, 113, 113, 113, 117, 117, 117, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 114, 114, 114, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 108, 108, 108, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 97, 97, 97, 92, 92, 92, 88, 88, 88, 85, 85, 85, 84, 84, 84, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 80, 80, 80, 83, 83, 83, 84, 84, 84, 85, 85, 85, 84, 84, 84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 80, 80, 80, 83, 83, 83, 87, 87, 87, 91, 91, 91, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 97, 97, 97, 99, 99, 99, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 118, 118, 118, 113, 113, 113, 106, 106, 106, 99, 99, 99, 92, 92, 92, 85, 85, 85, 81, 81, 81, 78, 78, 78, 76, 76, 76, 75, 75, 75, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 80, 80, 80, 82, 82, 82, 83, 83, 83, 82, 82, 82, 81, 81, 81, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 105, 105, 105, 106, 106, 106, 105, 105, 105, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 108, 108, 108, 104, 104, 104, 101, 101, 101, 99, 99, 99, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 104, 104, 104, 101, 101, 101, 97, 97, 97, 94, 94, 94, 90, 90, 90, 86, 86, 86, 83, 83, 83, 80, 80, 80, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 87, 87, 87, 89, 89, 89, 91, 91, 91, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 115, 115, 115, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 115, 115, 115, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 101, 101, 101, 104, 104, 104, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, 104, 103, 103, 103, 99, 99, 99, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 79, 79, 79, 82, 82, 82, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 102, 102, 102, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 114, 114, 114, 108, 108, 108, 101, 101, 101, 94, 94, 94, 87, 87, 87, 82, 82, 82, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 86, 86, 86, 86, 86, 86, 84, 84, 84, 84, 84, 84, 86, 86, 86, 90, 90, 90, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 102, 102, 102, 104, 104, 104, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 101, 101, 101, 97, 97, 97, 94, 94, 94, 89, 89, 89, 85, 85, 85, 80, 80, 80, 78, 78, 78, 78, 78, 78, 79, 79, 79, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 79, 79, 79, 81, 81, 81, 84, 84, 84, 86, 86, 86, 89, 89, 89, 92, 92, 92, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 120, 120, 120, 119, 119, 119, 119, 119, 119, 118, 118, 118, 113, 113, 113, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 99, 99, 99, 96, 96, 96, 93, 93, 93, 92, 92, 92, 93, 93, 93, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 116, 116, 116, 116, 116, 116, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 93, 93, 93, 90, 90, 90, 89, 89, 89, 88, 88, 88, 86, 86, 86, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77, 77, 77, 81, 81, 81, 86, 86, 86, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 103, 103, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 94, 94, 94, 96, 96, 96, 100, 100, 100, 102, 102, 102, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 132, 132, 132, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 124, 124, 124, 122, 122, 122, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 97, 97, 97, 90, 90, 90, 84, 84, 84, 81, 81, 81, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 82, 82, 82, 85, 85, 85, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 86, 88, 88, 88, 93, 93, 93, 97, 97, 97, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 98, 98, 98, 96, 96, 96, 96, 96, 96, 99, 99, 99, 102, 102, 102, 105, 105, 105, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 92, 92, 92, 87, 87, 87, 83, 83, 83, 80, 80, 80, 81, 81, 81, 82, 82, 82, 82, 82, 82, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 86, 86, 86, 90, 90, 90, 93, 93, 93, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 111, 111, 111, 113, 113, 113, 117, 117, 117, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 109, 109, 109, 106, 106, 106, 104, 104, 104, 101, 101, 101, 97, 97, 97, 93, 93, 93, 91, 91, 91, 90, 90, 90, 91, 91, 91, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 89, 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, 87, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 78, 78, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 73, 73, 73, 71, 71, 71, 71, 71, 71, 72, 72, 72, 75, 75, 75, 79, 79, 79, 84, 84, 84, 89, 89, 89, 93, 93, 93, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 107, 107, 107, 110, 110, 110, 114, 114, 114, 119, 119, 119, 123, 123, 123, 128, 128, 128, 132, 132, 132, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 121, 121, 121, 118, 118, 118, 114, 114, 114, 110, 110, 110, 105, 105, 105, 99, 99, 99, 92, 92, 92, 87, 87, 87, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 87, 87, 87, 90, 90, 90, 95, 95, 95, 100, 100, 100, 104, 104, 104, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 103, 103, 103, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 104, 104, 104, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 95, 95, 95, 90, 90, 90, 86, 86, 86, 83, 83, 83, 84, 84, 84, 86, 86, 86, 85, 85, 85, 83, 83, 83, 80, 80, 80, 78, 78, 78, 78, 78, 78, 79, 79, 79, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 118, 118, 118, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 107, 107, 107, 104, 104, 104, 100, 100, 100, 96, 96, 96, 92, 92, 92, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 94, 94, 94, 97, 97, 97, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 101, 101, 101, 105, 105, 105, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 88, 88, 88, 87, 87, 87, 85, 85, 85, 84, 84, 84, 81, 81, 81, 77, 77, 77, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 73, 73, 73, 77, 77, 77, 83, 83, 83, 88, 88, 88, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 99, 99, 99, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 111, 111, 111, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 109, 109, 109, 105, 105, 105, 101, 101, 101, 95, 95, 95, 90, 90, 90, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 82, 82, 82, 82, 82, 82, 84, 84, 84, 86, 86, 86, 87, 87, 87, 87, 87, 87, 86, 86, 86, 87, 87, 87, 89, 89, 89, 93, 93, 93, 98, 98, 98, 103, 103, 103, 108, 108, 108, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 112, 112, 112, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 100, 100, 100, 97, 97, 97, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 99, 99, 99, 94, 94, 94, 89, 89, 89, 86, 86, 86, 87, 87, 87, 89, 89, 89, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 87, 87, 87, 91, 91, 91, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 119, 119, 119, 114, 114, 114, 109, 109, 109, 106, 106, 106, 102, 102, 102, 97, 97, 97, 93, 93, 93, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 88, 88, 88, 87, 87, 87, 86, 86, 86, 88, 88, 88, 92, 92, 92, 95, 95, 95, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 91, 91, 91, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 102, 102, 102, 114, 114, 114, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 99, 99, 99, 97, 97, 97, 94, 94, 94, 92, 92, 92, 90, 90, 90, 88, 88, 88, 88, 88, 88, 89, 89, 89, 90, 90, 90, 89, 89, 89, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 74, 74, 74, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70, 70, 70, 70, 70, 70, 72, 72, 72, 76, 76, 76, 82, 82, 82, 87, 87, 87, 91, 91, 91, 93, 93, 93, 96, 96, 96, 100, 100, 100, 104, 104, 104, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 105, 105, 105, 104, 104, 104, 101, 101, 101, 99, 99, 99, 101, 101, 101, 105, 105, 105, 110, 110, 110, 115, 115, 115, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 131, 131, 131, 135, 135, 135, 139, 139, 139, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 106, 106, 106, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 91, 91, 91, 90, 90, 90, 88, 88, 88, 85, 85, 85, 84, 84, 84, 84, 84, 84, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 90, 90, 90, 93, 93, 93, 97, 97, 97, 101, 101, 101, 106, 106, 106, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 110, 110, 110, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 100, 100, 100, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 105, 105, 105, 101, 101, 101, 96, 96, 96, 93, 93, 93, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 86, 86, 86, 88, 88, 88, 91, 91, 91, 96, 96, 96, 100, 100, 100, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 120, 120, 120, 116, 116, 116, 111, 111, 111, 108, 108, 108, 104, 104, 104, 100, 100, 100, 94, 94, 94, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 88, 88, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 94, 94, 94, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 93, 93, 93, 93, 93, 93, 95, 95, 95, 99, 99, 99, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 91, 91, 91, 87, 87, 87, 82, 82, 82, 77, 77, 77, 74, 74, 74, 74, 74, 74, 75, 75, 75, 74, 74, 74, 73, 73, 73, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 81, 81, 81, 87, 87, 87, 90, 90, 90, 92, 92, 92, 94, 94, 94, 98, 98, 98, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 101, 101, 101, 102, 102, 102, 106, 106, 106, 112, 112, 112, 118, 118, 118, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 139, 139, 139, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 113, 113, 113, 108, 108, 108, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 92, 92, 92, 90, 90, 90, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 91, 91, 91, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 108, 108, 108, 112, 112, 112, 117, 117, 117, 122, 122, 122, 124, 124, 124, 124, 124, 124, 122, 122, 122, 118, 118, 118, 113, 113, 113, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 103, 103, 103, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 91, 91, 91, 89, 89, 89, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 93, 93, 93, 98, 98, 98, 103, 103, 103, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 99, 99, 99, 93, 93, 93, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 83, 83, 83, 81, 81, 81, 81, 81, 81, 83, 83, 83, 86, 86, 86, 88, 88, 88, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 96, 96, 96, 99, 99, 99, 106, 106, 106, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 91, 91, 91, 88, 88, 88, 83, 83, 83, 79, 79, 79, 77, 77, 77, 77, 77, 77, 78, 78, 78, 77, 77, 77, 76, 76, 76, 74, 74, 74, 74, 74, 74, 75, 75, 75, 78, 78, 78, 82, 82, 82, 87, 87, 87, 90, 90, 90, 91, 91, 91, 94, 94, 94, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 111, 111, 111, 112, 112, 112, 111, 111, 111, 112, 112, 112, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 107, 107, 107, 113, 113, 113, 118, 118, 118, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 142, 142, 142, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 121, 121, 121, 115, 115, 115, 109, 109, 109, 103, 103, 103, 100, 100, 100, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 95, 95, 95, 99, 99, 99, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 112, 112, 112, 111, 111, 111, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 90, 90, 90, 90, 90, 90, 92, 92, 92, 96, 96, 96, 101, 101, 101, 107, 107, 107, 110, 110, 110, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 111, 111, 111, 113, 113, 113, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 99, 99, 99, 93, 93, 93, 88, 88, 88, 85, 85, 85, 84, 84, 84, 82, 82, 82, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 83, 83, 83, 85, 85, 85, 86, 86, 86, 87, 87, 87, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 102, 102, 102, 102, 102, 102, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 84, 84, 84, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 87, 87, 87, 90, 90, 90, 92, 92, 92, 95, 95, 95, 99, 99, 99, 102, 102, 102, 103, 103, 103, 105, 105, 105, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 109, 109, 109, 106, 106, 106, 105, 105, 105, 107, 107, 107, 111, 111, 111, 115, 115, 115, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 124, 124, 124, 120, 120, 120, 115, 115, 115, 110, 110, 110, 104, 104, 104, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 124, 124, 124, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 111, 111, 111, 113, 113, 113, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 99, 99, 99, 105, 105, 105, 110, 110, 110, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 99, 99, 99, 93, 93, 93, 87, 87, 87, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 78, 78, 78, 79, 79, 79, 81, 81, 81, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 93, 93, 93, 93, 93, 93, 91, 91, 91, 91, 91, 91, 92, 92, 92, 94, 94, 94, 98, 98, 98, 101, 101, 101, 105, 105, 105, 101, 101, 101, 100, 100, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 93, 93, 93, 92, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 135, 135, 135, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 133, 133, 133, 130, 130, 130, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 103, 103, 103, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 127, 127, 127, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 108, 108, 108, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 97, 97, 97, 102, 102, 102, 106, 106, 106, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 103, 103, 103, 98, 98, 98, 92, 92, 92, 86, 86, 86, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 84, 84, 84, 88, 88, 88, 92, 92, 92, 93, 93, 93, 92, 92, 92, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 105, 105, 105, 108, 108, 108, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 95, 95, 95, 96, 96, 96, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 138, 138, 138, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 138, 138, 138, 134, 134, 134, 131, 131, 131, 127, 127, 127, 124, 124, 124, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 96, 96, 96, 96, 96, 96, 97, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 109, 109, 109, 114, 114, 114, 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 99, 99, 99, 102, 102, 102, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 108, 108, 108, 104, 104, 104, 101, 101, 101, 97, 97, 97, 91, 91, 91, 86, 86, 86, 82, 82, 82, 82, 82, 82, 83, 83, 83, 84, 84, 84, 83, 83, 83, 82, 82, 82, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 82, 82, 82, 87, 87, 87, 91, 91, 91, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 103, 103, 103, 103, 103, 103, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 100, 100, 100, 97, 97, 97, 97, 97, 97, 99, 99, 99, 102, 102, 102, 102, 102, 102, 101, 101, 101, 98, 98, 98, 97, 97, 97, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 124, 124, 124, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 133, 133, 133, 138, 138, 138, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 122, 122, 122, 119, 119, 119, 115, 115, 115, 111, 111, 111, 106, 106, 106, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 105, 105, 105, 107, 107, 107, 110, 110, 110, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 133, 133, 133, 131, 131, 131, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 118, 118, 118, 119, 119, 119, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 100, 100, 100, 102, 102, 102, 103, 103, 103, 106, 106, 106, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 105, 105, 105, 102, 102, 102, 99, 99, 99, 95, 95, 95, 91, 91, 91, 85, 85, 85, 81, 81, 81, 81, 81, 81, 82, 82, 82, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 83, 82, 82, 82, 80, 80, 80, 79, 79, 79, 81, 81, 81, 86, 86, 86, 91, 91, 91, 95, 95, 95, 96, 96, 96, 97, 97, 97, 101, 101, 101, 103, 103, 103, 105, 105, 105, 107, 107, 107, 111, 111, 111, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 105, 105, 105, 102, 102, 102, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 97, 97, 97, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 121, 121, 121, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 132, 132, 132, 138, 138, 138, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 126, 126, 126, 121, 121, 121, 116, 116, 116, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 123, 123, 123, 127, 127, 127, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 107, 107, 107, 110, 110, 110, 115, 115, 115, 118, 118, 118, 120, 120, 120, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 110, 110, 110, 109, 109, 109, 110, 110, 110, 110, 110, 110, 108, 108, 108, 104, 104, 104, 102, 102, 102, 101, 101, 101, 100, 100, 100, 101, 101, 101, 105, 105, 105, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 90, 90, 90, 85, 85, 85, 81, 81, 81, 80, 80, 80, 81, 81, 81, 83, 83, 83, 84, 84, 84, 84, 84, 84, 83, 83, 83, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 81, 81, 81, 86, 86, 86, 91, 91, 91, 95, 95, 95, 97, 97, 97, 99, 99, 99, 102, 102, 102, 104, 104, 104, 105, 105, 105, 108, 108, 108, 112, 112, 112, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 110, 110, 110, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 138, 138, 138, 144, 144, 144, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 123, 123, 123, 116, 116, 116, 109, 109, 109, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 99, 99, 99, 101, 101, 101, 102, 102, 102, 101, 101, 101, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 123, 123, 123, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 126, 126, 126, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 108, 108, 108, 111, 111, 111, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 101, 101, 101, 105, 105, 105, 111, 111, 111, 114, 114, 114, 115, 115, 115, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 90, 90, 90, 86, 86, 86, 82, 82, 82, 81, 81, 81, 82, 82, 82, 84, 84, 84, 85, 85, 85, 84, 84, 84, 82, 82, 82, 81, 81, 81, 80, 80, 80, 79, 79, 79, 79, 79, 79, 81, 81, 81, 85, 85, 85, 91, 91, 91, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 109, 109, 109, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 107, 107, 107, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 138, 138, 138, 144, 144, 144, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 122, 122, 122, 115, 115, 115, 109, 109, 109, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 101, 101, 101, 98, 98, 98, 97, 97, 97, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 101, 101, 101, 101, 101, 101, 103, 103, 103, 107, 107, 107, 111, 111, 111, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 138, 138, 138, 134, 134, 134, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 116, 116, 116, 112, 112, 112, 110, 110, 110, 110, 110, 110, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 112, 112, 112, 109, 109, 109, 105, 105, 105, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 90, 90, 90, 87, 87, 87, 84, 84, 84, 83, 83, 83, 84, 84, 84, 86, 86, 86, 87, 87, 87, 86, 86, 86, 83, 83, 83, 80, 80, 80, 79, 79, 79, 79, 79, 79, 80, 80, 80, 81, 81, 81, 84, 84, 84, 90, 90, 90, 95, 95, 95, 99, 99, 99, 100, 100, 100, 102, 102, 102, 104, 104, 104, 108, 108, 108, 112, 112, 112, 116, 116, 116, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 106, 106, 106, 108, 108, 108, 112, 112, 112, 117, 117, 117, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 116, 116, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 130, 130, 130, 133, 133, 133, 138, 138, 138, 142, 142, 142, 146, 146, 146, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 141, 141, 141, 138, 138, 138, 136, 136, 136, 132, 132, 132, 128, 128, 128, 121, 121, 121, 115, 115, 115, 110, 110, 110, 107, 107, 107, 107, 107, 107, 106, 106, 106, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 108, 108, 108, 113, 113, 113, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 140, 140, 140, 138, 138, 138, 134, 134, 134, 129, 129, 129, 126, 126, 126, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 114, 114, 114, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 126, 126, 126, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 114, 114, 114, 110, 110, 110, 105, 105, 105, 102, 102, 102, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 99, 99, 99, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 90, 90, 90, 89, 89, 89, 87, 87, 87, 85, 85, 85, 84, 84, 84, 86, 86, 86, 88, 88, 88, 89, 89, 89, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 83, 83, 83, 88, 88, 88, 95, 95, 95, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 110, 110, 110, 108, 108, 108, 108, 108, 108, 111, 111, 111, 116, 116, 116, 121, 121, 121, 123, 123, 123, 122, 122, 122, 120, 120, 120, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 131, 131, 131, 134, 134, 134, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 139, 139, 139, 143, 143, 143, 146, 146, 146, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 132, 132, 132, 127, 127, 127, 121, 121, 121, 115, 115, 115, 112, 112, 112, 109, 109, 109, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 106, 106, 106, 108, 108, 108, 111, 111, 111, 116, 116, 116, 119, 119, 119, 119, 119, 119, 121, 121, 121, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 127, 127, 127, 125, 125, 125, 121, 121, 121, 118, 118, 118, 117, 117, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 101, 101, 101, 100, 100, 100, 97, 97, 97, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92, 91, 91, 91, 90, 90, 90, 88, 88, 88, 87, 87, 87, 85, 85, 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, 87, 87, 87, 88, 88, 88, 86, 86, 86, 82, 82, 82, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 88, 88, 88, 94, 94, 94, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 110, 110, 110, 112, 112, 112, 114, 114, 114, 116, 116, 116, 119, 119, 119, 120, 120, 120, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 126, 126, 126, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 121, 121, 121, 117, 117, 117, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 132, 132, 132, 135, 135, 135, 137, 137, 137, 136, 136, 136, 132, 132, 132, 128, 128, 128, 123, 123, 123, 119, 119, 119, 115, 115, 115, 114, 114, 114, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 134, 134, 134, 137, 137, 137, 141, 141, 141, 144, 144, 144, 146, 146, 146, 145, 145, 145, 143, 143, 143, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 145, 145, 142, 142, 142, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 128, 128, 128, 129, 129, 129, 126, 126, 126, 123, 123, 123, 119, 119, 119, 118, 118, 118, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 111, 111, 111, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 109, 109, 109, 110, 110, 110, 108, 108, 108, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 94, 94, 94, 91, 91, 91, 89, 89, 89, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 89, 89, 89, 87, 87, 87, 83, 83, 83, 80, 80, 80, 79, 79, 79, 80, 80, 80, 82, 82, 82, 84, 84, 84, 84, 84, 84, 83, 83, 83, 79, 79, 79, 77, 77, 77, 76, 76, 76, 78, 78, 78, 80, 80, 80, 81, 81, 81, 83, 83, 83, 88, 88, 88, 94, 94, 94, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 121, 121, 121, 122, 122, 122, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 117, 117, 117, 119, 119, 119, 123, 123, 123, 126, 126, 126, 127, 127, 127, 125, 125, 125, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 123, 123, 123, 119, 119, 119, 115, 115, 115, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 138, 138, 138, 135, 135, 135, 132, 132, 132, 127, 127, 127, 123, 123, 123, 118, 118, 118, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 123, 123, 123, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 142, 142, 142, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 141, 141, 141, 137, 137, 137, 135, 135, 135, 134, 134, 134, 131, 131, 131, 127, 127, 127, 122, 122, 122, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 112, 112, 112, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 106, 106, 106, 101, 101, 101, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 88, 88, 88, 86, 86, 86, 87, 87, 87, 89, 89, 89, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 75, 75, 75, 76, 76, 76, 79, 79, 79, 80, 80, 80, 80, 80, 80, 78, 78, 78, 75, 75, 75, 73, 73, 73, 73, 73, 73, 76, 76, 76, 79, 79, 79, 81, 81, 81, 84, 84, 84, 89, 89, 89, 94, 94, 94, 99, 99, 99, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 123, 123, 123, 125, 125, 125, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 127, 127, 127, 123, 123, 123, 120, 120, 120, 120, 120, 120, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 131, 131, 131, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 114, 114, 114, 118, 118, 118, 120, 120, 120, 121, 121, 121, 122, 122, 122, 125, 125, 125, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 135, 135, 135, 139, 139, 139, 143, 143, 143, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 125, 125, 125, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 116, 116, 116, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 107, 107, 107, 102, 102, 102, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 87, 87, 87, 84, 84, 84, 84, 84, 84, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, 88, 88, 86, 86, 86, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 71, 71, 71, 73, 73, 73, 75, 75, 75, 76, 76, 76, 74, 74, 74, 73, 73, 73, 71, 71, 71, 70, 70, 70, 71, 71, 71, 74, 74, 74, 78, 78, 78, 82, 82, 82, 85, 85, 85, 88, 88, 88, 93, 93, 93, 97, 97, 97, 100, 100, 100, 103, 103, 103, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 131, 131, 131, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, 111, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 129, 129, 129, 131, 131, 131, 133, 133, 133, 133, 133, 133, 134, 134, 134, 137, 137, 137, 141, 141, 141, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 145, 145, 145, 141, 141, 141, 137, 137, 137, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 119, 119, 119, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 114, 114, 114, 112, 112, 112, 108, 108, 108, 103, 103, 103, 100, 100, 100, 98, 98, 98, 97, 97, 97, 93, 93, 93, 87, 87, 87, 83, 83, 83, 82, 82, 82, 83, 83, 83, 85, 85, 85, 85, 85, 85, 84, 84, 84, 81, 81, 81, 78, 78, 78, 75, 75, 75, 71, 71, 71, 69, 69, 69, 68, 68, 68, 69, 69, 69, 71, 71, 71, 70, 70, 70, 68, 68, 68, 68, 68, 68, 67, 67, 67, 68, 68, 68, 70, 70, 70, 73, 73, 73, 78, 78, 78, 83, 83, 83, 85, 85, 85, 87, 87, 87, 90, 90, 90, 94, 94, 94, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 134, 134, 134, 136, 136, 136, 139, 139, 139, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 133, 133, 133, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 128, 128, 128, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 143, 143, 143, 146, 146, 146, 145, 145, 145, 141, 141, 141, 137, 137, 137, 136, 136, 136, 135, 135, 135, 132, 132, 132, 127, 127, 127, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 121, 121, 121, 117, 117, 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 123, 123, 123, 122, 122, 122, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 103, 103, 103, 101, 101, 101, 98, 98, 98, 94, 94, 94, 88, 88, 88, 84, 84, 84, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 80, 80, 80, 76, 76, 76, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 66, 66, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 74, 74, 74, 80, 80, 80, 84, 84, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 91, 91, 91, 93, 93, 93, 95, 95, 95, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 130, 130, 130, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 137, 137, 137, 140, 140, 140, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 138, 138, 138, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 126, 126, 126, 124, 124, 124, 121, 121, 121, 117, 117, 117, 114, 114, 114, 111, 111, 111, 110, 110, 110, 108, 108, 108, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 143, 143, 143, 140, 140, 140, 137, 137, 137, 135, 135, 135, 135, 135, 135, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 122, 122, 122, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 114, 114, 114, 110, 110, 110, 106, 106, 106, 102, 102, 102, 98, 98, 98, 94, 94, 94, 89, 89, 89, 85, 85, 85, 83, 83, 83, 83, 83, 83, 83, 83, 83, 82, 82, 82, 78, 78, 78, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 63, 63, 63, 62, 62, 62, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 75, 75, 75, 80, 80, 80, 84, 84, 84, 84, 84, 84, 85, 85, 85, 87, 87, 87, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 101, 101, 101, 104, 104, 104, 107, 107, 107, 116, 116, 116, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 136, 136, 136, 133, 133, 133, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 126, 126, 126, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 132, 132, 132, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 113, 113, 113, 108, 108, 108, 102, 102, 102, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 84, 84, 84, 83, 83, 83, 83, 83, 83, 81, 81, 81, 77, 77, 77, 73, 73, 73, 69, 69, 69, 67, 67, 67, 66, 66, 66, 64, 64, 64, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, 70, 70, 70, 75, 75, 75, 79, 79, 79, 82, 82, 82, 83, 83, 83, 84, 84, 84, 86, 86, 86, 89, 89, 89, 92, 92, 92, 96, 96, 96, 99, 99, 99, 104, 104, 104, 107, 107, 107, 111, 111, 111, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 145, 145, 145, 139, 139, 139, 134, 134, 134, 131, 131, 131, 130, 130, 130, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 117, 117, 117, 119, 119, 119, 123, 123, 123, 127, 127, 127, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 133, 133, 133, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 109, 109, 109, 102, 102, 102, 97, 97, 97, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 84, 84, 84, 84, 84, 84, 82, 82, 82, 78, 78, 78, 74, 74, 74, 70, 70, 70, 68, 68, 68, 68, 68, 68, 67, 67, 67, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 69, 69, 69, 74, 74, 74, 78, 78, 78, 81, 81, 81, 82, 82, 82, 84, 84, 84, 87, 87, 87, 90, 90, 90, 94, 94, 94, 98, 98, 98, 103, 103, 103, 107, 107, 107, 110, 110, 110, 113, 113, 113, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 122, 122, 122, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 135, 135, 135, 136, 136, 136, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 152, 152, 152, 148, 148, 148, 142, 142, 142, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 105, 105, 105, 109, 109, 109, 113, 113, 113, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 121, 121, 121, 126, 126, 126, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 129, 129, 129, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 92, 92, 92, 90, 90, 90, 88, 88, 88, 87, 87, 87, 86, 86, 86, 84, 84, 84, 80, 80, 80, 75, 75, 75, 71, 71, 71, 69, 69, 69, 69, 69, 69, 68, 68, 68, 67, 67, 67, 65, 65, 65, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 65, 65, 65, 69, 69, 69, 74, 74, 74, 78, 78, 78, 80, 80, 80, 82, 82, 82, 85, 85, 85, 87, 87, 87, 91, 91, 91, 95, 95, 95, 100, 100, 100, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 120, 120, 120, 120, 120, 120, 122, 122, 122, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 152, 152, 152, 146, 146, 146, 140, 140, 140, 135, 135, 135, 132, 132, 132, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 122, 122, 122, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 114, 114, 114, 111, 111, 111, 108, 108, 108, 105, 105, 105, 103, 103, 103, 102, 102, 102, 103, 103, 103, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 117, 117, 117, 119, 119, 119, 124, 124, 124, 128, 128, 128, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 104, 104, 104, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 91, 91, 91, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 73, 73, 73, 70, 70, 70, 68, 68, 68, 67, 67, 67, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 69, 69, 69, 74, 74, 74, 77, 77, 77, 79, 79, 79, 81, 81, 81, 83, 83, 83, 87, 87, 87, 91, 91, 91, 96, 96, 96, 100, 100, 100, 104, 104, 104, 107, 107, 107, 110, 110, 110, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 124, 124, 124, 126, 126, 126, 126, 126, 126, 125, 125, 125, 124, 124, 124, 126, 126, 126, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 159, 159, 159, 155, 155, 155, 149, 149, 149, 143, 143, 143, 137, 137, 137, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 139, 139, 139, 137, 137, 137, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 103, 103, 103, 101, 101, 101, 100, 100, 100, 102, 102, 102, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 118, 118, 118, 117, 117, 117, 118, 118, 118, 122, 122, 122, 127, 127, 127, 129, 129, 129, 131, 131, 131, 134, 134, 134, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 135, 135, 135, 135, 135, 135, 133, 133, 133, 130, 130, 130, 127, 127, 127, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 88, 88, 88, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 67, 67, 67, 65, 65, 65, 62, 62, 62, 59, 59, 59, 58, 58, 58, 58, 58, 58, 59, 59, 59, 61, 61, 61, 62, 62, 62, 64, 64, 64, 69, 69, 69, 74, 74, 74, 76, 76, 76, 76, 76, 76, 77, 77, 77, 80, 80, 80, 85, 85, 85, 90, 90, 90, 94, 94, 94, 98, 98, 98, 102, 102, 102, 106, 106, 106, 110, 110, 110, 115, 115, 115, 110, 110, 110, 110, 110, 110, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 124, 124, 124, 123, 123, 123, 125, 125, 125, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 163, 163, 163, 162, 162, 162, 157, 157, 157, 151, 151, 151, 145, 145, 145, 139, 139, 139, 135, 135, 135, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 116, 116, 116, 112, 112, 112, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 100, 100, 100, 100, 100, 100, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 113, 113, 113, 118, 118, 118, 120, 120, 120, 118, 118, 118, 117, 117, 117, 117, 117, 117, 120, 120, 120, 125, 125, 125, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 134, 134, 134, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 119, 119, 119, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 100, 100, 100, 95, 95, 95, 89, 89, 89, 83, 83, 83, 79, 79, 79, 76, 76, 76, 72, 72, 72, 68, 68, 68, 63, 63, 63, 60, 60, 60, 57, 57, 57, 55, 55, 55, 55, 55, 55, 57, 57, 57, 59, 59, 59, 62, 62, 62, 65, 65, 65, 69, 69, 69, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 77, 77, 77, 82, 82, 82, 88, 88, 88, 92, 92, 92, 96, 96, 96, 100, 100, 100, 104, 104, 104, 109, 109, 109, 115, 115, 115, 109, 109, 109, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 128, 128, 128, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 142, 142, 142, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 144, 144, 144, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 152, 152, 152, 151, 151, 151, 153, 153, 153, 156, 156, 156, 159, 159, 159, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 163, 163, 163, 159, 159, 159, 153, 153, 153, 146, 146, 146, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 134, 134, 134, 130, 130, 130, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 118, 118, 118, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 102, 102, 102, 100, 100, 100, 101, 101, 101, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 132, 132, 132, 136, 136, 136, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 133, 133, 133, 134, 134, 134, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 135, 135, 135, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 128, 128, 128, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 103, 103, 103, 98, 98, 98, 92, 92, 92, 85, 85, 85, 80, 80, 80, 77, 77, 77, 73, 73, 73, 69, 69, 69, 64, 64, 64, 59, 59, 59, 55, 55, 55, 53, 53, 53, 53, 53, 53, 55, 55, 55, 58, 58, 58, 62, 62, 62, 65, 65, 65, 69, 69, 69, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 80, 80, 80, 85, 85, 85, 90, 90, 90, 93, 93, 93, 97, 97, 97, 102, 102, 102, 107, 107, 107, 113, 113, 113, 110, 110, 110, 111, 111, 111, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 127, 127, 127, 125, 125, 125, 125, 125, 125, 127, 127, 127, 131, 131, 131, 135, 135, 135, 138, 138, 138, 141, 141, 141, 144, 144, 144, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 148, 148, 148, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 157, 157, 157, 161, 161, 161, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 165, 165, 165, 166, 166, 166, 166, 166, 166, 164, 164, 164, 159, 159, 159, 154, 154, 154, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 139, 139, 139, 136, 136, 136, 132, 132, 132, 130, 130, 130, 131, 131, 131, 131, 131, 131, 129, 129, 129, 125, 125, 125, 122, 122, 122, 120, 120, 120, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 133, 133, 133, 136, 136, 136, 136, 136, 136, 134, 134, 134, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 134, 134, 134, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, 120, 120, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 102, 102, 102, 96, 96, 96, 90, 90, 90, 84, 84, 84, 79, 79, 79, 75, 75, 75, 70, 70, 70, 64, 64, 64, 58, 58, 58, 53, 53, 53, 51, 51, 51, 52, 52, 52, 54, 54, 54, 57, 57, 57, 60, 60, 60, 64, 64, 64, 67, 67, 67, 71, 71, 71, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 79, 79, 79, 83, 83, 83, 88, 88, 88, 92, 92, 92, 95, 95, 95, 99, 99, 99, 105, 105, 105, 110, 110, 110, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 129, 129, 129, 133, 133, 133, 137, 137, 137, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 125, 125, 125, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 136, 136, 136, 135, 135, 135, 134, 134, 134, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 110, 110, 110, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 94, 94, 94, 88, 88, 88, 82, 82, 82, 77, 77, 77, 72, 72, 72, 65, 65, 65, 58, 58, 58, 53, 53, 53, 52, 52, 52, 52, 52, 52, 54, 54, 54, 56, 56, 56, 58, 58, 58, 62, 62, 62, 65, 65, 65, 70, 70, 70, 75, 75, 75, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 82, 82, 82, 87, 87, 87, 91, 91, 91, 94, 94, 94, 98, 98, 98, 103, 103, 103, 108, 108, 108, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 149, 149, 149, 152, 152, 152, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 168, 168, 168, 169, 169, 169, 169, 169, 169, 168, 168, 168, 167, 167, 167, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 163, 163, 163, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 135, 135, 135, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 106, 106, 106, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 123, 123, 123, 124, 124, 124, 126, 126, 126, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144, 144, 140, 140, 140, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 130, 130, 130, 127, 127, 127, 124, 124, 124, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 109, 109, 109, 108, 108, 108, 106, 106, 106, 103, 103, 103, 97, 97, 97, 91, 91, 91, 85, 85, 85, 80, 80, 80, 74, 74, 74, 67, 67, 67, 60, 60, 60, 56, 56, 56, 54, 54, 54, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 60, 60, 60, 64, 64, 64, 69, 69, 69, 74, 74, 74, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 81, 81, 81, 85, 85, 85, 90, 90, 90, 93, 93, 93, 97, 97, 97, 101, 101, 101, 107, 107, 107, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 147, 147, 147, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 148, 148, 148, 149, 149, 149, 150, 150, 150, 149, 149, 149, 150, 150, 150, 153, 153, 153, 157, 157, 157, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 169, 169, 169, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 138, 138, 138, 135, 135, 135, 132, 132, 132, 130, 130, 130, 127, 127, 127, 124, 124, 124, 119, 119, 119, 116, 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 108, 108, 108, 110, 110, 110, 114, 114, 114, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 146, 146, 146, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 130, 130, 130, 130, 130, 130, 129, 129, 129, 126, 126, 126, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 132, 132, 132, 136, 136, 136, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 121, 121, 121, 119, 119, 119, 117, 117, 117, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 108, 108, 108, 104, 104, 104, 99, 99, 99, 93, 93, 93, 88, 88, 88, 82, 82, 82, 77, 77, 77, 70, 70, 70, 64, 64, 64, 60, 60, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 62, 62, 62, 66, 66, 66, 70, 70, 70, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 79, 79, 79, 83, 83, 83, 88, 88, 88, 91, 91, 91, 94, 94, 94, 99, 99, 99, 104, 104, 104, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 139, 139, 139, 143, 143, 143, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 158, 158, 158, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 170, 170, 170, 167, 167, 167, 163, 163, 163, 162, 162, 162, 162, 162, 162, 160, 160, 160, 157, 157, 157, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 137, 137, 137, 134, 134, 134, 130, 130, 130, 128, 128, 128, 127, 127, 127, 123, 123, 123, 119, 119, 119, 117, 117, 117, 118, 118, 118, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 142, 142, 142, 144, 144, 144, 147, 147, 147, 152, 152, 152, 156, 156, 156, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 161, 161, 161, 157, 157, 157, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 128, 128, 128, 125, 125, 125, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 132, 132, 132, 137, 137, 137, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 115, 115, 115, 111, 111, 111, 107, 107, 107, 102, 102, 102, 96, 96, 96, 91, 91, 91, 85, 85, 85, 80, 80, 80, 74, 74, 74, 69, 69, 69, 66, 66, 66, 64, 64, 64, 62, 62, 62, 60, 60, 60, 61, 61, 61, 63, 63, 63, 66, 66, 66, 69, 69, 69, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 77, 77, 77, 81, 81, 81, 84, 84, 84, 88, 88, 88, 91, 91, 91, 95, 95, 95, 100, 100, 100, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 144, 144, 144, 148, 148, 148, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 147, 147, 147, 151, 151, 151, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 158, 158, 158, 161, 161, 161, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 167, 167, 167, 169, 169, 169, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 160, 160, 160, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 140, 140, 140, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 120, 120, 120, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 117, 117, 117, 119, 119, 119, 122, 122, 122, 124, 124, 124, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 135, 135, 135, 139, 139, 139, 142, 142, 142, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 151, 151, 151, 155, 155, 155, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 165, 165, 165, 161, 161, 161, 156, 156, 156, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 121, 121, 121, 123, 123, 123, 125, 125, 125, 129, 129, 129, 133, 133, 133, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 121, 121, 121, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 94, 94, 94, 88, 88, 88, 82, 82, 82, 77, 77, 77, 73, 73, 73, 70, 70, 70, 68, 68, 68, 65, 65, 65, 62, 62, 62, 63, 63, 63, 65, 65, 65, 68, 68, 68, 71, 71, 71, 74, 74, 74, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 74, 74, 74, 76, 76, 76, 78, 78, 78, 80, 80, 80, 83, 83, 83, 86, 86, 86, 89, 89, 89, 94, 94, 94, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 153, 153, 153, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 161, 161, 161, 159, 159, 159, 159, 159, 159, 159, 159, 159, 157, 157, 157, 153, 153, 153, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 125, 125, 125, 122, 122, 122, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 138, 138, 138, 143, 143, 143, 146, 146, 146, 146, 146, 146, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 157, 157, 157, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 173, 173, 173, 172, 172, 172, 169, 169, 169, 164, 164, 164, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 145, 145, 145, 146, 146, 146, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 137, 137, 137, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 112, 112, 112, 105, 105, 105, 98, 98, 98, 91, 91, 91, 85, 85, 85, 80, 80, 80, 77, 77, 77, 75, 75, 75, 72, 72, 72, 68, 68, 68, 65, 65, 65, 64, 64, 64, 66, 66, 66, 69, 69, 69, 71, 71, 71, 72, 72, 72, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 79, 79, 79, 82, 82, 82, 87, 87, 87, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 145, 145, 145, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 155, 155, 155, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 127, 127, 127, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 132, 132, 132, 133, 133, 133, 137, 137, 137, 142, 142, 142, 147, 147, 147, 150, 150, 150, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 159, 159, 159, 163, 163, 163, 166, 166, 166, 170, 170, 170, 173, 173, 173, 175, 175, 175, 177, 177, 177, 177, 177, 177, 176, 176, 176, 173, 173, 173, 168, 168, 168, 162, 162, 162, 158, 158, 158, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 143, 143, 143, 140, 140, 140, 138, 138, 138, 136, 136, 136, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 136, 136, 136, 134, 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 121, 121, 121, 116, 116, 116, 109, 109, 109, 101, 101, 101, 93, 93, 93, 87, 87, 87, 83, 83, 83, 80, 80, 80, 78, 78, 78, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 73, 73, 73, 76, 76, 76, 82, 82, 82, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 154, 154, 154, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 140, 140, 140, 141, 141, 141, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 149, 149, 149, 153, 153, 153, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 156, 156, 156, 160, 160, 160, 163, 163, 163, 166, 166, 166, 170, 170, 170, 174, 174, 174, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 176, 176, 176, 170, 170, 170, 165, 165, 165, 160, 160, 160, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 153, 153, 153, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 139, 139, 139, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 139, 139, 139, 138, 138, 138, 134, 134, 134, 129, 129, 129, 125, 125, 125, 121, 121, 121, 117, 117, 117, 110, 110, 110, 102, 102, 102, 95, 95, 95, 89, 89, 89, 85, 85, 85, 82, 82, 82, 81, 81, 81, 79, 79, 79, 76, 76, 76, 72, 72, 72, 69, 69, 69, 67, 67, 67, 66, 66, 66, 65, 65, 65, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 65, 65, 65, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 68, 68, 68, 72, 72, 72, 79, 79, 79, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 138, 138, 138, 141, 141, 141, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 147, 147, 147, 144, 144, 144, 139, 139, 139, 135, 135, 135, 132, 132, 132, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 157, 157, 157, 161, 161, 161, 164, 164, 164, 168, 168, 168, 173, 173, 173, 178, 178, 178, 182, 182, 182, 183, 183, 183, 184, 184, 184, 183, 183, 183, 181, 181, 181, 177, 177, 177, 172, 172, 172, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 142, 142, 142, 146, 146, 146, 152, 152, 152, 157, 157, 157, 161, 161, 161, 162, 162, 162, 160, 160, 160, 158, 158, 158, 156, 156, 156, 154, 154, 154, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 137, 137, 137, 131, 131, 131, 125, 125, 125, 121, 121, 121, 117, 117, 117, 110, 110, 110, 103, 103, 103, 96, 96, 96, 90, 90, 90, 87, 87, 87, 84, 84, 84, 82, 82, 82, 79, 79, 79, 77, 77, 77, 73, 73, 73, 70, 70, 70, 67, 67, 67, 65, 65, 65, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 63, 63, 63, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 66, 66, 66, 72, 72, 72, 78, 78, 78, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 142, 142, 142, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 145, 145, 145, 141, 141, 141, 136, 136, 136, 131, 131, 131, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 152, 152, 152, 154, 154, 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 143, 143, 143, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 131, 131, 131, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 151, 151, 151, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 154, 154, 154, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 170, 170, 170, 175, 175, 175, 180, 180, 180, 183, 183, 183, 184, 184, 184, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 173, 173, 173, 168, 168, 168, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 141, 141, 141, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 149, 149, 149, 154, 154, 154, 159, 159, 159, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 139, 139, 139, 133, 133, 133, 126, 126, 126, 121, 121, 121, 116, 116, 116, 110, 110, 110, 103, 103, 103, 96, 96, 96, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 79, 79, 79, 75, 75, 75, 71, 71, 71, 67, 67, 67, 65, 65, 65, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 63, 63, 63, 61, 61, 61, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 62, 62, 62, 66, 66, 66, 72, 72, 72, 79, 79, 79, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 146, 146, 146, 145, 145, 145, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 130, 130, 130, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 140, 140, 140, 145, 145, 145, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 153, 153, 153, 152, 152, 152, 151, 151, 151, 149, 149, 149, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 143, 143, 143, 146, 146, 146, 149, 149, 149, 152, 152, 152, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 162, 162, 162, 165, 165, 165, 168, 168, 168, 172, 172, 172, 177, 177, 177, 180, 180, 180, 182, 182, 182, 182, 182, 182, 183, 183, 183, 182, 182, 182, 180, 180, 180, 177, 177, 177, 174, 174, 174, 170, 170, 170, 167, 167, 167, 164, 164, 164, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 150, 150, 150, 148, 148, 148, 146, 146, 146, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 146, 146, 146, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 153, 153, 153, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 168, 168, 168, 167, 167, 167, 165, 165, 165, 163, 163, 163, 160, 160, 160, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 134, 134, 134, 127, 127, 127, 121, 121, 121, 116, 116, 116, 110, 110, 110, 104, 104, 104, 97, 97, 97, 92, 92, 92, 89, 89, 89, 86, 86, 86, 82, 82, 82, 77, 77, 77, 71, 71, 71, 66, 66, 66, 63, 63, 63, 61, 61, 61, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 62, 62, 62, 59, 59, 59, 56, 56, 56, 55, 55, 55, 56, 56, 56, 58, 58, 58, 60, 60, 60, 63, 63, 63, 68, 68, 68, 73, 73, 73, 79, 79, 79, 160, 160, 160, 157, 157, 157, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 124, 124, 124, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 129, 129, 129, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 135, 135, 135, 140, 140, 140, 146, 146, 146, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 136, 136, 136, 133, 133, 133, 130, 130, 130, 130, 130, 130, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 169, 169, 169, 173, 173, 173, 176, 176, 176, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 146, 146, 146, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 155, 155, 155, 157, 157, 157, 158, 158, 158, 157, 157, 157, 157, 157, 157, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 170, 170, 170, 170, 170, 170, 169, 169, 169, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 147, 147, 147, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 141, 141, 141, 139, 139, 139, 134, 134, 134, 128, 128, 128, 122, 122, 122, 117, 117, 117, 112, 112, 112, 105, 105, 105, 98, 98, 98, 92, 92, 92, 88, 88, 88, 84, 84, 84, 80, 80, 80, 74, 74, 74, 68, 68, 68, 62, 62, 62, 59, 59, 59, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 61, 61, 61, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 59, 59, 59, 63, 63, 63, 66, 66, 66, 71, 71, 71, 75, 75, 75, 79, 79, 79, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 136, 136, 136, 131, 131, 131, 127, 127, 127, 124, 124, 124, 123, 123, 123, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 132, 132, 132, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 119, 119, 119, 120, 120, 120, 122, 122, 122, 124, 124, 124, 126, 126, 126, 129, 129, 129, 134, 134, 134, 141, 141, 141, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 130, 130, 130, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 137, 137, 137, 140, 140, 140, 142, 142, 142, 143, 143, 143, 145, 145, 145, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 166, 166, 166, 168, 168, 168, 171, 171, 171, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 178, 178, 178, 176, 176, 176, 174, 174, 174, 173, 173, 173, 171, 171, 171, 168, 168, 168, 165, 165, 165, 161, 161, 161, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 155, 155, 155, 157, 157, 157, 159, 159, 159, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 172, 172, 172, 169, 169, 169, 166, 166, 166, 162, 162, 162, 157, 157, 157, 153, 153, 153, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 120, 120, 120, 115, 115, 115, 108, 108, 108, 99, 99, 99, 92, 92, 92, 87, 87, 87, 83, 83, 83, 78, 78, 78, 72, 72, 72, 65, 65, 65, 60, 60, 60, 57, 57, 57, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 60, 60, 60, 58, 58, 58, 55, 55, 55, 54, 54, 54, 55, 55, 55, 60, 60, 60, 65, 65, 65, 69, 69, 69, 73, 73, 73, 77, 77, 77, 79, 79, 79, 156, 156, 156, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 143, 143, 143, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 128, 128, 128, 124, 124, 124, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 119, 119, 119, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 137, 137, 137, 143, 143, 143, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 147, 147, 147, 143, 143, 143, 139, 139, 139, 138, 138, 138, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 134, 134, 134, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 132, 132, 132, 134, 134, 134, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 132, 132, 132, 133, 133, 133, 136, 136, 136, 140, 140, 140, 143, 143, 143, 146, 146, 146, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, 166, 166, 166, 169, 169, 169, 173, 173, 173, 175, 175, 175, 176, 176, 176, 176, 176, 176, 178, 178, 178, 180, 180, 180, 181, 181, 181, 181, 181, 181, 178, 178, 178, 176, 176, 176, 175, 175, 175, 173, 173, 173, 171, 171, 171, 168, 168, 168, 164, 164, 164, 159, 159, 159, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 160, 160, 160, 161, 161, 161, 163, 163, 163, 165, 165, 165, 165, 165, 165, 166, 166, 166, 168, 168, 168, 171, 171, 171, 173, 173, 173, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 172, 172, 172, 168, 168, 168, 163, 163, 163, 158, 158, 158, 154, 154, 154, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 123, 123, 123, 118, 118, 118, 110, 110, 110, 101, 101, 101, 94, 94, 94, 88, 88, 88, 84, 84, 84, 79, 79, 79, 72, 72, 72, 66, 66, 66, 60, 60, 60, 57, 57, 57, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 58, 58, 58, 58, 58, 58, 57, 57, 57, 55, 55, 55, 54, 54, 54, 55, 55, 55, 59, 59, 59, 64, 64, 64, 69, 69, 69, 74, 74, 74, 77, 77, 77, 79, 79, 79, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 145, 145, 145, 140, 140, 140, 135, 135, 135, 133, 133, 133, 132, 132, 132, 132, 132, 132, 129, 129, 129, 125, 125, 125, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 126, 126, 126, 122, 122, 122, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 118, 118, 118, 120, 120, 120, 122, 122, 122, 125, 125, 125, 129, 129, 129, 135, 135, 135, 140, 140, 140, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 141, 141, 141, 137, 137, 137, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 135, 135, 135, 133, 133, 133, 131, 131, 131, 131, 131, 131, 134, 134, 134, 139, 139, 139, 143, 143, 143, 148, 148, 148, 152, 152, 152, 156, 156, 156, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 162, 162, 162, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 163, 163, 163, 165, 165, 165, 168, 168, 168, 173, 173, 173, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 182, 182, 182, 184, 184, 184, 183, 183, 183, 181, 181, 181, 178, 178, 178, 176, 176, 176, 175, 175, 175, 172, 172, 172, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 177, 177, 177, 173, 173, 173, 168, 168, 168, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 152, 152, 152, 149, 149, 149, 145, 145, 145, 142, 142, 142, 142, 142, 142, 143, 143, 143, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 111, 111, 111, 103, 103, 103, 97, 97, 97, 92, 92, 92, 87, 87, 87, 82, 82, 82, 75, 75, 75, 68, 68, 68, 62, 62, 62, 57, 57, 57, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 55, 55, 55, 56, 56, 56, 56, 56, 56, 55, 55, 55, 53, 53, 53, 54, 54, 54, 58, 58, 58, 63, 63, 63, 68, 68, 68, 74, 74, 74, 77, 77, 77, 79, 79, 79, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 142, 142, 142, 136, 136, 136, 131, 131, 131, 127, 127, 127, 126, 126, 126, 126, 126, 126, 124, 124, 124, 120, 120, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 125, 125, 125, 124, 124, 124, 121, 121, 121, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 121, 121, 121, 124, 124, 124, 128, 128, 128, 133, 133, 133, 137, 137, 137, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 131, 131, 131, 133, 133, 133, 138, 138, 138, 143, 143, 143, 149, 149, 149, 153, 153, 153, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 161, 161, 161, 162, 162, 162, 165, 165, 165, 169, 169, 169, 173, 173, 173, 178, 178, 178, 180, 180, 180, 180, 180, 180, 181, 181, 181, 184, 184, 184, 186, 186, 186, 186, 186, 186, 183, 183, 183, 180, 180, 180, 178, 178, 178, 175, 175, 175, 172, 172, 172, 168, 168, 168, 165, 165, 165, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 157, 157, 157, 160, 160, 160, 163, 163, 163, 166, 166, 166, 168, 168, 168, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 173, 173, 173, 174, 174, 174, 176, 176, 176, 178, 178, 178, 178, 178, 178, 177, 177, 177, 174, 174, 174, 170, 170, 170, 166, 166, 166, 164, 164, 164, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 151, 151, 151, 146, 146, 146, 143, 143, 143, 142, 142, 142, 143, 143, 143, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 125, 125, 125, 119, 119, 119, 111, 111, 111, 104, 104, 104, 100, 100, 100, 96, 96, 96, 91, 91, 91, 85, 85, 85, 79, 79, 79, 72, 72, 72, 65, 65, 65, 59, 59, 59, 55, 55, 55, 52, 52, 52, 51, 51, 51, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 54, 54, 54, 53, 53, 53, 54, 54, 54, 58, 58, 58, 63, 63, 63, 68, 68, 68, 73, 73, 73, 76, 76, 76, 78, 78, 78, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 137, 137, 137, 132, 132, 132, 126, 126, 126, 122, 122, 122, 120, 120, 120, 119, 119, 119, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 126, 126, 126, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 139, 139, 139, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 130, 130, 130, 131, 131, 131, 134, 134, 134, 139, 139, 139, 144, 144, 144, 149, 149, 149, 152, 152, 152, 155, 155, 155, 156, 156, 156, 157, 157, 157, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 160, 160, 160, 162, 162, 162, 163, 163, 163, 166, 166, 166, 169, 169, 169, 174, 174, 174, 179, 179, 179, 182, 182, 182, 183, 183, 183, 183, 183, 183, 186, 186, 186, 187, 187, 187, 187, 187, 187, 184, 184, 184, 182, 182, 182, 179, 179, 179, 177, 177, 177, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 173, 173, 173, 174, 174, 174, 175, 175, 175, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 163, 163, 163, 161, 161, 161, 161, 161, 161, 161, 161, 161, 159, 159, 159, 156, 156, 156, 152, 152, 152, 148, 148, 148, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 138, 138, 138, 134, 134, 134, 131, 131, 131, 128, 128, 128, 124, 124, 124, 118, 118, 118, 111, 111, 111, 105, 105, 105, 102, 102, 102, 98, 98, 98, 93, 93, 93, 87, 87, 87, 81, 81, 81, 74, 74, 74, 67, 67, 67, 60, 60, 60, 56, 56, 56, 54, 54, 54, 52, 52, 52, 49, 49, 49, 49, 49, 49, 50, 50, 50, 52, 52, 52, 53, 53, 53, 53, 53, 53, 55, 55, 55, 59, 59, 59, 63, 63, 63, 67, 67, 67, 71, 71, 71, 74, 74, 74, 77, 77, 77, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 148, 148, 148, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 115, 115, 115, 116, 116, 116, 118, 118, 118, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 119, 119, 119, 122, 122, 122, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 140, 140, 140, 135, 135, 135, 132, 132, 132, 131, 131, 131, 131, 131, 131, 129, 129, 129, 127, 127, 127, 126, 126, 126, 127, 127, 127, 129, 129, 129, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 131, 131, 131, 135, 135, 135, 140, 140, 140, 145, 145, 145, 149, 149, 149, 152, 152, 152, 154, 154, 154, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 167, 167, 167, 170, 170, 170, 175, 175, 175, 180, 180, 180, 183, 183, 183, 184, 184, 184, 184, 184, 184, 186, 186, 186, 186, 186, 186, 185, 185, 185, 184, 184, 184, 182, 182, 182, 180, 180, 180, 178, 178, 178, 175, 175, 175, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 162, 162, 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 155, 155, 155, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 174, 174, 174, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 159, 159, 159, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 155, 155, 155, 152, 152, 152, 148, 148, 148, 144, 144, 144, 141, 141, 141, 140, 140, 140, 138, 138, 138, 135, 135, 135, 131, 131, 131, 128, 128, 128, 126, 126, 126, 123, 123, 123, 118, 118, 118, 111, 111, 111, 106, 106, 106, 103, 103, 103, 99, 99, 99, 93, 93, 93, 87, 87, 87, 81, 81, 81, 74, 74, 74, 66, 66, 66, 60, 60, 60, 56, 56, 56, 54, 54, 54, 52, 52, 52, 48, 48, 48, 46, 46, 46, 46, 46, 46, 49, 49, 49, 51, 51, 51, 53, 53, 53, 55, 55, 55, 59, 59, 59, 63, 63, 63, 65, 65, 65, 68, 68, 68, 72, 72, 72, 76, 76, 76, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 127, 127, 127, 122, 122, 122, 116, 116, 116, 111, 111, 111, 107, 107, 107, 105, 105, 105, 105, 105, 105, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 117, 117, 117, 120, 120, 120, 122, 122, 122, 124, 124, 124, 127, 127, 127, 132, 132, 132, 135, 135, 135, 138, 138, 138, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 130, 130, 130, 134, 134, 134, 140, 140, 140, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 158, 158, 158, 159, 159, 159, 158, 158, 158, 158, 158, 158, 159, 159, 159, 161, 161, 161, 163, 163, 163, 165, 165, 165, 167, 167, 167, 169, 169, 169, 172, 172, 172, 177, 177, 177, 182, 182, 182, 184, 184, 184, 185, 185, 185, 185, 185, 185, 186, 186, 186, 185, 185, 185, 183, 183, 183, 181, 181, 181, 181, 181, 181, 180, 180, 180, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 158, 158, 158, 156, 156, 156, 156, 156, 156, 159, 159, 159, 162, 162, 162, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 167, 167, 167, 162, 162, 162, 159, 159, 159, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 138, 138, 138, 134, 134, 134, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 116, 116, 116, 110, 110, 110, 106, 106, 106, 102, 102, 102, 97, 97, 97, 90, 90, 90, 84, 84, 84, 79, 79, 79, 73, 73, 73, 65, 65, 65, 58, 58, 58, 55, 55, 55, 53, 53, 53, 51, 51, 51, 47, 47, 47, 44, 44, 44, 44, 44, 44, 46, 46, 46, 48, 48, 48, 51, 51, 51, 54, 54, 54, 58, 58, 58, 61, 61, 61, 63, 63, 63, 66, 66, 66, 71, 71, 71, 76, 76, 76, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 151, 151, 151, 148, 148, 148, 144, 144, 144, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 140, 140, 140, 140, 140, 140, 138, 138, 138, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 112, 112, 112, 106, 106, 106, 101, 101, 101, 100, 100, 100, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 114, 114, 114, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 136, 136, 136, 139, 139, 139, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 132, 132, 132, 127, 127, 127, 123, 123, 123, 122, 122, 122, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 123, 123, 123, 120, 120, 120, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 122, 122, 122, 124, 124, 124, 128, 128, 128, 133, 133, 133, 138, 138, 138, 142, 142, 142, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 154, 154, 154, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 168, 168, 168, 170, 170, 170, 174, 174, 174, 179, 179, 179, 184, 184, 184, 186, 186, 186, 187, 187, 187, 188, 188, 188, 187, 187, 187, 185, 185, 185, 182, 182, 182, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 172, 172, 172, 169, 169, 169, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 166, 166, 166, 164, 164, 164, 164, 164, 164, 164, 164, 164, 163, 163, 163, 161, 161, 161, 158, 158, 158, 156, 156, 156, 158, 158, 158, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 167, 167, 167, 165, 165, 165, 161, 161, 161, 158, 158, 158, 155, 155, 155, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 101, 101, 101, 94, 94, 94, 86, 86, 86, 81, 81, 81, 76, 76, 76, 71, 71, 71, 64, 64, 64, 57, 57, 57, 53, 53, 53, 52, 52, 52, 50, 50, 50, 46, 46, 46, 43, 43, 43, 43, 43, 43, 44, 44, 44, 46, 46, 46, 49, 49, 49, 53, 53, 53, 57, 57, 57, 60, 60, 60, 62, 62, 62, 65, 65, 65, 72, 72, 72, 78, 78, 78, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 147, 147, 147, 148, 148, 148, 151, 151, 151, 154, 154, 154, 154, 154, 154, 151, 151, 151, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 132, 132, 132, 126, 126, 126, 121, 121, 121, 116, 116, 116, 110, 110, 110, 102, 102, 102, 97, 97, 97, 96, 96, 96, 99, 99, 99, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 130, 130, 130, 125, 125, 125, 121, 121, 121, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 119, 119, 119, 116, 116, 116, 115, 115, 115, 116, 116, 116, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 120, 120, 120, 122, 122, 122, 126, 126, 126, 131, 131, 131, 136, 136, 136, 140, 140, 140, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 153, 153, 153, 156, 156, 156, 160, 160, 160, 164, 164, 164, 167, 167, 167, 171, 171, 171, 177, 177, 177, 182, 182, 182, 187, 187, 187, 190, 190, 190, 191, 191, 191, 191, 191, 191, 189, 189, 189, 186, 186, 186, 182, 182, 182, 179, 179, 179, 178, 178, 178, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 171, 171, 171, 172, 172, 172, 172, 172, 172, 171, 171, 171, 168, 168, 168, 166, 166, 166, 166, 166, 166, 168, 168, 168, 168, 168, 168, 167, 167, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 156, 156, 156, 156, 156, 156, 159, 159, 159, 163, 163, 163, 166, 166, 166, 170, 170, 170, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 165, 165, 165, 163, 163, 163, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 150, 150, 150, 151, 151, 151, 153, 153, 153, 153, 153, 153, 150, 150, 150, 146, 146, 146, 144, 144, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 120, 120, 120, 114, 114, 114, 108, 108, 108, 105, 105, 105, 102, 102, 102, 98, 98, 98, 92, 92, 92, 84, 84, 84, 78, 78, 78, 74, 74, 74, 69, 69, 69, 62, 62, 62, 56, 56, 56, 53, 53, 53, 50, 50, 50, 48, 48, 48, 45, 45, 45, 44, 44, 44, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 52, 52, 52, 56, 56, 56, 60, 60, 60, 62, 62, 62, 67, 67, 67, 73, 73, 73, 79, 79, 79, 158, 158, 158, 155, 155, 155, 152, 152, 152, 150, 150, 150, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 155, 155, 155, 151, 151, 151, 147, 147, 147, 143, 143, 143, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 137, 137, 137, 131, 131, 131, 124, 124, 124, 118, 118, 118, 114, 114, 114, 108, 108, 108, 101, 101, 101, 95, 95, 95, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 99, 99, 99, 99, 99, 99, 100, 100, 100, 102, 102, 102, 105, 105, 105, 109, 109, 109, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 129, 129, 129, 124, 124, 124, 120, 120, 120, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 119, 119, 119, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 122, 122, 122, 126, 126, 126, 131, 131, 131, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 158, 158, 158, 162, 162, 162, 168, 168, 168, 174, 174, 174, 180, 180, 180, 186, 186, 186, 190, 190, 190, 192, 192, 192, 193, 193, 193, 192, 192, 192, 191, 191, 191, 188, 188, 188, 184, 184, 184, 181, 181, 181, 179, 179, 179, 178, 178, 178, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 167, 167, 167, 165, 165, 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 164, 164, 164, 164, 164, 164, 162, 162, 162, 158, 158, 158, 155, 155, 155, 155, 155, 155, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 169, 169, 169, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 152, 152, 152, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 125, 125, 125, 119, 119, 119, 112, 112, 112, 106, 106, 106, 102, 102, 102, 100, 100, 100, 96, 96, 96, 90, 90, 90, 83, 83, 83, 76, 76, 76, 71, 71, 71, 66, 66, 66, 60, 60, 60, 56, 56, 56, 53, 53, 53, 51, 51, 51, 48, 48, 48, 46, 46, 46, 47, 47, 47, 48, 48, 48, 48, 48, 48, 47, 47, 47, 48, 48, 48, 51, 51, 51, 56, 56, 56, 61, 61, 61, 65, 65, 65, 69, 69, 69, 75, 75, 75, 80, 80, 80, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 155, 155, 155, 151, 151, 151, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 136, 136, 136, 130, 130, 130, 123, 123, 123, 117, 117, 117, 111, 111, 111, 106, 106, 106, 100, 100, 100, 94, 94, 94, 91, 91, 91, 92, 92, 92, 95, 95, 95, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 103, 103, 103, 105, 105, 105, 108, 108, 108, 112, 112, 112, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 106, 106, 106, 105, 105, 105, 105, 105, 105, 109, 109, 109, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 131, 131, 131, 134, 134, 134, 137, 137, 137, 139, 139, 139, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 159, 159, 159, 163, 163, 163, 169, 169, 169, 176, 176, 176, 183, 183, 183, 188, 188, 188, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 189, 189, 189, 187, 187, 187, 184, 184, 184, 182, 182, 182, 180, 180, 180, 178, 178, 178, 176, 176, 176, 174, 174, 174, 172, 172, 172, 170, 170, 170, 169, 169, 169, 167, 167, 167, 167, 167, 167, 166, 166, 166, 166, 166, 166, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 160, 160, 160, 156, 156, 156, 153, 153, 153, 153, 153, 153, 155, 155, 155, 158, 158, 158, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 157, 157, 157, 156, 156, 156, 156, 156, 156, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 124, 124, 124, 118, 118, 118, 111, 111, 111, 105, 105, 105, 100, 100, 100, 98, 98, 98, 95, 95, 95, 90, 90, 90, 83, 83, 83, 77, 77, 77, 70, 70, 70, 63, 63, 63, 58, 58, 58, 56, 56, 56, 55, 55, 55, 53, 53, 53, 50, 50, 50, 50, 50, 50, 51, 51, 51, 53, 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 53, 53, 53, 57, 57, 57, 62, 62, 62, 67, 67, 67, 72, 72, 72, 77, 77, 77, 82, 82, 82, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 154, 154, 154, 150, 150, 150, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 136, 136, 136, 130, 130, 130, 123, 123, 123, 116, 116, 116, 110, 110, 110, 105, 105, 105, 100, 100, 100, 95, 95, 95, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 105, 105, 105, 108, 108, 108, 113, 113, 113, 117, 117, 117, 120, 120, 120, 121, 121, 121, 122, 122, 122, 124, 124, 124, 127, 127, 127, 131, 131, 131, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 116, 116, 116, 112, 112, 112, 109, 109, 109, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 104, 104, 104, 108, 108, 108, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 126, 126, 126, 129, 129, 129, 132, 132, 132, 134, 134, 134, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 170, 170, 170, 177, 177, 177, 183, 183, 183, 187, 187, 187, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 186, 186, 186, 184, 184, 184, 182, 182, 182, 181, 181, 181, 180, 180, 180, 178, 178, 178, 175, 175, 175, 173, 173, 173, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 166, 166, 166, 164, 164, 164, 162, 162, 162, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 152, 152, 152, 154, 154, 154, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 168, 168, 168, 167, 167, 167, 163, 163, 163, 159, 159, 159, 157, 157, 157, 156, 156, 156, 155, 155, 155, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 146, 146, 146, 142, 142, 142, 139, 139, 139, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 136, 136, 136, 132, 132, 132, 127, 127, 127, 122, 122, 122, 117, 117, 117, 111, 111, 111, 105, 105, 105, 100, 100, 100, 96, 96, 96, 93, 93, 93, 90, 90, 90, 84, 84, 84, 77, 77, 77, 70, 70, 70, 62, 62, 62, 58, 58, 58, 56, 56, 56, 56, 56, 56, 56, 56, 56, 54, 54, 54, 54, 54, 54, 56, 56, 56, 58, 58, 58, 58, 58, 58, 56, 56, 56, 56, 56, 56, 57, 57, 57, 60, 60, 60, 63, 63, 63, 68, 68, 68, 74, 74, 74, 79, 79, 79, 83, 83, 83, 171, 171, 171, 168, 168, 168, 164, 164, 164, 160, 160, 160, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 134, 134, 134, 129, 129, 129, 123, 123, 123, 117, 117, 117, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 94, 94, 94, 94, 94, 94, 93, 93, 93, 90, 90, 90, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 95, 95, 95, 98, 98, 98, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 103, 103, 103, 107, 107, 107, 111, 111, 111, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 113, 113, 113, 109, 109, 109, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 112, 112, 112, 115, 115, 115, 120, 120, 120, 124, 124, 124, 127, 127, 127, 128, 128, 128, 131, 131, 131, 137, 137, 137, 142, 142, 142, 145, 145, 145, 145, 145, 145, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 158, 158, 158, 162, 162, 162, 166, 166, 166, 171, 171, 171, 176, 176, 176, 182, 182, 182, 185, 185, 185, 187, 187, 187, 187, 187, 187, 187, 187, 187, 186, 186, 186, 184, 184, 184, 182, 182, 182, 180, 180, 180, 179, 179, 179, 179, 179, 179, 177, 177, 177, 176, 176, 176, 174, 174, 174, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 156, 156, 156, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 164, 164, 164, 166, 166, 166, 167, 167, 167, 166, 166, 166, 163, 163, 163, 159, 159, 159, 158, 158, 158, 156, 156, 156, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 137, 137, 137, 138, 138, 138, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 112, 112, 112, 106, 106, 106, 100, 100, 100, 95, 95, 95, 92, 92, 92, 88, 88, 88, 84, 84, 84, 78, 78, 78, 71, 71, 71, 64, 64, 64, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 58, 58, 58, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, 64, 64, 64, 68, 68, 68, 74, 74, 74, 79, 79, 79, 84, 84, 84, 173, 173, 173, 171, 171, 171, 167, 167, 167, 163, 163, 163, 161, 161, 161, 158, 158, 158, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 138, 138, 138, 135, 135, 135, 130, 130, 130, 124, 124, 124, 118, 118, 118, 114, 114, 114, 109, 109, 109, 104, 104, 104, 100, 100, 100, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 91, 91, 91, 89, 89, 89, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 96, 96, 96, 100, 100, 100, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 106, 106, 106, 104, 104, 104, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 115, 115, 115, 117, 117, 117, 121, 121, 121, 124, 124, 124, 125, 125, 125, 123, 123, 123, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 114, 113, 113, 113, 111, 111, 111, 107, 107, 107, 103, 103, 103, 99, 99, 99, 98, 98, 98, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 100, 100, 100, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 114, 114, 114, 118, 118, 118, 122, 122, 122, 125, 125, 125, 126, 126, 126, 129, 129, 129, 135, 135, 135, 142, 142, 142, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 166, 166, 166, 171, 171, 171, 177, 177, 177, 181, 181, 181, 184, 184, 184, 185, 185, 185, 186, 186, 186, 186, 186, 186, 185, 185, 185, 183, 183, 183, 180, 180, 180, 179, 179, 179, 178, 178, 178, 178, 178, 178, 177, 177, 177, 176, 176, 176, 175, 175, 175, 173, 173, 173, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, 163, 159, 159, 159, 156, 156, 156, 153, 153, 153, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 155, 155, 155, 154, 154, 154, 154, 154, 154, 155, 155, 155, 157, 157, 157, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 164, 165, 165, 165, 164, 164, 164, 162, 162, 162, 159, 159, 159, 158, 158, 158, 156, 156, 156, 152, 152, 152, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 133, 133, 133, 136, 136, 136, 137, 137, 137, 136, 136, 136, 131, 131, 131, 126, 126, 126, 121, 121, 121, 118, 118, 118, 113, 113, 113, 106, 106, 106, 99, 99, 99, 94, 94, 94, 91, 91, 91, 88, 88, 88, 83, 83, 83, 78, 78, 78, 73, 73, 73, 67, 67, 67, 63, 63, 63, 61, 61, 61, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 67, 67, 67, 66, 66, 66, 69, 69, 69, 73, 73, 73, 78, 78, 78, 82, 82, 82, 175, 175, 175, 173, 173, 173, 170, 170, 170, 167, 167, 167, 164, 164, 164, 161, 161, 161, 157, 157, 157, 153, 153, 153, 149, 149, 149, 145, 145, 145, 141, 141, 141, 139, 139, 139, 138, 138, 138, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 141, 141, 141, 137, 137, 137, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 112, 112, 112, 107, 107, 107, 102, 102, 102, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 90, 90, 90, 90, 90, 90, 91, 91, 91, 93, 93, 93, 93, 93, 93, 92, 92, 92, 93, 93, 93, 96, 96, 96, 101, 101, 101, 104, 104, 104, 105, 105, 105, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 112, 112, 112, 115, 115, 115, 118, 118, 118, 121, 121, 121, 121, 121, 121, 119, 119, 119, 115, 115, 115, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 110, 110, 110, 106, 106, 106, 101, 101, 101, 97, 97, 97, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 103, 103, 103, 107, 107, 107, 109, 109, 109, 111, 111, 111, 113, 113, 113, 117, 117, 117, 121, 121, 121, 123, 123, 123, 125, 125, 125, 128, 128, 128, 134, 134, 134, 140, 140, 140, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 156, 156, 156, 161, 161, 161, 167, 167, 167, 173, 173, 173, 178, 178, 178, 181, 181, 181, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 183, 183, 183, 182, 182, 182, 179, 179, 179, 178, 178, 178, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 173, 173, 173, 168, 168, 168, 163, 163, 163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 154, 154, 154, 152, 152, 152, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, 153, 153, 151, 151, 151, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 155, 155, 155, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 135, 135, 135, 134, 134, 134, 131, 131, 131, 125, 125, 125, 121, 121, 121, 117, 117, 117, 113, 113, 113, 106, 106, 106, 99, 99, 99, 94, 94, 94, 90, 90, 90, 87, 87, 87, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 69, 69, 69, 71, 71, 71, 74, 74, 74, 78, 78, 78, 81, 81, 81, 175, 175, 175, 174, 174, 174, 171, 171, 171, 168, 168, 168, 165, 165, 165, 160, 160, 160, 155, 155, 155, 151, 151, 151, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 143, 143, 143, 139, 139, 139, 134, 134, 134, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 108, 108, 108, 104, 104, 104, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 107, 107, 107, 102, 102, 102, 96, 96, 96, 92, 92, 92, 90, 90, 90, 90, 90, 90, 93, 93, 93, 97, 97, 97, 99, 99, 99, 100, 100, 100, 101, 101, 101, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 122, 122, 122, 124, 124, 124, 128, 128, 128, 133, 133, 133, 139, 139, 139, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 156, 156, 156, 161, 161, 161, 168, 168, 168, 173, 173, 173, 177, 177, 177, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 178, 178, 178, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 170, 170, 170, 165, 165, 165, 160, 160, 160, 157, 157, 157, 156, 156, 156, 156, 156, 156, 154, 154, 154, 152, 152, 152, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 140, 140, 140, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126, 128, 128, 128, 131, 131, 131, 132, 132, 132, 129, 129, 129, 124, 124, 124, 119, 119, 119, 116, 116, 116, 111, 111, 111, 105, 105, 105, 98, 98, 98, 93, 93, 93, 90, 90, 90, 89, 89, 89, 86, 86, 86, 83, 83, 83, 79, 79, 79, 76, 76, 76, 73, 73, 73, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 73, 73, 76, 76, 76, 79, 79, 79, 80, 80, 80, 174, 174, 174, 173, 173, 173, 170, 170, 170, 167, 167, 167, 163, 163, 163, 158, 158, 158, 152, 152, 152, 148, 148, 148, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 139, 139, 139, 136, 136, 136, 131, 131, 131, 126, 126, 126, 120, 120, 120, 114, 114, 114, 109, 109, 109, 105, 105, 105, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 93, 93, 95, 95, 95, 98, 98, 98, 102, 102, 102, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 111, 111, 111, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 105, 105, 105, 100, 100, 100, 94, 94, 94, 90, 90, 90, 88, 88, 88, 89, 89, 89, 93, 93, 93, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 107, 107, 107, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 128, 128, 128, 133, 133, 133, 138, 138, 138, 142, 142, 142, 143, 143, 143, 142, 142, 142, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 157, 157, 157, 161, 161, 161, 167, 167, 167, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 177, 177, 177, 175, 175, 175, 173, 173, 173, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 166, 166, 166, 160, 160, 160, 156, 156, 156, 154, 154, 154, 154, 154, 154, 155, 155, 155, 154, 154, 154, 151, 151, 151, 150, 150, 150, 151, 151, 151, 151, 151, 151, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 148, 148, 148, 151, 151, 151, 153, 153, 153, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 138, 138, 138, 134, 134, 134, 130, 130, 130, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 129, 129, 129, 127, 127, 127, 123, 123, 123, 118, 118, 118, 114, 114, 114, 110, 110, 110, 103, 103, 103, 97, 97, 97, 93, 93, 93, 91, 91, 91, 91, 91, 91, 90, 90, 90, 88, 88, 88, 84, 84, 84, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 75, 75, 75, 74, 74, 74, 72, 72, 72, 71, 71, 71, 71, 71, 71, 72, 72, 72, 74, 74, 74, 77, 77, 77, 79, 79, 79, 80, 80, 80, 175, 175, 175, 172, 172, 172, 168, 168, 168, 165, 165, 165, 161, 161, 161, 155, 155, 155, 149, 149, 149, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 136, 136, 136, 134, 134, 134, 130, 130, 130, 125, 125, 125, 119, 119, 119, 113, 113, 113, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 97, 97, 97, 94, 94, 94, 92, 92, 92, 92, 92, 92, 93, 93, 93, 95, 95, 95, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 111, 111, 111, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 112, 112, 112, 110, 110, 110, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 103, 103, 103, 98, 98, 98, 93, 93, 93, 89, 89, 89, 88, 88, 88, 89, 89, 89, 93, 93, 93, 98, 98, 98, 102, 102, 102, 104, 104, 104, 106, 106, 106, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 128, 128, 128, 133, 133, 133, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 148, 148, 148, 151, 151, 151, 155, 155, 155, 160, 160, 160, 164, 164, 164, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 174, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 172, 172, 172, 170, 170, 170, 168, 168, 168, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 148, 148, 148, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 124, 124, 124, 124, 124, 124, 125, 125, 125, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 114, 114, 114, 108, 108, 108, 102, 102, 102, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 94, 94, 94, 92, 92, 92, 88, 88, 88, 84, 84, 84, 82, 82, 82, 79, 79, 79, 77, 77, 77, 76, 76, 76, 76, 76, 76, 78, 78, 78, 79, 79, 79, 79, 79, 79, 77, 77, 77, 74, 74, 74, 71, 71, 71, 69, 69, 69, 68, 68, 68, 70, 70, 70, 72, 72, 72, 75, 75, 75, 77, 77, 77, 78, 78, 78, 176, 176, 176, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 154, 154, 154, 148, 148, 148, 145, 145, 145, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 139, 139, 139, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 123, 123, 123, 117, 117, 117, 112, 112, 112, 108, 108, 108, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 93, 93, 93, 91, 91, 91, 92, 92, 92, 93, 93, 93, 95, 95, 95, 96, 96, 96, 97, 97, 97, 99, 99, 99, 101, 101, 101, 104, 104, 104, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 114, 114, 114, 115, 115, 115, 116, 116, 116, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 98, 98, 98, 93, 93, 93, 90, 90, 90, 89, 89, 89, 91, 91, 91, 95, 95, 95, 99, 99, 99, 103, 103, 103, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 122, 122, 122, 127, 127, 127, 133, 133, 133, 137, 137, 137, 139, 139, 139, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 151, 151, 151, 155, 155, 155, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 169, 169, 169, 170, 170, 170, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 169, 169, 169, 166, 166, 166, 162, 162, 162, 159, 159, 159, 156, 156, 156, 153, 153, 153, 152, 152, 152, 151, 151, 151, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 142, 142, 142, 143, 143, 143, 145, 145, 145, 147, 147, 147, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 141, 141, 141, 138, 138, 138, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 125, 125, 125, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 107, 107, 107, 101, 101, 101, 96, 96, 96, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 96, 96, 96, 93, 93, 93, 89, 89, 89, 85, 85, 85, 81, 81, 81, 78, 78, 78, 77, 77, 77, 79, 79, 79, 81, 81, 81, 82, 82, 82, 81, 81, 81, 77, 77, 77, 73, 73, 73, 69, 69, 69, 67, 67, 67, 66, 66, 66, 67, 67, 67, 70, 70, 70, 73, 73, 73, 76, 76, 76, 77, 77, 77, 176, 176, 176, 172, 172, 172, 168, 168, 168, 164, 164, 164, 160, 160, 160, 155, 155, 155, 149, 149, 149, 145, 145, 145, 144, 144, 144, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 139, 139, 139, 134, 134, 134, 131, 131, 131, 128, 128, 128, 125, 125, 125, 120, 120, 120, 116, 116, 116, 112, 112, 112, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 104, 104, 104, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 101, 101, 101, 105, 105, 105, 107, 107, 107, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 98, 98, 98, 94, 94, 94, 91, 91, 91, 91, 91, 91, 93, 93, 93, 97, 97, 97, 100, 100, 100, 102, 102, 102, 105, 105, 105, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 112, 112, 112, 116, 116, 116, 119, 119, 119, 121, 121, 121, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 137, 137, 137, 138, 138, 138, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 145, 145, 145, 150, 150, 150, 153, 153, 153, 156, 156, 156, 159, 159, 159, 162, 162, 162, 164, 164, 164, 166, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 168, 168, 168, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 143, 143, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 126, 126, 126, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 112, 112, 112, 106, 106, 106, 101, 101, 101, 97, 97, 97, 97, 97, 97, 99, 99, 99, 100, 100, 100, 100, 100, 100, 98, 98, 98, 96, 96, 96, 93, 93, 93, 89, 89, 89, 84, 84, 84, 80, 80, 80, 80, 80, 80, 82, 82, 82, 83, 83, 83, 83, 83, 83, 81, 81, 81, 76, 76, 76, 72, 72, 72, 68, 68, 68, 66, 66, 66, 65, 65, 65, 66, 66, 66, 69, 69, 69, 72, 72, 72, 74, 74, 74, 75, 75, 75, 173, 173, 173, 169, 169, 169, 166, 166, 166, 162, 162, 162, 160, 160, 160, 156, 156, 156, 151, 151, 151, 147, 147, 147, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 139, 139, 139, 135, 135, 135, 131, 131, 131, 128, 128, 128, 124, 124, 124, 120, 120, 120, 116, 116, 116, 113, 113, 113, 110, 110, 110, 107, 107, 107, 106, 106, 106, 105, 105, 105, 105, 105, 105, 102, 102, 102, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 101, 101, 101, 104, 104, 104, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 110, 110, 110, 107, 107, 107, 103, 103, 103, 101, 101, 101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 96, 96, 96, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 111, 111, 111, 112, 112, 112, 115, 115, 115, 119, 119, 119, 123, 123, 123, 125, 125, 125, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 139, 139, 139, 141, 141, 141, 145, 145, 145, 148, 148, 148, 151, 151, 151, 156, 156, 156, 160, 160, 160, 163, 163, 163, 164, 164, 164, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 167, 167, 167, 164, 164, 164, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 144, 144, 144, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 135, 135, 135, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 128, 128, 128, 126, 126, 126, 124, 124, 124, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 116, 116, 116, 114, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 113, 111, 111, 111, 106, 106, 106, 102, 102, 102, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 95, 95, 95, 92, 92, 92, 87, 87, 87, 84, 84, 84, 84, 84, 84, 85, 85, 85, 86, 86, 86, 84, 84, 84, 81, 81, 81, 77, 77, 77, 72, 72, 72, 68, 68, 68, 66, 66, 66, 66, 66, 66, 67, 67, 67, 69, 69, 69, 71, 71, 71, 73, 73, 73, 73, 73, 73, 168, 168, 168, 165, 165, 165, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 140, 140, 140, 141, 141, 141, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 126, 126, 126, 121, 121, 121, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 103, 103, 103, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 96, 96, 96, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 113, 113, 113, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 105, 105, 105, 102, 102, 102, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 98, 98, 98, 95, 95, 95, 94, 94, 94, 96, 96, 96, 99, 99, 99, 102, 102, 102, 104, 104, 104, 103, 103, 103, 103, 103, 103, 105, 105, 105, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 121, 121, 121, 125, 125, 125, 128, 128, 128, 130, 130, 130, 133, 133, 133, 135, 135, 135, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 154, 154, 154, 158, 158, 158, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 161, 161, 161, 163, 163, 163, 166, 166, 166, 167, 167, 167, 164, 164, 164, 159, 159, 159, 154, 154, 154, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 140, 140, 140, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 136, 136, 136, 133, 133, 133, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 120, 120, 120, 118, 118, 118, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 103, 103, 103, 101, 101, 101, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 90, 90, 90, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 86, 86, 86, 83, 83, 83, 79, 79, 79, 74, 74, 74, 70, 70, 70, 68, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 165, 165, 165, 161, 161, 161, 157, 157, 157, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 144, 144, 144, 142, 142, 142, 140, 140, 140, 137, 137, 137, 135, 135, 135, 136, 136, 136, 139, 139, 139, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 124, 124, 124, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 97, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 101, 101, 101, 103, 103, 103, 104, 104, 104, 105, 105, 105, 108, 108, 108, 111, 111, 111, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 107, 107, 107, 104, 104, 104, 101, 101, 101, 100, 100, 100, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 95, 95, 95, 96, 96, 96, 98, 98, 98, 102, 102, 102, 105, 105, 105, 106, 106, 106, 104, 104, 104, 103, 103, 103, 105, 105, 105, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 120, 120, 120, 124, 124, 124, 128, 128, 128, 131, 131, 131, 135, 135, 135, 137, 137, 137, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 150, 150, 150, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 162, 162, 162, 165, 165, 165, 166, 166, 166, 164, 164, 164, 160, 160, 160, 155, 155, 155, 150, 150, 150, 145, 145, 145, 142, 142, 142, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 142, 142, 142, 143, 143, 143, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 136, 136, 136, 134, 134, 134, 130, 130, 130, 128, 128, 128, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 107, 107, 107, 109, 109, 109, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 91, 89, 89, 89, 87, 87, 87, 84, 84, 84, 81, 81, 81, 77, 77, 77, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 70, 70, 70, 69, 69, 69, 69, 69, 69, 162, 162, 162, 159, 159, 159, 155, 155, 155, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 137, 137, 137, 133, 133, 133, 128, 128, 128, 125, 125, 125, 124, 124, 124, 122, 122, 122, 119, 119, 119, 115, 115, 115, 112, 112, 112, 109, 109, 109, 106, 106, 106, 104, 104, 104, 102, 102, 102, 102, 102, 102, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 96, 96, 96, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 95, 95, 95, 97, 97, 97, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 111, 111, 111, 112, 112, 112, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 96, 96, 96, 97, 97, 97, 101, 101, 101, 105, 105, 105, 107, 107, 107, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 126, 126, 126, 130, 130, 130, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 136, 136, 136, 139, 139, 139, 141, 141, 141, 143, 143, 143, 142, 142, 142, 141, 141, 141, 142, 142, 142, 145, 145, 145, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 157, 157, 157, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 161, 161, 161, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 156, 156, 156, 152, 152, 152, 147, 147, 147, 143, 143, 143, 140, 140, 140, 139, 139, 139, 138, 138, 138, 138, 138, 138, 136, 136, 136, 132, 132, 132, 128, 128, 128, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 125, 125, 125, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 102, 102, 102, 99, 99, 99, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 90, 90, 90, 87, 87, 87, 85, 85, 85, 83, 83, 83, 79, 79, 79, 77, 77, 77, 75, 75, 75, 75, 75, 75, 74, 74, 74, 72, 72, 72, 70, 70, 70, 69, 69, 69, 70, 70, 70, 159, 159, 159, 157, 157, 157, 154, 154, 154, 153, 153, 153, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 141, 141, 141, 142, 142, 142, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 128, 128, 128, 126, 126, 126, 122, 122, 122, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 105, 105, 105, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 109, 109, 109, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 103, 103, 103, 103, 103, 103, 103, 103, 103, 105, 105, 105, 105, 105, 105, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 101, 101, 101, 99, 99, 99, 97, 97, 97, 97, 97, 97, 99, 99, 99, 102, 102, 102, 106, 106, 106, 108, 108, 108, 108, 108, 108, 107, 107, 107, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 115, 115, 115, 117, 117, 117, 119, 119, 119, 122, 122, 122, 126, 126, 126, 129, 129, 129, 133, 133, 133, 136, 136, 136, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 140, 140, 140, 142, 142, 142, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 159, 159, 159, 161, 161, 161, 161, 161, 161, 160, 160, 160, 160, 160, 160, 158, 158, 158, 155, 155, 155, 150, 150, 150, 145, 145, 145, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 126, 126, 126, 125, 125, 125, 127, 127, 127, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 133, 133, 133, 136, 136, 136, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 114, 114, 114, 112, 112, 112, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 100, 100, 100, 100, 100, 100, 102, 102, 102, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 92, 92, 92, 89, 89, 89, 86, 86, 86, 83, 83, 83, 80, 80, 80, 78, 78, 78, 77, 77, 77, 77, 77, 77, 75, 75, 75, 72, 72, 72, 70, 70, 70, 70, 70, 70, 71, 71, 71, 157, 157, 157, 156, 156, 156, 155, 155, 155, 154, 154, 154, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 143, 143, 143, 145, 145, 145, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 128, 128, 128, 124, 124, 124, 119, 119, 119, 116, 116, 116, 112, 112, 112, 110, 110, 110, 109, 109, 109, 107, 107, 107, 106, 106, 106, 105, 105, 105, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 101, 101, 101, 101, 101, 101, 102, 102, 102, 105, 105, 105, 107, 107, 107, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 108, 108, 108, 109, 109, 109, 108, 108, 108, 105, 105, 105, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 127, 127, 127, 129, 129, 129, 132, 132, 132, 135, 135, 135, 138, 138, 138, 141, 141, 141, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 143, 143, 143, 146, 146, 146, 146, 146, 146, 145, 145, 145, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 157, 157, 157, 157, 157, 157, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 158, 158, 158, 155, 155, 155, 151, 151, 151, 146, 146, 146, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 126, 126, 126, 129, 129, 129, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 133, 133, 133, 131, 131, 131, 129, 129, 129, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 110, 110, 110, 109, 109, 109, 106, 106, 106, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 94, 94, 94, 91, 91, 91, 87, 87, 87, 84, 84, 84, 80, 80, 80, 78, 78, 78, 78, 78, 78, 77, 77, 77, 74, 74, 74, 70, 70, 70, 70, 70, 70, 71, 71, 71, 72, 72, 72, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 142, 142, 142, 138, 138, 138, 136, 136, 136, 137, 137, 137, 137, 137, 137, 139, 139, 139, 142, 142, 142, 146, 146, 146, 148, 148, 148, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 138, 138, 138, 132, 132, 132, 127, 127, 127, 122, 122, 122, 118, 118, 118, 115, 115, 115, 112, 112, 112, 110, 110, 110, 110, 110, 110, 109, 109, 109, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 97, 97, 97, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 99, 99, 99, 100, 100, 100, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 105, 105, 105, 102, 102, 102, 100, 100, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 109, 109, 109, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 103, 103, 103, 101, 101, 101, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 118, 118, 118, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 131, 131, 131, 133, 133, 133, 136, 136, 136, 140, 140, 140, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 149, 149, 149, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 125, 125, 125, 125, 125, 125, 128, 128, 128, 132, 132, 132, 133, 133, 133, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 122, 122, 122, 119, 119, 119, 118, 118, 118, 120, 120, 120, 121, 121, 121, 120, 120, 120, 117, 117, 117, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 107, 107, 107, 107, 107, 107, 109, 109, 109, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 105, 105, 105, 103, 103, 103, 100, 100, 100, 97, 97, 97, 93, 93, 93, 89, 89, 89, 84, 84, 84, 81, 81, 81, 78, 78, 78, 78, 78, 78, 77, 77, 77, 73, 73, 73, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 154, 154, 154, 153, 153, 153, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 139, 139, 139, 138, 138, 138, 139, 139, 139, 141, 141, 141, 143, 143, 143, 146, 146, 146, 149, 149, 149, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 128, 128, 128, 123, 123, 123, 118, 118, 118, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 107, 107, 107, 102, 102, 102, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 101, 101, 101, 104, 104, 104, 106, 106, 106, 105, 105, 105, 103, 103, 103, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 101, 101, 101, 103, 103, 103, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 103, 103, 103, 102, 102, 102, 103, 103, 103, 106, 106, 106, 108, 108, 108, 110, 110, 110, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 113, 113, 113, 115, 115, 115, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 158, 158, 158, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 131, 131, 131, 127, 127, 127, 125, 125, 125, 124, 124, 124, 126, 126, 126, 130, 130, 130, 132, 132, 132, 132, 132, 132, 131, 131, 131, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 132, 132, 132, 133, 133, 133, 132, 132, 132, 130, 130, 130, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 122, 122, 122, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 107, 107, 107, 107, 107, 107, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 101, 101, 101, 97, 97, 97, 91, 91, 91, 86, 86, 86, 81, 81, 81, 79, 79, 79, 78, 78, 78, 76, 76, 76, 73, 73, 73, 69, 69, 69, 68, 68, 68, 69, 69, 69, 70, 70, 70, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 141, 141, 141, 137, 137, 137, 133, 133, 133, 128, 128, 128, 122, 122, 122, 117, 117, 117, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 115, 115, 113, 113, 113, 109, 109, 109, 103, 103, 103, 98, 98, 98, 95, 95, 95, 93, 93, 93, 93, 93, 93, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 102, 102, 102, 104, 104, 104, 105, 105, 105, 103, 103, 103, 99, 99, 99, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 96, 96, 96, 96, 96, 96, 98, 98, 98, 100, 100, 100, 102, 102, 102, 105, 105, 105, 106, 106, 106, 106, 106, 106, 105, 105, 105, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 103, 102, 102, 102, 104, 104, 104, 108, 108, 108, 111, 111, 111, 113, 113, 113, 116, 116, 116, 118, 118, 118, 119, 119, 119, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 123, 123, 123, 125, 125, 125, 127, 127, 127, 130, 130, 130, 133, 133, 133, 137, 137, 137, 142, 142, 142, 146, 146, 146, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 151, 151, 151, 154, 154, 154, 157, 157, 157, 157, 157, 157, 155, 155, 155, 153, 153, 153, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 130, 130, 130, 127, 127, 127, 124, 124, 124, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 131, 131, 131, 130, 130, 130, 128, 128, 128, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 122, 122, 122, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 110, 110, 110, 111, 111, 111, 112, 112, 112, 111, 111, 111, 109, 109, 109, 105, 105, 105, 100, 100, 100, 95, 95, 95, 88, 88, 88, 83, 83, 83, 79, 79, 79, 78, 78, 78, 75, 75, 75, 71, 71, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 153, 153, 153, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 142, 142, 142, 144, 144, 144, 146, 146, 146, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 124, 124, 124, 118, 118, 118, 114, 114, 114, 113, 113, 113, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 109, 109, 109, 104, 104, 104, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 100, 100, 100, 102, 102, 102, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 100, 100, 100, 96, 96, 96, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 104, 104, 104, 103, 103, 103, 104, 104, 104, 107, 107, 107, 111, 111, 111, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 122, 122, 122, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 126, 126, 126, 130, 130, 130, 133, 133, 133, 137, 137, 137, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 143, 143, 143, 144, 144, 144, 145, 145, 145, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 155, 155, 155, 155, 155, 155, 153, 153, 153, 151, 151, 151, 151, 151, 151, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 137, 137, 137, 133, 133, 133, 128, 128, 128, 125, 125, 125, 122, 122, 122, 123, 123, 123, 125, 125, 125, 128, 128, 128, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 126, 126, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 114, 114, 114, 113, 113, 113, 111, 111, 111, 110, 110, 110, 109, 109, 109, 108, 108, 108, 106, 106, 106, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 110, 110, 110, 109, 109, 109, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 112, 112, 112, 109, 109, 109, 104, 104, 104, 99, 99, 99, 92, 92, 92, 85, 85, 85, 81, 81, 81, 77, 77, 77, 74, 74, 74, 70, 70, 70, 68, 68, 68, 68, 68, 68, 69, 69, 69, 68, 68, 68, 149, 149, 149, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 149, 149, 149, 150, 150, 150, 151, 151, 151, 151, 151, 151, 148, 148, 148, 144, 144, 144, 143, 143, 143, 144, 144, 144, 147, 147, 147, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 137, 137, 137, 131, 131, 131, 124, 124, 124, 119, 119, 119, 116, 116, 116, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 114, 114, 114, 110, 110, 110, 105, 105, 105, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 104, 104, 104, 106, 106, 106, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 98, 98, 98, 95, 95, 95, 94, 94, 94, 93, 93, 93, 93, 93, 93, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 98, 98, 98, 101, 101, 101, 102, 102, 102, 101, 101, 101, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 106, 106, 106, 108, 108, 108, 111, 111, 111, 115, 115, 115, 117, 117, 117, 118, 118, 118, 120, 120, 120, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 122, 122, 122, 120, 120, 120, 120, 120, 120, 123, 123, 123, 127, 127, 127, 131, 131, 131, 134, 134, 134, 138, 138, 138, 143, 143, 143, 147, 147, 147, 149, 149, 149, 147, 147, 147, 145, 145, 145, 143, 143, 143, 143, 143, 143, 144, 144, 144, 146, 146, 146, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 148, 148, 148, 145, 145, 145, 144, 144, 144, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 135, 135, 135, 131, 131, 131, 126, 126, 126, 122, 122, 122, 120, 120, 120, 122, 122, 122, 125, 125, 125, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 126, 126, 126, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 125, 125, 125, 122, 122, 122, 119, 119, 119, 116, 116, 116, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 110, 110, 110, 111, 111, 111, 111, 111, 111, 109, 109, 109, 109, 109, 109, 111, 111, 111, 112, 112, 112, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 102, 102, 102, 96, 96, 96, 89, 89, 89, 83, 83, 83, 78, 78, 78, 74, 74, 74, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 151, 151, 151, 147, 147, 147, 145, 145, 145, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 147, 147, 147, 144, 144, 144, 141, 141, 141, 136, 136, 136, 130, 130, 130, 125, 125, 125, 121, 121, 121, 119, 119, 119, 118, 118, 118, 119, 119, 119, 120, 120, 120, 119, 119, 119, 116, 116, 116, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 103, 103, 103, 104, 104, 104, 105, 105, 105, 107, 107, 107, 108, 108, 108, 108, 108, 108, 106, 106, 106, 103, 103, 103, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 95, 95, 92, 92, 92, 90, 90, 90, 90, 90, 90, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 106, 106, 106, 109, 109, 109, 112, 112, 112, 114, 114, 114, 116, 116, 116, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 135, 135, 135, 138, 138, 138, 143, 143, 143, 147, 147, 147, 148, 148, 148, 147, 147, 147, 145, 145, 145, 144, 144, 144, 143, 143, 143, 143, 143, 143, 145, 145, 145, 148, 148, 148, 150, 150, 150, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 149, 149, 149, 147, 147, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 137, 137, 137, 134, 134, 134, 129, 129, 129, 123, 123, 123, 120, 120, 120, 119, 119, 119, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 124, 124, 124, 122, 122, 122, 121, 121, 121, 120, 120, 120, 119, 119, 119, 119, 119, 119, 117, 117, 117, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 126, 126, 126, 129, 129, 129, 130, 130, 130, 128, 128, 128, 126, 126, 126, 125, 125, 125, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128, 128, 128, 128, 127, 127, 127, 125, 125, 125, 122, 122, 122, 120, 120, 120, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 109, 109, 109, 111, 111, 111, 113, 113, 113, 113, 113, 113, 111, 111, 111, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 111, 111, 110, 110, 110, 109, 109, 109, 107, 107, 107, 105, 105, 105, 100, 100, 100, 93, 93, 93, 87, 87, 87, 81, 81, 81, 77, 77, 77, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 150, 150, 150, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 153, 153, 153, 151, 151, 151, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 155, 155, 155, 153, 153, 153, 150, 150, 150, 145, 145, 145, 141, 141, 141, 135, 135, 135, 130, 130, 130, 126, 126, 126, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 123, 123, 123, 119, 119, 119, 114, 114, 114, 109, 109, 109, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 107, 107, 107, 105, 105, 105, 101, 101, 101, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 96, 96, 96, 93, 93, 93, 90, 90, 90, 90, 90, 90, 92, 92, 92, 94, 94, 94, 95, 95, 95, 94, 94, 94, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 100, 100, 100, 103, 103, 103, 108, 108, 108, 113, 113, 113, 117, 117, 117, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 122, 122, 122, 124, 124, 124, 129, 129, 129, 133, 133, 133, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 145, 145, 145, 144, 144, 144, 145, 145, 145, 148, 148, 148, 150, 150, 150, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 146, 146, 146, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 140, 140, 140, 139, 139, 139, 138, 138, 138, 136, 136, 136, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 121, 121, 121, 119, 119, 119, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 121, 121, 121, 123, 123, 123, 124, 124, 124, 123, 123, 123, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 115, 115, 115, 120, 120, 120, 125, 125, 125, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 115, 115, 115, 113, 113, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 114, 114, 114, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 116, 116, 116, 114, 114, 114, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 104, 104, 104, 99, 99, 99, 92, 92, 92, 86, 86, 86, 82, 82, 82, 80, 80, 80, 79, 79, 79, 78, 78, 78, 76, 76, 76, 75, 75, 75, 148, 148, 148, 148, 148, 148, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 156, 156, 156, 154, 154, 154, 151, 151, 151, 146, 146, 146, 141, 141, 141, 135, 135, 135, 131, 131, 131, 127, 127, 127, 126, 126, 126, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 127, 127, 127, 122, 122, 122, 117, 117, 117, 112, 112, 112, 110, 110, 110, 110, 110, 110, 111, 111, 111, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 101, 101, 101, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 99, 99, 99, 97, 97, 97, 94, 94, 94, 92, 92, 92, 91, 91, 91, 93, 93, 93, 95, 95, 95, 95, 95, 95, 93, 93, 93, 92, 92, 92, 94, 94, 94, 97, 97, 97, 100, 100, 100, 101, 101, 101, 104, 104, 104, 109, 109, 109, 116, 116, 116, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 129, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 126, 126, 126, 124, 124, 124, 125, 125, 125, 128, 128, 128, 133, 133, 133, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 151, 151, 151, 151, 151, 151, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, 146, 146, 146, 148, 148, 148, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 143, 143, 143, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 136, 136, 136, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 127, 127, 127, 124, 124, 124, 121, 121, 121, 118, 118, 118, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 117, 117, 117, 115, 115, 115, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 110, 111, 111, 111, 114, 114, 114, 119, 119, 119, 123, 123, 123, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 129, 129, 129, 132, 132, 132, 134, 134, 134, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 131, 131, 131, 130, 130, 130, 128, 128, 128, 126, 126, 126, 123, 123, 123, 120, 120, 120, 117, 117, 117, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116, 116, 116, 117, 117, 117, 119, 119, 119, 120, 120, 120, 118, 118, 118, 116, 116, 116, 114, 114, 114, 114, 114, 114, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 110, 110, 110, 108, 108, 108, 103, 103, 103, 97, 97, 97, 92, 92, 92, 89, 89, 89, 87, 87, 87, 85, 85, 85, 82, 82, 82, 79, 79, 79, 77, 77, 77, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 142, 142, 142, 144, 144, 144, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 149, 149, 149, 148, 148, 148, 147, 147, 147, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 155, 155, 155, 155, 155, 155, 154, 154, 154, 150, 150, 150, 146, 146, 146, 141, 141, 141, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 128, 128, 128, 124, 124, 124, 119, 119, 119, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 97, 97, 97, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 91, 91, 91, 93, 93, 93, 97, 97, 97, 101, 101, 101, 103, 103, 103, 106, 106, 106, 111, 111, 111, 118, 118, 118, 122, 122, 122, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 128, 128, 128, 131, 131, 131, 131, 131, 131, 129, 129, 129, 126, 126, 126, 125, 125, 125, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 143, 143, 143, 148, 148, 148, 151, 151, 151, 153, 153, 153, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 147, 147, 147, 149, 149, 149, 150, 150, 150, 150, 150, 150, 147, 147, 147, 144, 144, 144, 142, 142, 142, 139, 139, 139, 137, 137, 137, 135, 135, 135, 135, 135, 135, 136, 136, 136, 140, 140, 140, 143, 143, 143, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 129, 129, 129, 128, 128, 128, 127, 127, 127, 125, 125, 125, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 115, 115, 115, 111, 111, 111, 108, 108, 108, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 109, 109, 110, 110, 110, 112, 112, 112, 113, 113, 113, 113, 113, 113, 111, 111, 111, 110, 110, 110, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 126, 126, 126, 129, 129, 129, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 132, 132, 132, 135, 135, 135, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 129, 129, 129, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 123, 123, 123, 121, 121, 121, 119, 119, 119, 117, 117, 117, 118, 118, 118, 119, 119, 119, 119, 119, 119, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 102, 102, 102, 97, 97, 97, 94, 94, 94, 93, 93, 93, 91, 91, 91, 88, 88, 88, 83, 83, 83, 81, 81, 81, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 147, 147, 147, 149, 149, 149, 151, 151, 151, 151, 151, 151, 151, 151, 151, 150, 150, 150, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 153, 153, 153, 152, 152, 152, 150, 150, 150, 147, 147, 147, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 133, 133, 133, 129, 129, 129, 125, 125, 125, 120, 120, 120, 116, 116, 116, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 106, 106, 106, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 94, 94, 94, 92, 92, 92, 94, 94, 94, 98, 98, 98, 103, 103, 103, 106, 106, 106, 110, 110, 110, 115, 115, 115, 120, 120, 120, 123, 123, 123, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 132, 132, 132, 130, 130, 130, 127, 127, 127, 126, 126, 126, 128, 128, 128, 132, 132, 132, 136, 136, 136, 139, 139, 139, 142, 142, 142, 147, 147, 147, 151, 151, 151, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 133, 133, 133, 135, 135, 135, 138, 138, 138, 142, 142, 142, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 139, 139, 139, 134, 134, 134, 128, 128, 128, 124, 124, 124, 122, 122, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 104, 104, 104, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 114, 114, 114, 117, 117, 117, 121, 121, 121, 125, 125, 125, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 132, 132, 132, 134, 134, 134, 138, 138, 138, 141, 141, 141, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 135, 135, 135, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 123, 123, 123, 123, 123, 123, 125, 125, 125, 126, 126, 126, 124, 124, 124, 121, 121, 121, 120, 120, 120, 121, 121, 121, 123, 123, 123, 123, 123, 123, 121, 121, 121, 117, 117, 117, 114, 114, 114, 112, 112, 112, 110, 110, 110, 106, 106, 106, 101, 101, 101, 99, 99, 99, 98, 98, 98, 97, 97, 97, 93, 93, 93, 88, 88, 88, 85, 85, 85, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 150, 150, 150, 150, 150, 150, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 117, 117, 117, 115, 115, 115, 114, 114, 114, 114, 114, 114, 111, 111, 111, 107, 107, 107, 103, 103, 103, 102, 102, 102, 102, 102, 102, 100, 100, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 96, 96, 96, 95, 95, 95, 95, 95, 95, 97, 97, 97, 99, 99, 99, 97, 97, 97, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 96, 96, 96, 95, 95, 95, 97, 97, 97, 101, 101, 101, 105, 105, 105, 109, 109, 109, 114, 114, 114, 120, 120, 120, 124, 124, 124, 126, 126, 126, 127, 127, 127, 129, 129, 129, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 132, 132, 132, 133, 133, 133, 133, 133, 133, 130, 130, 130, 128, 128, 128, 127, 127, 127, 130, 130, 130, 134, 134, 134, 138, 138, 138, 140, 140, 140, 143, 143, 143, 147, 147, 147, 150, 150, 150, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 150, 150, 150, 152, 152, 152, 154, 154, 154, 153, 153, 153, 150, 150, 150, 146, 146, 146, 142, 142, 142, 138, 138, 138, 135, 135, 135, 134, 134, 134, 135, 135, 135, 138, 138, 138, 140, 140, 140, 142, 142, 142, 143, 143, 143, 142, 142, 142, 140, 140, 140, 137, 137, 137, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 113, 113, 113, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 109, 109, 109, 107, 107, 107, 104, 104, 104, 102, 102, 102, 101, 101, 101, 102, 102, 102, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114, 114, 114, 114, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 131, 131, 131, 133, 133, 133, 134, 134, 134, 134, 134, 134, 136, 136, 136, 141, 141, 141, 146, 146, 146, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 141, 141, 141, 138, 138, 138, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 128, 128, 128, 126, 126, 126, 125, 125, 125, 125, 125, 125, 127, 127, 127, 129, 129, 129, 128, 128, 128, 125, 125, 125, 124, 124, 124, 126, 126, 126, 127, 127, 127, 127, 127, 127, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 98, 98, 98, 93, 93, 93, 88, 88, 88, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 138, 138, 138, 133, 133, 133, 128, 128, 128, 123, 123, 123, 119, 119, 119, 117, 117, 117, 116, 116, 116, 114, 114, 114, 111, 111, 111, 106, 106, 106, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 99, 99, 99, 98, 98, 98, 96, 96, 96, 96, 96, 96, 98, 98, 98, 99, 99, 99, 98, 98, 98, 98, 98, 98, 101, 101, 101, 104, 104, 104, 108, 108, 108, 113, 113, 113, 118, 118, 118, 124, 124, 124, 128, 128, 128, 130, 130, 130, 131, 131, 131, 132, 132, 132, 134, 134, 134, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 128, 128, 132, 132, 132, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 130, 130, 130, 132, 132, 132, 136, 136, 136, 140, 140, 140, 143, 143, 143, 145, 145, 145, 148, 148, 148, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 151, 151, 151, 149, 149, 149, 149, 149, 149, 152, 152, 152, 154, 154, 154, 154, 154, 154, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 136, 136, 136, 136, 136, 136, 137, 137, 137, 139, 139, 139, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 129, 129, 129, 124, 124, 124, 119, 119, 119, 114, 114, 114, 110, 110, 110, 108, 108, 108, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 103, 103, 103, 101, 101, 101, 99, 99, 99, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 103, 103, 107, 107, 107, 110, 110, 110, 113, 113, 113, 115, 115, 115, 117, 117, 117, 117, 117, 117, 116, 116, 116, 118, 118, 118, 121, 121, 121, 124, 124, 124, 126, 126, 126, 127, 127, 127, 128, 128, 128, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 140, 140, 140, 145, 145, 145, 149, 149, 149, 151, 151, 151, 149, 149, 149, 146, 146, 146, 145, 145, 145, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 143, 143, 143, 139, 139, 139, 137, 137, 137, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 128, 128, 128, 128, 128, 128, 129, 129, 129, 131, 131, 131, 133, 133, 133, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 123, 123, 123, 121, 121, 121, 120, 120, 120, 119, 119, 119, 116, 116, 116, 112, 112, 112, 109, 109, 109, 108, 108, 108, 106, 106, 106, 101, 101, 101, 95, 95, 95, 90, 90, 90, 147, 147, 147, 145, 145, 145, 143, 143, 143, 142, 142, 142, 141, 141, 141, 140, 140, 140, 141, 141, 141, 144, 144, 144, 147, 147, 147, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 156, 156, 156, 157, 157, 157, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 136, 136, 136, 131, 131, 131, 126, 126, 126, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 110, 110, 110, 106, 106, 106, 103, 103, 103, 102, 102, 102, 99, 99, 99, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 93, 93, 94, 94, 94, 97, 97, 97, 99, 99, 99, 99, 99, 99, 97, 97, 97, 98, 98, 98, 100, 100, 100, 102, 102, 102, 103, 103, 103, 104, 104, 104, 107, 107, 107, 110, 110, 110, 113, 113, 113, 117, 117, 117, 123, 123, 123, 128, 128, 128, 132, 132, 132, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 135, 135, 135, 137, 137, 137, 138, 138, 138, 136, 136, 136, 135, 135, 135, 134, 134, 134, 135, 135, 135, 136, 136, 136, 139, 139, 139, 142, 142, 142, 145, 145, 145, 147, 147, 147, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 134, 134, 134, 132, 132, 132, 130, 130, 130, 126, 126, 126, 122, 122, 122, 117, 117, 117, 113, 113, 113, 109, 109, 109, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 100, 100, 100, 103, 103, 103, 106, 106, 106, 109, 109, 109, 112, 112, 112, 115, 115, 115, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 124, 124, 124, 127, 127, 127, 129, 129, 129, 129, 129, 129, 128, 128, 128, 130, 130, 130, 133, 133, 133, 136, 136, 136, 139, 139, 139, 144, 144, 144, 149, 149, 149, 153, 153, 153, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 147, 147, 147, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 149, 149, 149, 144, 144, 144, 141, 141, 141, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 135, 135, 135, 136, 136, 136, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 120, 120, 120, 118, 118, 118, 115, 115, 115, 113, 113, 113, 110, 110, 110, 105, 105, 105, 99, 99, 99, 93, 93, 93, 149, 149, 149, 147, 147, 147, 146, 146, 146, 143, 143, 143, 141, 141, 141, 139, 139, 139, 139, 139, 139, 141, 141, 141, 145, 145, 145, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 155, 155, 155, 158, 158, 158, 160, 160, 160, 159, 159, 159, 156, 156, 156, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 152, 152, 152, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 144, 144, 144, 142, 142, 142, 138, 138, 138, 133, 133, 133, 129, 129, 129, 125, 125, 125, 123, 123, 123, 120, 120, 120, 116, 116, 116, 111, 111, 111, 107, 107, 107, 105, 105, 105, 104, 104, 104, 100, 100, 100, 96, 96, 96, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 101, 101, 101, 104, 104, 104, 107, 107, 107, 109, 109, 109, 112, 112, 112, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 135, 135, 135, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 144, 144, 144, 146, 146, 146, 148, 148, 148, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 149, 149, 149, 148, 148, 148, 149, 149, 149, 151, 151, 151, 151, 151, 151, 149, 149, 149, 145, 145, 145, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 94, 94, 94, 92, 92, 92, 91, 91, 91, 92, 92, 92, 92, 92, 92, 94, 94, 94, 96, 96, 96, 98, 98, 98, 100, 100, 100, 104, 104, 104, 107, 107, 107, 110, 110, 110, 115, 115, 115, 119, 119, 119, 121, 121, 121, 121, 121, 121, 122, 122, 122, 126, 126, 126, 130, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 142, 142, 142, 148, 148, 148, 154, 154, 154, 158, 158, 158, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, 153, 153, 150, 150, 150, 150, 150, 150, 151, 151, 151, 154, 154, 154, 155, 155, 155, 153, 153, 153, 149, 149, 149, 146, 146, 146, 144, 144, 144, 141, 141, 141, 137, 137, 137, 134, 134, 134, 133, 133, 133, 134, 134, 134, 136, 136, 136, 137, 137, 137, 135, 135, 135, 134, 134, 134, 132, 132, 132, 131, 131, 131, 130, 130, 130, 129, 129, 129, 129, 129, 129, 127, 127, 127, 126, 126, 126, 125, 125, 125, 124, 124, 124, 123, 123, 123, 122, 122, 122, 121, 121, 121, 120, 120, 120, 118, 118, 118, 115, 115, 115, 109, 109, 109, 103, 103, 103, 97, 97, 97, 149, 149, 149, 148, 148, 148, 147, 147, 147, 145, 145, 145, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 149, 149, 149, 150, 150, 150, 151, 151, 151, 153, 153, 153, 157, 157, 157, 160, 160, 160, 160, 160, 160, 157, 157, 157, 155, 155, 155, 153, 153, 153, 153, 153, 153, 152, 152, 152, 151, 151, 151, 152, 152, 152, 154, 154, 154, 156, 156, 156, 158, 158, 158, 159, 159, 159, 158, 158, 158, 157, 157, 157, 154, 154, 154, 150, 150, 150, 146, 146, 146, 143, 143, 143, 139, 139, 139, 135, 135, 135, 130, 130, 130, 127, 127, 127, 125, 125, 125, 123, 123, 123, 119, 119, 119, 114, 114, 114, 110, 110, 110, 109, 109, 109, 107, 107, 107, 103, 103, 103, 99, 99, 99, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 104, 104, 104, 107, 107, 107, 110, 110, 110, 113, 113, 113, 117, 117, 117, 120, 120, 120, 123, 123, 123, 126, 126, 126, 128, 128, 128, 130, 130, 130, 132, 132, 132, 136, 136, 136, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 150, 150, 150, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 134, 134, 134, 134, 134, 134, 134, 134, 134, 132, 132, 132, 128, 128, 128, 125, 125, 125, 123, 123, 123, 122, 122, 122, 119, 119, 119, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 103, 103, 103, 101, 101, 101, 99, 99, 99, 96, 96, 96, 92, 92, 92, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 92, 92, 92, 94, 94, 94, 96, 96, 96, 97, 97, 97, 100, 100, 100, 104, 104, 104, 109, 109, 109, 114, 114, 114, 120, 120, 120, 123, 123, 123, 124, 124, 124, 125, 125, 125, 128, 128, 128, 131, 131, 131, 133, 133, 133, 132, 132, 132, 130, 130, 130, 131, 131, 131, 133, 133, 133, 138, 138, 138, 144, 144, 144, 151, 151, 151, 158, 158, 158, 162, 162, 162, 163, 163, 163, 162, 162, 162, 160, 160, 160, 158, 158, 158, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 153, 153, 153, 151, 151, 151, 149, 149, 149, 146, 146, 146, 142, 142, 142, 140, 140, 140, 138, 138, 138, 138, 138, 138, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 128, 128, 128, 126, 126, 126, 124, 124, 124, 123, 123, 123, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 149, 149, 151, 151, 151, 154, 154, 154, 158, 158, 158, 158, 158, 158, 157, 157, 157, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 157, 157, 157, 160, 160, 160, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 154, 154, 154, 149, 149, 149, 145, 145, 145, 141, 141, 141, 137, 137, 137, 132, 132, 132, 129, 129, 129, 127, 127, 127, 126, 126, 126, 123, 123, 123, 118, 118, 118, 115, 115, 115, 112, 112, 112, 109, 109, 109, 105, 105, 105, 102, 102, 102, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 99, 101, 101, 101, 102, 102, 102, 104, 104, 104, 105, 105, 105, 107, 107, 107, 110, 110, 110, 113, 113, 113, 116, 116, 116, 119, 119, 119, 123, 123, 123, 127, 127, 127, 130, 130, 130, 132, 132, 132, 134, 134, 134, 135, 135, 135, 137, 137, 137, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 145, 145, 145, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 148, 148, 150, 150, 150, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 152, 152, 152, 149, 149, 149, 149, 149, 149, 150, 150, 150, 151, 151, 151, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 130, 130, 130, 126, 126, 126, 123, 123, 123, 120, 120, 120, 119, 119, 119, 117, 117, 117, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 95, 95, 95, 91, 91, 91, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 89, 89, 89, 92, 92, 92, 94, 94, 94, 95, 95, 95, 98, 98, 98, 102, 102, 102, 108, 108, 108, 113, 113, 113, 119, 119, 119, 123, 123, 123, 124, 124, 124, 126, 126, 126, 130, 130, 130, 133, 133, 133, 134, 134, 134, 133, 133, 133, 133, 133, 133, 133, 133, 133, 135, 135, 135, 138, 138, 138, 145, 145, 145, 152, 152, 152, 160, 160, 160, 164, 164, 164, 166, 166, 166, 166, 166, 166, 165, 165, 165, 162, 162, 162, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 160, 160, 160, 158, 158, 158, 157, 157, 157, 157, 157, 157, 155, 155, 155, 152, 152, 152, 150, 150, 150, 147, 147, 147, 145, 145, 145, 142, 142, 142, 139, 139, 139, 136, 136, 136, 133, 133, 133, 130, 130, 130, 129, 129, 129, 128, 128, 128, 128, 128, 128, 129, 129, 129, 130, 130, 130, 129, 129, 129, 127, 127, 127, 125, 125, 125, 122, 122, 122, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 118, 118, 118, 114, 114, 114, 108, 108, 108, 102, 102, 102, 148, 148, 148, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 150, 150, 150, 154, 154, 154, 156, 156, 156, 156, 156, 156, 155, 155, 155, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 163, 163, 163, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 158, 158, 158, 155, 155, 155, 151, 151, 151, 147, 147, 147, 142, 142, 142, 137, 137, 137, 133, 133, 133, 130, 130, 130, 129, 129, 129, 127, 127, 127, 123, 123, 123, 119, 119, 119, 115, 115, 115, 111, 111, 111, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 102, 102, 102, 104, 104, 104, 107, 107, 107, 109, 109, 109, 111, 111, 111, 115, 115, 115, 118, 118, 118, 120, 120, 120, 123, 123, 123, 128, 128, 128, 132, 132, 132, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 142, 142, 142, 144, 144, 144, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 148, 148, 148, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 154, 154, 154, 154, 154, 154, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 151, 151, 151, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 156, 156, 156, 154, 154, 154, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 144, 144, 144, 140, 140, 140, 136, 136, 136, 133, 133, 133, 131, 131, 131, 131, 131, 131, 131, 131, 131, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 118, 118, 118, 116, 116, 116, 113, 113, 113, 110, 110, 110, 108, 108, 108, 106, 106, 106, 103, 103, 103, 101, 101, 101, 98, 98, 98, 95, 95, 95, 91, 91, 91, 87, 87, 87, 84, 84, 84, 84, 84, 84, 84, 84, 84, 83, 83, 83, 81, 81, 81, 82, 82, 82, 85, 85, 85, 89, 89, 89, 92, 92, 92, 94, 94, 94, 97, 97, 97, 102, 102, 102, 108, 108, 108, 113, 113, 113, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 132, 132, 132, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 140, 140, 140, 146, 146, 146, 153, 153, 153, 160, 160, 160, 164, 164, 164, 166, 166, 166, 167, 167, 167, 167, 167, 167, 165, 165, 165, 163, 163, 163, 163, 163, 163, 165, 165, 165, 165, 165, 165, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 161, 161, 161, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 146, 146, 146, 141, 141, 141, 137, 137, 137, 134, 134, 134, 131, 131, 131, 129, 129, 129, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 131, 131, 131, 129, 129, 129, 127, 127, 127, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 113, 113, 113, 107, 107, 107, 101, 101, 101, 148, 148, 148, 147, 147, 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 145, 145, 145, 144, 144, 144, 146, 146, 146, 149, 149, 149, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 162, 162, 162, 165, 165, 165, 167, 167, 167, 167, 167, 167, 166, 166, 166, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 154, 154, 154, 149, 149, 149, 143, 143, 143, 138, 138, 138, 135, 135, 135, 133, 133, 133, 131, 131, 131, 127, 127, 127, 122, 122, 122, 118, 118, 118, 113, 113, 113, 110, 110, 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 106, 106, 106, 104, 104, 104, 104, 104, 104, 106, 106, 106, 109, 109, 109, 111, 111, 111, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 143, 143, 143, 147, 147, 147, 149, 149, 149, 151, 151, 151, 153, 153, 153, 154, 154, 154, 154, 154, 154, 152, 152, 152, 152, 152, 152, 153, 153, 153, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 159, 159, 159, 160, 160, 160, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 153, 153, 153, 152, 152, 152, 150, 150, 150, 150, 150, 150, 151, 151, 151, 153, 153, 153, 155, 155, 155, 157, 157, 157, 158, 158, 158, 159, 159, 159, 159, 159, 159, 158, 158, 158, 157, 157, 157, 153, 153, 153, 151, 151, 151, 150, 150, 150, 149, 149, 149, 146, 146, 146, 143, 143, 143, 139, 139, 139, 136, 136, 136, 133, 133, 133, 131, 131, 131, 130, 130, 130, 130, 130, 130, 128, 128, 128, 124, 124, 124, 118, 118, 118, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 111, 111, 111, 109, 109, 109, 107, 107, 107, 105, 105, 105, 102, 102, 102, 98, 98, 98, 94, 94, 94, 88, 88, 88, 84, 84, 84, 80, 80, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 75, 75, 75, 76, 76, 76, 80, 80, 80, 86, 86, 86, 89, 89, 89, 92, 92, 92, 97, 97, 97, 103, 103, 103, 108, 108, 108, 112, 112, 112, 115, 115, 115, 118, 118, 118, 123, 123, 123, 128, 128, 128, 133, 133, 133, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 148, 148, 148, 154, 154, 154, 160, 160, 160, 164, 164, 164, 166, 166, 166, 168, 168, 168, 168, 168, 168, 166, 166, 166, 165, 165, 165, 166, 166, 166, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 167, 167, 167, 165, 165, 165, 162, 162, 162, 159, 159, 159, 157, 157, 157, 153, 153, 153, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 134, 134, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 123, 123, 123, 120, 120, 120, 118, 118, 118, 118, 118, 118, 119, 119, 119, 117, 117, 117, 112, 112, 112, 106, 106, 106, 101, 101, 101, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 144, 144, 144, 144, 144, 144, 143, 143, 143, 142, 142, 142, 140, 140, 140, 141, 141, 141, 143, 143, 143, 145, 145, 145, 146, 146, 146, 148, 148, 148, 151, 151, 151, 153, 153, 153, 153, 153, 153, 155, 155, 155, 159, 159, 159, 163, 163, 163, 166, 166, 166, 167, 167, 167, 166, 166, 166, 165, 165, 165, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 149, 149, 149, 143, 143, 143, 139, 139, 139, 137, 137, 137, 135, 135, 135, 131, 131, 131, 126, 126, 126, 121, 121, 121, 117, 117, 117, 114, 114, 114, 113, 113, 113, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 107, 107, 107, 109, 109, 109, 112, 112, 112, 113, 113, 113, 114, 114, 114, 116, 116, 116, 118, 118, 118, 122, 122, 122, 127, 127, 127, 133, 133, 133, 138, 138, 138, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 141, 141, 141, 144, 144, 144, 149, 149, 149, 154, 154, 154, 157, 157, 157, 160, 160, 160, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, 162, 162, 164, 164, 164, 165, 165, 165, 165, 165, 165, 163, 163, 163, 162, 162, 162, 162, 162, 162, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 154, 154, 154, 154, 154, 154, 156, 156, 156, 158, 158, 158, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 160, 160, 158, 158, 158, 155, 155, 155, 153, 153, 153, 150, 150, 150, 147, 147, 147, 144, 144, 144, 140, 140, 140, 138, 138, 138, 136, 136, 136, 133, 133, 133, 131, 131, 131, 129, 129, 129, 129, 129, 129, 126, 126, 126, 122, 122, 122, 117, 117, 117, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 109, 109, 109, 108, 108, 108, 107, 107, 107, 106, 106, 106, 104, 104, 104, 100, 100, 100, 94, 94, 94, 88, 88, 88, 83, 83, 83, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 71, 71, 71, 76, 76, 76, 82, 82, 82, 87, 87, 87, 91, 91, 91, 96, 96, 96, 101, 101, 101, 106, 106, 106, 110, 110, 110, 113, 113, 113, 117, 117, 117, 122, 122, 122, 128, 128, 128, 134, 134, 134, 138, 138, 138, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 144, 144, 144, 147, 147, 147, 151, 151, 151, 156, 156, 156, 160, 160, 160, 165, 165, 165, 168, 168, 168, 170, 170, 170, 170, 170, 170, 168, 168, 168, 167, 167, 167, 167, 167, 167, 169, 169, 169, 171, 171, 171, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 168, 168, 168, 165, 165, 165, 162, 162, 162, 159, 159, 159, 156, 156, 156, 151, 151, 151, 147, 147, 147, 144, 144, 144, 141, 141, 141, 138, 138, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 135, 135, 135, 134, 134, 134, 133, 133, 133, 131, 131, 131, 128, 128, 128, 124, 124, 124, 121, 121, 121, 119, 119, 119, 119, 119, 119, 119, 119, 119, 117, 117, 117, 113, 113, 113, 107, 107, 107, 102, 102, 102, 152, 152, 152, 153, 153, 153, 152, 152, 152, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 140, 140, 140, 138, 138, 138, 137, 137, 137, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 143, 143, 143, 147, 147, 147, 149, 149, 149, 151, 151, 151, 154, 154, 154, 159, 159, 159, 163, 163, 163, 166, 166, 166, 165, 165, 165, 164, 164, 164, 162, 162, 162, 161, 161, 161, 161, 161, 161, 162, 162, 162, 163, 163, 163, 163, 163, 163, 161, 161, 161, 158, 158, 158, 153, 153, 153, 147, 147, 147, 142, 142, 142, 140, 140, 140, 138, 138, 138, 134, 134, 134, 129, 129, 129, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 112, 112, 112, 110, 110, 110, 109, 109, 109, 111, 111, 111, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 122, 122, 122, 128, 128, 128, 134, 134, 134, 139, 139, 139, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 142, 142, 142, 146, 146, 146, 152, 152, 152, 159, 159, 159, 164, 164, 164, 167, 167, 167, 168, 168, 168, 167, 167, 167, 164, 164, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 166, 166, 166, 168, 168, 168, 169, 169, 169, 167, 167, 167, 165, 165, 165, 164, 164, 164, 165, 165, 165, 166, 166, 166, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 162, 162, 162, 164, 164, 164, 164, 164, 164, 163, 163, 163, 162, 162, 162, 160, 160, 160, 159, 159, 159, 156, 156, 156, 153, 153, 153, 150, 150, 150, 145, 145, 145, 141, 141, 141, 137, 137, 137, 136, 136, 136, 136, 136, 136, 134, 134, 134, 131, 131, 131, 129, 129, 129, 128, 128, 128, 125, 125, 125, 120, 120, 120, 116, 116, 116, 113, 113, 113, 111, 111, 111, 109, 109, 109, 108, 108, 108, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 104, 104, 104, 100, 100, 100, 94, 94, 94, 89, 89, 89, 83, 83, 83, 77, 77, 77, 72, 72, 72, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 68, 68, 72, 72, 72, 78, 78, 78, 84, 84, 84, 89, 89, 89, 93, 93, 93, 97, 97, 97, 102, 102, 102, 106, 106, 106, 110, 110, 110, 116, 116, 116, 122, 122, 122, 128, 128, 128, 134, 134, 134, 137, 137, 137, 140, 140, 140, 141, 141, 141, 143, 143, 143, 144, 144, 144, 147, 147, 147, 149, 149, 149, 153, 153, 153, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 170, 170, 170, 168, 168, 168, 169, 169, 169, 171, 171, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 168, 168, 168, 166, 166, 166, 163, 163, 163, 159, 159, 159, 155, 155, 155, 152, 152, 152, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 141, 141, 141, 140, 140, 140, 139, 139, 139, 136, 136, 136, 135, 135, 135, 135, 135, 135, 133, 133, 133, 131, 131, 131, 128, 128, 128, 125, 125, 125, 122, 122, 122, 120, 120, 120, 119, 119, 119, 118, 118, 118, 113, 113, 113, 108, 108, 108, 104, 104, 104, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 148, 148, 148, 145, 145, 145, 143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 139, 139, 139, 144, 144, 144, 147, 147, 147, 149, 149, 149, 153, 153, 153, 158, 158, 158, 162, 162, 162, 164, 164, 164, 163, 163, 163, 161, 161, 161, 160, 160, 160, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 162, 162, 162, 159, 159, 159, 155, 155, 155, 149, 149, 149, 145, 145, 145, 143, 143, 143, 142, 142, 142, 138, 138, 138, 133, 133, 133, 128, 128, 128, 124, 124, 124, 120, 120, 120, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 115, 115, 115, 117, 117, 117, 117, 117, 117, 118, 118, 118, 120, 120, 120, 124, 124, 124, 128, 128, 128, 134, 134, 134, 139, 139, 139, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144, 144, 145, 145, 145, 149, 149, 149, 155, 155, 155, 162, 162, 162, 168, 168, 168, 172, 172, 172, 173, 173, 173, 171, 171, 171, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 167, 167, 167, 167, 167, 167, 168, 168, 168, 169, 169, 169, 171, 171, 171, 170, 170, 170, 168, 168, 168, 165, 165, 165, 165, 165, 165, 167, 167, 167, 168, 168, 168, 169, 169, 169, 168, 168, 168, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 165, 165, 165, 167, 167, 167, 167, 167, 167, 165, 165, 165, 163, 163, 163, 161, 161, 161, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 143, 143, 143, 138, 138, 138, 135, 135, 135, 135, 135, 135, 135, 135, 135, 133, 133, 133, 132, 132, 132, 130, 130, 130, 127, 127, 127, 123, 123, 123, 119, 119, 119, 116, 116, 116, 114, 114, 114, 111, 111, 111, 107, 107, 107, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, 102, 98, 98, 98, 93, 93, 93, 88, 88, 88, 82, 82, 82, 76, 76, 76, 71, 71, 71, 67, 67, 67, 65, 65, 65, 65, 65, 65, 66, 66, 66, 70, 70, 70, 75, 75, 75, 80, 80, 80, 85, 85, 85, 89, 89, 89, 92, 92, 92, 97, 97, 97, 102, 102, 102, 108, 108, 108, 115, 115, 115, 122, 122, 122, 128, 128, 128, 132, 132, 132, 135, 135, 135, 137, 137, 137, 140, 140, 140, 142, 142, 142, 145, 145, 145, 148, 148, 148, 151, 151, 151, 154, 154, 154, 158, 158, 158, 163, 163, 163, 168, 168, 168, 172, 172, 172, 174, 174, 174, 173, 173, 173, 171, 171, 171, 169, 169, 169, 170, 170, 170, 173, 173, 173, 175, 175, 175, 176, 176, 176, 175, 175, 175, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 171, 171, 171, 167, 167, 167, 164, 164, 164, 160, 160, 160, 156, 156, 156, 153, 153, 153, 150, 150, 150, 147, 147, 147, 145, 145, 145, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 122, 122, 122, 120, 120, 120, 118, 118, 118, 114, 114, 114, 109, 109, 109, 105, 105, 105, 154, 154, 154, 156, 156, 156, 155, 155, 155, 152, 152, 152, 150, 150, 150, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 145, 145, 145, 142, 142, 142, 140, 140, 140, 138, 138, 138, 137, 137, 137, 137, 137, 137, 136, 136, 136, 135, 135, 135, 135, 135, 135, 137, 137, 137, 141, 141, 141, 145, 145, 145, 149, 149, 149, 152, 152, 152, 157, 157, 157, 161, 161, 161, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 158, 158, 158, 158, 158, 158, 160, 160, 160, 161, 161, 161, 162, 162, 162, 162, 162, 162, 159, 159, 159, 155, 155, 155, 151, 151, 151, 149, 149, 149, 148, 148, 148, 146, 146, 146, 142, 142, 142, 137, 137, 137, 132, 132, 132, 127, 127, 127, 122, 122, 122, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 113, 113, 113, 112, 112, 112, 112, 112, 112, 114, 114, 114, 116, 116, 116, 117, 117, 117, 118, 118, 118, 121, 121, 121, 125, 125, 125, 128, 128, 128, 133, 133, 133, 137, 137, 137, 141, 141, 141, 143, 143, 143, 144, 144, 144, 145, 145, 145, 147, 147, 147, 152, 152, 152, 158, 158, 158, 165, 165, 165, 171, 171, 171, 174, 174, 174, 175, 175, 175, 174, 174, 174, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 169, 169, 169, 166, 166, 166, 166, 166, 166, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 169, 169, 169, 168, 168, 168, 167, 167, 167, 168, 168, 168, 170, 170, 170, 171, 171, 171, 168, 168, 168, 165, 165, 165, 163, 163, 163, 161, 161, 161, 158, 158, 158, 153, 153, 153, 147, 147, 147, 142, 142, 142, 137, 137, 137, 135, 135, 135, 134, 134, 134, 133, 133, 133, 132, 132, 132, 131, 131, 131, 130, 130, 130, 127, 127, 127, 122, 122, 122, 117, 117, 117, 115, 115, 115, 113, 113, 113, 110, 110, 110, 107, 107, 107, 105, 105, 105, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 99, 99, 99, 95, 95, 95, 90, 90, 90, 86, 86, 86, 82, 82, 82, 76, 76, 76, 72, 72, 72, 68, 68, 68, 67, 67, 67, 66, 66, 66, 66, 66, 66, 68, 68, 68, 72, 72, 72, 77, 77, 77, 81, 81, 81, 85, 85, 85, 88, 88, 88, 93, 93, 93, 99, 99, 99, 106, 106, 106, 114, 114, 114, 122, 122, 122, 127, 127, 127, 130, 130, 130, 131, 131, 131, 134, 134, 134, 136, 136, 136, 140, 140, 140, 143, 143, 143, 147, 147, 147, 151, 151, 151, 154, 154, 154, 158, 158, 158, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 172, 172, 172, 171, 171, 171, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 175, 175, 175, 174, 174, 174, 174, 174, 174, 175, 175, 175, 176, 176, 176, 174, 174, 174, 172, 172, 172, 168, 168, 168, 163, 163, 163, 159, 159, 159, 156, 156, 156, 152, 152, 152, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 147, 147, 147, 145, 145, 145, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 138, 138, 138, 135, 135, 135, 130, 130, 130, 125, 125, 125, 121, 121, 121, 118, 118, 118, 115, 115, 115, 111, 111, 111, 108, 108, 108, 153, 153, 153, 155, 155, 155, 154, 154, 154, 152, 152, 152, 150, 150, 150, 149, 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, 146, 146, 146, 146, 144, 144, 144, 142, 142, 142, 140, 140, 140, 139, 139, 139, 139, 139, 139, 137, 137, 137, 136, 136, 136, 134, 134, 134, 136, 136, 136, 139, 139, 139, 143, 143, 143, 147, 147, 147, 151, 151, 151, 155, 155, 155, 159, 159, 159, 161, 161, 161, 161, 161, 161, 159, 159, 159, 158, 158, 158, 157, 157, 157, 157, 157, 157, 158, 158, 158, 160, 160, 160, 161, 161, 161, 161, 161, 161, 158, 158, 158, 155, 155, 155, 153, 153, 153, 152, 152, 152, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 131, 131, 131, 125, 125, 125, 119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 114, 114, 114, 113, 113, 113, 111, 111, 111, 112, 112, 112, 113, 113, 113, 115, 115, 115, 117, 117, 117, 121, 121, 121, 124, 124, 124, 127, 127, 127, 130, 130, 130, 135, 135, 135, 139, 139, 139, 141, 141, 141, 143, 143, 143, 145, 145, 145, 149, 149, 149, 154, 154, 154, 161, 161, 161, 167, 167, 167, 172, 172, 172, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 170, 170, 170, 167, 167, 167, 167, 167, 167, 169, 169, 169, 172, 172, 172, 173, 173, 173, 174, 174, 174, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 173, 173, 173, 176, 176, 176, 176, 176, 176, 173, 173, 173, 169, 169, 169, 165, 165, 165, 162, 162, 162, 158, 158, 158, 153, 153, 153, 147, 147, 147, 141, 141, 141, 138, 138, 138, 136, 136, 136, 134, 134, 134, 132, 132, 132, 130, 130, 130, 129, 129, 129, 129, 129, 129, 126, 126, 126, 121, 121, 121, 116, 116, 116, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 100, 100, 100, 97, 97, 97, 93, 93, 93, 89, 89, 89, 86, 86, 86, 82, 82, 82, 78, 78, 78, 75, 75, 75, 72, 72, 72, 70, 70, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 71, 71, 71, 74, 74, 74, 77, 77, 77, 81, 81, 81, 86, 86, 86, 92, 92, 92, 98, 98, 98, 105, 105, 105, 113, 113, 113, 120, 120, 120, 125, 125, 125, 127, 127, 127, 128, 128, 128, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 146, 146, 146, 150, 150, 150, 154, 154, 154, 157, 157, 157, 161, 161, 161, 165, 165, 165, 168, 168, 168, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 173, 173, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 172, 172, 172, 167, 167, 167, 162, 162, 162, 158, 158, 158, 155, 155, 155, 153, 153, 153, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 151, 151, 151, 150, 150, 150, 149, 149, 149, 148, 148, 148, 146, 146, 146, 143, 143, 143, 139, 139, 139, 134, 134, 134, 128, 128, 128, 124, 124, 124, 122, 122, 122, 119, 119, 119, 116, 116, 116, 112, 112, 112, 151, 151, 151, 152, 152, 152, 152, 152, 152, 150, 150, 150, 149, 149, 149, 147, 147, 147, 146, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 142, 142, 142, 141, 141, 141, 140, 140, 140, 140, 140, 140, 139, 139, 139, 137, 137, 137, 134, 134, 134, 134, 134, 134, 136, 136, 136, 140, 140, 140, 144, 144, 144, 148, 148, 148, 152, 152, 152, 157, 157, 157, 160, 160, 160, 161, 161, 161, 159, 159, 159, 158, 158, 158, 156, 156, 156, 156, 156, 156, 157, 157, 157, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 154, 154, 154, 153, 153, 153, 154, 154, 154, 153, 153, 153, 151, 151, 151, 148, 148, 148, 143, 143, 143, 139, 139, 139, 134, 134, 134, 128, 128, 128, 122, 122, 122, 117, 117, 117, 116, 116, 116, 116, 116, 116, 115, 115, 115, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 113, 113, 116, 116, 116, 119, 119, 119, 122, 122, 122, 124, 124, 124, 127, 127, 127, 132, 132, 132, 136, 136, 136, 139, 139, 139, 141, 141, 141, 145, 145, 145, 151, 151, 151, 157, 157, 157, 162, 162, 162, 167, 167, 167, 171, 171, 171, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 170, 170, 170, 169, 169, 169, 169, 169, 169, 171, 171, 171, 174, 174, 174, 176, 176, 176, 176, 176, 176, 175, 175, 175, 174, 174, 174, 174, 174, 174, 176, 176, 176, 178, 178, 178, 181, 181, 181, 181, 181, 181, 178, 178, 178, 173, 173, 173, 169, 169, 169, 165, 165, 165, 160, 160, 160, 154, 154, 154, 147, 147, 147, 141, 141, 141, 139, 139, 139, 138, 138, 138, 136, 136, 136, 132, 132, 132, 129, 129, 129, 128, 128, 128, 127, 127, 127, 124, 124, 124, 119, 119, 119, 115, 115, 115, 113, 113, 113, 112, 112, 112, 110, 110, 110, 107, 107, 107, 104, 104, 104, 103, 103, 103, 101, 101, 101, 100, 100, 100, 98, 98, 98, 96, 96, 96, 94, 94, 94, 91, 91, 91, 88, 88, 88, 85, 85, 85, 81, 81, 81, 78, 78, 78, 75, 75, 75, 73, 73, 73, 71, 71, 71, 70, 70, 70, 70, 70, 70, 71, 71, 71, 73, 73, 73, 75, 75, 75, 79, 79, 79, 86, 86, 86, 92, 92, 92, 98, 98, 98, 104, 104, 104, 110, 110, 110, 117, 117, 117, 123, 123, 123, 126, 126, 126, 126, 126, 126, 127, 127, 127, 130, 130, 130, 134, 134, 134, 139, 139, 139, 144, 144, 144, 148, 148, 148, 152, 152, 152, 157, 157, 157, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 171, 171, 171, 173, 173, 173, 175, 175, 175, 176, 176, 176, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 172, 172, 172, 167, 167, 167, 163, 163, 163, 160, 160, 160, 158, 158, 158, 158, 158, 158, 159, 159, 159, 160, 160, 160, 159, 159, 159, 157, 157, 157, 156, 156, 156, 154, 154, 154, 152, 152, 152, 150, 150, 150, 146, 146, 146, 142, 142, 142, 137, 137, 137, 133, 133, 133, 129, 129, 129, 127, 127, 127, 125, 125, 125, 121, 121, 121, 118, 118, 118, 148, 148, 148, 148, 148, 148, 148, 148, 148, 147, 147, 147, 146, 146, 146, 144, 144, 144, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 136, 136, 136, 133, 133, 133, 132, 132, 132, 133, 133, 133, 136, 136, 136, 140, 140, 140, 144, 144, 144, 149, 149, 149, 154, 154, 154, 158, 158, 158, 160, 160, 160, 159, 159, 159, 158, 158, 158, 156, 156, 156, 155, 155, 155, 155, 155, 155, 156, 156, 156, 158, 158, 158, 158, 158, 158, 156, 156, 156, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 151, 151, 151, 148, 148, 148, 144, 144, 144, 141, 141, 141, 136, 136, 136, 130, 130, 130, 123, 123, 123, 118, 118, 118, 116, 116, 116, 117, 117, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 113, 113, 113, 113, 113, 113, 114, 114, 114, 115, 115, 115, 117, 117, 117, 119, 119, 119, 121, 121, 121, 125, 125, 125, 130, 130, 130, 135, 135, 135, 138, 138, 138, 141, 141, 141, 145, 145, 145, 151, 151, 151, 157, 157, 157, 162, 162, 162, 165, 165, 165, 168, 168, 168, 169, 169, 169, 168, 168, 168, 168, 168, 168, 168, 168, 168, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 173, 173, 173, 175, 175, 175, 175, 175, 175, 173, 173, 173, 172, 172, 172, 171, 171, 171, 171, 171, 171, 173, 173, 173, 175, 175, 175, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 184, 184, 184, 185, 185, 185, 184, 184, 184, 181, 181, 181, 177, 177, 177, 172, 172, 172, 167, 167, 167, 162, 162, 162, 155, 155, 155, 147, 147, 147, 141, 141, 141, 139, 139, 139, 138, 138, 138, 136, 136, 136, 133, 133, 133, 129, 129, 129, 126, 126, 126, 124, 124, 124, 121, 121, 121, 118, 118, 118, 114, 114, 114, 112, 112, 112, 111, 111, 111, 109, 109, 109, 106, 106, 106, 104, 104, 104, 103, 103, 103, 102, 102, 102, 100, 100, 100, 98, 98, 98, 97, 97, 97, 95, 95, 95, 93, 93, 93, 90, 90, 90, 87, 87, 87, 83, 83, 83, 80, 80, 80, 77, 77, 77, 73, 73, 73, 70, 70, 70, 69, 69, 69, 70, 70, 70, 72, 72, 72, 73, 73, 73, 74, 74, 74, 79, 79, 79, 86, 86, 86, 93, 93, 93, 98, 98, 98, 103, 103, 103, 108, 108, 108, 115, 115, 115, 121, 121, 121, 125, 125, 125, 126, 126, 126, 126, 126, 126, 128, 128, 128, 132, 132, 132, 137, 137, 137, 141, 141, 141, 145, 145, 145, 150, 150, 150, 155, 155, 155, 160, 160, 160, 164, 164, 164, 167, 167, 167, 170, 170, 170, 172, 172, 172, 174, 174, 174, 176, 176, 176, 177, 177, 177, 177, 177, 177, 176, 176, 176, 176, 176, 176, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 177, 177, 177, 173, 173, 173, 169, 169, 169, 166, 166, 166, 163, 163, 163, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 161, 161, 161, 160, 160, 160, 158, 158, 158, 156, 156, 156, 152, 152, 152, 148, 148, 148, 144, 144, 144, 140, 140, 140, 137, 137, 137, 135, 135, 135, 133, 133, 133, 131, 131, 131, 127, 127, 127, 123, 123, 123, 142, 142, 142, 143, 143, 143, 144, 144, 144, 144, 144, 144, 143, 143, 143, 141, 141, 141, 139, 139, 139, 138, 138, 138, 138, 138, 138, 139, 139, 139, 140, 140, 140, 139, 139, 139, 137, 137, 137, 136, 136, 136, 137, 137, 137, 137, 137, 137, 135, 135, 135, 131, 131, 131, 129, 129, 129, 130, 130, 130, 133, 133, 133, 137, 137, 137, 141, 141, 141, 145, 145, 145, 150, 150, 150, 155, 155, 155, 158, 158, 158, 158, 158, 158, 158, 158, 158, 156, 156, 156, 155, 155, 155, 154, 154, 154, 155, 155, 155, 157, 157, 157, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 151, 151, 151, 148, 148, 148, 146, 146, 146, 143, 143, 143, 138, 138, 138, 132, 132, 132, 125, 125, 125, 120, 120, 120, 119, 119, 119, 120, 120, 120, 121, 121, 121, 121, 121, 121, 119, 119, 119, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 128, 128, 128, 134, 134, 134, 138, 138, 138, 141, 141, 141, 144, 144, 144, 148, 148, 148, 153, 153, 153, 158, 158, 158, 162, 162, 162, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 165, 165, 165, 168, 168, 168, 170, 170, 170, 171, 171, 171, 172, 172, 172, 175, 175, 175, 176, 176, 176, 176, 176, 176, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 177, 177, 177, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 179, 179, 179, 180, 180, 180, 183, 183, 183, 186, 186, 186, 188, 188, 188, 187, 187, 187, 185, 185, 185, 182, 182, 182, 178, 178, 178, 174, 174, 174, 169, 169, 169, 163, 163, 163, 156, 156, 156, 148, 148, 148, 142, 142, 142, 140, 140, 140, 139, 139, 139, 137, 137, 137, 133, 133, 133, 128, 128, 128, 124, 124, 124, 121, 121, 121, 118, 118, 118, 116, 116, 116, 113, 113, 113, 111, 111, 111, 108, 108, 108, 106, 106, 106, 104, 104, 104, 104, 104, 104, 103, 103, 103, 102, 102, 102, 101, 101, 101, 99, 99, 99, 96, 96, 96, 95, 95, 95, 93, 93, 93, 91, 91, 91, 88, 88, 88, 84, 84, 84, 80, 80, 80, 76, 76, 76, 72, 72, 72, 68, 68, 68, 67, 67, 67, 68, 68, 68, 71, 71, 71, 72, 72, 72, 74, 74, 74, 79, 79, 79, 86, 86, 86, 93, 93, 93, 98, 98, 98, 102, 102, 102, 107, 107, 107, 113, 113, 113, 119, 119, 119, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 130, 130, 130, 134, 134, 134, 138, 138, 138, 141, 141, 141, 146, 146, 146, 153, 153, 153, 159, 159, 159, 163, 163, 163, 166, 166, 166, 169, 169, 169, 172, 172, 172, 174, 174, 174, 177, 177, 177, 178, 178, 178, 178, 178, 178, 177, 177, 177, 177, 177, 177, 179, 179, 179, 181, 181, 181, 184, 184, 184, 184, 184, 184, 183, 183, 183, 182, 182, 182, 181, 181, 181, 181, 181, 181, 179, 179, 179, 177, 177, 177, 174, 174, 174, 172, 172, 172, 169, 169, 169, 166, 166, 166, 164, 164, 164, 164, 164, 164, 163, 163, 163, 163, 163, 163, 162, 162, 162, 160, 160, 160, 157, 157, 157, 153, 153, 153, 149, 149, 149, 146, 146, 146, 143, 143, 143, 141, 141, 141, 138, 138, 138, 137, 137, 137, 135, 135, 135, 132, 132, 132, 128, 128, 128, 137, 137, 137, 138, 138, 138, 140, 140, 140, 141, 141, 141, 140, 140, 140, 138, 138, 138, 136, 136, 136, 135, 135, 135, 135, 135, 135, 136, 136, 136, 137, 137, 137, 136, 136, 136, 134, 134, 134, 133, 133, 133, 133, 133, 133, 134, 134, 134, 133, 133, 133, 130, 130, 130, 128, 128, 128, 129, 129, 129, 132, 132, 132, 135, 135, 135, 138, 138, 138, 143, 143, 143, 147, 147, 147, 152, 152, 152, 155, 155, 155, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 154, 154, 154, 155, 155, 155, 156, 156, 156, 158, 158, 158, 156, 156, 156, 154, 154, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 150, 150, 150, 148, 148, 148, 145, 145, 145, 140, 140, 140, 134, 134, 134, 128, 128, 128, 123, 123, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 125, 123, 123, 123, 122, 122, 122, 121, 121, 121, 118, 118, 118, 116, 116, 116, 115, 115, 115, 117, 117, 117, 120, 120, 120, 123, 123, 123, 127, 127, 127, 132, 132, 132, 137, 137, 137, 140, 140, 140, 142, 142, 142, 145, 145, 145, 149, 149, 149, 154, 154, 154, 158, 158, 158, 160, 160, 160, 161, 161, 161, 160, 160, 160, 161, 161, 161, 164, 164, 164, 167, 167, 167, 169, 169, 169, 170, 170, 170, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 176, 176, 176, 179, 179, 179, 181, 181, 181, 183, 183, 183, 183, 183, 183, 183, 183, 183, 182, 182, 182, 182, 182, 182, 182, 182, 182, 185, 185, 185, 188, 188, 188, 190, 190, 190, 189, 189, 189, 185, 185, 185, 181, 181, 181, 178, 178, 178, 174, 174, 174, 169, 169, 169, 164, 164, 164, 157, 157, 157, 150, 150, 150, 145, 145, 145, 142, 142, 142, 141, 141, 141, 138, 138, 138, 134, 134, 134, 128, 128, 128, 123, 123, 123, 119, 119, 119, 116, 116, 116, 113, 113, 113, 111, 111, 111, 107, 107, 107, 105, 105, 105, 103, 103, 103, 102, 102, 102, 102, 102, 102, 103, 103, 103, 102, 102, 102, 100, 100, 100, 97, 97, 97, 95, 95, 95, 94, 94, 94, 93, 93, 93, 90, 90, 90, 86, 86, 86, 82, 82, 82, 78, 78, 78, 74, 74, 74, 69, 69, 69, 66, 66, 66, 64, 64, 64, 65, 65, 65, 68, 68, 68, 71, 71, 71, 74, 74, 74, 79, 79, 79, 85, 85, 85, 91, 91, 91, 96, 96, 96, 101, 101, 101, 106, 106, 106, 112, 112, 112, 117, 117, 117, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 125, 125, 125, 130, 130, 130, 134, 134, 134, 138, 138, 138, 143, 143, 143, 150, 150, 150, 156, 156, 156, 161, 161, 161, 164, 164, 164, 167, 167, 167, 170, 170, 170, 173, 173, 173, 175, 175, 175, 177, 177, 177, 179, 179, 179, 180, 180, 180, 181, 181, 181, 181, 181, 181, 184, 184, 184, 186, 186, 186, 187, 187, 187, 186, 186, 186, 184, 184, 184, 183, 183, 183, 181, 181, 181, 180, 180, 180, 179, 179, 179, 178, 178, 178, 177, 177, 177, 173, 173, 173, 170, 170, 170, 167, 167, 167, 165, 165, 165, 164, 164, 164, 163, 163, 163, 162, 162, 162, 161, 161, 161, 158, 158, 158, 154, 154, 154, 151, 151, 151, 148, 148, 148, 146, 146, 146, 144, 144, 144, 141, 141, 141, 139, 139, 139, 138, 138, 138, 136, 136, 136, 132, 132, 132), -"format": "RGB8", -"height": 400, -"mipmaps": false, -"width": 200 -} - -[sub_resource type="ImageTexture" id="ImageTexture_bh7st"] -image = SubResource("Image_iltsg") - [node name="PreviewScratchpad" type="Control"] layout_mode = 3 anchors_preset = 0 @@ -30,5 +18,4 @@ show_behind_parent = true layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -texture = SubResource("ImageTexture_bh7st") stretch_mode = 5 From 76b2961c09a353d8bf5ea7fa2b6217a4abdfe019 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:00:58 +0000 Subject: [PATCH 15/94] Reworked texture importer logic, don't use custom importers anymore. It's become too hard to make custom texture importers, as Godot still doesn't expose helpers to support the same features as the built-in importers. Now we generate plain images with hopefully the right defaults in .import files. --- .../packed_texture_array_importer.gd | 134 ------ .../packed_texture_importer.gd | 129 ------ .../packed_textures/packed_texture_util.gd | 7 + .../stream_texture_importer.gd | 416 ------------------ .../texture_layered_importer.gd | 324 -------------- addons/zylann.hterrain/tools/plugin.gd | 20 +- .../set_editor/texture_set_import_editor.gd | 410 ++++++++--------- .../tools/util/resource_importer_texture.gd | 19 + .../util/resource_importer_texture_layered.gd | 9 + 9 files changed, 253 insertions(+), 1215 deletions(-) delete mode 100644 addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd delete mode 100644 addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd delete mode 100644 addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd delete mode 100644 addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd create mode 100644 addons/zylann.hterrain/tools/util/resource_importer_texture.gd create mode 100644 addons/zylann.hterrain/tools/util/resource_importer_texture_layered.gd diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd deleted file mode 100644 index 735ed493..00000000 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_array_importer.gd +++ /dev/null @@ -1,134 +0,0 @@ -@tool -extends EditorImportPlugin - -const HT_TextureLayeredImporter = preload("./texture_layered_importer.gd") -const HT_PackedTextureUtil = preload("./packed_texture_util.gd") -const HT_Errors = preload("../../util/errors.gd") -const HT_Result = preload("../util/result.gd") -const HT_Logger = preload("../../util/logger.gd") - -const IMPORTER_NAME = "hterrain_packed_texture_array_importer" -const RESOURCE_TYPE = "TextureArray" - -var _logger = HT_Logger.get_for(self) - - -func _get_importer_name() -> String: - return IMPORTER_NAME - - -func _get_visible_name() -> String: - # This shows up next to "Import As:" - return "HTerrainPackedTextureArray" - - -func _get_recognized_extensions() -> PackedStringArray: - return PackedStringArray(["packed_texarr"]) - - -func _get_save_extension() -> String: - # Same as Godot's default TextureArray importer - return "ctexarray" - - -func _get_resource_type() -> String: - return RESOURCE_TYPE - - -func _get_preset_count() -> int: - return 1 - - -func _get_preset_name(preset_index: int) -> String: - return "" - - -func _get_import_options(path: String, preset_index: int) -> Array: - return [ - { - "name": "compress/mode", - "default_value": HT_TextureLayeredImporter.COMPRESS_VIDEO_RAM, - "property_hint": PROPERTY_HINT_ENUM, - "hint_string": HT_TextureLayeredImporter.COMPRESS_HINT_STRING - }, - { - "name": "flags/mipmaps", - "default_value": true - } - ] - - -func _get_option_visibility(path: String, option_name: StringName, options: Dictionary) -> bool: - return true - - -func _import(p_source_path: String, p_save_path: String, options: Dictionary, - r_platform_variants: Array[String], r_gen_files: Array[String]) -> Error: - - var result := _import_internal( - p_source_path, p_save_path, options, r_platform_variants, r_gen_files) - - if not result.success: - _logger.error(result.get_message()) - # TODO Show detailed error in a popup if result is negative - - var code : int = result.value - return code - - -func _import_internal(p_source_path: String, p_save_path: String, options: Dictionary, - r_platform_variants: Array, r_gen_files: Array) -> HT_Result: - - var f := FileAccess.open(p_source_path, FileAccess.READ) - if f == null: - var err := FileAccess.get_open_error() - return HT_Result.new(false, "Could not open file {0}: {1}" \ - .format([p_source_path, HT_Errors.get_message(err)])) \ - .with_value(err) - var text := f.get_as_text() - f = null - - var json = JSON.new() - var json_err := json.parse(text) - if json_err != OK: - return HT_Result.new(false, "Failed to parse file {0}: {1}" \ - .format([p_source_path, json.get_error_message()])) \ - .with_value(json_err) - var json_data : Dictionary = json.data - - var resolution : int = int(json_data.resolution) - var contains_albedo : bool = json_data.get("contains_albedo", false) - var layers : Array = json_data.get("layers") - - var images := [] - - for layer_index in len(layers): - var sources = layers[layer_index] - var result = HT_PackedTextureUtil.generate_image(sources, resolution, _logger) - - if not result.success: - return HT_Result.new(false, - "While importing layer {0}".format([layer_index]), result) \ - .with_value(result.value) - - var im : Image = result.value - images.append(im) - - var result = HT_TextureLayeredImporter.import( - p_source_path, - images, - p_save_path, - r_platform_variants, - r_gen_files, - contains_albedo, - _get_visible_name(), - options["compress/mode"], - options["flags/mipmaps"]) - - if not result.success: - return HT_Result.new(false, - "While importing {0}".format([p_source_path]), result) \ - .with_value(result.value) - - return HT_Result.new(true).with_value(OK) - diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd deleted file mode 100644 index 66bdf082..00000000 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_importer.gd +++ /dev/null @@ -1,129 +0,0 @@ -@tool -extends EditorImportPlugin - -const HT_StreamTextureImporter = preload("./stream_texture_importer.gd") -const HT_PackedTextureUtil = preload("./packed_texture_util.gd") -const HT_Errors = preload("../../util/errors.gd") -const HT_Result = preload("../util/result.gd") -const HT_Logger = preload("../../util/logger.gd") - -const IMPORTER_NAME = "hterrain_packed_texture_importer" -const RESOURCE_TYPE = "StreamTexture" - -var _logger = HT_Logger.get_for(self) - - -func _get_importer_name() -> String: - return IMPORTER_NAME - - -func _get_visible_name() -> String: - # This shows up next to "Import As:" - return "HTerrainPackedTexture" - - -func _get_recognized_extensions() -> PackedStringArray: - return PackedStringArray(["packed_tex"]) - - -func _get_save_extension() -> String: - # Same as Godot's default CompressedTexture importer - return "ctex" - - -func _get_resource_type() -> String: - return RESOURCE_TYPE - - -func _get_preset_count() -> int: - return 1 - - -func _get_preset_name(preset_index: int) -> String: - return "" - - -func _get_import_options(path: String, preset_index: int) -> Array: - return [ - { - "name": "compress/mode", - "default_value": HT_StreamTextureImporter.COMPRESS_VIDEO_RAM, - "property_hint": PROPERTY_HINT_ENUM, - "hint_string": HT_StreamTextureImporter.COMPRESS_HINT_STRING - }, - { - "name": "flags/mipmaps", - "default_value": true - } - ] - - -func _get_option_visibility(path: String, option_name: StringName, options: Dictionary) -> bool: - return true - - -func _import(p_source_path: String, p_save_path: String, options: Dictionary, - r_platform_variants: Array[String], r_gen_files: Array[String]) -> Error: - - var result := _import_internal( - p_source_path, p_save_path, options, r_platform_variants, r_gen_files) - - if not result.success: - _logger.error(result.get_message()) - # TODO Show detailed error in a popup if result is negative - - var code : int = result.value - return code - - -func _import_internal(p_source_path: String, p_save_path: String, options: Dictionary, - r_platform_variants: Array, r_gen_files: Array) -> HT_Result: - - var f := FileAccess.open(p_source_path, FileAccess.READ) - if f == null: - var err := FileAccess.get_open_error() - return HT_Result.new(false, "Could not open file {0}: {1}" \ - .format([p_source_path, HT_Errors.get_message(err)])) \ - .with_value(err) - var text := f.get_as_text() - f = null - - var json = JSON.new() - var json_err := json.parse(text) - if json_err != OK: - return HT_Result.new(false, "Failed to parse file {0}: {1}" \ - .format([p_source_path, json.get_error_message()])) \ - .with_value(json_err) - var json_data : Dictionary = json.data - - var resolution : int = int(json_data.resolution) - var contains_albedo : bool = json_data.get("contains_albedo", false) - var sources = json_data.get("src") - - var result := HT_PackedTextureUtil.generate_image(sources, resolution, _logger) - - if not result.success: - return HT_Result.new(false, - "While importing {0}".format([p_source_path]), result) \ - .with_value(result.value) - - var image : Image = result.value - - result = HT_StreamTextureImporter.import( - p_source_path, - image, - p_save_path, - r_platform_variants, - r_gen_files, - contains_albedo, - _get_visible_name(), - options["compress/mode"], - options["flags/mipmaps"]) - - if not result.success: - return HT_Result.new(false, - "While importing {0}".format([p_source_path]), result) \ - .with_value(result.value) - - return HT_Result.new(true).with_value(OK) - diff --git a/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd b/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd index 15d5ac1b..4032212e 100644 --- a/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd +++ b/addons/zylann.hterrain/tools/packed_textures/packed_texture_util.gd @@ -9,6 +9,12 @@ const _transform_params = [ ] +# sources: { +# "a": "path_to_image_where_red_channel_will_be_stored_in_alpha.png", +# "rgb": "path_to_image_where_rgb_channels_will_be_stored.png" +# "rgba": "path_to_image.png", +# "rgb": "#hexcolor" +# } static func generate_image(sources: Dictionary, resolution: int, logger) -> HT_Result: var image := Image.create(resolution, resolution, true, Image.FORMAT_RGBA8) @@ -77,3 +83,4 @@ static func _flip_normalmap_y(image: Image): col.g = 1.0 - col.g image.set_pixel(x, y, col) + diff --git a/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd b/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd deleted file mode 100644 index 8a5df570..00000000 --- a/addons/zylann.hterrain/tools/packed_textures/stream_texture_importer.gd +++ /dev/null @@ -1,416 +0,0 @@ -@tool - -# TODO Port API usage to Godot 4 - -# TODO Godot does not have an API to make custom texture importers easier. -# So we have to re-implement the entire logic of `ResourceImporterTexture`. -# See https://github.com/godotengine/godot/issues/24381 - -const HT_Result = preload("../util/result.gd") -const HT_Errors = preload("../../util/errors.gd") -const HT_Util = preload("../../util/util.gd") - -const COMPRESS_LOSSLESS = 0 -const COMPRESS_LOSSY = 1 -const COMPRESS_VIDEO_RAM = 2 -const COMPRESS_UNCOMPRESSED = 3 - -const COMPRESS_HINT_STRING = "Lossless,Lossy,VRAM,Uncompressed" - -# StreamTexture.FormatBits, not exposed to GDScript -const StreamTexture_FORMAT_MASK_IMAGE_FORMAT = (1 << 20) - 1 -const StreamTexture_FORMAT_BIT_LOSSLESS = 1 << 20 -const StreamTexture_FORMAT_BIT_LOSSY = 1 << 21 -const StreamTexture_FORMAT_BIT_STREAM = 1 << 22 -const StreamTexture_FORMAT_BIT_HAS_MIPMAPS = 1 << 23 -const StreamTexture_FORMAT_BIT_DETECT_3D = 1 << 24 -const StreamTexture_FORMAT_BIT_DETECT_SRGB = 1 << 25 -const StreamTexture_FORMAT_BIT_DETECT_NORMAL = 1 << 26 - - -static func import( - p_source_path: String, - image: Image, - p_save_path: String, - r_platform_variants: Array, - r_gen_files: Array, - p_contains_albedo: bool, - importer_name: String, - p_compress_mode: int, - p_mipmaps: bool) -> HT_Result: - - var compress_mode := p_compress_mode - var lossy := 0.7 - var mipmaps := p_mipmaps - var srgb := 1 if p_contains_albedo else 2 - var fix_alpha_border := false - var premult_alpha := false - var invert_color := false - var stream := false - var size_limit := 0 - var hdr_as_srgb := false - var normal := 0 - var scale := 1.0 - var force_rgbe := false - var bptc_ldr := 0 - var detect_3d := false - - var formats_imported := [] - - var tex_flags := 0 - if mipmaps or compress_mode == COMPRESS_VIDEO_RAM: - tex_flags |= Texture.FLAG_MIPMAPS - if srgb == 1: - tex_flags |= Texture.FLAG_CONVERT_TO_LINEAR - - if size_limit > 0 and (image.get_width() > size_limit or image.get_height() > size_limit): - #limit size - if image.get_width() >= image.get_height(): - var new_width := size_limit - var new_height := image.get_height() * new_width / image.get_width() - - image.resize(new_width, new_height, Image.INTERPOLATE_CUBIC) - - else: - var new_height := size_limit - var new_width := image.get_width() * new_height / image.get_height() - - image.resize(new_width, new_height, Image.INTERPOLATE_CUBIC) - - if normal == 1: - image.normalize() - - if fix_alpha_border: - image.fix_alpha_edges() - - if premult_alpha: - image.premultiply_alpha() - - if invert_color: - var height = image.get_height() - var width = image.get_width() - - image.lock() - for i in width: - for j in height: - image.set_pixel(i, j, image.get_pixel(i, j).inverted()) - - image.unlock() - - var detect_srgb := srgb == 2 - var detect_normal := normal == 0 - var force_normal := normal == 1 - - if compress_mode == COMPRESS_VIDEO_RAM: - #must import in all formats, - #in order of priority (so platform choses the best supported one. IE, etc2 over etc). - #Android, GLES 2.x - - var ok_on_pc := false - var is_hdr := \ - (image.get_format() >= Image.FORMAT_RF and image.get_format() <= Image.FORMAT_RGBE9995) - var is_ldr := \ - (image.get_format() >= Image.FORMAT_L8 and image.get_format() <= Image.FORMAT_RGBA5551) - var can_bptc : bool = ProjectSettings.get("rendering/vram_compression/import_bptc") - var can_s3tc : bool = ProjectSettings.get("rendering/vram_compression/import_s3tc") - - if can_bptc: -# return Result.new(false, "{0} cannot handle BPTC compression on {1}, " + -# "because the required logic is not exposed to the script API. " + -# "If you don't aim to export for a platform requiring BPTC, " + -# "you can turn it off in your ProjectSettings." \ -# .format([importer_name, p_source_path])) \ -# .with_value(ERR_UNAVAILABLE) - - # Can't do this optimization because not exposed to GDScript -# var channels = image.get_detected_channels() -# if is_hdr: -# if channels == Image.DETECTED_LA or channels == Image.DETECTED_RGBA: -# can_bptc = false -# elif is_ldr: -# #handle "RGBA Only" setting -# if bptc_ldr == 1 and channels != Image.DETECTED_LA \ -# and channels != Image.DETECTED_RGBA: -# can_bptc = false -# - formats_imported.push_back("bptc") - - if not can_bptc and is_hdr and not force_rgbe: - #convert to ldr if this can't be stored hdr - image.convert(Image.FORMAT_RGBA8) - - if can_bptc or can_s3tc: - _save_stex( - image, - p_save_path + ".s3tc.stex", - compress_mode, - lossy, - Image.COMPRESS_BPTC if can_bptc else Image.COMPRESS_S3TC, - mipmaps, - tex_flags, - stream, - detect_3d, - detect_srgb, - force_rgbe, - detect_normal, - force_normal, - false) - r_platform_variants.push_back("s3tc") - formats_imported.push_back("s3tc") - ok_on_pc = true - - if ProjectSettings.get("rendering/vram_compression/import_etc2"): - _save_stex( - image, - p_save_path + ".etc2.stex", - compress_mode, - lossy, - Image.COMPRESS_ETC2, - mipmaps, - tex_flags, - stream, - detect_3d, - detect_srgb, - force_rgbe, - detect_normal, - force_normal, - true) - r_platform_variants.push_back("etc2") - formats_imported.push_back("etc2") - - if ProjectSettings.get("rendering/vram_compression/import_etc"): - _save_stex( - image, - p_save_path + ".etc.stex", - compress_mode, - lossy, - Image.COMPRESS_ETC, - mipmaps, - tex_flags, - stream, - detect_3d, - detect_srgb, - force_rgbe, - detect_normal, - force_normal, - true) - r_platform_variants.push_back("etc") - formats_imported.push_back("etc") - - if ProjectSettings.get("rendering/vram_compression/import_pvrtc"): - _save_stex( - image, - p_save_path + ".pvrtc.stex", - compress_mode, - lossy, - Image.COMPRESS_PVRTC4, - mipmaps, - tex_flags, - stream, - detect_3d, - detect_srgb, - force_rgbe, - detect_normal, - force_normal, - true) - r_platform_variants.push_back("pvrtc") - formats_imported.push_back("pvrtc") - - if not ok_on_pc: - # TODO This warning is normally printed by `EditorNode::add_io_error`, - # which doesn't seem to be exposed to the script API - return HT_Result.new(false, - "No suitable PC VRAM compression enabled in Project Settings. " + - "The texture {0} will not display correctly on PC.".format([p_source_path])) \ - .with_value(ERR_INVALID_PARAMETER) - - else: - #import normally - _save_stex( - image, - p_save_path + ".stex", - compress_mode, - lossy, - Image.COMPRESS_S3TC, #this is ignored, - mipmaps, - tex_flags, - stream, - detect_3d, - detect_srgb, - force_rgbe, - detect_normal, - force_normal, - false) - - # TODO I have no idea what this part means, but it's not exposed to the script API either. -# if (r_metadata) { -# Dictionary metadata; -# metadata["vram_texture"] = compress_mode == COMPRESS_VIDEO_RAM; -# if (formats_imported.size()) { -# metadata["imported_formats"] = formats_imported; -# } -# *r_metadata = metadata; -# } - - return HT_Result.new(true).with_value(OK) - - -static func _save_stex( - p_image: Image, - p_fpath: String, - p_compress_mode: int, # ResourceImporterTexture.CompressMode - p_lossy_quality: float, - p_vram_compression: int, # Image.CompressMode - p_mipmaps: bool, - p_texture_flags: int, - p_streamable: bool, - p_detect_3d: bool, - p_detect_srgb: bool, - p_force_rgbe: bool, - p_detect_normal: bool, - p_force_normal: bool, - p_force_po2_for_compressed: bool - ) -> HT_Result: - - # Need to work on a copy because we will modify it, - # but the calling code may have to call this function multiple times - p_image = p_image.duplicate() - - var f = File.new() - var err = f.open(p_fpath, File.WRITE) - if err != OK: - return HT_Result.new(false, "Could not open file {0}:\n{1}" \ - .format([p_fpath, HT_Errors.get_message(err)])) - - f.store_8(ord('G')) - f.store_8(ord('D')) - f.store_8(ord('S')) - f.store_8(ord('T')) # godot streamable texture - - var resize_to_po2 := false - - if p_compress_mode == COMPRESS_VIDEO_RAM and p_force_po2_for_compressed \ - and (p_mipmaps or p_texture_flags & Texture.FLAG_REPEAT): - resize_to_po2 = true - f.store_16(HT_Util.next_power_of_two(p_image.get_width())) - f.store_16(p_image.get_width()) - f.store_16(HT_Util.next_power_of_two(p_image.get_height())) - f.store_16(p_image.get_height()) - else: - f.store_16(p_image.get_width()) - f.store_16(0) - f.store_16(p_image.get_height()) - f.store_16(0) - - f.store_32(p_texture_flags) - - var format := 0 - - if p_streamable: - format |= StreamTexture_FORMAT_BIT_STREAM - if p_mipmaps: - format |= StreamTexture_FORMAT_BIT_HAS_MIPMAPS # mipmaps bit - if p_detect_3d: - format |= StreamTexture_FORMAT_BIT_DETECT_3D - if p_detect_srgb: - format |= StreamTexture_FORMAT_BIT_DETECT_SRGB - if p_detect_normal: - format |= StreamTexture_FORMAT_BIT_DETECT_NORMAL - - if (p_compress_mode == COMPRESS_LOSSLESS or p_compress_mode == COMPRESS_LOSSY) \ - and p_image.get_format() > Image.FORMAT_RGBA8: - p_compress_mode = COMPRESS_UNCOMPRESSED # these can't go as lossy - - match p_compress_mode: - COMPRESS_LOSSLESS: - # Not required for our use case -# var image : Image = p_image.duplicate() -# if p_mipmaps: -# image.generate_mipmaps() -# else: -# image.clear_mipmaps() - var image := p_image - - var mmc := _get_required_mipmap_count(image) - - format |= StreamTexture_FORMAT_BIT_LOSSLESS - f.store_32(format) - f.store_32(mmc) - - for i in mmc: - if i > 0: - image.shrink_x2() - #var data = Image::lossless_packer(image); - # This is actually PNG... - var data = image.save_png_to_buffer() - f.store_32(data.size() + 4) - f.store_8(ord('P')) - f.store_8(ord('N')) - f.store_8(ord('G')) - f.store_8(ord(' ')) - f.store_buffer(data) - - COMPRESS_LOSSY: - return HT_Result.new(false, - "Saving a StreamTexture with lossy compression cannot be achieved by scripts.\n" - + "Godot would need to either allow to save an image as WEBP to a buffer,\n" - + "or expose `ResourceImporterTexture::_save_stex` so custom importers\n" - + "would be easier to make.") - - COMPRESS_VIDEO_RAM: - var image : Image = p_image.duplicate() - if resize_to_po2: - image.resize_to_po2() - - if p_mipmaps: - image.generate_mipmaps(p_force_normal) - - if p_force_rgbe \ - and image.get_format() >= Image.FORMAT_R8 \ - and image.get_format() <= Image.FORMAT_RGBE9995: - image.convert(Image.FORMAT_RGBE9995) - else: - var csource := Image.COMPRESS_SOURCE_GENERIC - if p_force_normal: - csource = Image.COMPRESS_SOURCE_NORMAL - elif p_texture_flags & VisualServer.TEXTURE_FLAG_CONVERT_TO_LINEAR: - csource = Image.COMPRESS_SOURCE_SRGB - - image.compress(p_vram_compression, csource, p_lossy_quality) - - format |= image.get_format() - - f.store_32(format) - - var data = image.get_data(); - f.store_buffer(data) - - COMPRESS_UNCOMPRESSED: - - var image := p_image.duplicate() - if p_mipmaps: - image.generate_mipmaps() - else: - image.clear_mipmaps() - - format |= image.get_format() - f.store_32(format) - - var data = image.get_data() - f.store_buffer(data) - - _: - return HT_Result.new(false, "Invalid compress mode specified: {0}" \ - .format([p_compress_mode])) - - return HT_Result.new(true) - - -# TODO Godot doesn't expose `Image.get_mipmap_count()` -# And the implementation involves shittons of unexposed code, -# so we have to fallback on a simplified version -static func _get_required_mipmap_count(image: Image) -> int: - var dim := max(image.get_width(), image.get_height()) - return int(log(dim) / log(2) + 1) - - diff --git a/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd b/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd deleted file mode 100644 index d8c0adbe..00000000 --- a/addons/zylann.hterrain/tools/packed_textures/texture_layered_importer.gd +++ /dev/null @@ -1,324 +0,0 @@ -@tool - -# TODO Port API usage to Godot 4 - -# TODO Godot does not have an API to make custom texture importers easier. -# So we have to re-implement the entire logic of `ResourceImporterLayeredTexture`. -# See https://github.com/godotengine/godot/issues/24381 - -const HT_Result = preload("../util/result.gd") -const HT_Errors = preload("../../util/errors.gd") -const HT_Util = preload("../../util/util.gd") - -const COMPRESS_LOSSLESS = 0 -const COMPRESS_VIDEO_RAM = 1 -const COMPRESS_UNCOMPRESSED = 2 -# For some reason lossy TextureArrays are not implemented in Godot -_- - -const COMPRESS_HINT_STRING = "Lossless,VRAM,Uncompressed" - -# TODO COMPRESS_SOURCE_LAYERED is not exposed -# https://github.com/godotengine/godot/issues/43387 -const Image_COMPRESS_SOURCE_LAYERED = 3 - - -static func import( - p_source_path: String, - p_images: Array, - p_save_path: String, - r_platform_variants: Array, - r_gen_files: Array, - p_contains_albedo: bool, - importer_name: String, - p_compress_mode: int, - p_mipmaps: bool) -> HT_Result: - - var compress_mode := p_compress_mode - var no_bptc_if_rgb := false#p_options["compress/no_bptc_if_rgb"]; - var mipmaps := p_mipmaps - var srgb := 1 if p_contains_albedo else 2#p_options["flags/srgb"]; -# int hslices = p_options["slices/horizontal"]; -# int vslices = p_options["slices/vertical"]; - - var tex_flags := 0 - if mipmaps or compress_mode == COMPRESS_VIDEO_RAM: - tex_flags |= Texture.FLAG_MIPMAPS - if srgb == 1: - tex_flags |= Texture.FLAG_CONVERT_TO_LINEAR - -# Vector > slices; -# -# int slice_w = image->get_width() / hslices; -# int slice_h = image->get_height() / vslices; - - # Can't do any of this in our case... - #optimize -# if compress_mode == COMPRESS_VIDEO_RAM: - #if using video ram, optimize -# if srgb: - #remove alpha if not needed, so compression is more efficient -# if image.get_format() == Image.FORMAT_RGBA8 and !image.detect_alpha(): -# image.convert(Image.FORMAT_RGB8) - -# else: -# pass - # Not exposed to GDScript... - #image.optimize_channels() - - var extension := "texarr" - var formats_imported := [] - - if compress_mode == COMPRESS_VIDEO_RAM: - #must import in all formats, - #in order of priority (so platform choses the best supported one. IE, etc2 over etc). - #Android, GLES 2.x - - var ok_on_pc := false - var encode_bptc := false - - if ProjectSettings.get("rendering/vram_compression/import_bptc"): -# return Result.new(false, "{0} cannot handle BPTC compression on {1}, " + -# "because the required logic is not exposed to the script API. " + -# "If you don't aim to export for a platform requiring BPTC, " + -# "you can turn it off in your ProjectSettings." \ -# .format([importer_name, p_source_path])) \ -# .with_value(ERR_UNAVAILABLE) - - # Can't do this optimization because not exposed to GDScript -# var encode_bptc := true -# if no_bptc_if_rgb: -# var channels := image.get_detected_channels() -# if channels != Image.DETECTED_LA and channels != Image.DETECTED_RGBA: -# encode_bptc = false - - formats_imported.push_back("bptc"); - - if encode_bptc: - var result = _save_tex( - p_images, - p_save_path + ".bptc." + extension, - compress_mode, - Image.COMPRESS_BPTC, - mipmaps, - tex_flags) - - if not result.success: - return result - - r_platform_variants.push_back("bptc") - ok_on_pc = true - - if ProjectSettings.get("rendering/vram_compression/import_s3tc"): - var result = _save_tex( - p_images, - p_save_path + ".s3tc." + extension, - compress_mode, - Image.COMPRESS_S3TC, - mipmaps, - tex_flags) - - if not result.success: - return result - - r_platform_variants.push_back("s3tc") - ok_on_pc = true - formats_imported.push_back("s3tc") - - if ProjectSettings.get("rendering/vram_compression/import_etc2"): - var result = _save_tex( - p_images, - p_save_path + ".etc2." + extension, - compress_mode, - Image.COMPRESS_ETC2, - mipmaps, - tex_flags) - - if not result.success: - return result - - r_platform_variants.push_back("etc2") - formats_imported.push_back("etc2") - - if ProjectSettings.get("rendering/vram_compression/import_etc"): - var result = _save_tex( - p_images, - p_save_path + ".etc." + extension, - compress_mode, - Image.COMPRESS_ETC, - mipmaps, - tex_flags) - - if not result.success: - return result - - r_platform_variants.push_back("etc") - formats_imported.push_back("etc") - - if ProjectSettings.get("rendering/vram_compression/import_pvrtc"): - var result = _save_tex( - p_images, - p_save_path + ".pvrtc." + extension, - compress_mode, - Image.COMPRESS_PVRTC4, - mipmaps, - tex_flags) - - if not result.success: - return result - - r_platform_variants.push_back("pvrtc") - formats_imported.push_back("pvrtc") - - if not ok_on_pc: - # TODO This warning is normally printed by `EditorNode::add_io_error`, - # which doesn't seem to be exposed to the script API - return HT_Result.new(false, - "No suitable PC VRAM compression enabled in Project Settings. " + - "The texture {0} will not display correctly on PC.".format([p_source_path])) \ - .with_value(ERR_INVALID_PARAMETER) - - else: - #import normally - var result = _save_tex( - p_images, - p_save_path + "." + extension, - compress_mode, - Image.COMPRESS_S3TC, #this is ignored - mipmaps, - tex_flags) - - if not result.success: - return result - -# if (r_metadata) { -# Dictionary metadata; -# metadata["vram_texture"] = compress_mode == COMPRESS_VIDEO_RAM; -# if (formats_imported.size()) { -# metadata["imported_formats"] = formats_imported; -# } -# *r_metadata = metadata; -# } - - return HT_Result.new(true).with_value(OK) - - -# The input image can be modified -static func _save_tex( - p_images: Array, - p_to_path: String, - p_compress_mode: int, - p_vram_compression: int, # Image.CompressMode - p_mipmaps: bool, - p_texture_flags: int - ) -> HT_Result: - - # We only do TextureArrays for now - var is_3d = false - - var f := File.new() - var err := f.open(p_to_path, File.WRITE) - f.store_8(ord('G')) - f.store_8(ord('D')) - if is_3d: - f.store_8(ord('3')) - else: - f.store_8(ord('A')) - f.store_8(ord('T')) # godot streamable texture - - var slice_count := len(p_images) - - f.store_32(p_images[0].get_width()) - f.store_32(p_images[0].get_height()) - f.store_32(slice_count) # depth - f.store_32(p_texture_flags) - var image_format : int = p_images[0].get_format() - var image_size : Vector2 = p_images[0].get_size() - if p_compress_mode != COMPRESS_VIDEO_RAM: - # vram needs to do a first compression to tell what the format is, for the rest its ok - f.store_32(image_format) - f.store_32(p_compress_mode) # 0 - lossless (PNG), 1 - vram, 2 - uncompressed - - if (p_compress_mode == COMPRESS_LOSSLESS) and image_format > Image.FORMAT_RGBA8: - p_compress_mode = COMPRESS_UNCOMPRESSED # these can't go as lossy - - for i in slice_count: - var image : Image = p_images[i] - - if image.get_format() != image_format: - return HT_Result.new(false, "Layer {0} has different format, got {1}, expected {2}" \ - .format([i, image.get_format(), image_format])).with_value(ERR_INVALID_DATA) - - if image.get_size() != image_size: - return HT_Result.new(false, "Layer {0} has different size, got {1}, expected {2}" \ - .format([i, image.get_size(), image_size])).with_value(ERR_INVALID_DATA) - - # We need to operate on a copy, - # because the calling code can invoke the function multiple times - image = image.duplicate() - - match p_compress_mode: - COMPRESS_LOSSLESS: - # We save each mip as PNG so we dont need to do that. - # The engine code does it anyways :shrug: (see below why...) -# var image = p_images[i].duplicate() -# if p_mipmaps: -# image.generate_mipmaps() -# else: -# image.clear_mipmaps() - - var mmc := _get_required_mipmap_count(image) - f.store_32(mmc) - - for j in mmc: - if j > 0: - # TODO This function does something fishy behind the scenes: - # It assumes mipmaps are downscaled versions of the image. - # This is not necessarily true. - # See https://www.kotaku.com.au/2018/03/ - # how-nintendo-did-the-water-effects-in-super-mario-sunshine/ - image.shrink_x2() - - #var data = Image::lossless_packer(image); - var data = image.save_png_to_buffer() - f.store_32(data.size() + 4) - f.store_8(ord('P')) - f.store_8(ord('N')) - f.store_8(ord('G')) - f.store_8(ord(' ')) - f.store_buffer(data) - - COMPRESS_VIDEO_RAM: -# var image : Image = p_images[i]->duplicate(); - image.generate_mipmaps(false) - - var csource := Image_COMPRESS_SOURCE_LAYERED - image.compress(p_vram_compression, csource, 0.7) - - if i == 0: - #hack so we can properly tell the format - f.store_32(image.get_format()) - f.store_32(p_compress_mode); # 0 - lossless (PNG), 1 - vram, 2 - uncompressed - - var data := image.get_data() - f.store_buffer(data) - - COMPRESS_UNCOMPRESSED: -# Ref image = p_images[i]->duplicate(); - - if p_mipmaps: - image.generate_mipmaps() - else: - image.clear_mipmaps() - - var data := image.get_data() - f.store_buffer(data) - - return HT_Result.new(true) - - -# TODO Godot doesn't expose `Image.get_mipmap_count()` -# And the implementation involves shittons of unexposed code, -# so we have to fallback on a simplified version -static func _get_required_mipmap_count(image: Image) -> int: - var dim := max(image.get_width(), image.get_height()) - return int(log(dim) / log(2) + 1) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 48171ac2..ef7ea4dc 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -7,8 +7,8 @@ const HTerrainDetailLayer = preload("../hterrain_detail_layer.gd") const HTerrainData = preload("../hterrain_data.gd") const HTerrainMesher = preload("../hterrain_mesher.gd") const HTerrainTextureSet = preload("../hterrain_texture_set.gd") -const HT_PackedTextureImporter = preload("./packed_textures/packed_texture_importer.gd") -const HT_PackedTextureArrayImporter = preload("./packed_textures/packed_texture_array_importer.gd") +#const HT_PackedTextureImporter = preload("./packed_textures/packed_texture_importer.gd") +#const HT_PackedTextureArrayImporter = preload("./packed_textures/packed_texture_array_importer.gd") const HT_PreviewGenerator = preload("./preview_generator.gd") const HT_TerrainPainter = preload("./brush/terrain_painter.gd") const HT_BrushDecal = preload("./brush/decal.gd") @@ -71,8 +71,8 @@ var _terrain_had_data_previous_frame := false var _image_cache : HT_ImageFileCache # Import -var _packed_texture_importer := HT_PackedTextureImporter.new() -var _packed_texture_array_importer := HT_PackedTextureArrayImporter.new() +#var _packed_texture_importer := HT_PackedTextureImporter.new() +#var _packed_texture_array_importer := HT_PackedTextureArrayImporter.new() var _terrain_painter : HT_TerrainPainter = null var _brush_decal : HT_BrushDecal = null @@ -101,8 +101,8 @@ func _enter_tree(): # TODO Proper texture add_custom_type("HTerrainTextureSet", "Resource", HTerrainTextureSet, null) - add_import_plugin(_packed_texture_importer) - add_import_plugin(_packed_texture_array_importer) +# add_import_plugin(_packed_texture_importer) +# add_import_plugin(_packed_texture_array_importer) _preview_generator = HT_PreviewGenerator.new() get_editor_interface().get_resource_previewer().add_preview_generator(_preview_generator) @@ -333,11 +333,11 @@ func _exit_tree(): remove_custom_type("HTerrainData") remove_custom_type("HTerrainTextureSet") - remove_import_plugin(_packed_texture_importer) - _packed_texture_importer = null +# remove_import_plugin(_packed_texture_importer) +# _packed_texture_importer = null - remove_import_plugin(_packed_texture_array_importer) - _packed_texture_array_importer = null +# remove_import_plugin(_packed_texture_array_importer) +# _packed_texture_array_importer = null func _handles(object): diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index 60cfb101..13c3c180 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -1,5 +1,5 @@ @tool -extends Control +extends AcceptDialog const HTerrainTextureSet = preload("../../../hterrain_texture_set.gd") const HT_Logger = preload("../../../util/logger.gd") @@ -8,23 +8,20 @@ const HT_Errors = preload("../../../util/errors.gd") const HT_TextureSetEditor = preload("./texture_set_editor.gd") const HT_Result = preload("../../util/result.gd") const HT_Util = preload("../../../util/util.gd") -const HT_StreamTextureImporter = preload("../../packed_textures/stream_texture_importer.gd") -const HT_TextureLayeredImporter = preload("../../packed_textures/texture_layered_importer.gd") -const HT_PackedTextureImporter = preload("../../packed_textures/packed_texture_importer.gd") -const HT_PackedTextureArrayImporter = \ - preload("../../packed_textures/packed_texture_array_importer.gd") +const HT_PackedTextureUtil = preload("../../packed_textures/packed_texture_util.gd") +const ResourceImporterTexture_Unexposed = preload("../../util/resource_importer_texture.gd") +const ResourceImporterTextureLayered_Unexposed = preload( + "../../util/resource_importer_texture_layered.gd") const HT_NormalMapPreviewShader = preload("../display_normal.gdshader") const COMPRESS_RAW = 0 const COMPRESS_LOSSLESS = 1 -# Lossy is not available because the required functions are not exposed to GDScript, -# and is not implemented on TextureArrays -#const COMPRESS_LOSSY = 1 +const COMPRESS_LOSSY = 1 const COMPRESS_VRAM = 2 const COMPRESS_COUNT = 3 -const _compress_names = ["Raw", "Lossless", "VRAM"] +const _compress_names = ["Raw", "Lossless", "Lossy", "VRAM"] # Indexed by HTerrainTextureSet.SRC_TYPE_* constants const _smart_pick_file_keywords = [ @@ -56,7 +53,10 @@ signal import_finished # did import them fine. Unfortunately, this short-circuits the workflow. # Since I have no idea what's going on with this reverse-engineering, I had to drop those options. # Godot needs an API to import specific files and choose settings before the first import. -const _WRITE_IMPORT_FILES = false +# +# Godot 4: now we'll really need it, let's enable and we'll see if it works +# when we can test the workflow... +const _WRITE_IMPORT_FILES = true @onready var _import_mode_selector : OptionButton = $Import/GC/ImportModeSelector @onready var _compression_selector : OptionButton = $Import/GC/CompressionSelector @@ -420,7 +420,8 @@ func _smart_pick_files(albedo_fpath: String): for albedo_word in albedo_words: var i = albedo_fname_lower.find(albedo_word, 0) if i != -1: - fname_pattern = albedo_fname.substr(0, i) + "{0}" + albedo_fname.substr(i + len(albedo_word)) + fname_pattern = \ + albedo_fname.substr(0, i) + "{0}" + albedo_fname.substr(i + len(albedo_word)) break if fname_pattern == "": @@ -597,52 +598,41 @@ func _on_ImportButton_pressed(): if _texture_set.resource_path != "": prefix = _texture_set.resource_path.get_file().get_basename() + "_" - var files_data_result + var files_data_result : HT_Result if _import_mode == HTerrainTextureSet.MODE_TEXTURES: - files_data_result = _generate_packed_textures_files_data(import_dir, prefix) + files_data_result = _generate_packed_images(import_dir, prefix) else: - files_data_result = _generate_save_packed_texture_arrays_files_data(import_dir, prefix) - + #files_data_result = _generate_save_packed_texture_arrays_files_data(import_dir, prefix) + _show_error("Texture arrays are not supported yet") + return + if not files_data_result.success: _show_error(files_data_result.get_message()) return - + var files_data : Array = files_data_result.value + if len(files_data) == 0: _show_error("There are no files to save.\nYou must setup at least one slot of textures.") return - + for fd in files_data: var dir_path : String = fd.path.get_base_dir() if not DirAccess.dir_exists_absolute(dir_path): _show_error("The directory {0} could not be found.".format([dir_path])) return - - for fd in files_data: - var json := JSON.stringify(fd.data, "\t", true) - if json == "": - _show_error("A problem occurred while serializing data for {0}".format([fd.path])) - return - - var f := FileAccess.open(fd.path, FileAccess.WRITE) - if f == null: - var err := FileAccess.get_open_error() - _show_error("Could not write file {0}: {1}".format([fd.path])) - return - - f.store_string(json) - f = null - - if _WRITE_IMPORT_FILES: + + if _WRITE_IMPORT_FILES: + for fd in files_data: var import_fpath = fd.path + ".import" if not HT_Util.write_import_file(fd.import_data, import_fpath, _logger): _show_error("Failed to write file {0}: {1}".format([import_fpath])) return - + if _editor_file_system == null: _show_error("EditorFileSystem is not setup, can't trigger import system.") return - + # ______ # .-" "-. # / \ @@ -676,232 +666,248 @@ func _on_ImportButton_pressed(): await get_tree().process_frame var failed_resource_paths := [] - + # Using UndoRedo is mandatory for Godot to consider the resource as modified... # ...yet if files get deleted, that won't be undoable anyways, but whatever :shrug: var ur := _undo_redo - + # Check imported textures if _import_mode == HTerrainTextureSet.MODE_TEXTURES: for fd in files_data: - var texture = load(fd.path) + var texture : Texture2D = load(fd.path) if texture == null: failed_resource_paths.append(fd.path) continue - assert(texture is Texture) - fd["texture"] = texture + fd.texture = texture else: for fd in files_data: - var texture_array = load(fd.path) + var texture_array : Texture2DArray = load(fd.path) if texture_array == null: failed_resource_paths.append(fd.path) - assert(texture_array is Texture2DArray) - fd["texture_array"] = texture_array + continue + fd.texture_array = texture_array if len(failed_resource_paths) > 0: var failed_list := "\n".join(PackedStringArray(failed_resource_paths)) _show_error("Some resources failed to load:\n" + failed_list) + return + + # All is OK, commit action to modify the texture set with imported textures + + if _import_mode == HTerrainTextureSet.MODE_TEXTURES: + ur.create_action("HTerrainTextureSet: import textures") + + HT_TextureSetEditor.backup_for_undo(_texture_set, ur) + + ur.add_do_method(_texture_set.clear) + ur.add_do_method(_texture_set.set_mode.bind(_import_mode)) + + for i in len(_slots_data): + ur.add_do_method(_texture_set.insert_slot.bind(-1)) + for fd in files_data: + ur.add_do_method(_texture_set.set_texture.bind(fd.slot_index, fd.type, fd.texture)) else: - # All is OK, commit action to modify the texture set with imported textures + ur.create_action("HTerrainTextureSet: import texture arrays") - if _import_mode == HTerrainTextureSet.MODE_TEXTURES: - ur.create_action("HTerrainTextureSet: import textures") - - HT_TextureSetEditor.backup_for_undo(_texture_set, ur) - - ur.add_do_method(_texture_set.clear) - ur.add_do_method(_texture_set.set_mode.bind(_import_mode)) - - for i in len(_slots_data): - ur.add_do_method(_texture_set.insert_slot.bind(-1)) - for fd in files_data: - ur.add_do_method(_texture_set.set_texture.bind(fd.slot_index, fd.type, fd.texture)) + HT_TextureSetEditor.backup_for_undo(_texture_set, ur) - else: - ur.create_action("HTerrainTextureSet: import texture arrays") - - HT_TextureSetEditor.backup_for_undo(_texture_set, ur) - - ur.add_do_method(_texture_set.clear) - ur.add_do_method(_texture_set.set_mode.bind(_import_mode)) - - for fd in files_data: - ur.add_do_method(_texture_set.set_texture_array.bind(fd.type, fd.texture_array)) + ur.add_do_method(_texture_set.clear) + ur.add_do_method(_texture_set.set_mode.bind(_import_mode)) - ur.commit_action() - - _logger.debug("Done importing") + for fd in files_data: + ur.add_do_method(_texture_set.set_texture_array.bind(fd.type, fd.texture_array)) - _info_popup.dialog_text = "Importing complete!" - _info_popup.popup_centered() + ur.commit_action() + + _logger.debug("Done importing") - import_finished.emit() + _info_popup.dialog_text = "Importing complete!" + _info_popup.popup_centered() + import_finished.emit() -func _generate_packed_textures_files_data(import_dir: String, prefix: String) -> HT_Result: - var files := [] - var importer_compress_mode := 0 - match _import_settings.compression: - COMPRESS_VRAM: - importer_compress_mode = HT_StreamTextureImporter.COMPRESS_VIDEO_RAM - COMPRESS_LOSSLESS: - importer_compress_mode = HT_StreamTextureImporter.COMPRESS_LOSSLESS - COMPRESS_RAW: - importer_compress_mode = HT_StreamTextureImporter.COMPRESS_UNCOMPRESSED - _: - return HT_Result.new(false, "Unknown compress mode {0}, might be a bug" \ - .format([_import_settings.compression])) +class HT_PackedImageInfo: + var path := "" # Where the packed image is saved + var slot_index : int # Slot in texture set, when using individual textures + var type : int # 0:Albedo+Bump, 1:Normal+Roughness + var import_file_data := {} # Data to write into the .import file (when enabled...) + var image : Image + var is_default := false + var texture : Texture2D + var texture_array : Texture2DArray + +func _generate_packed_images2() -> HT_Result: + var resolution : int = _import_settings.resolution + var images_infos := [] + for type in HTerrainTextureSet.TYPE_COUNT: var src_types := HTerrainTextureSet.get_src_types_from_type(type) for slot_index in len(_slots_data): var slot : HT_TextureSetImportEditorSlot = _slots_data[slot_index] - + + # Albedo or Normal var src0 : String = slot.texture_paths[src_types[0]] + # Bump or Roughness var src1 : String = slot.texture_paths[src_types[1]] if src0 == "": if src_types[0] == HTerrainTextureSet.SRC_TYPE_ALBEDO: return HT_Result.new(false, "Albedo texture is missing in slot {0}".format([slot_index])) - + + var is_default := (src0 == "" and src1 == "") + if src0 == "": src0 = HTerrainTextureSet.get_source_texture_default_color_code(src_types[0]) if src1 == "": src1 = HTerrainTextureSet.get_source_texture_default_color_code(src_types[1]) - - var json_data := { - "contains_albedo": type == HTerrainTextureSet.TYPE_ALBEDO_BUMP, - "resolution": _import_settings.resolution, - "src": { - "rgb": src0, - "a": src1 - } + + var pack_sources := { + "rgb": src0, + "a": src1 } - + if HTerrainTextureSet.SRC_TYPE_NORMAL in src_types and slot.flip_normalmap_y: - json_data.src["normalmap_flip_y"] = true + pack_sources["normalmap_flip_y"] = true - var type_name := HTerrainTextureSet.get_texture_type_name(type) - var fpath = import_dir.path_join( - str(prefix, "slot", slot_index, "_", type_name, ".packed_tex")) - - files.append({ - "slot_index": slot_index, - "type": type, - "path": fpath, - "data": json_data, - - # This is for .import files - # TODO There is similar stuff in HTerrainData, we should make a common utility, - # because this had to be reverse-engineered and it's not fun - "import_data": { - "remap": { - "importer": HT_PackedTextureImporter.IMPORTER_NAME, - "type": HT_PackedTextureImporter.RESOURCE_TYPE - }, - "deps": { - "source_file": fpath - }, - "params": { - "compress/mode": importer_compress_mode, - "mipmaps/limit": -1 if _import_settings.mipmaps else 0 - } - } - }) - - return HT_Result.new(true).with_value(files) - - -func _generate_save_packed_texture_arrays_files_data( - import_dir: String, prefix: String) -> HT_Result: - - var files := [] + var packed_image_result := HT_PackedTextureUtil.generate_image( + pack_sources, resolution, _logger) + if not packed_image_result.success: + return packed_image_result + var packed_image : Image = packed_image_result.value + + var fd := HT_PackedImageInfo.new() + fd.slot_index = slot_index + fd.type = type + fd.image = packed_image + fd.is_default = is_default + + images_infos.append(fd) - var importer_compress_mode := 0 - match _import_settings.compression: - COMPRESS_VRAM: - importer_compress_mode = HT_TextureLayeredImporter.COMPRESS_VIDEO_RAM - COMPRESS_LOSSLESS: - importer_compress_mode = HT_TextureLayeredImporter.COMPRESS_LOSSLESS - COMPRESS_RAW: - importer_compress_mode = HT_TextureLayeredImporter.COMPRESS_UNCOMPRESSED - _: - return HT_Result.new(false, "Unknown compress mode {0}, might be a bug" \ - .format([_import_settings.compression])) + return HT_Result.new(true).with_value(images_infos) - for type in HTerrainTextureSet.TYPE_COUNT: - var src_types := HTerrainTextureSet.get_src_types_from_type(type) + +func _generate_packed_images(import_dir: String, prefix: String) -> HT_Result: + var images_infos_result := _generate_packed_images2() + if not images_infos_result.success: + return images_infos_result + var images_infos : Array = images_infos_result.value + + for info_index in len(images_infos): + var info : HT_PackedImageInfo = images_infos[info_index] + + var type_name := HTerrainTextureSet.get_texture_type_name(info.type) + var fpath := import_dir.path_join( + str(prefix, "slot", info.slot_index, "_", type_name, ".png")) + + var err := info.image.save_png(fpath) + if err != OK: + return HT_Result.new(false, + "Could not save image {0}, {1}".format([fpath, HT_Errors.get_message(err)])) - var json_data := { - "contains_albedo": type == HTerrainTextureSet.TYPE_ALBEDO_BUMP, - "resolution": _import_settings.resolution, + info.path = fpath + info.import_file_data = { + "remap": { + "importer": "texture", + "type": "CompressedTexture2D" + }, + "deps": { + "source_file": fpath + }, + "params": { + "compress/mode": ResourceImporterTexture_Unexposed.COMPRESS_VRAM_COMPRESSED, + "compress/high_quality": false, + "compress/lossy_quality": 0.7, + "mipmaps/generate": true, + "mipmaps/limit": -1, + "roughness/mode": ResourceImporterTexture_Unexposed.ROUGHNESS_DISABLED, + "process/fix_alpha_border": false + } } - var layers_data := [] + + return HT_Result.new(true).with_value(images_infos) - var fully_defaulted_slots := 0 - for slot_index in len(_slots_data): - var slot : HT_TextureSetImportEditorSlot = _slots_data[slot_index] +static func _assemble_texarray_images(images: Array, resolution: Vector2i) -> Image: + # Godot expects some kind of grid. Let's be lazy and do a grid with only one row. + var atlas := Image.create(resolution.x * len(images), resolution.y, false, Image.FORMAT_RGBA8) + for index in len(images): + var image : Image = images[index] + if image.get_size() != resolution: + image.resize(resolution.x, resolution.y, Image.INTERPOLATE_BILINEAR) + atlas.blit_rect(image, + Rect2i(0, 0, image.get_width(), image.get_height()), + Vector2i(index * resolution.x, 0)) + return atlas + - var src0 : String = slot.texture_paths[src_types[0]] - var src1 : String = slot.texture_paths[src_types[1]] - - if src0 == "": - if src_types[0] == HTerrainTextureSet.SRC_TYPE_ALBEDO: - return HT_Result.new(false, - "Albedo texture is missing in slot {0}".format([slot_index])) +func _generate_packed_texarray_images(import_dir: String, prefix: String) -> HT_Result: + var images_infos_result := _generate_packed_images2() + if not images_infos_result.success: + return images_infos_result + var individual_images_infos : Array = images_infos_result.value - if src0 == "" and src1 == "": + var resolution : int = _import_settings.resolution + + var texarray_images_infos := [] + + for type in HTerrainTextureSet.TYPE_COUNT: + var texarray_images := [] + texarray_images.resize(len(_slots_data)) + + var fully_defaulted_slots := 0 + + for i in len(individual_images_infos): + var info : HT_PackedImageInfo = individual_images_infos[i] + if info.type == type: + texarray_images[i] = info.image + if info.is_default: fully_defaulted_slots += 1 - - if src0 == "": - src0 = HTerrainTextureSet.get_source_texture_default_color_code(src_types[0]) - if src1 == "": - src1 = HTerrainTextureSet.get_source_texture_default_color_code(src_types[1]) - - var layer = { - "rgb": src0, - "a": src1 - } - - if HTerrainTextureSet.SRC_TYPE_NORMAL in src_types and slot.flip_normalmap_y: - layer["normalmap_flip_y"] = slot.flip_normalmap_y - - layers_data.append(layer) - - if fully_defaulted_slots == len(_slots_data): + + if fully_defaulted_slots == len(texarray_images): # No need to generate this file at all continue - - json_data["layers"] = layers_data + + var texarray_image := _assemble_texarray_images(texarray_images, + Vector2i(resolution, resolution)) var type_name := HTerrainTextureSet.get_texture_type_name(type) - var fpath := import_dir.path_join(str(prefix, type_name, ".packed_texarr")) + var fpath := import_dir.path_join(str(prefix, type_name, "_array.png")) + + var err := texarray_image.save_png(fpath) + if err != OK: + return HT_Result.new(false, + "Could not save image {0}, {1}".format([fpath, HT_Errors.get_message(err)])) - files.append({ - "type": type, - "path": fpath, - "data": json_data, - - # This is for .import files - "import_data": { - "remap": { - "importer": HT_PackedTextureArrayImporter.IMPORTER_NAME, - "type": HT_PackedTextureArrayImporter.RESOURCE_TYPE - }, - "deps": { - "source_file": fpath - }, - "params": { - "compress/mode": importer_compress_mode, - "mipmaps/limit": -1 if _import_settings.mipmaps else 0 - } + var texarray_image_info := HT_PackedImageInfo.new() + texarray_image_info.type = type + texarray_image_info.path = fpath + texarray_image_info.import_file_data = { + "remap": { + "importer": "2d_array_texture", + "type": "CompressedTexture2DArray" + }, + "deps": { + "source_file": fpath + }, + "params": { + "compress/mode": ResourceImporterTextureLayered_Unexposed.COMPRESS_VRAM_COMPRESSED, + "compress/high_quality": false, + "compress/lossy_quality": 0.7, + "mipmaps/generate": true, + "mipmaps/limit": -1, + "process/fix_alpha_border": false, + "slices/horizontal": len(texarray_images), + "slices/vertical": 1 } - }) + } + + texarray_images_infos.append(texarray_image_info) + + return HT_Result.new(true).with_value(texarray_images_infos) - return HT_Result.new(true).with_value(files) diff --git a/addons/zylann.hterrain/tools/util/resource_importer_texture.gd b/addons/zylann.hterrain/tools/util/resource_importer_texture.gd new file mode 100644 index 00000000..b24f0e2c --- /dev/null +++ b/addons/zylann.hterrain/tools/util/resource_importer_texture.gd @@ -0,0 +1,19 @@ +@tool + +# Stuff not exposed by Godot for making .import files + +const COMPRESS_LOSSLESS = 0 +const COMPRESS_LOSSY = 1 +const COMPRESS_VRAM_COMPRESSED = 2 +const COMPRESS_VRAM_UNCOMPRESSED = 3 +const COMPRESS_BASIS_UNIVERSAL = 4 + +const ROUGHNESS_DETECT = 0 +const ROUGHNESS_DISABLED = 1 +# Godot internally subtracts 2 to magically obtain a `Image.RoughnessChannel` enum +# (also not exposed) +const ROUGHNESS_RED = 2 +const ROUGHNESS_GREEN = 3 +const ROUGHNESS_BLUE = 4 +const ROUGHNESS_ALPHA = 5 +const ROUGHNESS_GRAY = 6 diff --git a/addons/zylann.hterrain/tools/util/resource_importer_texture_layered.gd b/addons/zylann.hterrain/tools/util/resource_importer_texture_layered.gd new file mode 100644 index 00000000..ff77b1a8 --- /dev/null +++ b/addons/zylann.hterrain/tools/util/resource_importer_texture_layered.gd @@ -0,0 +1,9 @@ +@tool + +# Stuff not exposed by Godot for making .import files + +const COMPRESS_LOSSLESS = 0 +const COMPRESS_LOSSY = 1 +const COMPRESS_VRAM_COMPRESSED = 2 +const COMPRESS_VRAM_UNCOMPRESSED = 3 +const COMPRESS_BASIS_UNIVERSAL = 4 From f4edf81095576850572532048d3a6d869fe418f1 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:10:59 +0000 Subject: [PATCH 16/94] Fix texture set import UI --- .../set_editor/source_file_item_editor.tscn | 29 +-- .../set_editor/texture_set_import_editor.tscn | 237 ++++++------------ 2 files changed, 94 insertions(+), 172 deletions(-) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.tscn index d730b40b..9907e0c3 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.tscn @@ -1,35 +1,28 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://dqgaomu3tr1ym"] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd" type="Script" id=2] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.gd" id="2"] [node name="SourceFileItem" type="VBoxContainer"] -margin_right = 128.0 -margin_bottom = 194.0 -script = ExtResource( 2 ) +offset_right = 128.0 +offset_bottom = 194.0 +script = ExtResource("2") [node name="Label" type="Label" parent="."] -margin_right = 128.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Albedo" [node name="TextureRect" type="TextureRect" parent="."] -margin_top = 18.0 -margin_right = 128.0 -margin_bottom = 146.0 -rect_min_size = Vector2( 128, 128 ) -expand = true +custom_minimum_size = Vector2(128, 128) +layout_mode = 2 +expand_mode = 1 stretch_mode = 1 [node name="LoadButton" type="Button" parent="."] -margin_top = 150.0 -margin_right = 128.0 -margin_bottom = 170.0 +layout_mode = 2 text = "Load..." [node name="ClearButton" type="Button" parent="."] -margin_top = 174.0 -margin_right = 128.0 -margin_bottom = 194.0 +layout_mode = 2 text = "Clear" [connection signal="pressed" from="LoadButton" to="." method="_on_LoadButton_pressed"] diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn index bffd270a..71f7c651 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn @@ -1,278 +1,207 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://3indvrto5vd5"] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.tscn" type="PackedScene" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd" type="Script" id=4] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://dqgaomu3tr1ym" path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/source_file_item_editor.tscn" id="3"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd" id="4"] -[node name="TextureSetImportEditor" type="WindowDialog"] +[node name="TextureSetImportEditor" type="AcceptDialog"] +title = "Texture Set Import Tool" +size = Vector2i(652, 623) visible = true -margin_right = 652.0 -margin_bottom = 480.0 -rect_min_size = Vector2( 652, 480 ) -window_title = "Texture Set Import Tool" -script = ExtResource( 4 ) -__meta__ = { -"_edit_use_anchors_": false -} +min_size = Vector2i(652, 480) +script = ExtResource("4") [node name="Import" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 [node name="HS" type="HSplitContainer" parent="Import"] -margin_right = 636.0 -margin_bottom = 316.0 +layout_mode = 2 size_flags_vertical = 3 [node name="VB" type="VBoxContainer" parent="Import/HS"] -margin_right = 100.0 -margin_bottom = 316.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Label" type="Label" parent="Import/HS/VB"] visible = false -margin_right = 100.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Slots" [node name="SlotsList" type="ItemList" parent="Import/HS/VB"] -margin_right = 100.0 -margin_bottom = 292.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 size_flags_vertical = 3 -items = [ "Item 0", null, false, "Item 1", null, false, "Item 2", null, false, "Item 3", null, false, "Item 4", null, false, "Item 5", null, false, "Item 6", null, false ] +item_count = 7 +item_0/text = "Item 0" +item_1/text = "Item 1" +item_2/text = "Item 2" +item_3/text = "Item 3" +item_4/text = "Item 4" +item_5/text = "Item 5" +item_6/text = "Item 6" [node name="HB" type="HBoxContainer" parent="Import/HS/VB"] -margin_top = 296.0 -margin_right = 100.0 -margin_bottom = 316.0 +layout_mode = 2 [node name="AddSlotButton" type="Button" parent="Import/HS/VB/HB"] -margin_right = 20.0 -margin_bottom = 20.0 +layout_mode = 2 text = "+" [node name="Control" type="Control" parent="Import/HS/VB/HB"] -margin_left = 24.0 -margin_right = 79.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="RemoveSlotButton" type="Button" parent="Import/HS/VB/HB"] -margin_left = 83.0 -margin_right = 100.0 -margin_bottom = 20.0 +layout_mode = 2 text = "-" [node name="VB2" type="VBoxContainer" parent="Import/HS"] -margin_left = 112.0 -margin_right = 636.0 -margin_bottom = 316.0 +layout_mode = 2 [node name="Label" type="Label" parent="Import/HS/VB2"] visible = false -margin_right = 524.0 -margin_bottom = 14.0 +layout_mode = 2 [node name="HB" type="HBoxContainer" parent="Import/HS/VB2"] -margin_right = 524.0 -margin_bottom = 222.0 +layout_mode = 2 -[node name="Albedo" parent="Import/HS/VB2/HB" instance=ExtResource( 3 )] -margin_bottom = 222.0 +[node name="Albedo" parent="Import/HS/VB2/HB" instance=ExtResource("3")] +layout_mode = 2 -[node name="Bump" parent="Import/HS/VB2/HB" instance=ExtResource( 3 )] -margin_left = 132.0 -margin_right = 260.0 -margin_bottom = 222.0 +[node name="Bump" parent="Import/HS/VB2/HB" instance=ExtResource("3")] +layout_mode = 2 -[node name="Normal" parent="Import/HS/VB2/HB" instance=ExtResource( 3 )] -margin_left = 264.0 -margin_right = 392.0 -margin_bottom = 222.0 +[node name="Normal" parent="Import/HS/VB2/HB" instance=ExtResource("3")] +layout_mode = 2 [node name="NormalMapFlipY" type="CheckBox" parent="Import/HS/VB2/HB/Normal"] -margin_top = 198.0 -margin_right = 128.0 -margin_bottom = 222.0 +layout_mode = 2 text = "Flip Y" -[node name="Roughness" parent="Import/HS/VB2/HB" instance=ExtResource( 3 )] -margin_left = 396.0 -margin_right = 524.0 -margin_bottom = 222.0 +[node name="Roughness" parent="Import/HS/VB2/HB" instance=ExtResource("3")] +layout_mode = 2 [node name="Control" type="Control" parent="Import/HS/VB2"] -margin_top = 226.0 -margin_right = 524.0 -margin_bottom = 230.0 -rect_min_size = Vector2( 0, 4 ) +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 [node name="Control2" type="Control" parent="Import/HS/VB2"] -margin_top = 234.0 -margin_right = 524.0 -margin_bottom = 264.0 -rect_min_size = Vector2( 0, 4 ) +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 size_flags_vertical = 3 [node name="Label3" type="Label" parent="Import/HS/VB2"] -modulate = Color( 0.564706, 0.564706, 0.564706, 1 ) -margin_top = 268.0 -margin_right = 524.0 -margin_bottom = 316.0 +modulate = Color(0.564706, 0.564706, 0.564706, 1) +layout_mode = 2 text = "These images should remain accessible for import to work. Tip: you can place them in a folder with a `.gdignore` file, so they won't take space in your exported game." -autowrap = true +autowrap_mode = 2 [node name="Spacer3" type="Control" parent="Import"] -margin_top = 320.0 -margin_right = 636.0 -margin_bottom = 328.0 -rect_min_size = Vector2( 0, 8 ) +custom_minimum_size = Vector2(0, 8) +layout_mode = 2 [node name="HSeparator" type="HSeparator" parent="Import"] -margin_top = 332.0 -margin_right = 636.0 -margin_bottom = 336.0 +layout_mode = 2 [node name="GC" type="GridContainer" parent="Import"] -margin_top = 340.0 -margin_right = 636.0 -margin_bottom = 388.0 -custom_constants/hseparation = 8 +layout_mode = 2 columns = 4 [node name="Label2" type="Label" parent="Import/GC"] -margin_top = 3.0 -margin_right = 93.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Import mode: " [node name="ImportModeSelector" type="OptionButton" parent="Import/GC"] -margin_left = 101.0 -margin_right = 360.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="MipmapsCheckbox" type="CheckBox" parent="Import/GC"] visible = false -margin_left = 325.0 -margin_right = 412.0 -margin_bottom = 24.0 +layout_mode = 2 text = "Mipmaps" [node name="Spacer2" type="Control" parent="Import/GC"] -margin_left = 368.0 -margin_right = 627.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="Import/GC"] visible = false -margin_left = 547.0 -margin_top = 3.0 -margin_right = 635.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Compression:" [node name="CompressionSelector" type="OptionButton" parent="Import/GC"] visible = false -margin_top = 24.0 -margin_right = 174.0 -margin_bottom = 48.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="FilterCheckBox" type="CheckBox" parent="Import/GC"] visible = false -margin_left = 182.0 -margin_top = 24.0 -margin_right = 356.0 -margin_bottom = 48.0 +layout_mode = 2 text = "Filter" [node name="Spacer" type="Control" parent="Import/GC"] -margin_left = 635.0 -margin_right = 635.0 -margin_bottom = 20.0 +layout_mode = 2 [node name="Label3" type="Label" parent="Import/GC"] -margin_top = 29.0 -margin_right = 93.0 -margin_bottom = 43.0 +layout_mode = 2 text = "Resolution:" [node name="ResolutionSpinBox" type="SpinBox" parent="Import/GC"] -margin_left = 101.0 -margin_top = 24.0 -margin_right = 360.0 -margin_bottom = 48.0 +layout_mode = 2 min_value = 1.0 max_value = 4096.0 value = 1.0 [node name="HB2" type="HBoxContainer" parent="Import"] -margin_top = 392.0 -margin_right = 636.0 -margin_bottom = 416.0 +layout_mode = 2 [node name="Label2" type="Label" parent="Import/HB2"] -margin_top = 5.0 -margin_right = 105.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Import directory" [node name="ImportDirectoryLineEdit" type="LineEdit" parent="Import/HB2"] -margin_left = 109.0 -margin_right = 608.0 -margin_bottom = 24.0 -hint_tooltip = "Files will be generated in this directory." +layout_mode = 2 size_flags_horizontal = 3 [node name="BrowseImportDirectory" type="Button" parent="Import/HB2"] -margin_left = 612.0 -margin_right = 636.0 -margin_bottom = 24.0 +layout_mode = 2 text = "..." [node name="Spacer" type="Control" parent="Import"] -margin_top = 420.0 -margin_right = 636.0 -margin_bottom = 428.0 -rect_min_size = Vector2( 0, 8 ) +custom_minimum_size = Vector2(0, 8) +layout_mode = 2 [node name="HB" type="HBoxContainer" parent="Import"] -margin_top = 432.0 -margin_right = 636.0 -margin_bottom = 452.0 -custom_constants/separation = 16 +layout_mode = 2 alignment = 1 [node name="ImportButton" type="Button" parent="Import/HB"] -margin_left = 214.0 -margin_right = 359.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Import to TextureSet" [node name="CancelButton" type="Button" parent="Import/HB"] -margin_left = 375.0 -margin_right = 422.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Close" [node name="Spacer2" type="Control" parent="Import"] -margin_top = 456.0 -margin_right = 636.0 -margin_bottom = 464.0 -rect_min_size = Vector2( 0, 8 ) +custom_minimum_size = Vector2(0, 8) +layout_mode = 2 + +[node name="DialogFitter" parent="." instance=ExtResource("1")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 644.0 +offset_bottom = 574.0 -[node name="DialogFitter" parent="." instance=ExtResource( 1 )] [connection signal="item_selected" from="Import/HS/VB/SlotsList" to="." method="_on_SlotsList_item_selected"] [connection signal="pressed" from="Import/HS/VB/HB/AddSlotButton" to="." method="_on_AddSlotButton_pressed"] [connection signal="pressed" from="Import/HS/VB/HB/RemoveSlotButton" to="." method="_on_RemoveSlotButton_pressed"] From 31d1d3dadadb4a7d4d7085d59ad0c55d7a4c0e4e Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:25:29 +0000 Subject: [PATCH 17/94] Hide useless OK button --- .../texture_editor/set_editor/texture_set_import_editor.gd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index 13c3c180..fd8b5594 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -105,6 +105,8 @@ var _import_settings := { func _init(): + get_ok_button().hide() + # Default data _slots_data.clear() for i in 4: From 3f95837492275a89fccdd953173a3d9c044f35fb Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:25:57 +0000 Subject: [PATCH 18/94] Fix texture set editor UI --- .../set_editor/texture_set_editor.gd | 9 +- .../set_editor/texture_set_editor.tscn | 231 ++++++------------ 2 files changed, 88 insertions(+), 152 deletions(-) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd index 7cb76cd2..0ef314b7 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd @@ -1,5 +1,5 @@ @tool -extends Control +extends AcceptDialog const HTerrainTextureSet = preload("../../../hterrain_texture_set.gd") const HT_EditorUtil = preload("../../util/editor_util.gd") @@ -41,6 +41,10 @@ var _load_texture_type := -1 var _logger = HT_Logger.get_for(self) +func _init(): + get_ok_button().hide() + + func _ready(): if HT_Util.is_in_edited_scene(self): return @@ -84,7 +88,8 @@ func _notification(what: int): _load_texture_array_dialog.queue_free() if what == NOTIFICATION_VISIBILITY_CHANGED: - if not is_visible_in_tree(): + if not visible: + # Cleanup referenced resources set_texture_set(null) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn index f3760693..db737b33 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn @@ -1,256 +1,187 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=9 format=3 uid="uid://c0e7ifnoygvr6"] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_alpha.gdshader" type="Shader" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/display_color.gdshader" type="Shader" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=5] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd" id="1"] +[ext_resource type="Shader" path="res://addons/zylann.hterrain/tools/texture_editor/display_alpha.gdshader" id="2"] +[ext_resource type="Shader" path="res://addons/zylann.hterrain/tools/texture_editor/display_color.gdshader" id="3"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="5"] -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 3 ) +[sub_resource type="ShaderMaterial" id="1"] +shader = ExtResource("3") -[sub_resource type="ShaderMaterial" id=2] -shader = ExtResource( 2 ) +[sub_resource type="ShaderMaterial" id="2"] +shader = ExtResource("2") -[sub_resource type="ShaderMaterial" id=3] -shader = ExtResource( 3 ) +[sub_resource type="ShaderMaterial" id="3"] +shader = ExtResource("3") -[sub_resource type="ShaderMaterial" id=4] -shader = ExtResource( 2 ) +[sub_resource type="ShaderMaterial" id="4"] +shader = ExtResource("2") -[node name="TextureSetEditor" type="WindowDialog"] +[node name="TextureSetEditor" type="AcceptDialog"] +title = "TextureSet Editor" +size = Vector2i(666, 341) visible = true -margin_right = 652.0 -margin_bottom = 320.0 -rect_min_size = Vector2( 652, 320 ) -window_title = "TextureSet Editor" -script = ExtResource( 1 ) +min_size = Vector2i(652, 320) +script = ExtResource("1") [node name="VB" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -18.0 [node name="HS" type="HSplitContainer" parent="VB"] -margin_right = 636.0 -margin_bottom = 266.0 +layout_mode = 2 size_flags_vertical = 3 [node name="VB" type="VBoxContainer" parent="VB/HS"] -margin_right = 100.0 -margin_bottom = 266.0 +layout_mode = 2 [node name="SlotsList" type="ItemList" parent="VB/HS/VB"] -margin_right = 100.0 -margin_bottom = 242.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 size_flags_vertical = 3 [node name="HB" type="HBoxContainer" parent="VB/HS/VB"] -margin_top = 246.0 -margin_right = 100.0 -margin_bottom = 266.0 +layout_mode = 2 [node name="AddSlot" type="Button" parent="VB/HS/VB/HB"] -margin_right = 20.0 -margin_bottom = 20.0 +layout_mode = 2 text = "+" [node name="Control" type="Control" parent="VB/HS/VB/HB"] -margin_left = 24.0 -margin_right = 79.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="RemoveSlot" type="Button" parent="VB/HS/VB/HB"] -margin_left = 83.0 -margin_right = 100.0 -margin_bottom = 20.0 +layout_mode = 2 text = "-" [node name="VB2" type="VBoxContainer" parent="VB/HS"] -margin_left = 112.0 -margin_right = 636.0 -margin_bottom = 266.0 +layout_mode = 2 [node name="GC" type="GridContainer" parent="VB/HS/VB2"] -margin_right = 524.0 -margin_bottom = 194.0 +layout_mode = 2 columns = 4 [node name="AlbedoLabel" type="Label" parent="VB/HS/VB2/GC"] -margin_right = 128.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Albedo" [node name="AlbedoExtraLabel" type="Label" parent="VB/HS/VB2/GC"] -margin_left = 132.0 -margin_right = 260.0 -margin_bottom = 14.0 +layout_mode = 2 text = "+ alpha bump" [node name="NormalLabel" type="Label" parent="VB/HS/VB2/GC"] -margin_left = 264.0 -margin_right = 392.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Normal" [node name="NormalExtraLabel" type="Label" parent="VB/HS/VB2/GC"] -margin_left = 396.0 -margin_right = 524.0 -margin_bottom = 14.0 +layout_mode = 2 text = "+ alpha roughness" [node name="AlbedoPreview" type="TextureRect" parent="VB/HS/VB2/GC"] -material = SubResource( 1 ) -margin_top = 18.0 -margin_right = 128.0 -margin_bottom = 146.0 -rect_min_size = Vector2( 128, 128 ) -expand = true +material = SubResource("1") +custom_minimum_size = Vector2(128, 128) +layout_mode = 2 +expand_mode = 1 stretch_mode = 1 [node name="BumpPreview" type="TextureRect" parent="VB/HS/VB2/GC"] -material = SubResource( 2 ) -margin_left = 132.0 -margin_top = 18.0 -margin_right = 260.0 -margin_bottom = 146.0 -rect_min_size = Vector2( 128, 128 ) -expand = true +material = SubResource("2") +custom_minimum_size = Vector2(128, 128) +layout_mode = 2 +expand_mode = 1 stretch_mode = 1 [node name="NormalPreview" type="TextureRect" parent="VB/HS/VB2/GC"] -material = SubResource( 3 ) -margin_left = 264.0 -margin_top = 18.0 -margin_right = 392.0 -margin_bottom = 146.0 -rect_min_size = Vector2( 128, 128 ) -expand = true +material = SubResource("3") +custom_minimum_size = Vector2(128, 128) +layout_mode = 2 +expand_mode = 1 stretch_mode = 1 [node name="RoughnessPreview" type="TextureRect" parent="VB/HS/VB2/GC"] -material = SubResource( 4 ) -margin_left = 396.0 -margin_top = 18.0 -margin_right = 524.0 -margin_bottom = 146.0 -rect_min_size = Vector2( 128, 128 ) -expand = true +material = SubResource("4") +custom_minimum_size = Vector2(128, 128) +layout_mode = 2 +expand_mode = 1 stretch_mode = 1 [node name="LoadAlbedo" type="Button" parent="VB/HS/VB2/GC"] -margin_top = 150.0 -margin_right = 128.0 -margin_bottom = 170.0 +layout_mode = 2 text = "Load..." [node name="Spacer" type="Control" parent="VB/HS/VB2/GC"] -margin_left = 132.0 -margin_top = 150.0 -margin_right = 260.0 -margin_bottom = 170.0 +layout_mode = 2 [node name="LoadNormal" type="Button" parent="VB/HS/VB2/GC"] -margin_left = 264.0 -margin_top = 150.0 -margin_right = 392.0 -margin_bottom = 170.0 +layout_mode = 2 text = "Load..." [node name="Spacer2" type="Control" parent="VB/HS/VB2/GC"] -margin_left = 396.0 -margin_top = 150.0 -margin_right = 524.0 -margin_bottom = 170.0 +layout_mode = 2 [node name="ClearAlbedo" type="Button" parent="VB/HS/VB2/GC"] -margin_top = 174.0 -margin_right = 128.0 -margin_bottom = 194.0 +layout_mode = 2 text = "Clear" [node name="Spacer3" type="Control" parent="VB/HS/VB2/GC"] -margin_left = 132.0 -margin_top = 174.0 -margin_right = 260.0 -margin_bottom = 194.0 +layout_mode = 2 [node name="ClearNormal" type="Button" parent="VB/HS/VB2/GC"] -margin_left = 264.0 -margin_top = 174.0 -margin_right = 392.0 -margin_bottom = 194.0 +layout_mode = 2 text = "Clear" [node name="HSeparator" type="Control" parent="VB/HS/VB2"] -margin_top = 198.0 -margin_right = 524.0 -margin_bottom = 202.0 -rect_min_size = Vector2( 0, 4 ) +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 [node name="GC2" type="HBoxContainer" parent="VB/HS/VB2"] -margin_top = 206.0 -margin_right = 524.0 -margin_bottom = 226.0 +layout_mode = 2 [node name="Label" type="Label" parent="VB/HS/VB2/GC2"] -margin_top = 3.0 -margin_right = 36.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Mode" [node name="ModeSelector" type="OptionButton" parent="VB/HS/VB2/GC2"] -margin_left = 40.0 -margin_right = 280.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 -text = "Textures" [node name="Spacer" type="Control" parent="VB/HS/VB2/GC2"] -margin_left = 284.0 -margin_right = 524.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Spacer" type="Control" parent="VB"] -margin_top = 270.0 -margin_right = 636.0 -margin_bottom = 274.0 -rect_min_size = Vector2( 0, 4 ) +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 [node name="HB" type="HBoxContainer" parent="VB"] -margin_top = 278.0 -margin_right = 636.0 -margin_bottom = 298.0 -custom_constants/separation = 16 +layout_mode = 2 alignment = 1 [node name="ImportButton" type="Button" parent="VB/HB"] -margin_left = 252.0 -margin_right = 320.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Import..." [node name="CloseButton" type="Button" parent="VB/HB"] -margin_left = 336.0 -margin_right = 383.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Close" [node name="Spacer2" type="Control" parent="VB"] -margin_top = 302.0 -margin_right = 636.0 -margin_bottom = 304.0 -rect_min_size = Vector2( 0, 2 ) - -[node name="DialogFitter" parent="." instance=ExtResource( 5 )] +custom_minimum_size = Vector2(0, 2) +layout_mode = 2 + +[node name="DialogFitter" parent="." instance=ExtResource("5")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 658.0 +offset_bottom = 323.0 [connection signal="item_selected" from="VB/HS/VB/SlotsList" to="." method="_on_SlotsList_item_selected"] [connection signal="pressed" from="VB/HS/VB/HB/AddSlot" to="." method="_on_AddSlot_pressed"] From b08ade1556243b511680ce9e33f9ffdb1cbbcb62 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:44:45 +0000 Subject: [PATCH 19/94] Fix a few issues with brush settings dialog UI --- .../tools/brush/settings_dialog/brush_settings_dialog.gd | 6 ++++-- .../tools/brush/settings_dialog/brush_settings_dialog.tscn | 4 ++-- addons/zylann.hterrain/tools/util/editor_util.gd | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd index d9cbb5b9..af7e17db 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd @@ -74,7 +74,7 @@ func _exit_tree(): func _get_shapes_from_gui() -> Array[Texture2D]: - var shapes := [] + var shapes : Array[Texture2D] = [] for i in _shape_list.get_item_count(): var icon : Texture2D = _shape_list.get_item_icon(i) assert(icon != null) @@ -168,7 +168,9 @@ func _on_LoadImageDialog_file_selected(fpath: String): func _notification(what: int): if what == NOTIFICATION_VISIBILITY_CHANGED: - if visible: + # Testing the scratchpad because visibility can not only change before entering the tree + # since Godot 4 port, it can also change between entering the tree and being _ready... + if visible and _scratchpad != null: _update_controls_from_brush() diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn index 20549faa..d6585033 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn @@ -15,8 +15,8 @@ anchor_right = 1.0 anchor_bottom = 1.0 offset_left = 8.0 offset_top = 8.0 -offset_right = 484.0 -offset_bottom = 293.0 +offset_right = -8.0 +offset_bottom = -49.0 [node name="HB" type="HBoxContainer" parent="VB"] layout_mode = 2 diff --git a/addons/zylann.hterrain/tools/util/editor_util.gd b/addons/zylann.hterrain/tools/util/editor_util.gd index 7d53e580..a6d9eff6 100644 --- a/addons/zylann.hterrain/tools/util/editor_util.gd +++ b/addons/zylann.hterrain/tools/util/editor_util.gd @@ -20,7 +20,7 @@ static func create_open_file_dialog() -> ConfirmationDialog: d = FileDialog.new() d.file_mode = FileDialog.FILE_MODE_OPEN_FILE d.access = FileDialog.ACCESS_RESOURCES - d.resizable = true + d.unresizable = false return d @@ -37,7 +37,7 @@ static func create_open_dir_dialog() -> ConfirmationDialog: d = FileDialog.new() d.file_mode = FileDialog.FILE_MODE_OPEN_DIR d.access = FileDialog.ACCESS_RESOURCES - d.resizable = true + d.unresizable = false return d From 6682399fbfe5e1e98d5b3a17fd6cd53002408c57 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:46:43 +0000 Subject: [PATCH 20/94] Fix brush editor UI scene --- .../tools/brush/brush_editor.tscn | 132 +++++------------- 1 file changed, 36 insertions(+), 96 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/brush_editor.tscn b/addons/zylann.hterrain/tools/brush/brush_editor.tscn index 885bb3d9..f830a250 100644 --- a/addons/zylann.hterrain/tools/brush/brush_editor.tscn +++ b/addons/zylann.hterrain/tools/brush/brush_editor.tscn @@ -1,60 +1,46 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://bd42ig216p216"] -[ext_resource path="res://addons/zylann.hterrain/tools/brush/brush_editor.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/util/interval_slider.gd" type="Script" id=3] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/brush_editor.gd" id="1"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/util/interval_slider.gd" id="3"] -[sub_resource type="CanvasItemMaterial" id=1] +[sub_resource type="CanvasItemMaterial" id="1"] blend_mode = 1 [node name="BrushEditor" type="Control"] -margin_right = 306.0 -margin_bottom = 110.0 -rect_min_size = Vector2( 200, 0 ) -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1") [node name="BrushShapeButton" type="Button" parent="."] +layout_mode = 0 anchor_bottom = 1.0 -margin_right = 50.0 -rect_min_size = Vector2( 50, 0 ) [node name="TextureRect" type="TextureRect" parent="BrushShapeButton"] -material = SubResource( 1 ) +material = SubResource("1") +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 2 -expand = true +expand_mode = 1 stretch_mode = 6 [node name="GridContainer" type="GridContainer" parent="."] +layout_mode = 0 anchor_right = 1.0 -margin_left = 54.0 -margin_right = -7.0 -margin_bottom = 144.0 size_flags_horizontal = 3 columns = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="BrushSizeLabel" type="Label" parent="GridContainer"] -margin_top = 1.0 -margin_right = 89.0 -margin_bottom = 15.0 +layout_mode = 2 text = "Brush size" [node name="BrushSizeControl" type="HBoxContainer" parent="GridContainer"] -margin_left = 93.0 -margin_right = 245.0 -margin_bottom = 16.0 -mouse_filter = 0 +layout_mode = 2 size_flags_horizontal = 3 +mouse_filter = 0 [node name="Slider" type="HSlider" parent="GridContainer/BrushSizeControl"] -margin_right = 118.0 -margin_bottom = 16.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 min_value = 2.0 @@ -64,124 +50,78 @@ exp_edit = true rounded = true [node name="Label" type="Label" parent="GridContainer/BrushSizeControl"] -margin_left = 122.0 -margin_top = 1.0 -margin_right = 152.0 -margin_bottom = 15.0 -rect_min_size = Vector2( 30, 0 ) +layout_mode = 2 text = "999" -align = 2 [node name="BrushOpacityLabel" type="Label" parent="GridContainer"] -margin_top = 21.0 -margin_right = 89.0 -margin_bottom = 35.0 +layout_mode = 2 text = "Brush opacity" [node name="BrushOpacityControl" type="HBoxContainer" parent="GridContainer"] -margin_left = 93.0 -margin_top = 20.0 -margin_right = 245.0 -margin_bottom = 36.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Slider" type="HSlider" parent="GridContainer/BrushOpacityControl"] -margin_right = 118.0 -margin_bottom = 16.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 [node name="Label" type="Label" parent="GridContainer/BrushOpacityControl"] -margin_left = 122.0 -margin_top = 1.0 -margin_right = 152.0 -margin_bottom = 15.0 -rect_min_size = Vector2( 30, 0 ) +layout_mode = 2 text = "999" -align = 2 [node name="FlattenHeightLabel" type="Label" parent="GridContainer"] -margin_top = 45.0 -margin_right = 89.0 -margin_bottom = 59.0 +layout_mode = 2 text = "Flatten height" [node name="HB" type="HBoxContainer" parent="GridContainer"] -margin_left = 93.0 -margin_top = 40.0 -margin_right = 245.0 -margin_bottom = 64.0 +layout_mode = 2 [node name="FlattenHeightControl" type="SpinBox" parent="GridContainer/HB"] -margin_right = 110.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 min_value = -500.0 max_value = 500.0 step = 0.01 [node name="FlattenHeightPickButton" type="Button" parent="GridContainer/HB"] -margin_left = 114.0 -margin_right = 152.0 -margin_bottom = 24.0 +layout_mode = 2 toggle_mode = true text = "Pick" [node name="ColorLabel" type="Label" parent="GridContainer"] -margin_top = 71.0 -margin_right = 89.0 -margin_bottom = 85.0 +layout_mode = 2 text = "Color" [node name="ColorPickerButton" type="ColorPickerButton" parent="GridContainer"] -margin_left = 93.0 -margin_top = 68.0 -margin_right = 245.0 -margin_bottom = 88.0 +layout_mode = 2 toggle_mode = false -color = Color( 1, 1, 1, 1 ) +color = Color(1, 1, 1, 1) [node name="DensityLabel" type="Label" parent="GridContainer"] -margin_top = 97.0 -margin_right = 89.0 -margin_bottom = 111.0 +layout_mode = 2 text = "Detail density" [node name="DensitySlider" type="HSlider" parent="GridContainer"] -margin_left = 93.0 -margin_top = 92.0 -margin_right = 245.0 -margin_bottom = 116.0 -rect_min_size = Vector2( 0, 24 ) +layout_mode = 2 max_value = 1.0 step = 0.1 [node name="HoleLabel" type="Label" parent="GridContainer"] -margin_top = 125.0 -margin_right = 89.0 -margin_bottom = 139.0 +layout_mode = 2 text = "Draw holes" [node name="HoleCheckbox" type="CheckBox" parent="GridContainer"] -margin_left = 93.0 -margin_top = 120.0 -margin_right = 245.0 -margin_bottom = 144.0 +layout_mode = 2 [node name="SlopeLimitLabel" type="Label" parent="GridContainer"] -margin_top = 149.0 -margin_right = 89.0 -margin_bottom = 163.0 +layout_mode = 2 text = "Slope limit" [node name="SlopeLimit" type="Control" parent="GridContainer"] -margin_left = 93.0 -margin_top = 148.0 -margin_right = 245.0 -margin_bottom = 164.0 -rect_min_size = Vector2( 0, 16 ) -script = ExtResource( 3 ) -range = Vector2( 0, 90 ) +layout_mode = 2 +script = ExtResource("3") +range = Vector2(0, 90) [node name="Temp" type="Node" parent="."] From 0baab61636420d9a068a66ea9171a49179e27593 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:48:57 +0000 Subject: [PATCH 21/94] Fix detail editor UI scene --- .../tools/detail_editor/detail_editor.tscn | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/addons/zylann.hterrain/tools/detail_editor/detail_editor.tscn b/addons/zylann.hterrain/tools/detail_editor/detail_editor.tscn index 49b65e80..cc5b9953 100644 --- a/addons/zylann.hterrain/tools/detail_editor/detail_editor.tscn +++ b/addons/zylann.hterrain/tools/detail_editor/detail_editor.tscn @@ -1,52 +1,45 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://do3c3jse5p7hx"] -[ext_resource path="res://addons/zylann.hterrain/tools/detail_editor/detail_editor.gd" type="Script" id=1] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/detail_editor/detail_editor.gd" id="1"] [node name="DetailEditor" type="Control"] -margin_right = 189.0 -margin_bottom = 109.0 -rect_min_size = Vector2( 200, 0 ) -script = ExtResource( 1 ) +custom_minimum_size = Vector2(200, 0) +layout_mode = 3 +anchors_preset = 0 +offset_right = 189.0 +offset_bottom = 109.0 +script = ExtResource("1") [node name="ItemList" type="ItemList" parent="."] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_bottom = -26.0 +offset_bottom = -26.0 max_columns = 0 same_column_width = true icon_mode = 0 -fixed_icon_size = Vector2( 32, 32 ) +fixed_icon_size = Vector2i(32, 32) [node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -24.0 +offset_top = -24.0 [node name="Add" type="Button" parent="HBoxContainer"] -margin_right = 37.0 -margin_bottom = 24.0 +layout_mode = 2 text = "Add" [node name="Remove" type="Button" parent="HBoxContainer"] -margin_left = 41.0 -margin_right = 105.0 -margin_bottom = 24.0 +layout_mode = 2 text = "Remove" [node name="Label" type="Label" parent="HBoxContainer"] -margin_left = 109.0 -margin_top = 5.0 -margin_right = 154.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Details" [node name="ConfirmationDialog" type="ConfirmationDialog" parent="."] -margin_left = 77.0 -margin_top = 523.0 -margin_right = 411.0 -margin_bottom = 598.0 -window_title = "Please confirm…" dialog_text = "Are you sure you want to remove this detail map?" [connection signal="item_selected" from="ItemList" to="." method="_on_ItemList_item_selected"] From e956c97c56be9ad3ebd53be44298b9ce7eeaac7d Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 20:53:27 +0000 Subject: [PATCH 22/94] Fix export image dialog UI --- .../tools/exporter/export_image_dialog.tscn | 134 ++++++------------ 1 file changed, 46 insertions(+), 88 deletions(-) diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn b/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn index 9f57677a..092df9c7 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn @@ -1,164 +1,122 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://bcocysgmum5ag"] -[ext_resource path="res://addons/zylann.hterrain/tools/exporter/export_image_dialog.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/exporter/export_image_dialog.gd" id="1"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="2"] -[node name="ExportImageDialog" type="WindowDialog"] -margin_left = 77.0 -margin_top = 64.0 -margin_right = 577.0 -margin_bottom = 264.0 -rect_min_size = Vector2( 500, 250 ) -window_title = "Export heightmap as image" -resizable = true -script = ExtResource( 1 ) +[node name="ExportImageDialog" type="AcceptDialog"] +size = Vector2i(500, 314) +visible = true +min_size = Vector2i(500, 250) +script = ExtResource("1") [node name="VB" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -18.0 [node name="Grid" type="GridContainer" parent="VB"] -margin_right = 484.0 -margin_bottom = 76.0 -custom_constants/hseparation = 16 +layout_mode = 2 columns = 2 [node name="OutputPathLabel" type="Label" parent="VB/Grid"] -margin_top = 5.0 -margin_right = 85.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Output path:" [node name="OutputPath" type="HBoxContainer" parent="VB/Grid"] -margin_left = 101.0 -margin_right = 484.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="HeightmapPathLineEdit" type="LineEdit" parent="VB/Grid/OutputPath"] -margin_right = 355.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="HeightmapPathBrowseButton" type="Button" parent="VB/Grid/OutputPath"] -margin_left = 359.0 -margin_right = 383.0 -margin_bottom = 24.0 +layout_mode = 2 text = "..." [node name="FormatLabel" type="Label" parent="VB/Grid"] -margin_top = 31.0 -margin_right = 85.0 -margin_bottom = 45.0 +layout_mode = 2 text = "Format:" [node name="FormatSelector" type="OptionButton" parent="VB/Grid"] -margin_left = 101.0 -margin_top = 28.0 -margin_right = 484.0 -margin_bottom = 48.0 +layout_mode = 2 [node name="HeightRangeLabel" type="Label" parent="VB/Grid"] -margin_top = 57.0 -margin_right = 85.0 -margin_bottom = 71.0 +layout_mode = 2 text = "Height range:" [node name="HeightRange" type="HBoxContainer" parent="VB/Grid"] -margin_left = 101.0 -margin_top = 52.0 -margin_right = 484.0 -margin_bottom = 76.0 +layout_mode = 2 [node name="Label" type="Label" parent="VB/Grid/HeightRange"] -margin_top = 5.0 -margin_right = 24.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Min" [node name="HeightRangeMin" type="SpinBox" parent="VB/Grid/HeightRange"] -margin_left = 28.0 -margin_right = 128.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 min_value = -10000.0 max_value = 10000.0 step = 0.0 value = -2000.0 [node name="Label2" type="Label" parent="VB/Grid/HeightRange"] -margin_left = 132.0 -margin_top = 5.0 -margin_right = 158.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Max" [node name="HeightRangeMax" type="SpinBox" parent="VB/Grid/HeightRange"] -margin_left = 162.0 -margin_right = 262.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 min_value = -10000.0 max_value = 10000.0 step = 0.0 value = 2000.0 [node name="HeightRangeAutoButton" type="Button" parent="VB/Grid/HeightRange"] -margin_left = 266.0 -margin_right = 383.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Auto" [node name="ShowInExplorerCheckbox" type="CheckBox" parent="VB"] -margin_top = 80.0 -margin_right = 484.0 -margin_bottom = 104.0 +layout_mode = 2 text = "Show in explorer after export" [node name="Spacer" type="Control" parent="VB"] -margin_top = 108.0 -margin_right = 484.0 -margin_bottom = 124.0 -rect_min_size = Vector2( 0, 16 ) +custom_minimum_size = Vector2(0, 16) +layout_mode = 2 [node name="Label" type="Label" parent="VB"] -margin_top = 128.0 -margin_right = 484.0 -margin_bottom = 159.0 +layout_mode = 2 text = "Note: height range is needed for integer image formats, as they can't directly represent the real height. 8-bit formats may cause precision loss." -autowrap = true +autowrap_mode = 2 [node name="Spacer2" type="Control" parent="VB"] -margin_top = 163.0 -margin_right = 484.0 -margin_bottom = 179.0 -rect_min_size = Vector2( 0, 16 ) +custom_minimum_size = Vector2(0, 16) +layout_mode = 2 [node name="Buttons" type="HBoxContainer" parent="VB"] -margin_top = 183.0 -margin_right = 484.0 -margin_bottom = 203.0 -custom_constants/separation = 32 +layout_mode = 2 alignment = 1 [node name="ExportButton" type="Button" parent="VB/Buttons"] -margin_left = 173.0 -margin_right = 225.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Export" [node name="CancelButton" type="Button" parent="VB/Buttons"] -margin_left = 257.0 -margin_right = 311.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Cancel" -[node name="DialogFitter" parent="." instance=ExtResource( 2 )] +[node name="DialogFitter" parent="." instance=ExtResource("2")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 492.0 +offset_bottom = 296.0 [connection signal="text_changed" from="VB/Grid/OutputPath/HeightmapPathLineEdit" to="." method="_on_HeightmapPathLineEdit_text_changed"] [connection signal="pressed" from="VB/Grid/OutputPath/HeightmapPathBrowseButton" to="." method="_on_HeightmapPathBrowseButton_pressed"] From b1db6fd5cbc937d598e205031468a494c60b34df Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 21:05:07 +0000 Subject: [PATCH 23/94] More shader fixes --- addons/zylann.hterrain/shaders/array.gdshader | 6 +++--- addons/zylann.hterrain/shaders/array_global.gdshader | 4 ++-- addons/zylann.hterrain/shaders/detail.gdshader | 6 +++--- addons/zylann.hterrain/shaders/low_poly.gdshader | 2 +- addons/zylann.hterrain/shaders/multisplat16.gdshader | 6 +++--- .../shaders/multisplat16_global.gdshader | 6 +++--- .../shaders/multisplat16_lite.gdshader | 6 +++--- addons/zylann.hterrain/shaders/simple4.gdshader | 12 ++++++------ .../zylann.hterrain/shaders/simple4_global.gdshader | 10 +++++----- addons/zylann.hterrain/shaders/simple4_lite.gdshader | 12 ++++++------ 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/addons/zylann.hterrain/shaders/array.gdshader b/addons/zylann.hterrain/shaders/array.gdshader index 61d6cd53..46aed371 100644 --- a/addons/zylann.hterrain/shaders/array.gdshader +++ b/addons/zylann.hterrain/shaders/array.gdshader @@ -2,16 +2,16 @@ shader_type spatial; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap; uniform sampler2D u_terrain_splat_index_map; uniform sampler2D u_terrain_splat_weight_map; -uniform sampler2D u_terrain_globalmap : hint_albedo; +uniform sampler2D u_terrain_globalmap : source_color; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; -uniform sampler2DArray u_ground_albedo_bump_array : hint_albedo; +uniform sampler2DArray u_ground_albedo_bump_array : source_color; uniform sampler2DArray u_ground_normal_roughness_array; // TODO Have UV scales for each texture in an array? diff --git a/addons/zylann.hterrain/shaders/array_global.gdshader b/addons/zylann.hterrain/shaders/array_global.gdshader index 8e710a2f..b72dc534 100644 --- a/addons/zylann.hterrain/shaders/array_global.gdshader +++ b/addons/zylann.hterrain/shaders/array_global.gdshader @@ -3,13 +3,13 @@ shader_type spatial; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap; uniform sampler2D u_terrain_splat_index_map; uniform sampler2D u_terrain_splat_weight_map; -uniform sampler2DArray u_ground_albedo_bump_array : hint_albedo; +uniform sampler2DArray u_ground_albedo_bump_array : source_color; // TODO Have UV scales for each texture in an array? uniform float u_ground_uv_scale; diff --git a/addons/zylann.hterrain/shaders/detail.gdshader b/addons/zylann.hterrain/shaders/detail.gdshader index 62293708..0382a80f 100644 --- a/addons/zylann.hterrain/shaders/detail.gdshader +++ b/addons/zylann.hterrain/shaders/detail.gdshader @@ -4,11 +4,11 @@ render_mode cull_disabled; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_detailmap; uniform sampler2D u_terrain_normalmap; -uniform sampler2D u_terrain_globalmap : hint_albedo; +uniform sampler2D u_terrain_globalmap : source_color; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; -uniform sampler2D u_albedo_alpha : hint_albedo; +uniform sampler2D u_albedo_alpha : source_color; uniform float u_view_distance = 100.0; uniform float u_globalmap_tint_bottom : hint_range(0.0, 1.0); uniform float u_globalmap_tint_top : hint_range(0.0, 1.0); @@ -84,7 +84,7 @@ void vertex() { void fragment() { NORMAL = (VIEW_MATRIX * (MODEL_MATRIX * vec4(v_normal, 0.0))).xyz; - ALPHA_SCISSOR = 0.5; + ALPHA_SCISSOR_THRESHOLD = 0.5; ROUGHNESS = u_roughness; vec4 col = texture(u_albedo_alpha, UV); diff --git a/addons/zylann.hterrain/shaders/low_poly.gdshader b/addons/zylann.hterrain/shaders/low_poly.gdshader index 3c605ad9..eac58c63 100644 --- a/addons/zylann.hterrain/shaders/low_poly.gdshader +++ b/addons/zylann.hterrain/shaders/low_poly.gdshader @@ -4,7 +4,7 @@ shader_type spatial; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap;// : hint_albedo; uniform mat4 u_terrain_inverse_transform; diff --git a/addons/zylann.hterrain/shaders/multisplat16.gdshader b/addons/zylann.hterrain/shaders/multisplat16.gdshader index 24d2091b..58d6fc09 100644 --- a/addons/zylann.hterrain/shaders/multisplat16.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16.gdshader @@ -6,18 +6,18 @@ shader_type spatial; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap; uniform sampler2D u_terrain_splatmap; uniform sampler2D u_terrain_splatmap_1; uniform sampler2D u_terrain_splatmap_2; uniform sampler2D u_terrain_splatmap_3; -uniform sampler2D u_terrain_globalmap : hint_albedo; +uniform sampler2D u_terrain_globalmap : source_color; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; -uniform sampler2DArray u_ground_albedo_bump_array : hint_albedo; +uniform sampler2DArray u_ground_albedo_bump_array : source_color; uniform sampler2DArray u_ground_normal_roughness_array; uniform float u_ground_uv_scale = 20.0; diff --git a/addons/zylann.hterrain/shaders/multisplat16_global.gdshader b/addons/zylann.hterrain/shaders/multisplat16_global.gdshader index 338f00ba..dbe60c56 100644 --- a/addons/zylann.hterrain/shaders/multisplat16_global.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16_global.gdshader @@ -3,7 +3,7 @@ shader_type spatial; // This shader uses a texture array with multiple splatmaps, allowing up to 16 textures. // Only the 4 textures having highest blending weight are sampled. -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap; uniform sampler2D u_terrain_splatmap; @@ -11,7 +11,7 @@ uniform sampler2D u_terrain_splatmap_1; uniform sampler2D u_terrain_splatmap_2; uniform sampler2D u_terrain_splatmap_3; -uniform sampler2DArray u_ground_albedo_bump_array : hint_albedo; +uniform sampler2DArray u_ground_albedo_bump_array : source_color; uniform float u_ground_uv_scale = 20.0; uniform bool u_depth_blending = true; @@ -116,7 +116,7 @@ void get_splat_weights(vec2 uv, out vec4 out_high_indices, out vec4 out_high_wei } void vertex() { - vec4 wpos = WORLD_MATRIX * vec4(VERTEX, 1); + vec4 wpos = MODEL_MATRIX * vec4(VERTEX, 1); vec2 cell_coords = wpos.xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results (#183) diff --git a/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader index 5e5cfc94..abb3fa66 100644 --- a/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader @@ -6,18 +6,18 @@ shader_type spatial; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap; uniform sampler2D u_terrain_splatmap; uniform sampler2D u_terrain_splatmap_1; uniform sampler2D u_terrain_splatmap_2; uniform sampler2D u_terrain_splatmap_3; -uniform sampler2D u_terrain_globalmap : hint_albedo; +uniform sampler2D u_terrain_globalmap : source_color; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; -uniform sampler2DArray u_ground_albedo_bump_array : hint_albedo; +uniform sampler2DArray u_ground_albedo_bump_array : source_color; uniform float u_ground_uv_scale = 20.0; uniform bool u_depth_blending = true; diff --git a/addons/zylann.hterrain/shaders/simple4.gdshader b/addons/zylann.hterrain/shaders/simple4.gdshader index 4044a012..e0cb3663 100644 --- a/addons/zylann.hterrain/shaders/simple4.gdshader +++ b/addons/zylann.hterrain/shaders/simple4.gdshader @@ -6,21 +6,21 @@ shader_type spatial; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap; uniform sampler2D u_terrain_splatmap; -uniform sampler2D u_terrain_globalmap : hint_albedo; +uniform sampler2D u_terrain_globalmap : source_color; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; // the reason bump is preferred with albedo is, roughness looks better with normal maps. // If we want no normal mapping, roughness would only give flat mirror surfaces, // while bump still allows to do depth-blending for free. -uniform sampler2D u_ground_albedo_bump_0 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_1 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_2 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_3 : hint_albedo; +uniform sampler2D u_ground_albedo_bump_0 : source_color; +uniform sampler2D u_ground_albedo_bump_1 : source_color; +uniform sampler2D u_ground_albedo_bump_2 : source_color; +uniform sampler2D u_ground_albedo_bump_3 : source_color; uniform sampler2D u_ground_normal_roughness_0; uniform sampler2D u_ground_normal_roughness_1; diff --git a/addons/zylann.hterrain/shaders/simple4_global.gdshader b/addons/zylann.hterrain/shaders/simple4_global.gdshader index e6d43abd..f504c48a 100644 --- a/addons/zylann.hterrain/shaders/simple4_global.gdshader +++ b/addons/zylann.hterrain/shaders/simple4_global.gdshader @@ -3,15 +3,15 @@ shader_type spatial; // This shader is used to bake the global albedo map. // It exposes a subset of the main shader API, so uniform names were not modified. -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap;// : hint_albedo; uniform sampler2D u_terrain_splatmap; -uniform sampler2D u_ground_albedo_bump_0 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_1 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_2 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_3 : hint_albedo; +uniform sampler2D u_ground_albedo_bump_0 : source_color; +uniform sampler2D u_ground_albedo_bump_1 : source_color; +uniform sampler2D u_ground_albedo_bump_2 : source_color; +uniform sampler2D u_ground_albedo_bump_3 : source_color; // Keep depth blending because it has a high effect on the final result uniform bool u_depth_blending = true; diff --git a/addons/zylann.hterrain/shaders/simple4_lite.gdshader b/addons/zylann.hterrain/shaders/simple4_lite.gdshader index c0e6004c..da038a1d 100644 --- a/addons/zylann.hterrain/shaders/simple4_lite.gdshader +++ b/addons/zylann.hterrain/shaders/simple4_lite.gdshader @@ -5,17 +5,17 @@ shader_type spatial; uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; -// I had to remove `hint_albedo` from colormap because it makes sRGB conversion kick in, +// I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, // which snowballs to black when doing GPU painting on that texture... uniform sampler2D u_terrain_colormap;// : hint_albedo; uniform sampler2D u_terrain_splatmap; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; -uniform sampler2D u_ground_albedo_bump_0 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_1 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_2 : hint_albedo; -uniform sampler2D u_ground_albedo_bump_3 : hint_albedo; +uniform sampler2D u_ground_albedo_bump_0 : source_color; +uniform sampler2D u_ground_albedo_bump_1 : source_color; +uniform sampler2D u_ground_albedo_bump_2 : source_color; +uniform sampler2D u_ground_albedo_bump_3 : source_color; uniform float u_ground_uv_scale = 20.0; uniform bool u_depth_blending = true; @@ -104,7 +104,7 @@ vec4 texture_antitile(sampler2D tex, vec2 uv) { } void vertex() { - vec2 cell_coords = (u_terrain_inverse_transform * WORLD_MATRIX * vec4(VERTEX, 1)).xz; + vec2 cell_coords = (u_terrain_inverse_transform * MODEL_MATRIX * vec4(VERTEX, 1)).xz; // Must add a half-offset so that we sample the center of pixels, // otherwise bilinear filtering of the textures will give us mixed results. cell_coords += vec2(0.5); From 011a238019d7f29db250268d742fcf7a32ae7f03 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 21:33:16 +0000 Subject: [PATCH 24/94] Fix generator dialog UI scene --- .../tools/generator/generator_dialog.tscn | 96 ++++++++----------- 1 file changed, 42 insertions(+), 54 deletions(-) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.tscn b/addons/zylann.hterrain/tools/generator/generator_dialog.tscn index 01a868b8..4748381b 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.tscn +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.tscn @@ -1,92 +1,80 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://cgfo1ocbdi1ug"] -[ext_resource path="res://addons/zylann.hterrain/tools/generator/generator_dialog.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/inspector/inspector.tscn" type="PackedScene" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/terrain_preview.tscn" type="PackedScene" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=4] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/generator/generator_dialog.gd" id="1"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/inspector/inspector.tscn" id="2"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/terrain_preview.tscn" id="3"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="4"] -[node name="GeneratorDialog" type="WindowDialog"] -margin_left = 22.0 -margin_top = 32.0 -margin_right = 1122.0 -margin_bottom = 666.0 -rect_min_size = Vector2( 1100, 600 ) -window_title = "Generate terrain" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +[node name="GeneratorDialog" type="AcceptDialog"] +title = "Generate terrain" +size = Vector2i(1100, 780) +visible = true +min_size = Vector2i(1100, 620) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 -custom_constants/separation = 16 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -18.0 [node name="Editor" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 1084.0 -margin_bottom = 584.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Settings" type="VBoxContainer" parent="VBoxContainer/Editor"] -margin_right = 420.0 -margin_bottom = 584.0 -rect_min_size = Vector2( 420, 0 ) +custom_minimum_size = Vector2(420, 0) +layout_mode = 2 -[node name="Inspector" parent="VBoxContainer/Editor/Settings" instance=ExtResource( 2 )] -margin_right = 420.0 -margin_bottom = 584.0 +[node name="Inspector" parent="VBoxContainer/Editor/Settings" instance=ExtResource("2")] +layout_mode = 2 [node name="Preview" type="Control" parent="VBoxContainer/Editor"] -margin_left = 424.0 -margin_right = 1084.0 -margin_bottom = 584.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="TerrainPreview" parent="VBoxContainer/Editor/Preview" instance=ExtResource( 3 )] +[node name="TerrainPreview" parent="VBoxContainer/Editor/Preview" instance=ExtResource("3")] +layout_mode = 0 [node name="Label" type="Label" parent="VBoxContainer/Editor/Preview"] -margin_left = 5.0 -margin_top = 4.0 -margin_right = 207.0 -margin_bottom = 18.0 -custom_colors/font_color = Color( 1, 1, 1, 0.453608 ) +layout_mode = 0 +offset_left = 5.0 +offset_top = 4.0 +offset_right = 207.0 +offset_bottom = 18.0 text = "LMB: offset, MMB: rotate" [node name="ProgressBar" type="ProgressBar" parent="VBoxContainer/Editor/Preview"] +layout_mode = 1 +anchors_preset = -1 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -16.0 +offset_top = -35.0 step = 1.0 [node name="Choices" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 600.0 -margin_right = 1084.0 -margin_bottom = 620.0 -custom_constants/separation = 32 +layout_mode = 2 alignment = 1 [node name="ApplyButton" type="Button" parent="VBoxContainer/Choices"] -margin_left = 475.0 -margin_right = 523.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Apply" [node name="CancelButton" type="Button" parent="VBoxContainer/Choices"] -margin_left = 555.0 -margin_right = 609.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Cancel" -[node name="DialogFitter" parent="." instance=ExtResource( 4 )] +[node name="DialogFitter" parent="." instance=ExtResource("4")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 1092.0 +offset_bottom = 762.0 [connection signal="property_changed" from="VBoxContainer/Editor/Settings/Inspector" to="." method="_on_Inspector_property_changed"] [connection signal="dragged" from="VBoxContainer/Editor/Preview/TerrainPreview" to="." method="_on_TerrainPreview_dragged"] From 2930beae8921870fb2b8296535fc552bbbf34582 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 21 Mar 2023 22:04:42 +0000 Subject: [PATCH 25/94] Fix some generator stuff, but there seems to be a bug in the encoding --- .../heightmap_rgb8_encoding.gdshaderinc | 63 +++++++++++++++++++ .../shaders/simple4_lite.gdshader | 4 +- .../tools/generator/generator_dialog.gd | 31 ++++----- .../tools/generator/generator_dialog.tscn | 6 +- .../generator/shaders/bump2normal.gdshader | 14 +++-- .../tools/generator/shaders/erode.gdshader | 20 +++--- .../generator/shaders/perlin_noise.gdshader | 4 +- .../tools/generator/texture_generator.gd | 18 +++--- 8 files changed, 120 insertions(+), 40 deletions(-) create mode 100644 addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc diff --git a/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc b/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc new file mode 100644 index 00000000..53e46526 --- /dev/null +++ b/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc @@ -0,0 +1,63 @@ + +// TODO Small discrepancy in encoding: +// 8-bit components are normalized using c / 255.0, therefore they can be 1, +// but the logic below assumes they are normalized with `c / 256.0`. +// We should test using an extra factor to smooth this out. +const float FROM_FIXED = 255.0 / 256.0; +const float TO_FIXED = 256.0 / 255.0; + +// Decodes height from a normalized 8-bit RGB value. +// Tuned for heights in -8192.0 .. 8191.0 +float decode_height_from_rgb8_unorm(vec3 c) { + // Each component has 8-bit of precision, so 256 possible values. + // More components gives us more values decomposed at higher ranges: + // c.r + c.g * 256.0 + c.b * 65536.0 + // Adapting to our use case, we may divide each factor to fit the range and + // step we need. Each factor remains a power of two. + return c.r * 0.25 + c.g * 64.0 + c.b * 16384.0 - 8192.0; +} + +// Encodes height into a normalized 8-bit RGB value. +// Tuned for heights in -8192.0 .. 8191.0. Values outside of this range are clamped. +vec3 encode_height_to_rgb8_unorm(float h) { + h = clamp(h + 8192.0, 0.0, 16384.0); + // Extract small component + float r = mod(h, 0.25); + h -= r; + // Extract medium component + float g = mod(h, 64.0); + h -= g; + // Remaining value is big component + float b = h; + // Normalize + return vec3(r, g, b) / vec3(0.25, 64.0, 16384.0); +} + +// TODO Remove for now? +// Bilinear filtering appears to work well enough without doing this. +// There are some artifacts, but we could easily live with them, +// and I suspect they could be easy to patch somehow in the encoding/decoding. +// +// In case bilinear filtering is required. +// This is slower than if we had a native float format. +// Unfortunately, Godot 4 removed support for 2D HDR viewports. They were used +// to edit this format natively. Using compute shaders would force users to +// have Vulkan. So we had to downgrade performance a bit using a technique from the GLES2 era... +float sample_height_bilinear_rgb8_unorm(sampler2D heightmap, vec2 uv) { + vec2 ts = vec2(textureSize(heightmap, 0)); + vec2 p00f = uv * ts; + ivec2 p00 = ivec2(p00f); + + vec3 s00 = texelFetch(heightmap, p00, 0).rgb; + vec3 s10 = texelFetch(heightmap, p00 + ivec2(1, 0), 0).rgb; + vec3 s01 = texelFetch(heightmap, p00 + ivec2(0, 1), 0).rgb; + vec3 s11 = texelFetch(heightmap, p00 + ivec2(1, 1), 0).rgb; + + float h00 = decode_height_from_rgb8_unorm(s00); + float h10 = decode_height_from_rgb8_unorm(s10); + float h01 = decode_height_from_rgb8_unorm(s01); + float h11 = decode_height_from_rgb8_unorm(s11); + + vec2 f = p00f - vec2(p00); + return mix(mix(h00, h10, f.x), mix(h01, h11, f.x), f.y); +} diff --git a/addons/zylann.hterrain/shaders/simple4_lite.gdshader b/addons/zylann.hterrain/shaders/simple4_lite.gdshader index da038a1d..ca27dce5 100644 --- a/addons/zylann.hterrain/shaders/simple4_lite.gdshader +++ b/addons/zylann.hterrain/shaders/simple4_lite.gdshader @@ -3,6 +3,8 @@ shader_type spatial; // This is a shader with less textures, in case the main one doesn't run on your GPU. // It's mostly a big copy/paste, because Godot doesn't support #include or #ifdef... +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; // I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, @@ -113,7 +115,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; v_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y) / u_ground_uv_scale; diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 546d06b3..5000acc7 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -151,7 +151,7 @@ func _ready(): }) _generator = HT_TextureGenerator.new() - _generator.set_resolution(Vector2(_viewport_resolution, _viewport_resolution)) + _generator.set_resolution(Vector2i(_viewport_resolution, _viewport_resolution)) # Setup the extra pixels we want on max edges for terrain # TODO I wonder if it's not better to let the generator shaders work in pixels # instead of NDC, rather than putting a padding system there @@ -161,20 +161,16 @@ func _ready(): _generator.progress_reported.connect(_on_TextureGenerator_progress_reported) add_child(_generator) + # TEST + if not Engine.is_editor_hint(): + call_deferred("popup_centered") + func apply_dpi_scale(dpi_scale: float): min_size *= dpi_scale _inspector_container.custom_minimum_size *= dpi_scale -# TEST -#func _input(event): -# if Engine.is_editor_hint(): -# return -# if event is InputEventKey and event.pressed and not visible: -# call_deferred("popup_centered") - - func set_terrain(terrain: HTerrain): _terrain = terrain _adjust_viewport_resolution() @@ -212,6 +208,9 @@ func _notification(what: int): # We don't want any of this to run in an edited scene if HT_Util.is_in_edited_scene(self): return + # Since Godot 4 visibility can be changed even between _enter_tree and _ready + if _preview == null: + return if visible: # TODO https://github.com/godotengine/godot/issues/18160 @@ -248,12 +247,16 @@ func _update_generator(preview: bool): var sectors := [] var terrain_size := 513 - var additive_heightmap : Texture = null + var additive_heightmap : Texture2D = null + + # For testing + if not Engine.is_editor_hint() and _terrain == null: + sectors.append(Vector2(0, 0)) # Get preview scale and sectors to generate. # Allowing null terrain to make it testable. - var terrain_data := _terrain.get_data() - if _terrain != null and terrain_data != null: + if _terrain != null and _terrain.get_data() != null: + var terrain_data := _terrain.get_data() terrain_size = terrain_data.get_resolution() if _inspector.get_value("additive_heightmap"): @@ -387,9 +390,9 @@ func _on_Inspector_property_changed(key, value): _update_generator(true) -func _on_TerrainPreview_dragged(relative, button_mask): +func _on_TerrainPreview_dragged(relative: Vector2, button_mask: int): if button_mask & MOUSE_BUTTON_MASK_LEFT: - var offset = _inspector.get_value("offset") + var offset : Vector2 = _inspector.get_value("offset") offset += relative _inspector.set_value("offset", offset) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.tscn b/addons/zylann.hterrain/tools/generator/generator_dialog.tscn index 4748381b..5d911e35 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.tscn +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.tscn @@ -8,7 +8,6 @@ [node name="GeneratorDialog" type="AcceptDialog"] title = "Generate terrain" size = Vector2i(1100, 780) -visible = true min_size = Vector2i(1100, 620) script = ExtResource("1") @@ -37,7 +36,10 @@ layout_mode = 2 size_flags_horizontal = 3 [node name="TerrainPreview" parent="VBoxContainer/Editor/Preview" instance=ExtResource("3")] -layout_mode = 0 +layout_mode = 1 +anchors_preset = 15 +grow_horizontal = 2 +grow_vertical = 2 [node name="Label" type="Label" parent="VBoxContainer/Editor/Preview"] layout_mode = 0 diff --git a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader index 9054e930..ce33a351 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader @@ -1,18 +1,24 @@ shader_type canvas_item; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_screen_texture : hint_screen_texture; vec4 pack_normal(vec3 n) { return vec4((0.5 * (n + 1.0)).xzy, 1.0); } +float get_height(sampler2D tex, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(tex, uv).rgb); +} + void fragment() { vec2 uv = SCREEN_UV; vec2 ps = SCREEN_PIXEL_SIZE; - float left = texture(u_screen_texture, uv + vec2(-ps.x, 0)).r; - float right = texture(u_screen_texture, uv + vec2(ps.x, 0)).r; - float back = texture(u_screen_texture, uv + vec2(0, -ps.y)).r; - float fore = texture(u_screen_texture, uv + vec2(0, ps.y)).r; + float left = get_height(u_screen_texture, uv + vec2(-ps.x, 0)); + float right = get_height(u_screen_texture, uv + vec2(ps.x, 0)); + float back = get_height(u_screen_texture, uv + vec2(0, -ps.y)); + float fore = get_height(u_screen_texture, uv + vec2(0, ps.y)); vec3 n = normalize(vec3(left - right, 2.0, fore - back)); COLOR = pack_normal(n); } diff --git a/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader b/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader index 00dd4497..1b196c66 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader @@ -1,5 +1,7 @@ shader_type canvas_item; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform vec2 u_slope_up = vec2(0, 0); uniform float u_slope_factor = 1.0; uniform bool u_slope_invert = false; @@ -7,6 +9,10 @@ uniform float u_weight = 0.5; uniform float u_dilation = 0.0; uniform sampler2D u_screen_texture : hint_screen_texture; +float get_height(sampler2D tex, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(tex, uv).rgb); +} + void fragment() { float r = 3.0; @@ -15,7 +21,7 @@ void fragment() { vec2 eps = SCREEN_PIXEL_SIZE / (0.99 * r); vec2 uv = SCREEN_UV; - float h = texture(u_screen_texture, uv).r; + float h = get_height(u_screen_texture, uv); float eh = h; float dh = h; @@ -24,7 +30,7 @@ void fragment() { for (float x = -r; x <= r; ++x) { vec2 p = vec2(float(x), float(y)); - float nh = texture(u_screen_texture, uv + p * eps).r; + float nh = get_height(u_screen_texture, uv + p * eps); float s = max(length(p) - r, 0); eh = min(eh, nh + s); @@ -42,10 +48,10 @@ void fragment() { if (u_slope_factor > 0.0) { vec2 ps = SCREEN_PIXEL_SIZE; - float left = texture(u_screen_texture, uv + vec2(-ps.x, 0.0)).r; - float right = texture(u_screen_texture, uv + vec2(ps.x, 0.0)).r; - float top = texture(u_screen_texture, uv + vec2(0.0, ps.y)).r; - float bottom = texture(u_screen_texture, uv + vec2(0.0, -ps.y)).r; + float left = get_height(u_screen_texture, uv + vec2(-ps.x, 0.0)); + float right = get_height(u_screen_texture, uv + vec2(ps.x, 0.0)); + float top = get_height(u_screen_texture, uv + vec2(0.0, ps.y)); + float bottom = get_height(u_screen_texture, uv + vec2(0.0, -ps.y)); vec3 normal = normalize(vec3(left - right, ps.x + ps.y, bottom - top)); vec3 up = normalize(vec3(u_slope_up.x, 1.0, u_slope_up.y)); @@ -64,5 +70,5 @@ void fragment() { //eh = 0.5 * (eh + texture(SCREEN_TEXTURE, uv + mp * ps * k).r); //eh = mix(h, eh, (1.0 - h) / r); - COLOR = vec4(ph, ph, ph, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(ph), 1.0); } diff --git a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader index f92dd0fb..59bc9e57 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader @@ -1,5 +1,7 @@ shader_type canvas_item; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform vec2 u_offset; uniform float u_scale = 0.02; uniform float u_base_height = 0.0; @@ -201,5 +203,5 @@ void fragment() { float h = get_height(uv_tile * u_tile_size); - COLOR = vec4(h, h, h, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); } diff --git a/addons/zylann.hterrain/tools/generator/texture_generator.gd b/addons/zylann.hterrain/tools/generator/texture_generator.gd index c70c78c7..bf7544db 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator.gd @@ -22,7 +22,7 @@ var _resolution := Vector2i(512, 512) var _output_padding := [0, 0, 0, 0] var _viewport : SubViewport = null var _ci : TextureRect = null -var _dummy_texture : Texture +var _dummy_texture : Texture2D var _running := false var _rerun := false #var _tiles = PoolVector2Array([Vector2()]) @@ -41,10 +41,9 @@ func _ready(): assert(_ci == null) _viewport = SubViewport.new() - _viewport.own_world = true - _viewport.world = World3D.new() - # Godot 4 no longer supports this... - # _viewport.render_target_v_flip = true + # We render with 2D shaders, but we don't want the parent world to interfere + _viewport.own_world_3d = true + _viewport.world_3d = World3D.new() _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED add_child(_viewport) @@ -53,7 +52,7 @@ func _ready(): _logger.error(str("Failed to load dummy texture ", DUMMY_TEXTURE_PATH)) _ci = TextureRect.new() - _ci.expand = true + _ci.stretch_mode = TextureRect.STRETCH_SCALE _ci.texture = _dummy_texture _viewport.add_child(_ci) @@ -153,7 +152,7 @@ func _process(delta: float): return if _running_pass_index > 0: - var prev_pass = _running_passes[_running_pass_index - 1] + var prev_pass : HT_TextureGeneratorPass = _running_passes[_running_pass_index - 1] if prev_pass.output: _create_output_image(prev_pass.metadata) @@ -234,9 +233,6 @@ func _setup_pass(p: HT_TextureGeneratorPass): func _create_output_image(metadata): var tex := _viewport.get_texture() var src := tex.get_image() - # TODO Optimize: Godot 3 used to be able to render flipped viewports, Godot 4 no longer... - # So we have to flip on the CPU instead, which is slower - src.flip_y() # Pick the center of the image var subrect := Rect2i( \ @@ -253,7 +249,7 @@ func _create_output_image(metadata): subrect.size.x += _output_padding[0] + _output_padding[1] subrect.size.y += _output_padding[2] + _output_padding[3] - var dst + var dst : Image if subrect == Rect2i(0, 0, src.get_width(), src.get_height()): dst = src else: From 49929ea6c5ef1be370aaaad00cc404bdd34c7b6e Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 18:47:27 +0000 Subject: [PATCH 26/94] Improve encoding --- .../heightmap_rgb8_encoding.gdshaderinc | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc b/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc index 53e46526..bb30ebe6 100644 --- a/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc +++ b/addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc @@ -1,36 +1,30 @@ -// TODO Small discrepancy in encoding: -// 8-bit components are normalized using c / 255.0, therefore they can be 1, -// but the logic below assumes they are normalized with `c / 256.0`. -// We should test using an extra factor to smooth this out. -const float FROM_FIXED = 255.0 / 256.0; -const float TO_FIXED = 256.0 / 255.0; - -// Decodes height from a normalized 8-bit RGB value. -// Tuned for heights in -8192.0 .. 8191.0 +const float V2_UNIT_STEPS = 1024.0; +const float V2_MIN = -8192.0; +const float V2_MAX = 8191.0; +const float V2_DF = 255.0 / V2_UNIT_STEPS; + +float decode_height_from_rgb8_unorm_2(vec3 c) { + return (c.r * 0.25 + c.g * 64.0 + c.b * 16384.0) * (4.0 * V2_DF) + V2_MIN; +} + +vec3 encode_height_to_rgb8_unorm_2(float h) { + // TODO Check if this has float precision issues + // TODO Modulo operator might be a performance/compatibility issue + h -= V2_MIN; + int i = int(h * V2_UNIT_STEPS); + int r = i % 256; + int g = (i / 256) % 256; + int b = i / 65536; + return vec3(float(r), float(g), float(b)) / 255.0; +} + float decode_height_from_rgb8_unorm(vec3 c) { - // Each component has 8-bit of precision, so 256 possible values. - // More components gives us more values decomposed at higher ranges: - // c.r + c.g * 256.0 + c.b * 65536.0 - // Adapting to our use case, we may divide each factor to fit the range and - // step we need. Each factor remains a power of two. - return c.r * 0.25 + c.g * 64.0 + c.b * 16384.0 - 8192.0; + return decode_height_from_rgb8_unorm_2(c); } -// Encodes height into a normalized 8-bit RGB value. -// Tuned for heights in -8192.0 .. 8191.0. Values outside of this range are clamped. vec3 encode_height_to_rgb8_unorm(float h) { - h = clamp(h + 8192.0, 0.0, 16384.0); - // Extract small component - float r = mod(h, 0.25); - h -= r; - // Extract medium component - float g = mod(h, 64.0); - h -= g; - // Remaining value is big component - float b = h; - // Normalize - return vec3(r, g, b) / vec3(0.25, 64.0, 16384.0); + return encode_height_to_rgb8_unorm_2(h); } // TODO Remove for now? From 8c2644195d78f881e16192a12a15845aa3148987 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 20:56:39 +0000 Subject: [PATCH 27/94] Account for RGB8 in a bunch of places (untested) --- addons/zylann.hterrain/hterrain_mesher.gd | 31 ++++++++++++++----- addons/zylann.hterrain/shaders/array.gdshader | 4 ++- .../zylann.hterrain/shaders/detail.gdshader | 8 ++++- .../zylann.hterrain/shaders/lookdev.gdshader | 4 ++- .../zylann.hterrain/shaders/low_poly.gdshader | 4 ++- .../shaders/multisplat16.gdshader | 4 ++- .../shaders/multisplat16_lite.gdshader | 4 ++- .../zylann.hterrain/shaders/simple4.gdshader | 4 ++- .../brush/{decal.shader => decal.gdshader} | 16 +++++++--- .../tools/bump2normal_tex.gdshader | 25 +++++++++++++++ .../tools/bump2normal_tex.shader | 19 ------------ .../tools/exporter/export_image_dialog.gd | 30 ++++++++++-------- .../tools/generator/generator_dialog.gd | 6 ++-- .../generator/shaders/perlin_noise.gdshader | 4 ++- 14 files changed, 108 insertions(+), 55 deletions(-) rename addons/zylann.hterrain/tools/brush/{decal.shader => decal.gdshader} (57%) create mode 100644 addons/zylann.hterrain/tools/bump2normal_tex.gdshader delete mode 100644 addons/zylann.hterrain/tools/bump2normal_tex.shader diff --git a/addons/zylann.hterrain/hterrain_mesher.gd b/addons/zylann.hterrain/hterrain_mesher.gd index bc9ef44a..0b371e1a 100644 --- a/addons/zylann.hterrain/hterrain_mesher.gd +++ b/addons/zylann.hterrain/hterrain_mesher.gd @@ -1,6 +1,7 @@ @tool #const HT_Logger = preload("./util/logger.gd") +const HTerrainData = preload("./hterrain_data.gd") const SEAM_LEFT = 1 const SEAM_RIGHT = 2 @@ -316,13 +317,29 @@ static func make_heightmap_mesh(heightmap: Image, stride: int, scale: Vector3, positions.resize(size_x * size_z) var i := 0 - for mz in size_z: - for mx in size_x: - var x := mx * stride - var z := mz * stride - var y := heightmap.get_pixel(x, z).r - positions[i] = Vector3(x, y, z) * scale - i += 1 + + if heightmap.get_format() == Image.FORMAT_RH or heightmap.get_format() == Image.FORMAT_RF: + for mz in size_z: + for mx in size_x: + var x := mx * stride + var z := mz * stride + var y := heightmap.get_pixel(x, z).r + positions[i] = Vector3(x, y, z) * scale + i += 1 + + elif heightmap.get_format() == Image.FORMAT_RGB8: + for mz in size_z: + for mx in size_x: + var x := mx * stride + var z := mz * stride + var c := heightmap.get_pixel(x, z) + var y := HTerrainData.decode_height_from_rgb8_unorm(c) + positions[i] = Vector3(x, y, z) * scale + i += 1 + + else: + logger.error("Unknown heightmap format!") + return null var indices := make_indices(size_x - 1, size_z - 1, 0) diff --git a/addons/zylann.hterrain/shaders/array.gdshader b/addons/zylann.hterrain/shaders/array.gdshader index 46aed371..4f7b9210 100644 --- a/addons/zylann.hterrain/shaders/array.gdshader +++ b/addons/zylann.hterrain/shaders/array.gdshader @@ -1,5 +1,7 @@ shader_type spatial; +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; // I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, @@ -64,7 +66,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/detail.gdshader b/addons/zylann.hterrain/shaders/detail.gdshader index 0382a80f..386f0279 100644 --- a/addons/zylann.hterrain/shaders/detail.gdshader +++ b/addons/zylann.hterrain/shaders/detail.gdshader @@ -1,6 +1,8 @@ shader_type spatial; render_mode cull_disabled; +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_detailmap; uniform sampler2D u_terrain_normalmap; @@ -42,6 +44,10 @@ vec3 get_ambient_wind_displacement(vec2 uv, float hash) { return disp; } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + void vertex() { vec4 obj_pos = MODEL_MATRIX * vec4(0, 1, 0, 1); vec3 cell_coords = (u_terrain_inverse_transform * obj_pos).xyz; @@ -61,7 +67,7 @@ void vertex() { u_terrain_normal_basis * unpack_normal(texture(u_terrain_normalmap, map_uv))); // Snap model to the terrain - float height = texture(u_terrain_heightmap, map_uv).r / cell_coords.y; + float height = get_height(u_terrain_heightmap, map_uv) / cell_coords.y; VERTEX *= u_instance_scale; VERTEX.y += height; diff --git a/addons/zylann.hterrain/shaders/lookdev.gdshader b/addons/zylann.hterrain/shaders/lookdev.gdshader index fa82a654..5a9c8a0c 100644 --- a/addons/zylann.hterrain/shaders/lookdev.gdshader +++ b/addons/zylann.hterrain/shaders/lookdev.gdshader @@ -2,6 +2,8 @@ shader_type spatial; // Development shader used to debug or help authoring. +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; uniform sampler2D u_terrain_colormap; @@ -34,7 +36,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/low_poly.gdshader b/addons/zylann.hterrain/shaders/low_poly.gdshader index eac58c63..1d31857b 100644 --- a/addons/zylann.hterrain/shaders/low_poly.gdshader +++ b/addons/zylann.hterrain/shaders/low_poly.gdshader @@ -2,6 +2,8 @@ shader_type spatial; // This is a very simple shader for a low-poly coloured visual, without textures +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; // I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, @@ -31,7 +33,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; // Putting this in vertex saves 2 fetches from the fragment shader, diff --git a/addons/zylann.hterrain/shaders/multisplat16.gdshader b/addons/zylann.hterrain/shaders/multisplat16.gdshader index 58d6fc09..f97ef19d 100644 --- a/addons/zylann.hterrain/shaders/multisplat16.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16.gdshader @@ -4,6 +4,8 @@ shader_type spatial; // This shader uses a texture array with multiple splatmaps, allowing up to 16 textures. // Only the 4 textures having highest blending weight are sampled. +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; // I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, @@ -224,7 +226,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader index abb3fa66..9c2fa4be 100644 --- a/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader @@ -4,6 +4,8 @@ shader_type spatial; // This shader uses a texture array with multiple splatmaps, allowing up to 16 textures. // Only the 4 textures having highest blending weight are sampled. +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; // I had to remove source_color` from colormap in Godot 3 because it makes sRGB conversion kick in, @@ -163,7 +165,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/simple4.gdshader b/addons/zylann.hterrain/shaders/simple4.gdshader index e0cb3663..05a73f0f 100644 --- a/addons/zylann.hterrain/shaders/simple4.gdshader +++ b/addons/zylann.hterrain/shaders/simple4.gdshader @@ -4,6 +4,8 @@ shader_type spatial; // it should be preferred for high-end graphics cards. // For less features but lower-end targets, see the lite version. +#include "include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; // I had to remove `hint_albedo` from colormap in Godot 3 because it makes sRGB conversion kick in, @@ -163,7 +165,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = texture(u_terrain_heightmap, UV).r; + float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/tools/brush/decal.shader b/addons/zylann.hterrain/tools/brush/decal.gdshader similarity index 57% rename from addons/zylann.hterrain/tools/brush/decal.shader rename to addons/zylann.hterrain/tools/brush/decal.gdshader index 96155e01..451c19a2 100644 --- a/addons/zylann.hterrain/tools/brush/decal.shader +++ b/addons/zylann.hterrain/tools/brush/decal.gdshader @@ -1,10 +1,16 @@ shader_type spatial; render_mode unshaded;//, depth_test_disable; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_terrain_heightmap; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + void vertex() { vec2 cell_coords = (u_terrain_inverse_transform * MODEL_MATRIX * vec4(VERTEX, 1)).xz; @@ -13,15 +19,15 @@ void vertex() { // Get terrain normal float k = 1.0; - float left = texture(u_terrain_heightmap, uv + vec2(-ps.x, 0)).r * k; - float right = texture(u_terrain_heightmap, uv + vec2(ps.x, 0)).r * k; - float back = texture(u_terrain_heightmap, uv + vec2(0, -ps.y)).r * k; - float fore = texture(u_terrain_heightmap, uv + vec2(0, ps.y)).r * k; + float left = get_height(u_terrain_heightmap, uv + vec2(-ps.x, 0)) * k; + float right = get_height(u_terrain_heightmap, uv + vec2(ps.x, 0)) * k; + float back = get_height(u_terrain_heightmap, uv + vec2(0, -ps.y)) * k; + float fore = get_height(u_terrain_heightmap, uv + vec2(0, ps.y)) * k; vec3 n = normalize(vec3(left - right, 2.0, back - fore)); n = u_terrain_normal_basis * n; - float h = texture(u_terrain_heightmap, uv).r; + float h = get_height(u_terrain_heightmap, uv); VERTEX.y = h; VERTEX += 1.0 * n; NORMAL = n;//vec3(0.0, 1.0, 0.0); diff --git a/addons/zylann.hterrain/tools/bump2normal_tex.gdshader b/addons/zylann.hterrain/tools/bump2normal_tex.gdshader new file mode 100644 index 00000000..0d96cfcd --- /dev/null +++ b/addons/zylann.hterrain/tools/bump2normal_tex.gdshader @@ -0,0 +1,25 @@ +shader_type canvas_item; + +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + +vec4 pack_normal(vec3 n) { + return vec4((0.5 * (n + 1.0)).xzy, 1.0); +} + +float get_height(sampler2D tex, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(tex, uv).rgb); +} + +void fragment() { + vec2 uv = UV; + vec2 ps = TEXTURE_PIXEL_SIZE; + float left = get_height(TEXTURE, uv + vec2(-ps.x, 0)); + float right = get_height(TEXTURE, uv + vec2(ps.x, 0)); + float back = get_height(TEXTURE, uv + vec2(0, -ps.y)); + float fore = get_height(TEXTURE, uv + vec2(0, ps.y)); + vec3 n = normalize(vec3(left - right, 2.0, fore - back)); + COLOR = pack_normal(n); + // DEBUG + //COLOR.r = fract(TIME * 100.0); +} + diff --git a/addons/zylann.hterrain/tools/bump2normal_tex.shader b/addons/zylann.hterrain/tools/bump2normal_tex.shader deleted file mode 100644 index 1790ddeb..00000000 --- a/addons/zylann.hterrain/tools/bump2normal_tex.shader +++ /dev/null @@ -1,19 +0,0 @@ -shader_type canvas_item; - -vec4 pack_normal(vec3 n) { - return vec4((0.5 * (n + 1.0)).xzy, 1.0); -} - -void fragment() { - vec2 uv = UV; - vec2 ps = TEXTURE_PIXEL_SIZE; - float left = texture(TEXTURE, uv + vec2(-ps.x, 0)).r; - float right = texture(TEXTURE, uv + vec2(ps.x, 0)).r; - float back = texture(TEXTURE, uv + vec2(0, -ps.y)).r; - float fore = texture(TEXTURE, uv + vec2(0, ps.y)).r; - vec3 n = normalize(vec3(left - right, 2.0, fore - back)); - COLOR = pack_normal(n); - // DEBUG - //COLOR.r = fract(TIME * 100.0); -} - diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 2400f1bb..872b488e 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -37,10 +37,10 @@ func _ready(): _format_names.resize(FORMAT_COUNT) _format_extensions.resize(FORMAT_COUNT) - _format_names[FORMAT_RH] = "16-bit RAW float (native)" + _format_names[FORMAT_RH] = "16-bit RAW float" _format_names[FORMAT_R16] = "16-bit RAW unsigned" _format_names[FORMAT_PNG8] = "8-bit PNG" - _format_names[FORMAT_EXRH] = "16-bit float greyscale EXR (native)" + _format_names[FORMAT_EXRH] = "16-bit float greyscale EXR" _format_extensions[FORMAT_RH] = "raw" _format_extensions[FORMAT_R16] = "raw" @@ -90,7 +90,7 @@ func _auto_adjust_height_range(): func _export() -> bool: assert(_terrain != null) assert(_terrain.get_data() != null) - var heightmap: Image = _terrain.get_data().get_image(HTerrainData.CHANNEL_HEIGHT) + var src_heightmap: Image = _terrain.get_data().get_image(HTerrainData.CHANNEL_HEIGHT) var fpath := _output_path_line_edit.text.strip_edges() # TODO Is `selected` an ID or an index? I need an ID, it works by chance for now. @@ -109,19 +109,23 @@ func _export() -> bool: var save_error := OK + var float_heightmap := HTerrainData.convert_heightmap_to_float(src_heightmap, _logger) + if format == FORMAT_PNG8: var hscale := 1.0 / (height_max - height_min) - var im := Image.create(heightmap.get_width(), heightmap.get_height(), false, Image.FORMAT_R8) + var im := Image.create( + src_heightmap.get_width(), src_heightmap.get_height(), false, Image.FORMAT_R8) - for y in heightmap.get_height(): - for x in heightmap.get_width(): - var h := clampf((heightmap.get_pixel(x, y).r - height_min) * hscale, 0.0, 1.0) + for y in src_heightmap.get_height(): + for x in src_heightmap.get_width(): + var h := clampf((float_heightmap.get_pixel(x, y).r - height_min) * hscale, 0.0, 1.0) im.set_pixel(x, y, Color(h, h, h)) save_error = im.save_png(fpath) elif format == FORMAT_EXRH: - save_error = heightmap.save_exr(fpath, true) + float_heightmap.convert(Image.FORMAT_RH) + save_error = float_heightmap.save_exr(fpath, true) else: var f := FileAccess.open(fpath, FileAccess.WRITE) @@ -131,14 +135,14 @@ func _export() -> bool: return false if format == FORMAT_RH: - # Native format - f.store_buffer(heightmap.get_data()) + float_heightmap.convert(Image.FORMAT_RH) + f.store_buffer(float_heightmap.get_data()) elif format == FORMAT_R16: var hscale := 65535.0 / (height_max - height_min) - for y in heightmap.get_height(): - for x in heightmap.get_width(): - var h := int((heightmap.get_pixel(x, y).r - height_min) * hscale) + for y in float_heightmap.get_height(): + for x in float_heightmap.get_width(): + var h := int((float_heightmap.get_pixel(x, y).r - height_min) * hscale) if h < 0: h = 0 elif h > 65535: diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 5000acc7..de975629 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -260,8 +260,7 @@ func _update_generator(preview: bool): terrain_size = terrain_data.get_resolution() if _inspector.get_value("additive_heightmap"): - additive_heightmap = \ - terrain_data.get_texture(HTerrainData.CHANNEL_HEIGHT) + additive_heightmap = terrain_data.get_texture(HTerrainData.CHANNEL_HEIGHT) if preview: # When previewing the resolution does not span the entire terrain, @@ -460,7 +459,8 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): assert(data != null) var dst = data.get_image(info.maptype) assert(dst != null) - + + #assert(image.get_format() == Image.FORMAT_RGB8 or image.get_format() == Image.FORMAT_RGBA8) image.convert(dst.get_format()) dst.blit_rect(image, \ diff --git a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader index 59bc9e57..25fbb45f 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader @@ -188,7 +188,9 @@ float get_height(vec2 pos) { // Additive heightmap { - h += u_additive_heightmap_factor * texture(u_additive_heightmap, pos / u_terrain_size).r; + vec2 uv = pos / u_terrain_size; + float ah = decode_height_from_rgb8_unorm(texture(u_additive_heightmap, uv).rgb); + h += u_additive_heightmap_factor * ah; } return h; From 27bc3feb6c82479f837ddf19129eed8c87f85039 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 20:57:09 +0000 Subject: [PATCH 28/94] Remove some commented code --- addons/zylann.hterrain/tools/plugin.gd | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index ef7ea4dc..0b9d523b 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -7,8 +7,6 @@ const HTerrainDetailLayer = preload("../hterrain_detail_layer.gd") const HTerrainData = preload("../hterrain_data.gd") const HTerrainMesher = preload("../hterrain_mesher.gd") const HTerrainTextureSet = preload("../hterrain_texture_set.gd") -#const HT_PackedTextureImporter = preload("./packed_textures/packed_texture_importer.gd") -#const HT_PackedTextureArrayImporter = preload("./packed_textures/packed_texture_array_importer.gd") const HT_PreviewGenerator = preload("./preview_generator.gd") const HT_TerrainPainter = preload("./brush/terrain_painter.gd") const HT_BrushDecal = preload("./brush/decal.gd") @@ -70,10 +68,6 @@ var _globalmap_baker : HT_GlobalMapBaker = null var _terrain_had_data_previous_frame := false var _image_cache : HT_ImageFileCache -# Import -#var _packed_texture_importer := HT_PackedTextureImporter.new() -#var _packed_texture_array_importer := HT_PackedTextureArrayImporter.new() - var _terrain_painter : HT_TerrainPainter = null var _brush_decal : HT_BrushDecal = null var _mouse_pressed := false @@ -101,9 +95,6 @@ func _enter_tree(): # TODO Proper texture add_custom_type("HTerrainTextureSet", "Resource", HTerrainTextureSet, null) -# add_import_plugin(_packed_texture_importer) -# add_import_plugin(_packed_texture_array_importer) - _preview_generator = HT_PreviewGenerator.new() get_editor_interface().get_resource_previewer().add_preview_generator(_preview_generator) @@ -332,12 +323,6 @@ func _exit_tree(): remove_custom_type("HTerrainDetailLayer") remove_custom_type("HTerrainData") remove_custom_type("HTerrainTextureSet") - -# remove_import_plugin(_packed_texture_importer) -# _packed_texture_importer = null - -# remove_import_plugin(_packed_texture_array_importer) -# _packed_texture_array_importer = null func _handles(object): From 34eff440f83c917710ba32707acec025e3169ccd Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:37:54 +0000 Subject: [PATCH 29/94] Fix progress window --- .../tools/progress_window.tscn | 78 ++++--------------- 1 file changed, 15 insertions(+), 63 deletions(-) diff --git a/addons/zylann.hterrain/tools/progress_window.tscn b/addons/zylann.hterrain/tools/progress_window.tscn index f78657a6..e6d7d19b 100644 --- a/addons/zylann.hterrain/tools/progress_window.tscn +++ b/addons/zylann.hterrain/tools/progress_window.tscn @@ -1,70 +1,22 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://b0f3h46ugtni6"] -[ext_resource path="res://addons/zylann.hterrain/tools/progress_window.gd" type="Script" id=1] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/progress_window.gd" id="1"] -[node name="WindowDialog" type="WindowDialog" index="0"] +[node name="WindowDialog" type="AcceptDialog"] +title = "" +size = Vector2i(400, 100) +min_size = Vector2i(400, 40) +script = ExtResource("1") -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_left = 241.0 -margin_top = 216.0 -margin_right = 641.0 -margin_bottom = 256.0 -rect_min_size = Vector2( 400, 40 ) -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 -popup_exclusive = false -window_title = "" -resizable = false -script = ExtResource( 1 ) -_sections_unfolded = [ "Rect" ] - -[node name="VBoxContainer" type="VBoxContainer" parent="." index="1"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 1 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 -alignment = 0 -_sections_unfolded = [ "Anchor", "Margin" ] - -[node name="ProgressBar" type="ProgressBar" parent="VBoxContainer" index="0"] +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -8.0 -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_right = 384.0 -margin_bottom = 16.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false -mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 0 -min_value = 0.0 -max_value = 100.0 +[node name="ProgressBar" type="ProgressBar" parent="VBoxContainer"] +layout_mode = 2 step = 1.0 -page = 0.0 -value = 0.0 -exp_edit = false -rounded = false -percent_visible = true - - From fa6e3892fa11a3b0745d7bca5800a685a0d9a799 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:38:29 +0000 Subject: [PATCH 30/94] Missing file from commit about RGB8 handling --- addons/zylann.hterrain/hterrain_data.gd | 184 ++++++++++++++++++++---- 1 file changed, 155 insertions(+), 29 deletions(-) diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index 92477b26..be26b45f 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -31,7 +31,7 @@ const _map_types = { shader_param_name = "u_terrain_heightmap", filter = true, mipmaps = false, - texture_format = Image.FORMAT_RH, + texture_format = Image.FORMAT_RGB8, default_fill = null, default_count = 1, can_be_saved_as_png = false, @@ -296,10 +296,17 @@ func resize(p_res: int, stretch := true, anchor := Vector2(-1, -1)): else: if stretch and not _map_types[channel].authored: + # Create a blank new image, it will be automatically computed later im = Image.create(_resolution, _resolution, false, get_channel_format(channel)) else: if stretch: - im.resize(_resolution, _resolution) + if im.get_format() == Image.FORMAT_RGB8: + # Can't directly resize this format + var float_heightmap := convert_heightmap_to_float(im, _logger) + float_heightmap.resize(_resolution, _resolution) + convert_float_heightmap_to_rgb8(float_heightmap, im) + else: + im.resize(_resolution, _resolution) else: var fill_color = _get_map_default_fill_color(channel, index) im = HT_Util.get_cropped_image(im, _resolution, _resolution, \ @@ -338,7 +345,10 @@ func get_height_at(x: int, y: int) -> float: # Height data must be loaded in RAM var im := get_image(CHANNEL_HEIGHT) assert(im != null) - var h := HT_Util.get_pixel_clamped(im, x, y).r; + # RH, RF +# var h := HT_Util.get_pixel_clamped(im, x, y).r + # RGB8 + var h := decode_height_from_rgb8_unorm(HT_Util.get_pixel_clamped(im, x, y)) return h; @@ -349,6 +359,7 @@ func get_interpolated_height_at(pos: Vector3) -> float: # Height data must be loaded in RAM var im := get_image(CHANNEL_HEIGHT) assert(im != null) + assert(im.get_format() == Image.FORMAT_RGB8) # The function takes a Vector3 for convenience so it's easier to use in 3D scripting var x0 := int(floorf(pos.x)) @@ -357,10 +368,15 @@ func get_interpolated_height_at(pos: Vector3) -> float: var xf := pos.x - x0 var yf := pos.z - y0 - var h00 := HT_Util.get_pixel_clamped(im, x0, y0).r - var h10 := HT_Util.get_pixel_clamped(im, x0 + 1, y0).r - var h01 := HT_Util.get_pixel_clamped(im, x0, y0 + 1).r - var h11 := HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1).r + var c00 := HT_Util.get_pixel_clamped(im, x0, y0) + var c10 := HT_Util.get_pixel_clamped(im, x0 + 1, y0) + var c01 := HT_Util.get_pixel_clamped(im, x0, y0 + 1) + var c11 := HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1) + + var h00 := decode_height_from_rgb8_unorm(c00) + var h10 := decode_height_from_rgb8_unorm(c10) + var h01 := decode_height_from_rgb8_unorm(c01) + var h11 := decode_height_from_rgb8_unorm(c11) # Bilinear filter var h := lerpf(lerpf(h00, h10, xf), lerpf(h01, h11, xf), yf) @@ -390,10 +406,22 @@ func get_heights_region(x0: int, y0: int, w: int, h: int) -> PackedFloat32Array: heights.resize(area) var i := 0 - for y in range(min_y, max_y): - for x in range(min_x, max_x): - heights[i] = im.get_pixel(x, y).r - i += 1 + + if im.get_format() == Image.FORMAT_RF or im.get_format() == Image.FORMAT_RH: + for y in range(min_y, max_y): + for x in range(min_x, max_x): + heights[i] = im.get_pixel(x, y).r + i += 1 + + elif im.get_format() == Image.FORMAT_RGB8: + for y in range(min_y, max_y): + for x in range(min_x, max_x): + var c := im.get_pixel(x, y) + heights[i] = decode_height_from_rgb8_unorm(c) + i += 1 + + else: + _logger.error("Unknown heightmap format!") return heights @@ -845,7 +873,28 @@ func _compute_vertical_bounds_at( var heights = get_image(CHANNEL_HEIGHT) assert(heights != null) - return _image_utils.get_red_range(heights, Rect2(origin_x, origin_y, size_x, size_y)) + return _get_heights_range_rgb8(heights, Rect2i(origin_x, origin_y, size_x, size_y)) + + +static func _get_heights_range_rgb8(im: Image, rect: Rect2i) -> Vector2: + assert(im.get_format() == Image.FORMAT_RGB8) + + rect = rect.intersection(Rect2i(0, 0, im.get_width(), im.get_height())) + var min_x := rect.position.x + var min_y := rect.position.y + var max_x := min_x + rect.size.x + var max_y := min_y + rect.size.y + + var min_height := decode_height_from_rgb8_unorm(im.get_pixel(min_x, min_y)) + var max_height := min_height + + for y in range(min_y, max_y): + for x in range(min_x, max_x): + var h := decode_height_from_rgb8_unorm(im.get_pixel(x, y)) + min_height = minf(h, min_height) + max_height = maxf(h, max_height) + + return Vector2(min_height, max_height) func save_data(data_dir: String) -> bool: @@ -1251,12 +1300,15 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo _logger.debug("Converting to internal format...") - # Convert to internal format (from RGBA8 to RH16) with range scaling + # Convert to internal format with range scaling for y in width: for x in height: var gs := src_image.get_pixel(x, y).r var h := min_y + hrange * gs - im.set_pixel(x, y, Color(h, 0, 0)) + # RH, RF +# im.set_pixel(x, y, Color(h, 0, 0)) + # RGB8 + im.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) elif ext == "exr": var src_image := Image.load_from_file(fpath) @@ -1278,13 +1330,16 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo _logger.debug("Converting to internal format...") + # RH, RF # See https://github.com/Zylann/godot_heightmap_plugin/issues/34 # Godot can load EXR but it always makes them have at least 3-channels. # Heightmaps need only one, so we have to get rid of 2. - var height_format = _map_types[CHANNEL_HEIGHT].texture_format - src_image.convert(height_format) - - im.blit_rect(src_image, Rect2i(0, 0, res, res), Vector2i()) +# var height_format = _map_types[CHANNEL_HEIGHT].texture_format +# src_image.convert(height_format) +# im.blit_rect(src_image, Rect2i(0, 0, res, res), Vector2i()) + + # RGB8 + convert_float_heightmap_to_rgb8(src_image, im) elif ext == "raw": # RAW files don't contain size, so we have to deduce it from 16-bit size. @@ -1328,13 +1383,17 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo var rw := mini(res, file_res) var rh := mini(res, file_res) - # Convert to internal format (from bytes to RH16) + # Convert to internal format var h := 0.0 for y in rh: for x in rw: var gs := float(f.get_16()) / 65535.0 h = min_y + hrange * float(gs) - im.set_pixel(x, y, Color(h, 0, 0)) + # RH, RF +# im.set_pixel(x, y, Color(h, 0, 0)) + # RGB8 + im.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) + # Skip next pixels if the file is bigger than the accepted resolution for x in range(rw, file_res): f.get_16() @@ -1362,11 +1421,14 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo _logger.debug(str("Parsing XYZ file (this can take a while)...")) f.seek(0) - HT_XYZFormat.load_heightmap(f, im, bounds) + var float_heightmap := Image.create(im.get_width(), im.get_height(), false, Image.FORMAT_RF) + HT_XYZFormat.load_heightmap(f, float_heightmap, bounds) # Flipping because in Godot, for X to mean "east"/"right", Z must be backward, # and we are using Z to map the Y axis of the heightmap image. - im.flip_y() + float_heightmap.flip_y() + + convert_float_heightmap_to_rgb8(float_heightmap, im) # Note: when importing maps with non-compliant sizes and flipping, # the result might not be aligned to global coordinates. @@ -1427,6 +1489,8 @@ class HT_CellRaycastContext: var heightmap : Image var broad_param_2d_to_3d := 1.0 var cell_param_2d_to_3d := 1.0 + # TODO Can't call static functions of the enclosing class..................... + var decode_height_func : Callable #var dbg func broad_cb(cx: int, cz: int, enter_param: float, exit_param: float) -> bool: @@ -1459,17 +1523,25 @@ class HT_CellRaycastContext: var enter_y := _cell_begin_pos_y + dir.y * enter_param * cell_param_2d_to_3d var exit_y := _cell_begin_pos_y + dir.y * exit_param * cell_param_2d_to_3d - hit = _intersect_cell(heightmap, cx, cz, Vector3(enter_pos.x, enter_y, enter_pos.y), dir) + hit = _intersect_cell(heightmap, cx, cz, Vector3(enter_pos.x, enter_y, enter_pos.y), dir, + decode_height_func) return hit != null static func _intersect_cell(heightmap: Image, cx: int, cz: int, - begin_pos: Vector3, dir: Vector3): - - var h00 := HT_Util.get_pixel_clamped(heightmap, cx, cz).r - var h10 := HT_Util.get_pixel_clamped(heightmap, cx + 1, cz).r - var h01 := HT_Util.get_pixel_clamped(heightmap, cx, cz + 1).r - var h11 := HT_Util.get_pixel_clamped(heightmap, cx + 1, cz + 1).r + begin_pos: Vector3, dir: Vector3, decode_func : Callable): + + assert(heightmap.get_format() == Image.FORMAT_RGB8) + + var c00 := HT_Util.get_pixel_clamped(heightmap, cx, cz) + var c10 := HT_Util.get_pixel_clamped(heightmap, cx + 1, cz) + var c01 := HT_Util.get_pixel_clamped(heightmap, cx, cz + 1) + var c11 := HT_Util.get_pixel_clamped(heightmap, cx + 1, cz + 1) + + var h00 := decode_func.call(c00) + var h10 := decode_func.call(c10) + var h01 := decode_func.call(c01) + var h11 := decode_func.call(c11) var p00 := Vector3(cx, h00, cz) var p10 := Vector3(cx + 1, h10, cz) @@ -1534,6 +1606,7 @@ func cell_raycast(ray_origin: Vector3, ray_direction: Vector3, max_distance: flo ctx.heightmap = heightmap ctx.cell_param_2d_to_3d = max_distance / max_distance_2d ctx.broad_param_2d_to_3d = ctx.cell_param_2d_to_3d * VERTICAL_BOUNDS_CHUNK_SIZE + ctx.decode_height_func = decode_height_from_rgb8_unorm #ctx.dbg = dbg # Broad phase through cached vertical bound chunks @@ -1600,3 +1673,56 @@ static func get_map_shader_param_name(map_type: int, index: int) -> String: # return [map_type, i] # return null + +const _V2_UNIT_STEPS = 1024.0 +const _V2_MIN = -8192.0 +const _V2_MAX = 8191.0 +const _V2_DF = 255.0 / _V2_UNIT_STEPS + + +static func decode_height_from_rgb8_unorm(c: Color) -> float: + return (c.r * 0.25 + c.g * 64.0 + c.b * 16384.0) * (4.0 * _V2_DF) + _V2_MIN + + +static func encode_height_to_rgb8_unorm(h: float) -> Color: + h -= _V2_MIN + var i := int(h * _V2_UNIT_STEPS) + var r := i % 256 + var g := (i / 256) % 256 + var b := i / 65536 + return Color(r, g, b, 255.0) / 255.0 + + +static func convert_heightmap_to_float(src: Image, logger) -> Image: + var src_format := src.get_format() + + if src_format == Image.FORMAT_RH: + var im : Image = src.duplicate() + im.convert(Image.FORMAT_RF) + return im + + if src_format == Image.FORMAT_RF: + return src.duplicate() as Image + + if src_format == Image.FORMAT_RGB8: + var im := Image.create(src.get_width(), src.get_height(), false, Image.FORMAT_RF) + for y in src.get_height(): + for x in src.get_width(): + var c := src.get_pixel(x, y) + var h := decode_height_from_rgb8_unorm(c) + im.set_pixel(x, y, Color(h, h, h, 1.0)) + return im + + logger.error("Unknown source heightmap format!") + return null + + +static func convert_float_heightmap_to_rgb8(src: Image, dst: Image): + assert(dst.get_format() == Image.FORMAT_RGB8) + assert(dst.get_size() == src.get_size()) + + for y in src.get_height(): + for x in src.get_width(): + var h = src.get_pixel(x, y).r + dst.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) + From 439b716066539cf7799c501aa37ce4128412d3e5 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:40:44 +0000 Subject: [PATCH 31/94] Use EditorUndoRedoManager --- .../tools/detail_editor/detail_editor.gd | 54 +++++++------- .../tools/generator/generator_dialog.gd | 18 ++--- addons/zylann.hterrain/tools/panel.gd | 9 ++- addons/zylann.hterrain/tools/plugin.gd | 21 +++--- .../set_editor/texture_set_editor.gd | 72 +++++++++++-------- .../set_editor/texture_set_import_editor.gd | 13 ++-- 6 files changed, 110 insertions(+), 77 deletions(-) diff --git a/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd b/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd index 1f19400e..cb3288e0 100644 --- a/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd +++ b/addons/zylann.hterrain/tools/detail_editor/detail_editor.gd @@ -22,7 +22,7 @@ signal detail_list_changed var _terrain : HTerrain = null var _dialog_target := -1 -var _undo_redo : UndoRedo +var _undo_redo_manager : EditorUndoRedoManager var _image_cache : HT_ImageFileCache var _logger = HT_Logger.get_for(self) @@ -34,9 +34,9 @@ func set_terrain(terrain): _update_list() -func set_undo_redo(ur: UndoRedo): +func set_undo_redo(ur: EditorUndoRedoManager): assert(ur != null) - _undo_redo = ur + _undo_redo_manager = ur func set_image_cache(image_cache: HT_ImageFileCache): @@ -108,7 +108,7 @@ func _on_ConfirmationDialog_confirmed(): func _add_layer(): assert(_terrain != null) assert(_terrain.get_data() != null) - assert(_undo_redo != null) + assert(_undo_redo_manager != null) var terrain_data : HTerrainData = _terrain.get_data() # First, create node and map image @@ -122,25 +122,28 @@ func _add_layer(): var map_image_cache_id := _image_cache.save_image(map_image) node.layer_index = map_index + var undo_redo := _undo_redo_manager.get_history_undo_redo( + _undo_redo_manager.get_object_history_id(_terrain)) + # Then, create an action - _undo_redo.create_action("Add Detail Layer {0}".format([map_index])) + undo_redo.create_action("Add Detail Layer {0}".format([map_index])) - _undo_redo.add_do_method(terrain_data._edit_insert_map_from_image_cache.bind( + undo_redo.add_do_method(terrain_data._edit_insert_map_from_image_cache.bind( HTerrainData.CHANNEL_DETAIL, map_index, _image_cache, map_image_cache_id)) - _undo_redo.add_do_method(_terrain.add_child.bind(node)) - _undo_redo.add_do_property(node, "owner", get_tree().edited_scene_root) - _undo_redo.add_do_method(self._update_list) - _undo_redo.add_do_reference(node) + undo_redo.add_do_method(_terrain.add_child.bind(node)) + undo_redo.add_do_property(node, "owner", get_tree().edited_scene_root) + undo_redo.add_do_method(self._update_list) + undo_redo.add_do_reference(node) - _undo_redo.add_undo_method(_terrain.remove_child.bind(node)) - _undo_redo.add_undo_method( + undo_redo.add_undo_method(_terrain.remove_child.bind(node)) + undo_redo.add_undo_method( terrain_data._edit_remove_map.bind(HTerrainData.CHANNEL_DETAIL, map_index)) - _undo_redo.add_undo_method(self._update_list) + undo_redo.add_undo_method(self._update_list) # Yet another instance of this hack, to prevent UndoRedo from running some of the functions, # which we had to run already terrain_data._edit_set_disable_apply_undo(true) - _undo_redo.commit_action() + undo_redo.commit_action() terrain_data._edit_set_disable_apply_undo(false) #_update_list() @@ -165,23 +168,26 @@ func _remove_layer(map_index: int): if node.layer_index == map_index: using_nodes.append(node) - _undo_redo.create_action("Remove Detail Layer {0}".format([map_index])) + var undo_redo := _undo_redo_manager.get_history_undo_redo( + _undo_redo_manager.get_object_history_id(_terrain)) + + undo_redo.create_action("Remove Detail Layer {0}".format([map_index])) - _undo_redo.add_do_method( + undo_redo.add_do_method( terrain_data._edit_remove_map.bind(HTerrainData.CHANNEL_DETAIL, map_index)) for node in using_nodes: - _undo_redo.add_do_method(_terrain.remove_child.bind(node)) - _undo_redo.add_do_method(self._update_list) + undo_redo.add_do_method(_terrain.remove_child.bind(node)) + undo_redo.add_do_method(self._update_list) - _undo_redo.add_undo_method(terrain_data._edit_insert_map_from_image_cache.bind( + undo_redo.add_undo_method(terrain_data._edit_insert_map_from_image_cache.bind( HTerrainData.CHANNEL_DETAIL, map_index, _image_cache, image_id)) for node in using_nodes: - _undo_redo.add_undo_method(_terrain.add_child.bind(node)) - _undo_redo.add_undo_property(node, "owner", get_tree().edited_scene_root) - _undo_redo.add_undo_reference(node) - _undo_redo.add_undo_method(self._update_list) + undo_redo.add_undo_method(_terrain.add_child.bind(node)) + undo_redo.add_undo_property(node, "owner", get_tree().edited_scene_root) + undo_redo.add_undo_reference(node) + undo_redo.add_undo_method(self._update_list) - _undo_redo.commit_action() + undo_redo.commit_action() #_update_list() detail_list_changed.emit() diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index de975629..877bfb91 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -31,7 +31,7 @@ var _generated_textures := [null, null] var _dialog_visible := false var _undo_map_ids := {} var _image_cache : HT_ImageFileCache = null -var _undo_redo : UndoRedo +var _undo_redo_manager : EditorUndoRedoManager var _logger := HT_Logger.get_for(self) var _viewport_resolution := MAX_VIEWPORT_RESOLUTION @@ -198,8 +198,8 @@ func set_image_cache(image_cache: HT_ImageFileCache): _image_cache = image_cache -func set_undo_redo(ur: UndoRedo): - _undo_redo = ur +func set_undo_redo(ur: EditorUndoRedoManager): + _undo_redo_manager = ur func _notification(what: int): @@ -493,13 +493,15 @@ func _on_TextureGenerator_completed(): for map_type in _undo_map_ids: redo_map_ids[map_type] = _image_cache.save_image(data.get_image(map_type)) + var undo_redo := _undo_redo_manager.get_history_undo_redo( + _undo_redo_manager.get_object_history_id(data)) + data._edit_set_disable_apply_undo(true) - _undo_redo.create_action("Generate terrain") - _undo_redo.add_do_method( - data._edit_apply_maps_from_file_cache.bind(_image_cache, redo_map_ids)) - _undo_redo.add_undo_method( + undo_redo.create_action("Generate terrain") + undo_redo.add_do_method(data._edit_apply_maps_from_file_cache.bind(_image_cache, redo_map_ids)) + undo_redo.add_undo_method( data._edit_apply_maps_from_file_cache.bind(_image_cache, _undo_map_ids)) - _undo_redo.commit_action() + undo_redo.commit_action() data._edit_set_disable_apply_undo(false) progress_notified.emit({ "finished": true }) diff --git a/addons/zylann.hterrain/tools/panel.gd b/addons/zylann.hterrain/tools/panel.gd index 3c9c8529..307e0083 100644 --- a/addons/zylann.hterrain/tools/panel.gd +++ b/addons/zylann.hterrain/tools/panel.gd @@ -1,6 +1,8 @@ @tool extends Control +const HT_DetailEditor = preload("./detail_editor/detail_editor.gd") + # Emitted when a texture item is selected signal texture_selected(index) @@ -15,7 +17,8 @@ signal detail_list_changed @onready var _minimap = $HSplitContainer/HSplitContainer/MinimapContainer/Minimap @onready var _brush_editor = $HSplitContainer/BrushEditor @onready var _texture_editor = $HSplitContainer/HSplitContainer/HSplitContainer/TextureEditor -@onready var _detail_editor = $HSplitContainer/HSplitContainer/HSplitContainer/DetailEditor +@onready var _detail_editor : HT_DetailEditor = \ + $HSplitContainer/HSplitContainer/HSplitContainer/DetailEditor func setup_dialogs(base_control: Control): @@ -28,8 +31,8 @@ func set_terrain(terrain): _detail_editor.set_terrain(terrain) -func set_undo_redo(ur: UndoRedo): - _detail_editor.set_undo_redo(ur) +func set_undo_redo(undo_manager: EditorUndoRedoManager): + _detail_editor.set_undo_redo(undo_manager) func set_image_cache(image_cache): diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 0b9d523b..6a735a14 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -16,6 +16,11 @@ const HT_LoadTextureDialog = preload("./load_texture_dialog.gd") const HT_GlobalMapBaker = preload("./globalmap_baker.gd") const HT_ImageFileCache = preload("../util/image_file_cache.gd") const HT_Logger = preload("../util/logger.gd") +const HT_EditPanel = preload("./panel.gd") +const HT_GeneratorDialog = preload("./generator/generator_dialog.gd") +const HT_TextureSetEditor = preload("./texture_editor/set_editor/texture_set_editor.gd") +const HT_TextureSetImportEditor = \ + preload("./texture_editor/set_editor/texture_set_import_editor.gd") const HT_EditPanelScene = preload("./panel.tscn") const HT_ProgressWindowScene = preload("./progress_window.tscn") @@ -47,22 +52,22 @@ const MENU_ABOUT = 9 var _node : HTerrain = null # GUI -var _panel = null -var _toolbar = null +var _panel : HT_EditPanel = null +var _toolbar : Container = null var _toolbar_brush_buttons := {} -var _generator_dialog = null +var _generator_dialog : HT_GeneratorDialog = null # TODO Rename _import_terrain_dialog var _import_dialog = null var _export_image_dialog = null var _progress_window = null var _generate_mesh_dialog = null -var _preview_generator = null +var _preview_generator : HT_PreviewGenerator = null var _resize_dialog = null var _about_dialog = null var _menu_button : MenuButton var _lookdev_menu : PopupMenu -var _texture_set_editor = null -var _texture_set_import_editor = null +var _texture_set_editor : HT_TextureSetEditor = null +var _texture_set_import_editor : HT_TextureSetImportEditor = null var _globalmap_baker : HT_GlobalMapBaker = null var _terrain_had_data_previous_frame := false @@ -74,10 +79,10 @@ var _mouse_pressed := false #var _pending_paint_action = null var _pending_paint_commit := false -var _logger = HT_Logger.get_for(self) +var _logger := HT_Logger.get_for(self) -func get_icon(icon_name: String) -> Texture: +func get_icon(icon_name: String) -> Texture2D: return HT_EditorUtil.load_texture( "res://addons/zylann.hterrain/tools/icons/icon_" + icon_name + ".svg", _logger) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd index 0ef314b7..77af51cf 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd @@ -30,7 +30,7 @@ signal import_selected @onready var _remove_slot_button : Button = $VB/HS/VB/HB/RemoveSlot var _texture_set : HTerrainTextureSet -var _undo_redo : UndoRedo +var _undo_redo_manager : EditorUndoRedoManager var _mode_confirmation_dialog : ConfirmationDialog var _delete_slot_confirmation_dialog : ConfirmationDialog @@ -93,8 +93,8 @@ func _notification(what: int): set_texture_set(null) -func set_undo_redo(ur: UndoRedo): - _undo_redo = ur +func set_undo_redo(ur: EditorUndoRedoManager): + _undo_redo_manager = ur func set_texture_set(texture_set: HTerrainTextureSet): @@ -280,13 +280,19 @@ func _on_CloseButton_pressed(): hide() +func _get_undo_redo_for_texture_set() -> UndoRedo: + return _undo_redo_manager.get_history_undo_redo( + _undo_redo_manager.get_object_history_id(_texture_set)) + + func _on_AddSlot_pressed(): assert(_texture_set.get_mode() == HTerrainTextureSet.MODE_TEXTURES) var slot_index = _texture_set.get_slots_count() - _undo_redo.create_action("HTerrainTextureSet: add slot") - _undo_redo.add_do_method(_texture_set.insert_slot.bind(-1)) - _undo_redo.add_undo_method(_texture_set.remove_slot.bind(slot_index)) - _undo_redo.commit_action() + var ur := _get_undo_redo_for_texture_set() + ur.create_action("HTerrainTextureSet: add slot") + ur.add_do_method(_texture_set.insert_slot.bind(-1)) + ur.add_undo_method(_texture_set.remove_slot.bind(slot_index)) + ur.commit_action() func _on_RemoveSlot_pressed(): @@ -296,22 +302,24 @@ func _on_RemoveSlot_pressed(): var textures = [] for type in HTerrainTextureSet.TYPE_COUNT: textures.append(_texture_set.get_texture(slot_index, type)) + + var ur := _get_undo_redo_for_texture_set() - _undo_redo.create_action("HTerrainTextureSet: remove slot") + ur.create_action("HTerrainTextureSet: remove slot") - _undo_redo.add_do_method(_texture_set.remove_slot.bind(slot_index)) + ur.add_do_method(_texture_set.remove_slot.bind(slot_index)) - _undo_redo.add_undo_method(_texture_set.insert_slot.bind(slot_index)) + ur.add_undo_method(_texture_set.insert_slot.bind(slot_index)) for type in len(textures): var texture = textures[type] # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture == null: - _undo_redo.add_undo_method(_texture_set.set_texture_null.bind(slot_index, type)) + ur.add_undo_method(_texture_set.set_texture_null.bind(slot_index, type)) else: - _undo_redo.add_undo_method(_texture_set.set_texture.bind(slot_index, type, texture)) + ur.add_undo_method(_texture_set.set_texture.bind(slot_index, type, texture)) - _undo_redo.commit_action() + ur.commit_action() func _on_SlotsList_item_selected(index: int): @@ -336,52 +344,56 @@ func _on_LoadNormal_pressed(): func _set_texture_action(slot_index: int, texture: Texture, type: int): var prev_texture = _texture_set.get_texture(slot_index, type) + + var ur := _get_undo_redo_for_texture_set() - _undo_redo.create_action("HTerrainTextureSet: load texture") + ur.create_action("HTerrainTextureSet: load texture") # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture == null: - _undo_redo.add_do_method(_texture_set.set_texture_null.bind(slot_index, type)) + ur.add_do_method(_texture_set.set_texture_null.bind(slot_index, type)) else: - _undo_redo.add_do_method(_texture_set.set_texture.bind(slot_index, type, texture)) - _undo_redo.add_do_method(self._select_slot.bind(slot_index)) + ur.add_do_method(_texture_set.set_texture.bind(slot_index, type, texture)) + ur.add_do_method(self._select_slot.bind(slot_index)) # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if prev_texture == null: - _undo_redo.add_undo_method(_texture_set.set_texture_null.bind(slot_index, type)) + ur.add_undo_method(_texture_set.set_texture_null.bind(slot_index, type)) else: - _undo_redo.add_undo_method(_texture_set.set_texture.bind(slot_index, type, prev_texture)) - _undo_redo.add_undo_method(self._select_slot.bind(slot_index)) + ur.add_undo_method(_texture_set.set_texture.bind(slot_index, type, prev_texture)) + ur.add_undo_method(self._select_slot.bind(slot_index)) - _undo_redo.commit_action() + ur.commit_action() func _set_texture_array_action(slot_index: int, texture_array: Texture2DArray, type: int): var prev_texture_array = _texture_set.get_texture_array(type) + + var ur := _get_undo_redo_for_texture_set() - _undo_redo.create_action("HTerrainTextureSet: load texture array") + ur.create_action("HTerrainTextureSet: load texture array") # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if texture_array == null: - _undo_redo.add_do_method(_texture_set.set_texture_array_null.bind(type)) + ur.add_do_method(_texture_set.set_texture_array_null.bind(type)) # Can't select a slot after this because there won't be any after the array is removed else: - _undo_redo.add_do_method(_texture_set.set_texture_array.bind(type, texture_array)) - _undo_redo.add_do_method(self._select_slot.bind(slot_index)) + ur.add_do_method(_texture_set.set_texture_array.bind(type, texture_array)) + ur.add_do_method(self._select_slot.bind(slot_index)) # TODO This branch only exists because of a flaw in UndoRedo # See https://github.com/godotengine/godot/issues/36895 if prev_texture_array == null: - _undo_redo.add_undo_method(_texture_set.set_texture_array_null.bind(type)) + ur.add_undo_method(_texture_set.set_texture_array_null.bind(type)) # Can't select a slot after this because there won't be any after the array is removed else: - _undo_redo.add_undo_method(_texture_set.set_texture_array.bind(type, prev_texture_array)) - _undo_redo.add_undo_method(self._select_slot.bind(slot_index)) + ur.add_undo_method(_texture_set.set_texture_array.bind(type, prev_texture_array)) + ur.add_undo_method(self._select_slot.bind(slot_index)) - _undo_redo.commit_action() + ur.commit_action() func _on_LoadTextureDialog_file_selected(fpath: String): @@ -452,7 +464,7 @@ func _on_ModeConfirmationDialog_confirmed(): func _switch_mode_action(): var mode := _texture_set.get_mode() - var ur := _undo_redo + var ur := _get_undo_redo_for_texture_set() if mode == HTerrainTextureSet.MODE_TEXTURES: ur.create_action("HTerrainTextureSet: switch to TextureArrays") diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index fd8b5594..cd318fe4 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -68,7 +68,7 @@ const _WRITE_IMPORT_FILES = true @onready var _normalmap_flip_checkbox : CheckBox = $Import/HS/VB2/HB/Normal/NormalMapFlipY var _texture_set : HTerrainTextureSet -var _undo_redo : UndoRedo +var _undo_redo_manager : EditorUndoRedoManager var _logger = HT_Logger.get_for(self) # This is normally an `EditorFileDialog`. I can't type-hint this one properly, @@ -184,8 +184,8 @@ func _notification(what: int): # TODO Is it still necessary for an import tab? -func set_undo_redo(ur: UndoRedo): - _undo_redo = ur +func set_undo_redo(ur: EditorUndoRedoManager): + _undo_redo_manager = ur func set_editor_file_system(efs: EditorFileSystem): @@ -589,6 +589,11 @@ func _on_NormalMapFlipY_toggled(button_pressed: bool): # _button.disabled = false +func _get_undo_redo_for_texture_set() -> UndoRedo: + return _undo_redo_manager.get_history_undo_redo( + _undo_redo_manager.get_object_history_id(_texture_set)) + + func _on_ImportButton_pressed(): if _texture_set == null: _show_error("No HTerrainTextureSet selected.") @@ -671,7 +676,7 @@ func _on_ImportButton_pressed(): # Using UndoRedo is mandatory for Godot to consider the resource as modified... # ...yet if files get deleted, that won't be undoable anyways, but whatever :shrug: - var ur := _undo_redo + var ur := _get_undo_redo_for_texture_set() # Check imported textures if _import_mode == HTerrainTextureSet.MODE_TEXTURES: From eae711c04965029a51fa85aa3cbb2c7e6a23b003 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:41:18 +0000 Subject: [PATCH 32/94] Fix SubViewport own world assignments --- addons/zylann.hterrain/tools/globalmap_baker.gd | 4 ++-- addons/zylann.hterrain/tools/normalmap_baker.gd | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/zylann.hterrain/tools/globalmap_baker.gd b/addons/zylann.hterrain/tools/globalmap_baker.gd index 7a941f46..7ed08499 100644 --- a/addons/zylann.hterrain/tools/globalmap_baker.gd +++ b/addons/zylann.hterrain/tools/globalmap_baker.gd @@ -67,8 +67,8 @@ func _setup_scene(terrain_size: int): _viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ALWAYS # _viewport.render_target_v_flip = true - _viewport.world = World3D.new() - _viewport.own_world = true + _viewport.world_3d = World3D.new() + _viewport.own_world_3d = true _viewport.debug_draw = Viewport.DEBUG_DRAW_UNSHADED var mat := ShaderMaterial.new() diff --git a/addons/zylann.hterrain/tools/normalmap_baker.gd b/addons/zylann.hterrain/tools/normalmap_baker.gd index f582faa5..e5af37db 100644 --- a/addons/zylann.hterrain/tools/normalmap_baker.gd +++ b/addons/zylann.hterrain/tools/normalmap_baker.gd @@ -27,9 +27,9 @@ func _init(): _viewport.size = Vector2(VIEWPORT_SIZE + 2, VIEWPORT_SIZE + 2) _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ALWAYS - # _viewport.render_target_v_flip = true - _viewport.world = World3D.new() - _viewport.own_world = true + # We only render 2D, but we don't want the parent world to interfere + _viewport.world_3d = World3D.new() + _viewport.own_world_3d = true add_child(_viewport) var mat = ShaderMaterial.new() From c702ae6e0b9c0bec3f336d4fb477fc757e770bfc Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:47:54 +0000 Subject: [PATCH 33/94] PackedScene.instance() was renamed instantiate() --- addons/zylann.hterrain/tools/plugin.gd | 20 +++++++++---------- .../tools/texture_editor/texture_list.gd | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 6a735a14..d7d88187 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -116,7 +116,7 @@ func _enter_tree(): var editor_interface := get_editor_interface() var base_control := editor_interface.get_base_control() - _panel = HT_EditPanelScene.instance() + _panel = HT_EditPanelScene.instantiate() HT_Util.apply_dpi_scale(_panel, dpi_scale) _panel.hide() add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_BOTTOM, _panel) @@ -219,27 +219,27 @@ func _enter_tree(): _toolbar_brush_buttons[mode] = button - _generator_dialog = HT_GeneratorDialogScene.instance() + _generator_dialog = HT_GeneratorDialogScene.instantiate() _generator_dialog.progress_notified.connect(_terrain_progress_notified) _generator_dialog.set_image_cache(_image_cache) _generator_dialog.set_undo_redo(get_undo_redo()) base_control.add_child(_generator_dialog) _generator_dialog.apply_dpi_scale(dpi_scale) - _import_dialog = HT_ImportDialogScene.instance() + _import_dialog = HT_ImportDialogScene.instantiate() _import_dialog.permanent_change_performed.connect(_on_permanent_change_performed) HT_Util.apply_dpi_scale(_import_dialog, dpi_scale) base_control.add_child(_import_dialog) - _progress_window = HT_ProgressWindowScene.instance() + _progress_window = HT_ProgressWindowScene.instantiate() base_control.add_child(_progress_window) - _generate_mesh_dialog = HT_GenerateMeshDialogScene.instance() + _generate_mesh_dialog = HT_GenerateMeshDialogScene.instantiate() _generate_mesh_dialog.generate_selected.connect(_on_GenerateMeshDialog_generate_selected) HT_Util.apply_dpi_scale(_generate_mesh_dialog, dpi_scale) base_control.add_child(_generate_mesh_dialog) - _resize_dialog = HT_ResizeDialogScene.instance() + _resize_dialog = HT_ResizeDialogScene.instantiate() _resize_dialog.permanent_change_performed.connect(_on_permanent_change_performed) HT_Util.apply_dpi_scale(_resize_dialog, dpi_scale) base_control.add_child(_resize_dialog) @@ -249,24 +249,24 @@ func _enter_tree(): _globalmap_baker.permanent_change_performed.connect(_on_permanent_change_performed) add_child(_globalmap_baker) - _export_image_dialog = HT_ExportImageDialogScene.instance() + _export_image_dialog = HT_ExportImageDialogScene.instantiate() HT_Util.apply_dpi_scale(_export_image_dialog, dpi_scale) base_control.add_child(_export_image_dialog) # Need to call deferred because in the specific case where you start the editor # with the plugin enabled, _ready won't be called at this point _export_image_dialog.call_deferred("setup_dialogs", base_control) - _about_dialog = HT_AboutDialogScene.instance() + _about_dialog = HT_AboutDialogScene.instantiate() HT_Util.apply_dpi_scale(_about_dialog, dpi_scale) base_control.add_child(_about_dialog) - _texture_set_editor = HT_TextureSetEditorScene.instance() + _texture_set_editor = HT_TextureSetEditorScene.instantiate() _texture_set_editor.set_undo_redo(get_undo_redo()) HT_Util.apply_dpi_scale(_texture_set_editor, dpi_scale) base_control.add_child(_texture_set_editor) _texture_set_editor.call_deferred("setup_dialogs", base_control) - _texture_set_import_editor = HT_TextureSetImportEditorScene.instance() + _texture_set_import_editor = HT_TextureSetImportEditorScene.instantiate() _texture_set_import_editor.set_undo_redo(get_undo_redo()) _texture_set_import_editor.set_editor_file_system( get_editor_interface().get_resource_filesystem()) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list.gd b/addons/zylann.hterrain/tools/texture_editor/texture_list.gd index 74a664bc..7391f85f 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list.gd @@ -33,7 +33,7 @@ var _selected_item := -1 # Note: the texture can be a TextureArray, which does not inherit Texture func add_item(text: String, texture: Texture, texture_layer: int = 0): - var item : HT_TextureListItem = HT_TextureListItemScene.instance() + var item : HT_TextureListItem = HT_TextureListItemScene.instantiate() _container.add_child(item) item.set_text(text) item.set_texture(texture, texture_layer) From 5502a9c200a115f96c658d7650656e4324ccffb7 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:48:27 +0000 Subject: [PATCH 34/94] This dialog should default to hidden, it's no longer automatic --- .../tools/brush/settings_dialog/brush_settings_dialog.tscn | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn index d6585033..112da399 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn @@ -6,7 +6,6 @@ [node name="BrushSettingsDialog" type="AcceptDialog"] size = Vector2i(492, 342) -visible = true script = ExtResource("3") [node name="VB" type="VBoxContainer" parent="."] From 352eaf5dce24e0fc75221e6ece43061c98884c0a Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:52:39 +0000 Subject: [PATCH 35/94] Fix resize dialog UI --- .../tools/resize_dialog/resize_dialog.gd | 4 + .../tools/resize_dialog/resize_dialog.tscn | 204 +++++++----------- 2 files changed, 87 insertions(+), 121 deletions(-) diff --git a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd index 0313b73c..6e3d2a2a 100644 --- a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd +++ b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd @@ -66,6 +66,10 @@ static func _get_icon(name) -> Texture2D: return load("res://addons/zylann.hterrain/tools/icons/icon_" + name + ".svg") +func _init(): + get_ok_button().hide() + + func _ready(): if HT_Util.is_in_edited_scene(self): return diff --git a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.tscn b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.tscn index fe1c45c3..c0678ae9 100644 --- a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.tscn +++ b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.tscn @@ -1,195 +1,157 @@ -[gd_scene load_steps=7 format=2] - -[ext_resource path="res://addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg" type="Texture" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg" type="Texture" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg" type="Texture" id=4] -[ext_resource path="res://addons/zylann.hterrain/tools/icons/icon_small_circle.svg" type="Texture" id=5] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=6] - -[node name="ResizeDialog" type="WindowDialog"] -margin_left = 130.0 -margin_top = 126.0 -margin_right = 430.0 -margin_bottom = 326.0 -rect_min_size = Vector2( 300, 200 ) -window_title = "Resize terrain" -script = ExtResource( 1 ) +[gd_scene load_steps=7 format=3 uid="uid://gt402qqhab7j"] + +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://b4ya0po3a4nqa" path="res://addons/zylann.hterrain/tools/icons/icon_heightmap_unmask.svg" id="2"] +[ext_resource type="Texture2D" uid="uid://d3vie0tj3ry6k" path="res://addons/zylann.hterrain/tools/icons/icon_long_arrow_right.svg" id="3"] +[ext_resource type="Texture2D" uid="uid://b6l5dys0awbwd" path="res://addons/zylann.hterrain/tools/icons/icon_long_arrow_down.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://bdkcgtv1r5j31" path="res://addons/zylann.hterrain/tools/icons/icon_small_circle.svg" id="5"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="6"] + +[node name="ResizeDialog" type="AcceptDialog"] +title = "Resize terrain" +size = Vector2i(300, 201) +min_size = Vector2i(300, 200) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 -custom_constants/separation = 24 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -18.0 [node name="GridContainer" type="GridContainer" parent="VBoxContainer"] -margin_right = 284.0 -margin_bottom = 126.0 +layout_mode = 2 columns = 2 [node name="Label" type="Label" parent="VBoxContainer/GridContainer"] -margin_top = 3.0 -margin_right = 68.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Resolution" [node name="ResolutionDropdown" type="OptionButton" parent="VBoxContainer/GridContainer"] -margin_left = 72.0 -margin_right = 284.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 toggle_mode = false [node name="Label3" type="Label" parent="VBoxContainer/GridContainer"] -margin_top = 29.0 -margin_right = 68.0 -margin_bottom = 43.0 +layout_mode = 2 text = "Stretch" [node name="StretchCheckBox" type="CheckBox" parent="VBoxContainer/GridContainer"] -margin_left = 72.0 -margin_top = 24.0 -margin_right = 284.0 -margin_bottom = 48.0 +layout_mode = 2 [node name="Label2" type="Label" parent="VBoxContainer/GridContainer"] -margin_top = 82.0 -margin_right = 68.0 -margin_bottom = 96.0 +layout_mode = 2 text = "Direction" [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/GridContainer"] -margin_left = 72.0 -margin_top = 52.0 -margin_right = 284.0 -margin_bottom = 126.0 +layout_mode = 2 [node name="AnchorControl" type="GridContainer" parent="VBoxContainer/GridContainer/HBoxContainer"] -margin_right = 92.0 -margin_bottom = 74.0 +layout_mode = 2 columns = 3 [node name="TopLeftButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_right = 28.0 -margin_bottom = 22.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="TopButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_left = 32.0 -margin_right = 60.0 -margin_bottom = 22.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="TopRightButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_left = 64.0 -margin_right = 92.0 -margin_bottom = 22.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="LeftButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_top = 26.0 -margin_right = 28.0 -margin_bottom = 48.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="CenterButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_left = 32.0 -margin_top = 26.0 -margin_right = 60.0 -margin_bottom = 48.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="RightButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_left = 64.0 -margin_top = 26.0 -margin_right = 92.0 -margin_bottom = 48.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="ButtomLeftButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_top = 52.0 -margin_right = 28.0 -margin_bottom = 74.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="ButtomButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_left = 32.0 -margin_top = 52.0 -margin_right = 60.0 -margin_bottom = 74.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="BottomRightButton" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer/AnchorControl"] -margin_left = 64.0 -margin_top = 52.0 -margin_right = 92.0 -margin_bottom = 74.0 -icon = ExtResource( 2 ) +layout_mode = 2 +icon = ExtResource("2") [node name="Reference" type="Control" parent="VBoxContainer/GridContainer/HBoxContainer"] -margin_left = 96.0 -margin_right = 196.0 -margin_bottom = 74.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 [node name="XArrow" type="TextureRect" parent="VBoxContainer/GridContainer/HBoxContainer/Reference"] -modulate = Color( 1, 0.292969, 0.292969, 1 ) +modulate = Color(1, 0.292969, 0.292969, 1) +layout_mode = 0 anchor_right = 1.0 -margin_left = 9.0 -margin_bottom = 16.0 -texture = ExtResource( 3 ) +offset_left = 9.0 +offset_bottom = 16.0 +texture = ExtResource("3") [node name="ZArrow" type="TextureRect" parent="VBoxContainer/GridContainer/HBoxContainer/Reference"] -modulate = Color( 0.292969, 0.602295, 1, 1 ) +modulate = Color(0.292969, 0.602295, 1, 1) +layout_mode = 0 anchor_bottom = 1.0 -margin_top = 10.0 -margin_right = 16.0 -texture = ExtResource( 4 ) +offset_top = 10.0 +offset_right = 16.0 +texture = ExtResource("4") [node name="ZLabel" type="Label" parent="VBoxContainer/GridContainer/HBoxContainer/Reference"] -margin_left = 14.0 -margin_top = 54.0 -margin_right = 22.0 -margin_bottom = 68.0 +layout_mode = 0 +offset_left = 14.0 +offset_top = 54.0 +offset_right = 22.0 +offset_bottom = 68.0 text = "Z" [node name="XLabel" type="Label" parent="VBoxContainer/GridContainer/HBoxContainer/Reference"] -margin_left = 52.0 -margin_top = 14.0 -margin_right = 60.0 -margin_bottom = 28.0 +layout_mode = 0 +offset_left = 52.0 +offset_top = 14.0 +offset_right = 60.0 +offset_bottom = 28.0 text = "X" [node name="Origin" type="TextureRect" parent="VBoxContainer/GridContainer/HBoxContainer/Reference"] -margin_left = 3.0 -margin_top = 4.0 -margin_right = 11.0 -margin_bottom = 12.0 -texture = ExtResource( 5 ) +layout_mode = 0 +offset_left = 3.0 +offset_top = 4.0 +offset_right = 11.0 +offset_bottom = 12.0 +texture = ExtResource("5") [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 150.0 -margin_right = 284.0 -margin_bottom = 170.0 -custom_constants/separation = 16 +layout_mode = 2 alignment = 1 [node name="ApplyButton" type="Button" parent="VBoxContainer/HBoxContainer"] -margin_left = 51.0 -margin_right = 163.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Apply (no undo)" [node name="CancelButton" type="Button" parent="VBoxContainer/HBoxContainer"] -margin_left = 179.0 -margin_right = 233.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Cancel" -[node name="DialogFitter" parent="." instance=ExtResource( 6 )] +[node name="DialogFitter" parent="." instance=ExtResource("6")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 292.0 +offset_bottom = 183.0 [connection signal="item_selected" from="VBoxContainer/GridContainer/ResolutionDropdown" to="." method="_on_ResolutionDropdown_item_selected"] [connection signal="toggled" from="VBoxContainer/GridContainer/StretchCheckBox" to="." method="_on_StretchCheckBox_toggled"] From 22d0dd85b601ecaca8f7dfe24d965f29c1805941 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 21:58:53 +0000 Subject: [PATCH 36/94] Fix texture list UI scenes --- .../tools/texture_editor/texture_editor.tscn | 28 +++++------ .../tools/texture_editor/texture_list.tscn | 6 +-- .../texture_editor/texture_list_item.tscn | 49 +++++-------------- 3 files changed, 29 insertions(+), 54 deletions(-) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/texture_editor.tscn index a716a552..885f344b 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/texture_editor.tscn @@ -4,9 +4,9 @@ [ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/texture_list.tscn" type="PackedScene" id=2] [node name="TextureEditor" type="Control"] -margin_right = 352.0 -margin_bottom = 104.0 -rect_min_size = Vector2( 100, 0 ) +offset_right = 352.0 +offset_bottom = 104.0 +custom_minimum_size = Vector2( 100, 0 ) size_flags_horizontal = 3 script = ExtResource( 1 ) __meta__ = { @@ -14,33 +14,33 @@ __meta__ = { } [node name="TextureList" parent="." instance=ExtResource( 2 )] -margin_bottom = -26.0 +offset_bottom = -26.0 [node name="HBoxContainer" type="HBoxContainer" parent="."] anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -24.0 +offset_top = -24.0 __meta__ = { "_edit_use_anchors_": false } [node name="EditButton" type="Button" parent="HBoxContainer"] -margin_right = 48.0 -margin_bottom = 24.0 +offset_right = 48.0 +offset_bottom = 24.0 text = "Edit..." [node name="ImportButton" type="Button" parent="HBoxContainer"] -margin_left = 52.0 -margin_right = 120.0 -margin_bottom = 24.0 +offset_left = 52.0 +offset_right = 120.0 +offset_bottom = 24.0 text = "Import..." [node name="Label" type="Label" parent="HBoxContainer"] -margin_left = 124.0 -margin_top = 5.0 -margin_right = 179.0 -margin_bottom = 19.0 +offset_left = 124.0 +offset_top = 5.0 +offset_right = 179.0 +offset_bottom = 19.0 text = "Textures" [connection signal="item_activated" from="TextureList" to="." method="_on_TextureList_item_activated"] [connection signal="item_selected" from="TextureList" to="." method="_on_TextureList_item_selected"] diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list.tscn b/addons/zylann.hterrain/tools/texture_editor/texture_list.tscn index bd09e96b..df5e1e22 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list.tscn @@ -13,8 +13,8 @@ __meta__ = { } [node name="Container" type="Container" parent="."] -margin_right = 800.0 -margin_bottom = 82.0 -rect_min_size = Vector2( 0, 82 ) +offset_right = 800.0 +offset_bottom = 82.0 +custom_minimum_size = Vector2( 0, 82 ) size_flags_horizontal = 3 script = ExtResource( 2 ) diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.tscn b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.tscn index c8b2f21b..4340f557 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.tscn @@ -1,50 +1,25 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=2 format=3 uid="uid://daugk4kdnx6vy"] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd" type="Script" id=2] - -[sub_resource type="StyleBoxEmpty" id=1] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd" id="2"] [node name="TextureListItem" type="PanelContainer"] -margin_right = 64.0 -margin_bottom = 80.0 -rect_min_size = Vector2( 64, 80 ) +custom_minimum_size = Vector2(64, 80) +offset_right = 64.0 +offset_bottom = 80.0 focus_mode = 1 -custom_styles/panel = SubResource( 1 ) -script = ExtResource( 2 ) +script = ExtResource("2") [node name="VB" type="VBoxContainer" parent="."] -margin_left = 2.0 -margin_top = 2.0 -margin_right = 62.0 -margin_bottom = 78.0 +layout_mode = 2 mouse_filter = 2 -custom_constants/separation = 0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="TextureRect" type="TextureRect" parent="VB"] -margin_right = 60.0 -margin_bottom = 62.0 -rect_min_size = Vector2( 60, 60 ) -mouse_filter = 2 +custom_minimum_size = Vector2(60, 60) +layout_mode = 2 size_flags_vertical = 3 -expand = true -stretch_mode = 1 -__meta__ = { -"_edit_use_anchors_": false -} +mouse_filter = 2 +expand_mode = 1 [node name="Label" type="Label" parent="VB"] -margin_top = 62.0 -margin_right = 60.0 -margin_bottom = 76.0 +layout_mode = 2 text = "Texture" -align = 1 -__meta__ = { -"_edit_use_anchors_": false -} From e0e8b8f1e0903844217c10a1efcdd7750f53c170 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:01:30 +0000 Subject: [PATCH 37/94] Fix generate mesh dialog UI --- .../tools/generate_mesh_dialog.tscn | 76 ++++++++----------- 1 file changed, 31 insertions(+), 45 deletions(-) diff --git a/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn b/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn index b3face2d..fc1f614b 100644 --- a/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn +++ b/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn @@ -1,83 +1,69 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://ci0da54goyo5o"] -[ext_resource path="res://addons/zylann.hterrain/tools/generate_mesh_dialog.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/generate_mesh_dialog.gd" id="1"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="2"] -[node name="GenerateMeshDialog" type="WindowDialog"] -margin_left = 57.0 -margin_top = 83.0 -margin_right = 505.0 -margin_bottom = 269.0 -rect_min_size = Vector2( 448, 186 ) -window_title = "Generate full mesh" -script = ExtResource( 1 ) +[node name="GenerateMeshDialog" type="AcceptDialog"] +title = "Generate full mesh" +size = Vector2i(448, 234) +visible = true +min_size = Vector2i(448, 186) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -18.0 [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 432.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] -margin_top = 5.0 -margin_right = 28.0 -margin_bottom = 19.0 +layout_mode = 2 text = "LOD" [node name="LODSpinBox" type="SpinBox" parent="VBoxContainer/HBoxContainer"] -margin_left = 32.0 -margin_right = 432.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 min_value = 1.0 max_value = 16.0 value = 1.0 [node name="PreviewLabel" type="Label" parent="VBoxContainer"] -margin_top = 28.0 -margin_right = 432.0 -margin_bottom = 42.0 +layout_mode = 2 text = "9999 vertices, 9999 triangles" [node name="Spacer" type="Control" parent="VBoxContainer"] -margin_top = 46.0 -margin_right = 432.0 -margin_bottom = 54.0 -rect_min_size = Vector2( 0, 8 ) +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer"] -margin_top = 58.0 -margin_right = 432.0 -margin_bottom = 123.0 +layout_mode = 2 text = "Note: generating a full mesh from the terrain may result in a huge amount of vertices for a single object. It is preferred to do this for small terrains, or as a temporary workaround to generate a navmesh." -autowrap = true +autowrap_mode = 2 [node name="Buttons" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 127.0 -margin_right = 432.0 -margin_bottom = 147.0 -custom_constants/separation = 32 +layout_mode = 2 alignment = 1 [node name="Generate" type="Button" parent="VBoxContainer/Buttons"] -margin_left = 137.0 -margin_right = 208.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Generate" [node name="Cancel" type="Button" parent="VBoxContainer/Buttons"] -margin_left = 240.0 -margin_right = 294.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Cancel" -[node name="DialogFitter" parent="." instance=ExtResource( 2 )] +[node name="DialogFitter" parent="." instance=ExtResource("2")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 440.0 +offset_bottom = 216.0 [connection signal="value_changed" from="VBoxContainer/HBoxContainer/LODSpinBox" to="." method="_on_LODSpinBox_value_changed"] [connection signal="pressed" from="VBoxContainer/Buttons/Generate" to="." method="_on_Generate_pressed"] From bdad3c82174c336c35564c1d0b8b05c359ae97f8 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:03:46 +0000 Subject: [PATCH 38/94] Terrain preview should have its own world (also converted the whole TSCN) --- .../tools/terrain_preview.tscn | 196 ++---------------- 1 file changed, 18 insertions(+), 178 deletions(-) diff --git a/addons/zylann.hterrain/tools/terrain_preview.tscn b/addons/zylann.hterrain/tools/terrain_preview.tscn index fdf45057..0b87a164 100644 --- a/addons/zylann.hterrain/tools/terrain_preview.tscn +++ b/addons/zylann.hterrain/tools/terrain_preview.tscn @@ -1,198 +1,38 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=3 format=3 uid="uid://bue2flijnxa3p"] -[ext_resource path="res://addons/zylann.hterrain/tools/terrain_preview.gd" type="Script" id=1] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/terrain_preview.gd" id="1"] -[sub_resource type="Environment" id=1] +[sub_resource type="PlaneMesh" id="3"] +size = Vector2(256, 256) -background_mode = 1 -background_sky_custom_fov = 0.0 -background_color = Color( 0.132813, 0.132813, 0.132813, 1 ) -background_energy = 1.0 -background_canvas_max_layer = 0 -ambient_light_color = Color( 0, 0, 0, 1 ) -ambient_light_energy = 1.0 -ambient_light_sky_contribution = 1.0 -fog_enabled = false -fog_color = Color( 0.5, 0.6, 0.7, 1 ) -fog_sun_color = Color( 1, 0.9, 0.7, 1 ) -fog_sun_amount = 0.0 -fog_depth_enabled = true -fog_depth_begin = 10.0 -fog_depth_curve = 1.0 -fog_transmit_enabled = false -fog_transmit_curve = 1.0 -fog_height_enabled = false -fog_height_min = 0.0 -fog_height_max = 100.0 -fog_height_curve = 1.0 -tonemap_mode = 0 -tonemap_exposure = 1.0 -tonemap_white = 1.0 -auto_exposure_enabled = false -auto_exposure_scale = 0.4 -auto_exposure_min_luma = 0.05 -auto_exposure_max_luma = 8.0 -auto_exposure_speed = 0.5 -ss_reflections_enabled = false -ss_reflections_max_steps = 64 -ss_reflections_fade_in = 0.15 -ss_reflections_fade_out = 2.0 -ss_reflections_depth_tolerance = 0.2 -ss_reflections_roughness = true -ssao_enabled = false -ssao_radius = 1.0 -ssao_intensity = 1.0 -ssao_radius2 = 0.0 -ssao_intensity2 = 1.0 -ssao_bias = 0.01 -ssao_light_affect = 0.0 -ssao_color = Color( 0, 0, 0, 1 ) -ssao_quality = 0 -ssao_blur = 3 -ssao_edge_sharpness = 4.0 -dof_blur_far_enabled = false -dof_blur_far_distance = 10.0 -dof_blur_far_transition = 5.0 -dof_blur_far_amount = 0.1 -dof_blur_far_quality = 1 -dof_blur_near_enabled = false -dof_blur_near_distance = 2.0 -dof_blur_near_transition = 1.0 -dof_blur_near_amount = 0.1 -dof_blur_near_quality = 1 -glow_enabled = false -glow_levels/1 = false -glow_levels/2 = false -glow_levels/3 = true -glow_levels/4 = false -glow_levels/5 = true -glow_levels/6 = false -glow_levels/7 = false -glow_intensity = 0.8 -glow_strength = 1.0 -glow_bloom = 0.0 -glow_blend_mode = 2 -glow_hdr_threshold = 1.0 -glow_hdr_scale = 2.0 -glow_bicubic_upscale = false -adjustment_enabled = false -adjustment_brightness = 1.0 -adjustment_contrast = 1.0 -adjustment_saturation = 1.0 -_sections_unfolded = [ "Background" ] - -[sub_resource type="World" id=2] - -environment = SubResource( 1 ) - -[sub_resource type="PlaneMesh" id=3] - -custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) -size = Vector2( 256, 256 ) -subdivide_width = 0 -subdivide_depth = 0 - -[node name="TerrainPreview" type="ViewportContainer" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 +[node name="TerrainPreview" type="SubViewportContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -rect_pivot_offset = Vector2( 0, 0 ) -rect_clip_content = false mouse_filter = 0 -mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 -size_flags_vertical = 1 stretch = true -stretch_shrink = 1 -script = ExtResource( 1 ) +script = ExtResource("1") -[node name="Viewport" type="Viewport" parent="." index="0"] +[node name="Viewport" type="SubViewport" parent="."] +own_world_3d = true +handle_input_locally = false +size = Vector2i(1152, 648) +render_target_update_mode = 4 -arvr = false -size = Vector2( 1024, 600 ) -own_world = false -world = SubResource( 2 ) -transparent_bg = false -msaa = 0 -hdr = false -disable_3d = false -usage = 2 -debug_draw = 0 -render_target_v_flip = false -render_target_clear_mode = 0 -render_target_update_mode = 3 -audio_listener_enable_2d = false -audio_listener_enable_3d = false -physics_object_picking = false -gui_disable_input = false -gui_snap_controls_to_pixels = true -shadow_atlas_size = 512 -shadow_atlas_quad_0 = 2 -shadow_atlas_quad_1 = 2 -shadow_atlas_quad_2 = 3 -shadow_atlas_quad_3 = 4 -_sections_unfolded = [ "Rendering", "Shadow Atlas" ] - -[node name="DirectionalLight" type="DirectionalLight" parent="Viewport" index="0"] - -transform = Transform( -0.901211, 0.315056, -0.297588, 0, 0.686666, 0.726973, 0.433381, 0.655156, -0.618831, 0, 0, 0 ) -layers = 1 -light_color = Color( 1, 1, 1, 1 ) -light_energy = 1.0 -light_indirect_energy = 1.0 -light_negative = false -light_specular = 0.5 +[node name="DirectionalLight" type="DirectionalLight3D" parent="Viewport"] +transform = Transform3D(-0.901211, 0.315056, -0.297588, 0, 0.686666, 0.726973, 0.433381, 0.655156, -0.618831, 0, 0, 0) light_bake_mode = 1 -light_cull_mask = -1 shadow_enabled = true -shadow_color = Color( 0.266667, 0.266667, 0.266667, 1 ) shadow_bias = 0.5 -shadow_contact = 0.0 -shadow_reverse_cull_face = false -editor_only = false directional_shadow_mode = 1 -directional_shadow_split_1 = 0.1 -directional_shadow_split_2 = 0.2 -directional_shadow_split_3 = 0.5 -directional_shadow_blend_splits = false -directional_shadow_normal_bias = 0.8 -directional_shadow_bias_split_scale = 0.25 -directional_shadow_depth_range = 0 directional_shadow_max_distance = 1000.0 -_sections_unfolded = [ "Directional Shadow", "Light", "Shadow" ] - -[node name="MeshInstance" type="MeshInstance" parent="Viewport" index="1"] -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 -mesh = SubResource( 3 ) -skeleton = NodePath("..") -material/0 = null +[node name="MeshInstance" type="MeshInstance3D" parent="Viewport"] +mesh = SubResource("3") -[node name="Camera" type="Camera" parent="Viewport" index="2"] - -transform = Transform( -1, 3.31486e-008, -8.08945e-008, 0, 0.925325, 0.379176, 8.74228e-008, 0.379176, -0.925325, -2.25312e-005, 145.456, -348.286 ) -keep_aspect = 1 -cull_mask = 1048575 -environment = null -h_offset = 0.0 -v_offset = 0.0 -doppler_tracking = 0 -projection = 0 +[node name="Camera" type="Camera3D" parent="Viewport"] +transform = Transform3D(-1, 3.31486e-08, -8.08945e-08, 0, 0.925325, 0.379176, 8.74228e-08, 0.379176, -0.925325, -2.25312e-05, 145.456, -348.286) current = true fov = 70.0 -size = 1.0 near = 1.0 far = 1000.0 -_sections_unfolded = [ "Transform" ] - - From f5182a19ffefd34396a2491a2f7be6073c5a8368 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:14:02 +0000 Subject: [PATCH 39/94] Fix some importer dialog things --- .../tools/importer/importer_dialog.gd | 6 +- .../tools/importer/importer_dialog.tscn | 102 ++++++++---------- .../tools/inspector/inspector.gd | 10 +- 3 files changed, 51 insertions(+), 67 deletions(-) diff --git a/addons/zylann.hterrain/tools/importer/importer_dialog.gd b/addons/zylann.hterrain/tools/importer/importer_dialog.gd index a6903458..5d4a981b 100644 --- a/addons/zylann.hterrain/tools/importer/importer_dialog.gd +++ b/addons/zylann.hterrain/tools/importer/importer_dialog.gd @@ -73,12 +73,14 @@ func set_terrain(terrain: HTerrain): func _notification(what: int): if what == NOTIFICATION_VISIBILITY_CHANGED: - if visible and is_inside_tree(): + # Checking a node set in _ready, + # because visibility can also change between _enter_tree and _ready... + if visible and _inspector != null: _clear_feedback() static func _format_feedbacks(feed): - var a = [] + var a := [] for s in feed: a.append("- " + s) return "\n".join(PackedStringArray(a)) diff --git a/addons/zylann.hterrain/tools/importer/importer_dialog.tscn b/addons/zylann.hterrain/tools/importer/importer_dialog.tscn index b5710ca0..0c5545ef 100644 --- a/addons/zylann.hterrain/tools/importer/importer_dialog.tscn +++ b/addons/zylann.hterrain/tools/importer/importer_dialog.tscn @@ -1,104 +1,86 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://on7x7xkovsc8"] -[ext_resource path="res://addons/zylann.hterrain/tools/importer/importer_dialog.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/inspector/inspector.tscn" type="PackedScene" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" type="PackedScene" id=3] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/importer/importer_dialog.gd" id="1"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/inspector/inspector.tscn" id="2"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="3"] -[node name="WindowDialog" type="WindowDialog"] +[node name="WindowDialog" type="AcceptDialog"] +title = "Import maps" +size = Vector2i(500, 433) visible = true -margin_left = 223.0 -margin_top = 87.0 -margin_right = 747.0 -margin_bottom = 463.0 -rect_min_size = Vector2( 500, 380 ) -window_title = "Import maps" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +min_size = Vector2i(500, 380) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -8.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -18.0 [node name="Label" type="Label" parent="VBoxContainer"] -margin_right = 508.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Select maps to import. Leave empty if you don't need some." [node name="Spacer" type="Control" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 508.0 -margin_bottom = 34.0 -rect_min_size = Vector2( 0, 16 ) - -[node name="Inspector" parent="VBoxContainer" instance=ExtResource( 2 )] -margin_top = 38.0 -margin_right = 508.0 -margin_bottom = 224.0 +custom_minimum_size = Vector2(0, 16) +layout_mode = 2 + +[node name="Inspector" parent="VBoxContainer" instance=ExtResource("2")] +layout_mode = 2 size_flags_vertical = 3 [node name="ColorRect" type="ColorRect" parent="VBoxContainer"] -margin_top = 228.0 -margin_right = 508.0 -margin_bottom = 328.0 -rect_min_size = Vector2( 0, 100 ) -color = Color( 0, 0, 0, 0.417529 ) +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 +color = Color(0, 0, 0, 0.417529) [node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/ColorRect"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/ColorRect/ScrollContainer"] -margin_bottom = 32.0 +layout_mode = 2 [node name="Errors" type="Label" parent="VBoxContainer/ColorRect/ScrollContainer/VBoxContainer"] -self_modulate = Color( 1, 0.203125, 0.203125, 1 ) -margin_bottom = 14.0 +self_modulate = Color(1, 0.203125, 0.203125, 1) +layout_mode = 2 [node name="Warnings" type="Label" parent="VBoxContainer/ColorRect/ScrollContainer/VBoxContainer"] -self_modulate = Color( 1, 0.901428, 0.257813, 1 ) -margin_top = 18.0 -margin_bottom = 32.0 +self_modulate = Color(1, 0.901428, 0.257813, 1) +layout_mode = 2 [node name="Spacer2" type="Control" parent="VBoxContainer"] -margin_top = 332.0 -margin_right = 508.0 -margin_bottom = 340.0 -rect_min_size = Vector2( 0, 8 ) +custom_minimum_size = Vector2(0, 8) +layout_mode = 2 [node name="ButtonsArea" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 344.0 -margin_right = 508.0 -margin_bottom = 364.0 +layout_mode = 2 mouse_filter = 0 -custom_constants/separation = 32 alignment = 1 [node name="CheckButton" type="Button" parent="VBoxContainer/ButtonsArea"] -margin_left = 142.0 -margin_right = 192.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Check" [node name="ImportButton" type="Button" parent="VBoxContainer/ButtonsArea"] -margin_left = 224.0 -margin_right = 280.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Import" [node name="CancelButton" type="Button" parent="VBoxContainer/ButtonsArea"] -margin_left = 312.0 -margin_right = 366.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Cancel" -[node name="DialogFitter" parent="." instance=ExtResource( 3 )] +[node name="DialogFitter" parent="." instance=ExtResource("3")] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 492.0 +offset_bottom = 415.0 [connection signal="property_changed" from="VBoxContainer/Inspector" to="." method="_on_Inspector_property_changed"] [connection signal="pressed" from="VBoxContainer/ButtonsArea/CheckButton" to="." method="_on_CheckButton_pressed"] diff --git a/addons/zylann.hterrain/tools/inspector/inspector.gd b/addons/zylann.hterrain/tools/inspector/inspector.gd index cbca5208..23e47144 100644 --- a/addons/zylann.hterrain/tools/inspector/inspector.gd +++ b/addons/zylann.hterrain/tools/inspector/inspector.gd @@ -35,7 +35,7 @@ class HT_InspectorResourceEditor extends HT_InspectorEditor: class HT_InspectorVectorEditor extends HT_InspectorEditor: signal value_changed(v) - var value = Vector2() + var value := Vector2() var xed = null var yed = null @@ -138,7 +138,7 @@ func set_prototype(proto: Dictionary): label.text = str(key).capitalize() _grid_container.add_child(label) - var editor = _make_editor(key, prop) + var editor := _make_editor(key, prop) editor.key_label = label if prop.has("default_value"): @@ -182,7 +182,7 @@ func set_property_enabled(prop_name: String, enabled: bool): ed.key_label.modulate = col -func _make_editor(key: String, prop: Dictionary): +func _make_editor(key: String, prop: Dictionary) -> HT_InspectorEditor: var ed : HT_InspectorEditor = null var editor : Control = null @@ -268,13 +268,13 @@ func _make_editor(key: String, prop: Dictionary): load_button.pressed.connect(_on_ask_load_file.bind(key, exts)) editor.add_child(load_button) - line_edit.text_entered.connect(_property_edited.bind(key)) + line_edit.text_submitted.connect(_property_edited.bind(key)) getter = line_edit.get_text setter = line_edit.set_text else: editor = LineEdit.new() - editor.text_entered.connect(_property_edited.bind(key)) + editor.text_submitted.connect(_property_edited.bind(key)) getter = editor.get_text setter = editor.set_text From 73adee3e57aa6d2b80ec9ed53b6e5b4d4484b7fd Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:26:54 +0000 Subject: [PATCH 40/94] RichTextLabel.bbcode_text was removed --- addons/zylann.hterrain/tools/about/about_dialog.gd | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/tools/about/about_dialog.gd b/addons/zylann.hterrain/tools/about/about_dialog.gd index c8401cc8..20ec8f8f 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.gd +++ b/addons/zylann.hterrain/tools/about/about_dialog.gd @@ -25,5 +25,4 @@ func _ready(): return var version = plugin_cfg.get_value("plugin", "version", "--.--.--") - _about_rich_text_label.bbcode_text = _about_rich_text_label.bbcode_text \ - .format({"version": version}) + _about_rich_text_label.text = _about_rich_text_label.text.format({"version": version}) From c4015dd239fb7d37683c191055587ed51fd8be68 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:27:39 +0000 Subject: [PATCH 41/94] Fix error with F5 preview of generate mesh dialog --- addons/zylann.hterrain/tools/generate_mesh_dialog.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/generate_mesh_dialog.gd b/addons/zylann.hterrain/tools/generate_mesh_dialog.gd index 713eab35..f567e024 100644 --- a/addons/zylann.hterrain/tools/generate_mesh_dialog.gd +++ b/addons/zylann.hterrain/tools/generate_mesh_dialog.gd @@ -23,7 +23,7 @@ func set_terrain(terrain: HTerrain): func _notification(what: int): if what == NOTIFICATION_VISIBILITY_CHANGED: - if visible: + if visible and _terrain != null: _update_preview() From e374d59934b555606677f589bd5974eb903efef5 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:28:09 +0000 Subject: [PATCH 42/94] Windows use `unresizable` instead of `resizable` --- addons/zylann.hterrain/tools/exporter/export_image_dialog.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 872b488e..014c37d3 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -56,7 +56,7 @@ func setup_dialogs(base_control: Control): assert(_file_dialog == null) var fd := EditorFileDialog.new() fd.file_mode = EditorFileDialog.FILE_MODE_SAVE_FILE - fd.resizable = true + fd.unresizable = false fd.access = EditorFileDialog.ACCESS_FILESYSTEM fd.file_selected.connect(_on_FileDialog_file_selected) base_control.add_child(fd) From 29d84751165d1550bc7fee8f8224f050dbcf55ce Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:28:44 +0000 Subject: [PATCH 43/94] Dialogs should be hidden by default --- addons/zylann.hterrain/tools/about/about_dialog.tscn | 1 - .../zylann.hterrain/tools/exporter/export_image_dialog.tscn | 5 ++--- addons/zylann.hterrain/tools/generate_mesh_dialog.tscn | 1 - addons/zylann.hterrain/tools/importer/importer_dialog.tscn | 1 - .../tools/texture_editor/set_editor/texture_set_editor.tscn | 1 - .../texture_editor/set_editor/texture_set_import_editor.tscn | 5 ++--- 6 files changed, 4 insertions(+), 10 deletions(-) diff --git a/addons/zylann.hterrain/tools/about/about_dialog.tscn b/addons/zylann.hterrain/tools/about/about_dialog.tscn index cdf2854c..a958b3e6 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.tscn +++ b/addons/zylann.hterrain/tools/about/about_dialog.tscn @@ -6,7 +6,6 @@ [node name="AboutDialog" type="AcceptDialog"] size = Vector2i(516, 357) -visible = true script = ExtResource("1") [node name="VB" type="VBoxContainer" parent="."] diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn b/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn index 092df9c7..a702181e 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.tscn @@ -4,8 +4,7 @@ [ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/util/dialog_fitter.tscn" id="2"] [node name="ExportImageDialog" type="AcceptDialog"] -size = Vector2i(500, 314) -visible = true +size = Vector2i(500, 340) min_size = Vector2i(500, 250) script = ExtResource("1") @@ -116,7 +115,7 @@ anchors_preset = 0 offset_left = 8.0 offset_top = 8.0 offset_right = 492.0 -offset_bottom = 296.0 +offset_bottom = 322.0 [connection signal="text_changed" from="VB/Grid/OutputPath/HeightmapPathLineEdit" to="." method="_on_HeightmapPathLineEdit_text_changed"] [connection signal="pressed" from="VB/Grid/OutputPath/HeightmapPathBrowseButton" to="." method="_on_HeightmapPathBrowseButton_pressed"] diff --git a/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn b/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn index fc1f614b..12f3d4a9 100644 --- a/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn +++ b/addons/zylann.hterrain/tools/generate_mesh_dialog.tscn @@ -6,7 +6,6 @@ [node name="GenerateMeshDialog" type="AcceptDialog"] title = "Generate full mesh" size = Vector2i(448, 234) -visible = true min_size = Vector2i(448, 186) script = ExtResource("1") diff --git a/addons/zylann.hterrain/tools/importer/importer_dialog.tscn b/addons/zylann.hterrain/tools/importer/importer_dialog.tscn index 0c5545ef..0c2d267b 100644 --- a/addons/zylann.hterrain/tools/importer/importer_dialog.tscn +++ b/addons/zylann.hterrain/tools/importer/importer_dialog.tscn @@ -7,7 +7,6 @@ [node name="WindowDialog" type="AcceptDialog"] title = "Import maps" size = Vector2i(500, 433) -visible = true min_size = Vector2i(500, 380) script = ExtResource("1") diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn index db737b33..f69c89a5 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.tscn @@ -20,7 +20,6 @@ shader = ExtResource("2") [node name="TextureSetEditor" type="AcceptDialog"] title = "TextureSet Editor" size = Vector2i(666, 341) -visible = true min_size = Vector2i(652, 320) script = ExtResource("1") diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn index 71f7c651..549f7a17 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.tscn @@ -7,7 +7,6 @@ [node name="TextureSetImportEditor" type="AcceptDialog"] title = "Texture Set Import Tool" size = Vector2i(652, 623) -visible = true min_size = Vector2i(652, 480) script = ExtResource("4") @@ -18,7 +17,7 @@ anchor_bottom = 1.0 offset_left = 8.0 offset_top = 8.0 offset_right = -8.0 -offset_bottom = -49.0 +offset_bottom = -18.0 [node name="HS" type="HSplitContainer" parent="Import"] layout_mode = 2 @@ -200,7 +199,7 @@ anchors_preset = 0 offset_left = 8.0 offset_top = 8.0 offset_right = 644.0 -offset_bottom = 574.0 +offset_bottom = 605.0 [connection signal="item_selected" from="Import/HS/VB/SlotsList" to="." method="_on_SlotsList_item_selected"] [connection signal="pressed" from="Import/HS/VB/HB/AddSlotButton" to="." method="_on_AddSlotButton_pressed"] From f7ecefdca7ec294247e4f2f2b596bee3e0f03894 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:30:49 +0000 Subject: [PATCH 44/94] I guess `about_to_show` was renamed `about_to_popup` --- addons/zylann.hterrain/tools/plugin.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index d7d88187..814cfc95 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -150,7 +150,7 @@ func _enter_tree(): menu.get_popup().add_separator() _lookdev_menu = PopupMenu.new() _lookdev_menu.name = "LookdevMenu" - _lookdev_menu.about_to_show.connect(_on_lookdev_menu_about_to_show) + _lookdev_menu.about_to_popup.connect(_on_lookdev_menu_about_to_show) _lookdev_menu.id_pressed.connect(_on_lookdev_menu_id_pressed) menu.get_popup().add_child(_lookdev_menu) menu.get_popup().add_submenu_item("Lookdev", _lookdev_menu.name, MENU_LOOKDEV) From d90d52676c42a5760998478fa838b3501772536e Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 22 Mar 2023 22:35:16 +0000 Subject: [PATCH 45/94] Fix some static typing errors --- addons/zylann.hterrain/tools/brush/brush.gd | 8 ++++---- addons/zylann.hterrain/tools/brush/terrain_painter.gd | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/brush.gd b/addons/zylann.hterrain/tools/brush/brush.gd index 07cca31c..678e10c3 100644 --- a/addons/zylann.hterrain/tools/brush/brush.gd +++ b/addons/zylann.hterrain/tools/brush/brush.gd @@ -27,8 +27,8 @@ var _pressure_over_opacity := 0.5 # TODO Rename stamp_*? var _frequency_distance := 0.0 var _frequency_time_ms := 0 -# Array of greyscale Textures -var _shapes := [] +# Array of greyscale textures +var _shapes : Array[Texture2D] = [] var _shape_index := 0 var _prev_position := Vector2(-999, -999) @@ -105,11 +105,11 @@ func get_frequency_time_ms() -> int: return _frequency_time_ms -func set_shapes(shapes: Array): +func set_shapes(shapes: Array[Texture2D]): assert(len(shapes) >= 1) for s in shapes: assert(s != null) - assert(s is Texture) + assert(s is Texture2D) _shapes = shapes.duplicate(false) if _shape_index >= len(_shapes): _shape_index = len(_shapes) - 1 diff --git a/addons/zylann.hterrain/tools/brush/terrain_painter.gd b/addons/zylann.hterrain/tools/brush/terrain_painter.gd index c7c103b2..c65b9ebc 100644 --- a/addons/zylann.hterrain/tools/brush/terrain_painter.gd +++ b/addons/zylann.hterrain/tools/brush/terrain_painter.gd @@ -81,7 +81,7 @@ func set_brush_size(s: int): # p.set_brush_size(_brush_size) -func set_brush_texture(texture: Texture): +func set_brush_texture(texture: Texture2D): _brush.set_shapes([texture]) # for p in _painters: # p.set_brush_texture(texture) From 242ae54e0e22e95f6b5007f99b32f4234c368c07 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 19:37:18 +0000 Subject: [PATCH 46/94] Updated brush shaders to use RGB8 heightmap encoding --- .../tools/brush/shaders/color.gdshader | 14 ++++++++++---- .../tools/brush/shaders/erode.gdshader | 12 +++++++++--- .../tools/brush/shaders/flatten.gdshader | 6 ++++-- .../tools/brush/shaders/level.gdshader | 12 +++++++++--- .../tools/brush/shaders/raise.gdshader | 6 ++++-- .../tools/brush/shaders/smooth.gdshader | 18 ++++++++++++------ .../tools/brush/shaders/splat16.gdshader | 14 ++++++++++---- .../tools/brush/shaders/splat4.gdshader | 14 ++++++++++---- 8 files changed, 68 insertions(+), 28 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/shaders/color.gdshader b/addons/zylann.hterrain/tools/brush/shaders/color.gdshader index 7a136ccb..b55cd698 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/color.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/color.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -14,12 +16,16 @@ vec2 get_src_uv(vec2 screen_uv) { return uv; } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + vec3 get_normal(sampler2D heightmap, vec2 pos) { vec2 ps = vec2(1.0) / vec2(textureSize(heightmap, 0)); - float hnx = texture(heightmap, pos + vec2(-ps.x, 0.0)).r; - float hpx = texture(heightmap, pos + vec2(ps.x, 0.0)).r; - float hny = texture(heightmap, pos + vec2(0.0, -ps.y)).r; - float hpy = texture(heightmap, pos + vec2(0.0, ps.y)).r; + float hnx = get_height(heightmap, pos + vec2(-ps.x, 0.0)); + float hpx = get_height(heightmap, pos + vec2(ps.x, 0.0)); + float hny = get_height(heightmap, pos + vec2(0.0, -ps.y)); + float hpy = get_height(heightmap, pos + vec2(0.0, ps.y)); return normalize(vec3(hnx - hpx, 2.0, hpy - hny)); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader index 4cdbe6d2..ff8983f4 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader @@ -1,5 +1,7 @@ shader_type canvas_item; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -14,6 +16,10 @@ vec2 get_src_uv(vec2 screen_uv) { // return fract(sin(dot(pos.xy ,vec2(12.9898,78.233))) * 43758.5453); // } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + float erode(sampler2D heightmap, vec2 uv, vec2 pixel_size, float weight) { float r = 3.0; @@ -21,7 +27,7 @@ float erode(sampler2D heightmap, vec2 uv, vec2 pixel_size, float weight) { // For this to work, filtering must be enabled. vec2 eps = pixel_size / (0.99 * r); - float h = texture(heightmap, uv).r; + float h = get_height(heightmap, uv); float eh = h; //float dh = h; @@ -30,7 +36,7 @@ float erode(sampler2D heightmap, vec2 uv, vec2 pixel_size, float weight) { for (float x = -r; x <= r; ++x) { vec2 p = vec2(x, y); - float nh = texture(heightmap, uv + p * eps).r; + float nh = get_height(heightmap, uv + p * eps); float s = max(length(p) - r, 0); eh = min(eh, nh + s); @@ -53,5 +59,5 @@ void fragment() { vec2 src_pixel_size = 1.0 / vec2(textureSize(u_src_texture, 0)); float ph = erode(u_src_texture, get_src_uv(SCREEN_UV), src_pixel_size, brush_value); //ph += brush_value * 0.35; - COLOR = vec4(ph, ph, ph, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(ph), 1.0); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader b/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader index c89a9e9a..0690abe9 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -14,7 +16,7 @@ vec2 get_src_uv(vec2 screen_uv) { void fragment() { float brush_value = u_opacity * texture(TEXTURE, UV).r; - float src_h = texture(u_src_texture, get_src_uv(SCREEN_UV)).r; + float src_h = decode_height_from_rgb8_unorm(texture(u_src_texture, get_src_uv(SCREEN_UV)).rgb); float h = mix(src_h, u_flatten_value, brush_value); - COLOR = vec4(h, 0.0, 0.0, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/level.gdshader b/addons/zylann.hterrain/tools/brush/shaders/level.gdshader index 7a47d655..0fc3da5e 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/level.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/level.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -11,6 +13,10 @@ vec2 get_src_uv(vec2 screen_uv) { return uv; } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + // TODO Could actually level to whatever height the brush was at the beginning of the stroke? void fragment() { @@ -26,14 +32,14 @@ void fragment() { for (int j = 0; j < 5; ++j) { float x = mix(uv_min.x, uv_max.x, float(i) / 4.0); float y = mix(uv_min.y, uv_max.y, float(j) / 4.0); - float h = texture(u_src_texture, vec2(x, y)).r; + float h = get_height(u_src_texture, vec2(x, y)); dst_h += h; } } dst_h /= (5.0 * 5.0); // TODO I have no idea if this will check out - float src_h = texture(u_src_texture, get_src_uv(SCREEN_UV)).r; + float src_h = get_height(u_src_texture, get_src_uv(SCREEN_UV)); float h = mix(src_h, dst_h, brush_value); - COLOR = vec4(h, 0.0, 0.0, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader b/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader index eddc2ffc..506952c4 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -14,7 +16,7 @@ vec2 get_src_uv(vec2 screen_uv) { void fragment() { float brush_value = u_factor * u_opacity * texture(TEXTURE, UV).r; - float src_h = texture(u_src_texture, get_src_uv(SCREEN_UV)).r; + float src_h = decode_height_from_rgb8_unorm(texture(u_src_texture, get_src_uv(SCREEN_UV)).rgb); float h = src_h + brush_value; - COLOR = vec4(h, 0.0, 0.0, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader b/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader index bf5dcf6d..7c75933e 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -11,18 +13,22 @@ vec2 get_src_uv(vec2 screen_uv) { return uv; } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + void fragment() { float brush_value = u_factor * u_opacity * texture(TEXTURE, UV).r; vec2 src_pixel_size = 1.0 / vec2(textureSize(u_src_texture, 0)); vec2 src_uv = get_src_uv(SCREEN_UV); vec2 offset = src_pixel_size; - float src_nx = texture(u_src_texture, src_uv - vec2(offset.x, 0.0)).r; - float src_px = texture(u_src_texture, src_uv + vec2(offset.x, 0.0)).r; - float src_ny = texture(u_src_texture, src_uv - vec2(0.0, offset.y)).r; - float src_py = texture(u_src_texture, src_uv + vec2(0.0, offset.y)).r; - float src_h = texture(u_src_texture, src_uv).r; + float src_nx = get_height(u_src_texture, src_uv - vec2(offset.x, 0.0)); + float src_px = get_height(u_src_texture, src_uv + vec2(offset.x, 0.0)); + float src_ny = get_height(u_src_texture, src_uv - vec2(0.0, offset.y)); + float src_py = get_height(u_src_texture, src_uv + vec2(0.0, offset.y)); + float src_h = get_height(u_src_texture, src_uv); float dst_h = (src_h + src_nx + src_px + src_ny + src_py) * 0.2; float h = mix(src_h, dst_h, brush_value); - COLOR = vec4(h, 0.0, 0.0, 1.0); + COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader b/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader index ad28d7b9..d19c4031 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -21,12 +23,16 @@ float sum(vec4 v) { return v.x + v.y + v.z + v.w; } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + vec3 get_normal(sampler2D heightmap, vec2 pos) { vec2 ps = vec2(1.0) / vec2(textureSize(heightmap, 0)); - float hnx = texture(heightmap, pos + vec2(-ps.x, 0.0)).r; - float hpx = texture(heightmap, pos + vec2(ps.x, 0.0)).r; - float hny = texture(heightmap, pos + vec2(0.0, -ps.y)).r; - float hpy = texture(heightmap, pos + vec2(0.0, ps.y)).r; + float hnx = get_height(heightmap, pos + vec2(-ps.x, 0.0)); + float hpx = get_height(heightmap, pos + vec2(ps.x, 0.0)); + float hny = get_height(heightmap, pos + vec2(0.0, -ps.y)); + float hpy = get_height(heightmap, pos + vec2(0.0, ps.y)); return normalize(vec3(hnx - hpx, 2.0, hpy - hny)); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader b/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader index 186d5395..ef61d9e4 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; render_mode blend_disabled; +#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" + uniform sampler2D u_src_texture; uniform vec4 u_src_rect; uniform float u_opacity = 1.0; @@ -15,12 +17,16 @@ vec2 get_src_uv(vec2 screen_uv) { return uv; } +float get_height(sampler2D heightmap, vec2 uv) { + return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); +} + vec3 get_normal(sampler2D heightmap, vec2 pos) { vec2 ps = vec2(1.0) / vec2(textureSize(heightmap, 0)); - float hnx = texture(heightmap, pos + vec2(-ps.x, 0.0)).r; - float hpx = texture(heightmap, pos + vec2(ps.x, 0.0)).r; - float hny = texture(heightmap, pos + vec2(0.0, -ps.y)).r; - float hpy = texture(heightmap, pos + vec2(0.0, ps.y)).r; + float hnx = get_height(heightmap, pos + vec2(-ps.x, 0.0)); + float hpx = get_height(heightmap, pos + vec2(ps.x, 0.0)); + float hny = get_height(heightmap, pos + vec2(0.0, -ps.y)); + float hpy = get_height(heightmap, pos + vec2(0.0, ps.y)); return normalize(vec3(hnx - hpx, 2.0, hpy - hny)); } From 7cb4d8eaae1e28a7938e5580966ebf2f78a3d8ab Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 19:57:12 +0000 Subject: [PATCH 47/94] Fix remaining occurrences of old ShaderMaterial.get/set_shader_param --- addons/zylann.hterrain/hterrain.gd | 2 +- addons/zylann.hterrain/tools/minimap/minimap.gd | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index 4cd1c4ab..2e958eb9 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -1470,7 +1470,7 @@ func get_ground_texture_array(type: int) -> Texture2DArray: "HTerrain.get_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().get_texture_array(type) instead") var param_name = _get_ground_texture_array_shader_param_name(type) - return _material.get_shader_param(param_name) + return _material.get_shader_parameter(param_name) # @obsolete diff --git a/addons/zylann.hterrain/tools/minimap/minimap.gd b/addons/zylann.hterrain/tools/minimap/minimap.gd index 1084e5f1..0802d306 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap.gd +++ b/addons/zylann.hterrain/tools/minimap/minimap.gd @@ -115,8 +115,8 @@ func _update_normal_material(): # indicates that the editor keeps redrawing every frame, # which is not intented and consumes more power static func _set_if_changed(sm: ShaderMaterial, param: String, v): - if sm.get_shader_param(param) != v: - sm.set_shader_param(param, v) + if sm.get_shader_parameter(param) != v: + sm.set_shader_parameter(param, v) func _draw(): From db67a31172f8074f930965d461ee6951378121d2 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 19:57:35 +0000 Subject: [PATCH 48/94] Fix Spatial should be renamed Node3D in strings --- addons/zylann.hterrain/tools/plugin.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 814cfc95..070e1ec3 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -93,8 +93,8 @@ func _enter_tree(): var dpi_scale = get_editor_interface().get_editor_scale() _logger.debug(str("DPI scale: ", dpi_scale)) - add_custom_type("HTerrain", "Spatial", HTerrain, get_icon("heightmap_node")) - add_custom_type("HTerrainDetailLayer", "Spatial", HTerrainDetailLayer, + add_custom_type("HTerrain", "Node3D", HTerrain, get_icon("heightmap_node")) + add_custom_type("HTerrainDetailLayer", "Node3D", HTerrainDetailLayer, get_icon("detail_layer_node")) add_custom_type("HTerrainData", "Resource", HTerrainData, get_icon("heightmap_data")) # TODO Proper texture From f3c01e44579272d10eaf4b836946a03058a77f85 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 19:57:47 +0000 Subject: [PATCH 49/94] Some static typing --- addons/zylann.hterrain/hterrain.gd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index 2e958eb9..238485ce 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -1456,7 +1456,7 @@ func set_ground_texture(slot: int, type: int, tex: Texture): "HTerrain.set_ground_texture is obsolete, " + "use HTerrain.get_texture_set().set_texture(slot, type, texture) instead") assert(tex == null or tex is Texture) - var shader_param = _get_ground_texture_shader_param_name(type, slot) + var shader_param := _get_ground_texture_shader_param_name(type, slot) _material.set_shader_parameter(shader_param, tex) @@ -1469,7 +1469,7 @@ func get_ground_texture_array(type: int) -> Texture2DArray: _logger.error( "HTerrain.get_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().get_texture_array(type) instead") - var param_name = _get_ground_texture_array_shader_param_name(type) + var param_name := _get_ground_texture_array_shader_param_name(type) return _material.get_shader_parameter(param_name) @@ -1478,7 +1478,7 @@ func set_ground_texture_array(type: int, texture_array: Texture2DArray): _logger.error( "HTerrain.set_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().set_texture_array(type, texarray) instead") - var param_name = _get_ground_texture_array_shader_param_name(type) + var param_name := _get_ground_texture_array_shader_param_name(type) _material.set_shader_parameter(param_name, texture_array) From c3e42e1c059c184071633e002281b2d99139b8f7 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 20:07:19 +0000 Subject: [PATCH 50/94] Fix bottom panel layout --- .../tools/brush/brush_editor.tscn | 16 ++-- addons/zylann.hterrain/tools/panel.tscn | 76 ++++++++----------- 2 files changed, 40 insertions(+), 52 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/brush_editor.tscn b/addons/zylann.hterrain/tools/brush/brush_editor.tscn index f830a250..c245da4e 100644 --- a/addons/zylann.hterrain/tools/brush/brush_editor.tscn +++ b/addons/zylann.hterrain/tools/brush/brush_editor.tscn @@ -6,14 +6,15 @@ [sub_resource type="CanvasItemMaterial" id="1"] blend_mode = 1 -[node name="BrushEditor" type="Control"] -layout_mode = 3 -anchors_preset = 0 +[node name="BrushEditor" type="HBoxContainer"] +custom_minimum_size = Vector2(200, 0) +offset_right = 372.0 +offset_bottom = 167.0 script = ExtResource("1") [node name="BrushShapeButton" type="Button" parent="."] -layout_mode = 0 -anchor_bottom = 1.0 +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 [node name="TextureRect" type="TextureRect" parent="BrushShapeButton"] material = SubResource("1") @@ -22,11 +23,10 @@ anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 2 expand_mode = 1 -stretch_mode = 6 +stretch_mode = 5 [node name="GridContainer" type="GridContainer" parent="."] -layout_mode = 0 -anchor_right = 1.0 +layout_mode = 2 size_flags_horizontal = 3 columns = 2 diff --git a/addons/zylann.hterrain/tools/panel.tscn b/addons/zylann.hterrain/tools/panel.tscn index d1b97d22..c0f5b3a5 100644 --- a/addons/zylann.hterrain/tools/panel.tscn +++ b/addons/zylann.hterrain/tools/panel.tscn @@ -1,68 +1,56 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=7 format=3 uid="uid://dtdgawtpwfaft"] -[ext_resource path="res://addons/zylann.hterrain/tools/panel.gd" type="Script" id=1] -[ext_resource path="res://addons/zylann.hterrain/tools/brush/brush_editor.tscn" type="PackedScene" id=2] -[ext_resource path="res://addons/zylann.hterrain/tools/texture_editor/texture_editor.tscn" type="PackedScene" id=3] -[ext_resource path="res://addons/zylann.hterrain/tools/detail_editor/detail_editor.tscn" type="PackedScene" id=4] -[ext_resource path="res://addons/zylann.hterrain/tools/minimap/minimap.tscn" type="PackedScene" id=5] -[ext_resource path="res://addons/zylann.hterrain/tools/minimap/ratio_container.gd" type="Script" id=6] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/panel.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bd42ig216p216" path="res://addons/zylann.hterrain/tools/brush/brush_editor.tscn" id="2"] +[ext_resource type="PackedScene" path="res://addons/zylann.hterrain/tools/texture_editor/texture_editor.tscn" id="3"] +[ext_resource type="PackedScene" uid="uid://do3c3jse5p7hx" path="res://addons/zylann.hterrain/tools/detail_editor/detail_editor.tscn" id="4"] +[ext_resource type="PackedScene" uid="uid://cba6k3hrwhrke" path="res://addons/zylann.hterrain/tools/minimap/minimap.tscn" id="5"] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/minimap/ratio_container.gd" id="6"] [node name="Panel" type="Control"] -margin_right = 881.0 -margin_bottom = 120.0 -rect_min_size = Vector2( 400, 120 ) -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +custom_minimum_size = Vector2(400, 120) +layout_mode = 3 +anchors_preset = 0 +offset_right = 881.0 +offset_bottom = 120.0 +script = ExtResource("1") [node name="HSplitContainer" type="HSplitContainer" parent="."] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 4.0 -margin_right = -6.0 -margin_bottom = -4.0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = -6.0 +offset_bottom = -4.0 split_offset = 60 -__meta__ = { -"_edit_use_anchors_": false -} -[node name="BrushEditor" parent="HSplitContainer" instance=ExtResource( 2 )] -margin_right = 260.0 -margin_bottom = 112.0 +[node name="BrushEditor" parent="HSplitContainer" instance=ExtResource("2")] +layout_mode = 2 [node name="HSplitContainer" type="HSplitContainer" parent="HSplitContainer"] -margin_left = 272.0 -margin_right = 871.0 -margin_bottom = 112.0 +layout_mode = 2 [node name="HSplitContainer" type="HSplitContainer" parent="HSplitContainer/HSplitContainer"] -margin_right = 487.0 -margin_bottom = 112.0 +layout_mode = 2 size_flags_horizontal = 3 split_offset = 150 -[node name="TextureEditor" parent="HSplitContainer/HSplitContainer/HSplitContainer" instance=ExtResource( 3 )] -margin_right = 250.0 -margin_bottom = 112.0 +[node name="TextureEditor" parent="HSplitContainer/HSplitContainer/HSplitContainer" instance=ExtResource("3")] +layout_mode = 2 size_flags_horizontal = 1 -[node name="DetailEditor" parent="HSplitContainer/HSplitContainer/HSplitContainer" instance=ExtResource( 4 )] -margin_left = 262.0 -margin_right = 487.0 -margin_bottom = 112.0 +[node name="DetailEditor" parent="HSplitContainer/HSplitContainer/HSplitContainer" instance=ExtResource("4")] +layout_mode = 2 [node name="MinimapContainer" type="Container" parent="HSplitContainer/HSplitContainer"] -margin_left = 499.0 -margin_right = 599.0 -margin_bottom = 112.0 -rect_min_size = Vector2( 100, 0 ) -script = ExtResource( 6 ) -ratio = 1.0 +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +script = ExtResource("6") + +[node name="Minimap" parent="HSplitContainer/HSplitContainer/MinimapContainer" instance=ExtResource("5")] +layout_mode = 2 -[node name="Minimap" parent="HSplitContainer/HSplitContainer/MinimapContainer" instance=ExtResource( 5 )] -margin_bottom = 100.0 [connection signal="edit_pressed" from="HSplitContainer/HSplitContainer/HSplitContainer/TextureEditor" to="." method="_on_TextureEditor_edit_pressed"] [connection signal="import_pressed" from="HSplitContainer/HSplitContainer/HSplitContainer/TextureEditor" to="." method="_on_TextureEditor_import_pressed"] [connection signal="texture_selected" from="HSplitContainer/HSplitContainer/HSplitContainer/TextureEditor" to="." method="_on_TextureEditor_texture_selected"] From 893964285ad397c1eb6e228e1ef866f1b51a16d0 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 20:13:03 +0000 Subject: [PATCH 51/94] Fix redundant connect --- addons/zylann.hterrain/tools/brush/decal.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/brush/decal.gd b/addons/zylann.hterrain/tools/brush/decal.gd index 781c986f..13433ed7 100644 --- a/addons/zylann.hterrain/tools/brush/decal.gd +++ b/addons/zylann.hterrain/tools/brush/decal.gd @@ -58,7 +58,7 @@ func set_terrain(terrain: HTerrain): return if _terrain != null: - _terrain.transform_changed.connect(_on_terrain_transform_changed) + _terrain.transform_changed.disconnect(_on_terrain_transform_changed) _mesh_instance.exit_world() #_debug_mesh_instance.exit_world() From d92faa441e7b00ff21e7cd93ee1cbbe441547f88 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 20:20:12 +0000 Subject: [PATCH 52/94] Fix Vector2i/Vector2 mismatch --- addons/zylann.hterrain/tools/plugin.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 070e1ec3..e9a8fa93 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -430,8 +430,8 @@ func _make_visible(visible: bool): func _get_pointed_cell_position(mouse_position: Vector2, p_camera: Camera3D):# -> Vector2: # Need to do an extra conversion in case the editor viewport is in half-resolution mode var viewport := p_camera.get_viewport() - var viewport_container = viewport.get_parent() - var screen_pos = mouse_position * viewport.size / viewport_container.size + var viewport_container : Control = viewport.get_parent() + var screen_pos = mouse_position * Vector2(viewport.size) / viewport_container.size var origin = p_camera.project_ray_origin(screen_pos) var dir = p_camera.project_ray_normal(screen_pos) From 8412434b7ae6a37a1f04bc50fb03afc3f35b89b7 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:07:54 +0000 Subject: [PATCH 53/94] Fix error when opening an image dialog from the brush settings dialog --- .../tools/brush/settings_dialog/brush_settings_dialog.gd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd index af7e17db..c2ed4763 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd @@ -64,7 +64,11 @@ func setup_dialogs(base_control: Node): _load_image_dialog.current_dir = HT_Brush.SHAPES_DIR _load_image_dialog.file_selected.connect(_on_LoadImageDialog_file_selected) _load_image_dialog.files_selected.connect(_on_LoadImageDialog_files_selected) - base_control.add_child(_load_image_dialog) + #base_control.add_child(_load_image_dialog) + # When a dialog opens another dialog, we get this error: + # "Transient parent has another exclusive child." + # Which is worked around by making the other dialog a child of the first one (I don't know why) + add_child(_load_image_dialog) func _exit_tree(): From b7233bf5073d318dec415654a814948005c98f70 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:08:07 +0000 Subject: [PATCH 54/94] Some static typing --- addons/zylann.hterrain/hterrain_chunk.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/hterrain_chunk.gd b/addons/zylann.hterrain/hterrain_chunk.gd index 28d06a40..400a0570 100644 --- a/addons/zylann.hterrain/hterrain_chunk.gd +++ b/addons/zylann.hterrain/hterrain_chunk.gd @@ -26,7 +26,7 @@ func _init(p_parent: Node3D, p_cell_x: int, p_cell_y: int, p_material: Material) cell_origin_x = p_cell_x cell_origin_y = p_cell_y - var rs = RenderingServer + var rs := RenderingServer _mesh_instance = rs.instance_create() @@ -56,7 +56,7 @@ func is_active() -> bool: return _active -func set_active(a): +func set_active(a: bool): _active = a From a42ec97774018b4ba63de82c8c1e0ff9fc136c6e Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:09:49 +0000 Subject: [PATCH 55/94] Fix minimap context menu --- addons/zylann.hterrain/tools/minimap/minimap.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/minimap/minimap.gd b/addons/zylann.hterrain/tools/minimap/minimap.gd index 0802d306..477626a6 100644 --- a/addons/zylann.hterrain/tools/minimap/minimap.gd +++ b/addons/zylann.hterrain/tools/minimap/minimap.gd @@ -65,7 +65,7 @@ func _gui_input(event: InputEvent): if event.pressed: match event.button_index: MOUSE_BUTTON_RIGHT: - _popup_menu.rect_position = get_global_mouse_position() + _popup_menu.position = get_screen_position() + event.position _popup_menu.popup() MOUSE_BUTTON_LEFT: # Teleport there? From 75400332b9f7bb497d07d1e8e1a35ad8e563ad20 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:10:49 +0000 Subject: [PATCH 56/94] Fix default value of heightmap pixels, 0 would have meant very deep down --- addons/zylann.hterrain/hterrain_data.gd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index be26b45f..57b34c1a 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -32,7 +32,10 @@ const _map_types = { filter = true, mipmaps = false, texture_format = Image.FORMAT_RGB8, - default_fill = null, + # Should have been encode_height_to_rgb8_unorm(0.0), but Godot 4 doesn't take static + # function results in constant dictionaries... also beware of not taking this constant + # by printing a Color directly, Godot rounds it. Instead print components separately. + default_fill = Color(0, 0, 0.50196081399918, 1), default_count = 1, can_be_saved_as_png = false, authored = true, From f43c27a0bf067c591c0d5c68516f17c9334deea4 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:13:28 +0000 Subject: [PATCH 57/94] Save heightmap as PNG, import it as Image by default --- addons/zylann.hterrain/hterrain_data.gd | 163 ++++++++++++------------ 1 file changed, 83 insertions(+), 80 deletions(-) diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index 57b34c1a..0fa29306 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -37,7 +37,7 @@ const _map_types = { # by printing a Color directly, Godot rounds it. Instead print components separately. default_fill = Color(0, 0, 0.50196081399918, 1), default_count = 1, - can_be_saved_as_png = false, + can_be_saved_as_png = true, authored = true, srgb = false }, @@ -1110,7 +1110,9 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: return true -static func _try_write_default_import_options(fpath: String, channel: int, logger): +static func _try_write_default_import_options( + fpath: String, channel: int, logger: HT_Logger.HT_LoggerBase): + var imp_fpath := fpath + ".import" if FileAccess.file_exists(imp_fpath): # Already exists @@ -1118,43 +1120,58 @@ static func _try_write_default_import_options(fpath: String, channel: int, logge var map_info = _map_types[channel] var srgb: bool = map_info.srgb - - var defaults = { - "remap": { - "importer": "texture", - "type": "CompressedTexture2D" - }, - "deps": { - "source_file": fpath - }, - "params": { - # Use lossless compression. - # Lossy ruins quality and makes the editor choke on big textures. - # TODO I would have used ImageTexture.COMPRESS_LOSSLESS, - # but apparently what is saved in the .import file does not match, - # and rather corresponds TO THE UI IN THE IMPORT DOCK :facepalm: - "compress/mode": 0, - - "compress/hdr_compression": 0, - "compress/normal_map": 0, - # No mipmaps - "mipmaps/limit": 0, - - # Most textures aren't color. - # Same here, this is mapping something from the import dock UI, - # and doesn't have any enum associated, just raw numbers in C++ code... - # 0 = "disabled", 1 = "enabled", 2 = "detect" - "flags/srgb": 2 if srgb else 0, - - # No need for this, the meaning of alpha is never transparency - "process/fix_alpha_border": false, - - # Don't try to be smart. - # This can actually overwrite the settings with defaults... - # https://github.com/godotengine/godot/issues/24220 - "detect_3d/compress_to": 0, + + var defaults : Dictionary + + if channel == CHANNEL_HEIGHT: + defaults = { + "remap": { + # Have the heightmap editable as an image by default + "importer": "image", + "type": "Image" + }, + "deps": { + "source_file": fpath + } + } + + else: + defaults = { + "remap": { + "importer": "texture", + "type": "CompressedTexture2D" + }, + "deps": { + "source_file": fpath + }, + "params": { + # Use lossless compression. + # Lossy ruins quality and makes the editor choke on big textures. + # TODO I would have used ImageTexture.COMPRESS_LOSSLESS, + # but apparently what is saved in the .import file does not match, + # and rather corresponds TO THE UI IN THE IMPORT DOCK :facepalm: + "compress/mode": 0, + + "compress/hdr_compression": 0, + "compress/normal_map": 0, + # No mipmaps + "mipmaps/limit": 0, + + # Most textures aren't color. + # Same here, this is mapping something from the import dock UI, + # and doesn't have any enum associated, just raw numbers in C++ code... + # 0 = "disabled", 1 = "enabled", 2 = "detect" + "flags/srgb": 2 if srgb else 0, + + # No need for this, the meaning of alpha is never transparency + "process/fix_alpha_border": false, + + # Don't try to be smart. + # This can actually overwrite the settings with defaults... + # https://github.com/godotengine/godot/issues/24220 + "detect_3d/compress_to": 0, + } } - } HT_Util.write_import_file(defaults, imp_fpath, logger) @@ -1175,57 +1192,43 @@ func _load_map(dir: String, map_type: int, index: int) -> bool: if _channel_can_be_saved_as_png(map_type): fpath += ".png" - # In this particular case, we can use Godot ResourceLoader directly, - # if the texture got imported. - - var tex = load(fpath) - - var must_load_image_in_editor := true - - if tex != null and tex is Image: - # The texture is imported as Image, - # perhaps the user wants it to be accessible from RAM in game. - _logger.debug("Map {0} is imported as Image. An ImageTexture will be generated." \ - .format([get_map_debug_name(map_type, index)])) - map.image = tex - tex = ImageTexture.create_from_image(map.image) - must_load_image_in_editor = false - - map.texture = tex - - if Engine.is_editor_hint(): - if must_load_image_in_editor: - # But in the editor we want textures to be editable, - # so we have to automatically load the data also in RAM - if map.image == null: - map.image = Image.load_from_file(fpath) - else: - map.image.load(fpath) - _ensure_map_format(map.image, map_type, index) - else: - # The heightmap is different. - # It has often uses beyond graphics, so we always keep a RAM copy by default. - fpath += ".res" - var im : Image = load(fpath) - - if im == null: - _logger.error("Could not load '{0}'".format([fpath])) - return false - - _resolution = im.get_width() - - map.image = im + + var tex = load(fpath) + + var must_load_image_in_editor := true + + if tex != null and tex is Image: + # The texture is imported as Image, + # perhaps the user wants it to be accessible from RAM in game. + _logger.debug("Map {0} is imported as Image. An ImageTexture will be generated." \ + .format([get_map_debug_name(map_type, index)])) + map.image = tex + tex = ImageTexture.create_from_image(map.image) + must_load_image_in_editor = false + + map.texture = tex + + if Engine.is_editor_hint(): + if must_load_image_in_editor: + # But in the editor we want textures to be editable, + # so we have to automatically load the data also in RAM + if map.image == null: + map.image = Image.load_from_file(fpath) + else: + map.image.load(fpath) _ensure_map_format(map.image, map_type, index) - _upload_channel(map_type, index) + + if map_type == CHANNEL_HEIGHT: + _resolution = map.image.get_width() return true func _ensure_map_format(im: Image, map_type: int, index: int): var format := im.get_format() - var expected_format = _map_types[map_type].texture_format + var expected_format : int = _map_types[map_type].texture_format if format != expected_format: _logger.warn("Map {0} loaded as format {1}, expected {2}. Will be converted." \ .format([get_map_debug_name(map_type, index), format, expected_format])) From 5b9b0b1e6104e178113bc2a8470889d9b961b535 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:28:24 +0000 Subject: [PATCH 58/94] Fix typing error when using a brush --- addons/zylann.hterrain/tools/brush/terrain_painter.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/brush/terrain_painter.gd b/addons/zylann.hterrain/tools/brush/terrain_painter.gd index c65b9ebc..0d7f5618 100644 --- a/addons/zylann.hterrain/tools/brush/terrain_painter.gd +++ b/addons/zylann.hterrain/tools/brush/terrain_painter.gd @@ -37,7 +37,7 @@ class HT_ModifiedMap: signal flatten_height_changed -var _painters := [] +var _painters : Array[HT_Painter] = [] var _brush := HT_Brush.new() From c490217d75b301847f40c4a0a343df164c837ed3 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:29:09 +0000 Subject: [PATCH 59/94] Fix some occurrences of Button.pressed that should be button_pressed --- addons/zylann.hterrain/tools/exporter/export_image_dialog.gd | 2 +- addons/zylann.hterrain/tools/plugin.gd | 4 ++-- addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 014c37d3..07f58625 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -189,7 +189,7 @@ func _on_CancelButton_pressed(): func _on_ExportButton_pressed(): if _export(): hide() - if _show_in_explorer_checkbox.pressed: + if _show_in_explorer_checkbox.button_pressed: OS.shell_open(_output_path_line_edit.text.strip_edges().get_base_dir()) diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index e9a8fa93..5656cb6c 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -390,7 +390,7 @@ func _update_brush_buttons_availability(): button.disabled = false else: var button = _toolbar_brush_buttons[HT_TerrainPainter.MODE_DETAIL] - if button.pressed: + if button.button_pressed: _select_brush_mode(HT_TerrainPainter.MODE_RAISE) button.disabled = true @@ -728,7 +728,7 @@ func _on_detail_selected(index: int): func _select_brush_mode(mode: int): - _toolbar_brush_buttons[mode].pressed = true + _toolbar_brush_buttons[mode].button_pressed = true _on_mode_selected(mode) diff --git a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd index 6e3d2a2a..617e457e 100644 --- a/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd +++ b/addons/zylann.hterrain/tools/resize_dialog/resize_dialog.gd @@ -148,7 +148,7 @@ func _on_StretchCheckBox_toggled(button_pressed: bool): func _on_ApplyButton_pressed(): - var stretch = _stretch_checkbox.pressed + var stretch = _stretch_checkbox.button_pressed var res = _resolutions[_resolution_dropdown.get_selected_id()] var dir = _anchor_dirs[_selected_anchor] _apply(res, stretch, Vector2(dir[0], dir[1])) From 757abddcf778d4dbe0ed92e01b93ef8834e9e37a Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 23 Mar 2023 22:29:24 +0000 Subject: [PATCH 60/94] This has changed for some reason --- addons/zylann.hterrain/tools/icons/white.png.import | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/zylann.hterrain/tools/icons/white.png.import b/addons/zylann.hterrain/tools/icons/white.png.import index 53fbf121..a0d73bfb 100644 --- a/addons/zylann.hterrain/tools/icons/white.png.import +++ b/addons/zylann.hterrain/tools/icons/white.png.import @@ -3,25 +3,26 @@ importer="texture" type="CompressedTexture2D" uid="uid://dnee27oabcvy2" -path="res://.godot/imported/white.png-06b7d7f95e74cd7f8357ec25a73870fb.ctex" +path.s3tc="res://.godot/imported/white.png-06b7d7f95e74cd7f8357ec25a73870fb.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://addons/zylann.hterrain/tools/icons/white.png" -dest_files=["res://.godot/imported/white.png-06b7d7f95e74cd7f8357ec25a73870fb.ctex"] +dest_files=["res://.godot/imported/white.png-06b7d7f95e74cd7f8357ec25a73870fb.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +32,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 From 26db52ef1339a395ecba7ae3177cf621dba884c3 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 00:07:29 +0000 Subject: [PATCH 61/94] Fix image cache so undo/redo works with terrain edits --- .../zylann.hterrain/util/image_file_cache.gd | 69 +++++++++++++------ 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/addons/zylann.hterrain/util/image_file_cache.gd b/addons/zylann.hterrain/util/image_file_cache.gd index bccc12c8..c502698f 100644 --- a/addons/zylann.hterrain/util/image_file_cache.gd +++ b/addons/zylann.hterrain/util/image_file_cache.gd @@ -11,8 +11,11 @@ # When the application or plugin is closed, the files get cleared. const HT_Logger = preload("./logger.gd") +const HT_Errors = preload("./errors.gd") const CACHE_FILE_SIZE_THRESHOLD = 1048576 +# For debugging +const USE_THREAD = true var _cache_dir := "" var _next_id := 0 @@ -40,9 +43,11 @@ func _init(cache_dir: String): if not DirAccess.dir_exists_absolute(_cache_dir): var err := DirAccess.make_dir_absolute(_cache_dir) if err != OK: - _logger.error("Could not create directory {0}, error {1}".format([_cache_dir, err])) + _logger.error("Could not create directory {0}: {1}" \ + .format([_cache_dir, HT_Errors.get_message(err)])) _save_thread_running = true - _saving_thread.start(_save_thread_func) + if USE_THREAD: + _saving_thread.start(_save_thread_func) # TODO Cannot cleanup the cache in destructor! @@ -53,14 +58,16 @@ func _notification(what: int): #clear() _save_thread_running = false _save_semaphore.post() - _saving_thread.wait_to_finish() + if USE_THREAD: + _saving_thread.wait_to_finish() func _create_new_cache_file(fpath: String): var f := FileAccess.open(fpath, FileAccess.WRITE) if f == null: var err = FileAccess.get_open_error() - _logger.error("Failed to create new cache file {0}, error {1}".format([fpath, err])) + _logger.error("Failed to create new cache file {0}: {1}" \ + .format([fpath, HT_Errors.get_message(err)])) return @@ -105,6 +112,13 @@ func save_image(im: Image) -> int: _save_semaphore.post() + if not USE_THREAD: + var before = Time.get_ticks_msec() + while len(_save_queue) > 0: + _save_thread_func() + if Time.get_ticks_msec() - before > 10_000: + _logger.error("Taking to long to empty save queue in non-threaded mode!") + return id @@ -151,8 +165,8 @@ func load_image(id: int) -> Image: var f := FileAccess.open(fpath, FileAccess.READ) if f == null: var err := FileAccess.get_open_error() - _logger.error("Could not load cached image from {0}, error {1}" \ - .format([fpath, err])) + _logger.error("Could not load cached image from {0}: {1}" \ + .format([fpath, HT_Errors.get_message(err)])) return null f.seek(info.data_offset) @@ -180,7 +194,7 @@ func clear(): if err != OK: _logger.error("Could not start list_dir_begin in '{0}'".format([_cache_dir])) return - + # Delete all cache files while true: var fpath := dir.get_next() @@ -190,30 +204,33 @@ func clear(): _logger.debug(str("Deleting ", fpath)) err = dir.remove(fpath) if err != OK: - _logger.error("Failed to delete cache file '{0}'" \ - .format([_cache_dir.path_join(fpath)])) + _logger.error("Failed to delete cache file '{0}': {1}" \ + .format([_cache_dir.path_join(fpath), HT_Errors.get_message(err)])) _cache_image_info.clear() -func _save_thread_func(_unused_userdata): - # Threads keep a reference to the function they run. - # So if it's a Reference, and that reference owns the thread... we get a cycle. +func _save_thread_func(): + # TODO Is this still true in Godot 4? + # Threads keep a reference to the object of the function they run. + # So if the object is a Reference, and that reference owns the thread... we get a cycle. # We can break the cycle by removing 1 to the count inside the thread. # The thread's reference will never die unexpectedly because we stop and destroy the thread # in the destructor of the reference. # If that workaround explodes one day, another way could be to use an intermediary instance # extending Object, and run a function on that instead - unreference() + if USE_THREAD: + unreference() while _save_thread_running: _save_queue_mutex.lock() var to_save := _save_queue.duplicate(false) _save_queue.clear() _save_queue_mutex.unlock() - + if len(to_save) == 0: - _save_semaphore.wait() + if USE_THREAD: + _save_semaphore.wait() continue var f : FileAccess @@ -223,23 +240,33 @@ func _save_thread_func(_unused_userdata): # Keep re-using the same file if we did not change path. # It makes I/Os faster. if item.path != path: + # Close previous file f = null - path = "" + + path = item.path f = FileAccess.open(path, FileAccess.READ_WRITE) if f == null: - var err = FileAccess.get_open_error() - call_deferred("_on_error", "Could not open file {0}, error {1}" \ - .format([path, err])) + var err := FileAccess.get_open_error() + call_deferred("_on_error", "Could not open file {0}: {1}" \ + .format([path, HT_Errors.get_message(err)])) + path = "" continue - - path = item.path f.seek(item.data_offset) _write_image(f, item.image) # Notify main thread. # The thread does not modify data, only reads it. call_deferred("_on_image_saved", item) + + # Workaround some weird behavior in Godot 4: + # when the next loop runs, `f` IS NOT CLEANED UP. A reference is still held before `var f` + # is reached, which means the file is still locked while the thread is waiting on the + # semaphore... so I have to explicitely "close" the file here. + f = null + + if not USE_THREAD: + break func _on_error(msg: String): From dfb6102957d923705c8f6a44fad4f403884230c2 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 19:28:58 +0000 Subject: [PATCH 62/94] Increase base factor of smooth brush --- addons/zylann.hterrain/tools/brush/terrain_painter.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/brush/terrain_painter.gd b/addons/zylann.hterrain/tools/brush/terrain_painter.gd index 0d7f5618..81891b63 100644 --- a/addons/zylann.hterrain/tools/brush/terrain_painter.gd +++ b/addons/zylann.hterrain/tools/brush/terrain_painter.gd @@ -351,7 +351,7 @@ func _paint_smooth(data: HTerrainData, position: Vector2): var p : HT_Painter = _painters[0] p.set_brush_shader(HT_SmoothShader) - p.set_brush_shader_param("u_factor", (10.0 / 60.0)) + p.set_brush_shader_param("u_factor", 1.0) p.set_image(image, texture) p.paint_input(position) From d382c27c07bb418214d7b77e448ebfc942ab9993 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 20:48:21 +0000 Subject: [PATCH 63/94] Fix invalid field --- .../texture_editor/set_editor/texture_set_import_editor.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index cd318fe4..eb419b69 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -632,7 +632,7 @@ func _on_ImportButton_pressed(): if _WRITE_IMPORT_FILES: for fd in files_data: var import_fpath = fd.path + ".import" - if not HT_Util.write_import_file(fd.import_data, import_fpath, _logger): + if not HT_Util.write_import_file(fd.import_file_data, import_fpath, _logger): _show_error("Failed to write file {0}: {1}".format([import_fpath])) return From 87477f9f42b7ec9e9667ebff91c96d202b816d97 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 20:53:10 +0000 Subject: [PATCH 64/94] Fix further dialogs that popup other dialogs. Had to make the progress window not shared, because the new constraints of Godot 4 makes it quite dirty. --- .../tools/exporter/export_image_dialog.gd | 2 +- .../tools/generator/generator_dialog.gd | 17 ++++++++-- addons/zylann.hterrain/tools/plugin.gd | 31 ++++++------------- .../zylann.hterrain/tools/progress_window.gd | 18 ++++++++++- .../set_editor/texture_set_editor.gd | 6 ++-- .../set_editor/texture_set_import_editor.gd | 10 +++--- 6 files changed, 50 insertions(+), 34 deletions(-) diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 07f58625..042d48a5 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -59,7 +59,7 @@ func setup_dialogs(base_control: Control): fd.unresizable = false fd.access = EditorFileDialog.ACCESS_FILESYSTEM fd.file_selected.connect(_on_FileDialog_file_selected) - base_control.add_child(fd) + add_child(fd) _file_dialog = fd _update_file_extension() diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 877bfb91..ce6b285b 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -11,12 +11,15 @@ const HT_Logger = preload("../../util/logger.gd") const HT_ImageFileCache = preload("../../util/image_file_cache.gd") const HT_Inspector = preload("../inspector/inspector.gd") const HT_TerrainPreview = preload("../terrain_preview.gd") +const HT_ProgressWindow = preload("../progress_window.gd") + +const HT_ProgressWindowScene = preload("../progress_window.tscn") # TODO Power of two is assumed here. # I wonder why it doesn't have the off by one terrain textures usually have const MAX_VIEWPORT_RESOLUTION = 512 -signal progress_notified(info) # { "progress": real, "message": string, "finished": bool } +#signal progress_notified(info) # { "progress": real, "message": string, "finished": bool } @onready var _inspector_container : Control = $VBoxContainer/Editor/Settings @onready var _inspector : HT_Inspector = $VBoxContainer/Editor/Settings/Inspector @@ -34,6 +37,7 @@ var _image_cache : HT_ImageFileCache = null var _undo_redo_manager : EditorUndoRedoManager var _logger := HT_Logger.get_for(self) var _viewport_resolution := MAX_VIEWPORT_RESOLUTION +var _progress_window : HT_ProgressWindow static func get_shader(shader_name: String) -> Shader: @@ -45,6 +49,9 @@ static func get_shader(shader_name: String) -> Shader: func _init(): # Godot 4 does not have a plain WindowDialog class... there is Window but it's too unfriendly... get_ok_button().hide() + + _progress_window = HT_ProgressWindowScene.instantiate() + add_child(_progress_window) func _ready(): @@ -467,7 +474,7 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): Rect2i(0, 0, image.get_width(), image.get_height()), \ info.sector * _viewport_resolution) - progress_notified.emit({ + _notify_progress({ "progress": info.progress, "message": "Calculating sector (" + str(info.sector.x) + ", " + str(info.sector.y) + ")" @@ -504,6 +511,10 @@ func _on_TextureGenerator_completed(): undo_redo.commit_action() data._edit_set_disable_apply_undo(false) - progress_notified.emit({ "finished": true }) + _notify_progress({ "finished": true }) _logger.debug("Done") + +func _notify_progress(info: Dictionary): + _progress_window.handle_progress(info) + diff --git a/addons/zylann.hterrain/tools/plugin.gd b/addons/zylann.hterrain/tools/plugin.gd index 5656cb6c..741ce8d0 100644 --- a/addons/zylann.hterrain/tools/plugin.gd +++ b/addons/zylann.hterrain/tools/plugin.gd @@ -21,6 +21,7 @@ const HT_GeneratorDialog = preload("./generator/generator_dialog.gd") const HT_TextureSetEditor = preload("./texture_editor/set_editor/texture_set_editor.gd") const HT_TextureSetImportEditor = \ preload("./texture_editor/set_editor/texture_set_import_editor.gd") +const HT_ProgressWindow = preload("./progress_window.gd") const HT_EditPanelScene = preload("./panel.tscn") const HT_ProgressWindowScene = preload("./progress_window.tscn") @@ -59,7 +60,14 @@ var _generator_dialog : HT_GeneratorDialog = null # TODO Rename _import_terrain_dialog var _import_dialog = null var _export_image_dialog = null -var _progress_window = null + +# This window is only used for operations not triggered by an existing dialog. +# In Godot it has been solved by automatically reparenting the dialog: +# https://github.com/godotengine/godot/pull/71209 +# But `get_exclusive_child()` is not exposed. So dialogs triggering a progress +# dialog may need their own child instance... +var _progress_window : HT_ProgressWindow = null + var _generate_mesh_dialog = null var _preview_generator : HT_PreviewGenerator = null var _resize_dialog = null @@ -72,7 +80,6 @@ var _texture_set_import_editor : HT_TextureSetImportEditor = null var _globalmap_baker : HT_GlobalMapBaker = null var _terrain_had_data_previous_frame := false var _image_cache : HT_ImageFileCache - var _terrain_painter : HT_TerrainPainter = null var _brush_decal : HT_BrushDecal = null var _mouse_pressed := false @@ -220,7 +227,6 @@ func _enter_tree(): _toolbar_brush_buttons[mode] = button _generator_dialog = HT_GeneratorDialogScene.instantiate() - _generator_dialog.progress_notified.connect(_terrain_progress_notified) _generator_dialog.set_image_cache(_image_cache) _generator_dialog.set_undo_redo(get_undo_redo()) base_control.add_child(_generator_dialog) @@ -245,7 +251,7 @@ func _enter_tree(): base_control.add_child(_resize_dialog) _globalmap_baker = HT_GlobalMapBaker.new() - _globalmap_baker.progress_notified.connect(_terrain_progress_notified) + _globalmap_baker.progress_notified.connect(_progress_window.handle_progress) _globalmap_baker.permanent_change_performed.connect(_on_permanent_change_performed) add_child(_globalmap_baker) @@ -737,23 +743,6 @@ static func get_size_from_raw_length(flen: int): return int(side_len) -func _terrain_progress_notified(info: Dictionary): - if info.has("finished") and info.finished: - _progress_window.hide() - - else: - if not _progress_window.visible: - _progress_window.popup_centered() - - var message = "" - if info.has("message"): - message = info.message - - _progress_window.show_progress(info.message, info.progress) - # TODO Have builtin modal progress bar - # https://github.com/godotengine/godot/issues/17763 - - func _on_GenerateMeshDialog_generate_selected(lod: int): var data := _node.get_data() if data == null: diff --git a/addons/zylann.hterrain/tools/progress_window.gd b/addons/zylann.hterrain/tools/progress_window.gd index 3e8ecdb9..791717f6 100644 --- a/addons/zylann.hterrain/tools/progress_window.gd +++ b/addons/zylann.hterrain/tools/progress_window.gd @@ -10,7 +10,23 @@ func _init(): get_ok_button().hide() -func show_progress(message, progress): +func _show_progress(message, progress): self.title = message _progress_bar.ratio = progress + +func handle_progress(info: Dictionary): + if info.has("finished") and info.finished: + hide() + + else: + if not visible: + popup_centered() + + var message = "" + if info.has("message"): + message = info.message + + _show_progress(info.message, info.progress) + # TODO Have builtin modal progress bar + # https://github.com/godotengine/godot/issues/17763 diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd index 77af51cf..ae42a87c 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd @@ -57,12 +57,12 @@ func setup_dialogs(parent: Node): var d = HT_EditorUtil.create_open_texture_dialog() d.file_selected.connect(_on_LoadTextureDialog_file_selected) _load_texture_dialog = d - parent.add_child(d) + add_child(d) d = HT_EditorUtil.create_open_texture_array_dialog() d.file_selected.connect(_on_LoadTextureArrayDialog_file_selected) _load_texture_array_dialog = d - parent.add_child(d) + add_child(d) d = ConfirmationDialog.new() d.confirmed.connect(_on_ModeConfirmationDialog_confirmed) @@ -72,7 +72,7 @@ func setup_dialogs(parent: Node): # d.get_close_button().connect("pressed", self, "_on_ModeConfirmationDialog_cancelled") # d.get_cancel().connect("pressed", self, "_on_ModeConfirmationDialog_cancelled") _mode_confirmation_dialog = d - parent.add_child(d) + add_child(d) func _notification(what: int): diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index eb419b69..5428c179 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -141,28 +141,28 @@ func setup_dialogs(parent: Node): var d = HT_EditorUtil.create_open_image_dialog() d.file_selected.connect(_on_LoadTextureDialog_file_selected) _load_texture_dialog = d - parent.add_child(d) + add_child(d) d = AcceptDialog.new() d.title = "Import error" _error_popup = d - parent.add_child(_error_popup) + add_child(_error_popup) d = AcceptDialog.new() d.title = "Info" _info_popup = d - parent.add_child(_info_popup) + add_child(_info_popup) d = ConfirmationDialog.new() d.confirmed.connect(_on_delete_confirmation_popup_confirmed) _delete_confirmation_popup = d - parent.add_child(_delete_confirmation_popup) + add_child(_delete_confirmation_popup) d = HT_EditorUtil.create_open_dir_dialog() d.title = "Choose import directory" d.dir_selected.connect(_on_OpenDirDialog_dir_selected) _open_dir_dialog = d - parent.add_child(_open_dir_dialog) + add_child(_open_dir_dialog) _update_ui_from_data() From 45d21ead168a536a85338888bd456e76c7c90a19 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 21:39:58 +0000 Subject: [PATCH 65/94] Can't safely hint `Texture2DArray`, use `TextureLayered` instead. A 2D texture array can either be `CompressedTexture2DArray` or `Texture2DArray`. I can't assume they will always be of the "Compressed" type. The Texture2DArray class does not inherit, and is not inherited by CompressedTexture2DArray, so the lowest common denominator is TextureLayered. Inheritance sucks. --- addons/zylann.hterrain/hterrain.gd | 4 ++-- addons/zylann.hterrain/hterrain_texture_set.gd | 4 ++-- .../tools/texture_editor/set_editor/texture_set_editor.gd | 2 +- .../texture_editor/set_editor/texture_set_import_editor.gd | 4 ++-- .../zylann.hterrain/tools/texture_editor/texture_list_item.gd | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index 238485ce..4d504004 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -1465,7 +1465,7 @@ func _get_ground_texture_array_shader_param_name(type: int) -> String: # @obsolete -func get_ground_texture_array(type: int) -> Texture2DArray: +func get_ground_texture_array(type: int) -> TextureLayered: _logger.error( "HTerrain.get_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().get_texture_array(type) instead") @@ -1474,7 +1474,7 @@ func get_ground_texture_array(type: int) -> Texture2DArray: # @obsolete -func set_ground_texture_array(type: int, texture_array: Texture2DArray): +func set_ground_texture_array(type: int, texture_array: TextureLayered): _logger.error( "HTerrain.set_ground_texture_array is obsolete, " + "use HTerrain.get_texture_set().set_texture_array(type, texarray) instead") diff --git a/addons/zylann.hterrain/hterrain_texture_set.gd b/addons/zylann.hterrain/hterrain_texture_set.gd index 36f37535..95bf9fe7 100644 --- a/addons/zylann.hterrain/hterrain_texture_set.gd +++ b/addons/zylann.hterrain/hterrain_texture_set.gd @@ -150,14 +150,14 @@ func set_texture(slot_index: int, ground_texture_type: int, texture: Texture2D): emit_changed() -func get_texture_array(ground_texture_type: int) -> Texture2DArray: +func get_texture_array(ground_texture_type: int) -> TextureLayered: if _mode != MODE_TEXTURE_ARRAYS: return null var texs = _textures[ground_texture_type] return texs[0] -func set_texture_array(ground_texture_type: int, texarray: Texture2DArray): +func set_texture_array(ground_texture_type: int, texarray: TextureLayered): assert(_mode == MODE_TEXTURE_ARRAYS) var texs = _textures[ground_texture_type] if texs[0] != texarray: diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd index ae42a87c..9d11befb 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_editor.gd @@ -368,7 +368,7 @@ func _set_texture_action(slot_index: int, texture: Texture, type: int): ur.commit_action() -func _set_texture_array_action(slot_index: int, texture_array: Texture2DArray, type: int): +func _set_texture_array_action(slot_index: int, texture_array: TextureLayered, type: int): var prev_texture_array = _texture_set.get_texture_array(type) var ur := _get_undo_redo_for_texture_set() diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index 5428c179..dc4e7d9e 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -689,7 +689,7 @@ func _on_ImportButton_pressed(): else: for fd in files_data: - var texture_array : Texture2DArray = load(fd.path) + var texture_array : TextureLayered = load(fd.path) if texture_array == null: failed_resource_paths.append(fd.path) continue @@ -744,7 +744,7 @@ class HT_PackedImageInfo: var image : Image var is_default := false var texture : Texture2D - var texture_array : Texture2DArray + var texture_array : TextureLayered func _generate_packed_images2() -> HT_Result: diff --git a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd index fb99e772..098f3495 100644 --- a/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd +++ b/addons/zylann.hterrain/tools/texture_editor/texture_list_item.gd @@ -23,7 +23,7 @@ func set_text(text: String): func set_texture(texture: Texture, texture_layer: int): - if texture is Texture2DArray: + if texture is TextureLayered: var mat = _texture_rect.material if mat == null or not (mat is ShaderMaterial): mat = ShaderMaterial.new() From 8c2d0f9d895bec0c0fc55c519a8a2dd2aa41c77d Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 21:40:41 +0000 Subject: [PATCH 66/94] Fix TextureLayered.get_depth was renamed get_layers --- addons/zylann.hterrain/hterrain_texture_set.gd | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/addons/zylann.hterrain/hterrain_texture_set.gd b/addons/zylann.hterrain/hterrain_texture_set.gd index 95bf9fe7..9ae95f2c 100644 --- a/addons/zylann.hterrain/hterrain_texture_set.gd +++ b/addons/zylann.hterrain/hterrain_texture_set.gd @@ -36,9 +36,9 @@ const _src_default_color_codes = [ # TODO We may get rid of modes in the future, and only use TextureArrays. # It exists for now for backward compatibility, but it makes the API a bit confusing -var _mode = MODE_TEXTURES +var _mode := MODE_TEXTURES # [type][slot] -> StreamTexture or TextureArray -var _textures = [[], []] +var _textures := [[], []] static func get_texture_type_name(tt: int) -> String: @@ -108,13 +108,12 @@ func get_slots_count() -> int: elif _mode == MODE_TEXTURE_ARRAYS: # TODO What if there are two texture arrays of different size? - var texarray = _textures[TYPE_ALBEDO_BUMP][0] + var texarray : TextureLayered = _textures[TYPE_ALBEDO_BUMP][0] if texarray == null: - var count = 0 texarray = _textures[TYPE_NORMAL_ROUGHNESS][0] if texarray == null: return 0 - return texarray.get_depth() + return texarray.get_layers() else: assert(false) From 452f912f879b87ae66521798f49b8ec2b8808a4e Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 21:53:02 +0000 Subject: [PATCH 67/94] Fix texture array import --- .../set_editor/texture_set_import_editor.gd | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd index dc4e7d9e..65ecc850 100644 --- a/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd +++ b/addons/zylann.hterrain/tools/texture_editor/set_editor/texture_set_import_editor.gd @@ -609,9 +609,7 @@ func _on_ImportButton_pressed(): if _import_mode == HTerrainTextureSet.MODE_TEXTURES: files_data_result = _generate_packed_images(import_dir, prefix) else: - #files_data_result = _generate_save_packed_texture_arrays_files_data(import_dir, prefix) - _show_error("Texture arrays are not supported yet") - return + files_data_result = _generate_packed_texarray_images(import_dir, prefix) if not files_data_result.success: _show_error(files_data_result.get_message()) @@ -747,6 +745,7 @@ class HT_PackedImageInfo: var texture_array : TextureLayered +# Shared code between the two import modes func _generate_packed_images2() -> HT_Result: var resolution : int = _import_settings.resolution var images_infos := [] @@ -840,7 +839,7 @@ func _generate_packed_images(import_dir: String, prefix: String) -> HT_Result: return HT_Result.new(true).with_value(images_infos) -static func _assemble_texarray_images(images: Array, resolution: Vector2i) -> Image: +static func _assemble_texarray_images(images: Array[Image], resolution: Vector2i) -> Image: # Godot expects some kind of grid. Let's be lazy and do a grid with only one row. var atlas := Image.create(resolution.x * len(images), resolution.y, false, Image.FORMAT_RGBA8) for index in len(images): @@ -862,15 +861,16 @@ func _generate_packed_texarray_images(import_dir: String, prefix: String) -> HT_ var resolution : int = _import_settings.resolution var texarray_images_infos := [] + var slot_count := len(_slots_data) for type in HTerrainTextureSet.TYPE_COUNT: - var texarray_images := [] - texarray_images.resize(len(_slots_data)) + var texarray_images : Array[Image] = [] + texarray_images.resize(slot_count) var fully_defaulted_slots := 0 - for i in len(individual_images_infos): - var info : HT_PackedImageInfo = individual_images_infos[i] + for i in slot_count: + var info : HT_PackedImageInfo = individual_images_infos[type * slot_count + i] if info.type == type: texarray_images[i] = info.image if info.is_default: From 0aa428ffbf50cf640cc2e31cc88249a8e6665641 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 21:56:08 +0000 Subject: [PATCH 68/94] Fix yet another occurrence of material.set_shader_param --- addons/zylann.hterrain/hterrain_detail_layer.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/hterrain_detail_layer.gd b/addons/zylann.hterrain/hterrain_detail_layer.gd index 30b0deb1..c8546c19 100644 --- a/addons/zylann.hterrain/hterrain_detail_layer.gd +++ b/addons/zylann.hterrain/hterrain_detail_layer.gd @@ -60,7 +60,7 @@ const _API_SHADER_PARAMS = { return texture set(tex): texture = tex - _material.set_shader_param("u_albedo_alpha", tex) + _material.set_shader_parameter("u_albedo_alpha", tex) # How far detail meshes can be seen. From 4446b3faeddd1a536e816495396654f8c719710c Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 21:57:26 +0000 Subject: [PATCH 69/94] Fix wrong connect --- addons/zylann.hterrain/hterrain_detail_layer.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/hterrain_detail_layer.gd b/addons/zylann.hterrain/hterrain_detail_layer.gd index c8546c19..6480d13a 100644 --- a/addons/zylann.hterrain/hterrain_detail_layer.gd +++ b/addons/zylann.hterrain/hterrain_detail_layer.gd @@ -195,7 +195,7 @@ func _enter_tree(): func _exit_tree(): var terrain = _get_terrain() if terrain != null: - terrain.transform_changed.connect(_on_terrain_transform_changed) + terrain.transform_changed.disconnect(_on_terrain_transform_changed) terrain._internal_remove_detail_layer(self) _update_material() for k in _chunks.keys(): From 317f924d0868411fc694849172d11305e187bc76 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 22:08:29 +0000 Subject: [PATCH 70/94] Fix errors when detail layers are destroyed --- addons/zylann.hterrain/hterrain_detail_layer.gd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/zylann.hterrain/hterrain_detail_layer.gd b/addons/zylann.hterrain/hterrain_detail_layer.gd index 6480d13a..2dee7048 100644 --- a/addons/zylann.hterrain/hterrain_detail_layer.gd +++ b/addons/zylann.hterrain/hterrain_detail_layer.gd @@ -375,6 +375,12 @@ func _notification(what: int): NOTIFICATION_VISIBILITY_CHANGED: _set_visible(visible) + + NOTIFICATION_PREDELETE: + # Force DirectMeshInstances to be destroyed before the material. + # Otherwise it causes RenderingServer errors... + _chunks.clear() + _multimesh_instance_pool.clear() func _set_visible(v: bool): From 0a2d9668f49266743ad972e87c8905836c9fe49c Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 22:14:36 +0000 Subject: [PATCH 71/94] Increase minimum width of brush size slider --- addons/zylann.hterrain/tools/brush/brush_editor.tscn | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/brush_editor.tscn b/addons/zylann.hterrain/tools/brush/brush_editor.tscn index c245da4e..42ef980c 100644 --- a/addons/zylann.hterrain/tools/brush/brush_editor.tscn +++ b/addons/zylann.hterrain/tools/brush/brush_editor.tscn @@ -8,8 +8,8 @@ blend_mode = 1 [node name="BrushEditor" type="HBoxContainer"] custom_minimum_size = Vector2(200, 0) -offset_right = 372.0 -offset_bottom = 167.0 +offset_right = 293.0 +offset_bottom = 211.0 script = ExtResource("1") [node name="BrushShapeButton" type="Button" parent="."] @@ -40,6 +40,7 @@ size_flags_horizontal = 3 mouse_filter = 0 [node name="Slider" type="HSlider" parent="GridContainer/BrushSizeControl"] +custom_minimum_size = Vector2(60, 0) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 From 8ce7da87594ce6bd4447873c278e8885bf2ddb9b Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 22:36:25 +0000 Subject: [PATCH 72/94] Fixed some issues with brush settings dialog layout --- .../tools/brush/settings_dialog/brush_settings_dialog.tscn | 6 ++++-- .../tools/brush/settings_dialog/preview_scratchpad.tscn | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn index 112da399..250aa813 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn @@ -5,7 +5,9 @@ [ext_resource type="PackedScene" uid="uid://ng00jipfeucy" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn" id="4"] [node name="BrushSettingsDialog" type="AcceptDialog"] -size = Vector2i(492, 342) +title = "Brush settings" +size = Vector2i(700, 422) +min_size = Vector2i(700, 400) script = ExtResource("3") [node name="VB" type="VBoxContainer" parent="."] @@ -180,8 +182,8 @@ layout_mode = 2 text = "Scratchpad" [node name="PreviewScratchpad" parent="VB/HB/VB3" instance=ExtResource("4")] +custom_minimum_size = Vector2(200, 300) layout_mode = 2 -size_flags_vertical = 3 [node name="ClearScratchpad" type="Button" parent="VB/HB/VB3"] layout_mode = 2 diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn index 6c7c91b1..0b50c915 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/preview_scratchpad.tscn @@ -4,10 +4,11 @@ [ext_resource type="Script" path="res://addons/zylann.hterrain/tools/brush/settings_dialog/preview_painter.gd" id="2"] [node name="PreviewScratchpad" type="Control"] +clip_contents = true layout_mode = 3 anchors_preset = 0 offset_right = 200.0 -offset_bottom = 400.0 +offset_bottom = 274.0 script = ExtResource("1") [node name="Painter" type="Node" parent="."] From bd5de8908b2b8c258a8a133f3549cb82c381a1ca Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 22:39:50 +0000 Subject: [PATCH 73/94] Increase default width of the textures UI in the bottom panel --- addons/zylann.hterrain/tools/panel.tscn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/tools/panel.tscn b/addons/zylann.hterrain/tools/panel.tscn index c0f5b3a5..33e856f3 100644 --- a/addons/zylann.hterrain/tools/panel.tscn +++ b/addons/zylann.hterrain/tools/panel.tscn @@ -11,7 +11,7 @@ custom_minimum_size = Vector2(400, 120) layout_mode = 3 anchors_preset = 0 -offset_right = 881.0 +offset_right = 1012.0 offset_bottom = 120.0 script = ExtResource("1") @@ -34,7 +34,7 @@ layout_mode = 2 [node name="HSplitContainer" type="HSplitContainer" parent="HSplitContainer/HSplitContainer"] layout_mode = 2 size_flags_horizontal = 3 -split_offset = 150 +split_offset = 300 [node name="TextureEditor" parent="HSplitContainer/HSplitContainer/HSplitContainer" instance=ExtResource("3")] layout_mode = 2 From 5ef708ce180afe90d5d73f9edc5959065a1c6091 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Fri, 24 Mar 2023 23:52:44 +0000 Subject: [PATCH 74/94] Fix generator Apply was producing gibberish due to SubViewport not updating --- .../tools/generator/generator_dialog.gd | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index ce6b285b..01a04374 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -229,7 +229,7 @@ func _notification(what: int): _preview.set_sea_visible(_inspector.get_value("show_sea")) _preview.set_shadows_enabled(_inspector.get_value("shadows")) - + _update_generator(true) else: @@ -312,7 +312,6 @@ func _update_generator(preview: bool): # var offset_px = sector * (VIEWPORT_RESOLUTION - 1) - Vector2(pad_offset_px, pad_offset_px) # var offset_ndc = offset_px / padded_viewport_resolution - var progress := float(i) / len(sectors) var p := HT_TextureGeneratorPass.new() p.clear = true @@ -382,7 +381,12 @@ func _on_CancelButton_pressed(): func _on_ApplyButton_pressed(): - hide() + # We used to hide the dialog on Apply and then texture generation took place in an offscreen + # viewport in multiple tiled stages, with a progress window being shown. But in Godot 4, + # it turns out SubViewports never update if they are child of a Window, even if they are set to + # UPDATE_ALWAYS... + #hide() + _apply() @@ -462,13 +466,16 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): _generated_textures[HTerrainData.CHANNEL_NORMAL]) else: assert(_terrain != null) - var data = _terrain.get_data() + var data := _terrain.get_data() assert(data != null) - var dst = data.get_image(info.maptype) + var dst := data.get_image(info.maptype) assert(dst != null) #assert(image.get_format() == Image.FORMAT_RGB8 or image.get_format() == Image.FORMAT_RGBA8) - image.convert(dst.get_format()) +# print("Tile ", info.sector) +# image.save_png(str("debug_generator_tile_", +# info.sector.x, "_", info.sector.y, "_map", info.maptype, ".png")) +# image.convert(dst.get_format()) dst.blit_rect(image, \ Rect2i(0, 0, image.get_width(), image.get_height()), \ From fce0ad48858dd50658d475d94c501450bb493bdc Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 00:58:59 +0000 Subject: [PATCH 75/94] File cache unreference() hack appears to remain relevant in Godot 4 If I remove it, Godot complains about objects leaking when closing. --- addons/zylann.hterrain/util/image_file_cache.gd | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/util/image_file_cache.gd b/addons/zylann.hterrain/util/image_file_cache.gd index c502698f..0dd63c50 100644 --- a/addons/zylann.hterrain/util/image_file_cache.gd +++ b/addons/zylann.hterrain/util/image_file_cache.gd @@ -211,14 +211,16 @@ func clear(): func _save_thread_func(): - # TODO Is this still true in Godot 4? # Threads keep a reference to the object of the function they run. # So if the object is a Reference, and that reference owns the thread... we get a cycle. # We can break the cycle by removing 1 to the count inside the thread. # The thread's reference will never die unexpectedly because we stop and destroy the thread # in the destructor of the reference. # If that workaround explodes one day, another way could be to use an intermediary instance - # extending Object, and run a function on that instead + # extending Object, and run a function on that instead. + # + # I added this in Godot 3, and it seems to still be relevant in Godot 4... + # if USE_THREAD: unreference() From da6e46eded273da13834bca16bac4ea17d99b98f Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 01:00:24 +0000 Subject: [PATCH 76/94] Hide generator dialog after applying is complete. --- .../tools/generator/generator_dialog.gd | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 01a04374..c49a8a59 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -381,10 +381,10 @@ func _on_CancelButton_pressed(): func _on_ApplyButton_pressed(): - # We used to hide the dialog on Apply and then texture generation took place in an offscreen - # viewport in multiple tiled stages, with a progress window being shown. But in Godot 4, - # it turns out SubViewports never update if they are child of a Window, even if they are set to - # UPDATE_ALWAYS... + # We used to hide the dialog when the Apply button is clicked, and then texture generation took + # place in an offscreen viewport in multiple tiled stages, with a progress window being shown. + # But in Godot 4, it turns out SubViewports never update if they are child of a hidden Window, + # even if they are set to UPDATE_ALWAYS... #hide() _apply() @@ -520,6 +520,8 @@ func _on_TextureGenerator_completed(): _notify_progress({ "finished": true }) _logger.debug("Done") + + hide() func _notify_progress(info: Dictionary): From 2735a2b0c427d5d7595ff43ca9584bbecc1265bf Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 01:03:24 +0000 Subject: [PATCH 77/94] Workaround viewport iterations not working when the editor isn't redrawing --- .../tools/generator/generator_dialog.gd | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index c49a8a59..97f1ecf6 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -527,3 +527,20 @@ func _on_TextureGenerator_completed(): func _notify_progress(info: Dictionary): _progress_window.handle_progress(info) + +func _process(delta): + if _applying: + # HACK to workaround a peculiar behavior of Viewports in Godot 4. + # Apparently Godot 4 will not update Viewports set to UPDATE_ALWAYS when the editor decides + # it doesn't need to redraw ("low processor mode", what makes the editor redraw only with + # changes). That wasn't the case in Godot 3, but I guess it is now. + # That means when we click Apply, the viewport will not update in particular when doing + # erosion passes, because the action of clicking Apply doesn't leed to as many redraws as + # changing preview parameters in the UI (those cause redraws for different reasons). + # So let's poke the renderer by redrawing something... + # + # This also piles on top of the workaround in which we keep the window visible when + # applying! So the window has one more reason to stay visible... + # + _preview.queue_redraw() + From 4d7f4d9b05188834f432751121adce3e4ea5e0c6 Mon Sep 17 00:00:00 2001 From: Aroy-Art Date: Sat, 25 Mar 2023 08:07:22 +0100 Subject: [PATCH 78/94] Fix function rename to get_camera_3d() in hterrain.gd --- addons/zylann.hterrain/hterrain.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/hterrain.gd b/addons/zylann.hterrain/hterrain.gd index 4d504004..224f73eb 100644 --- a/addons/zylann.hterrain/hterrain.gd +++ b/addons/zylann.hterrain/hterrain.gd @@ -1161,7 +1161,7 @@ func _update_viewer_position(camera: Camera3D): if camera == null: var viewport := get_viewport() if viewport != null: - camera = viewport.get_camera() + camera = viewport.get_camera_3d() if camera == null: return From 228de5212aef51dbfd929f80040c46a175f6a6ed Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 17:55:58 +0000 Subject: [PATCH 79/94] Typo --- addons/zylann.hterrain/tools/generator/generator_dialog.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 97f1ecf6..78e82456 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -535,7 +535,7 @@ func _process(delta): # it doesn't need to redraw ("low processor mode", what makes the editor redraw only with # changes). That wasn't the case in Godot 3, but I guess it is now. # That means when we click Apply, the viewport will not update in particular when doing - # erosion passes, because the action of clicking Apply doesn't leed to as many redraws as + # erosion passes, because the action of clicking Apply doesn't lead to as many redraws as # changing preview parameters in the UI (those cause redraws for different reasons). # So let's poke the renderer by redrawing something... # From 89dbd50edec2d575a8bfd980e9707c0e7d57b1d2 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 21:08:54 +0000 Subject: [PATCH 80/94] Fix resizing with stretch --- addons/zylann.hterrain/hterrain_data.gd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index 0fa29306..fd4fa1c4 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -307,6 +307,9 @@ func resize(p_res: int, stretch := true, anchor := Vector2(-1, -1)): # Can't directly resize this format var float_heightmap := convert_heightmap_to_float(im, _logger) float_heightmap.resize(_resolution, _resolution) + im = Image.create( + float_heightmap.get_width(), + float_heightmap.get_height(), im.has_mipmaps(), im.get_format()) convert_float_heightmap_to_rgb8(float_heightmap, im) else: im.resize(_resolution, _resolution) From 8706bfc0e847d96f71a42f6fe8223f5057b4c191 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 21:09:19 +0000 Subject: [PATCH 81/94] Static typing --- addons/zylann.hterrain/hterrain_data.gd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index fd4fa1c4..f02e2ed9 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -183,7 +183,7 @@ var _locked := false var _image_utils = HT_NativeFactory.get_image_utils() var _edit_disable_apply_undo := false -var _logger = HT_Logger.get_for(self) +var _logger := HT_Logger.get_for(self) func _init(): @@ -194,8 +194,8 @@ func _init(): func _set_default_maps(): _maps.resize(CHANNEL_COUNT) for c in CHANNEL_COUNT: - var maps = [] - var n = _map_types[c].default_count + var maps := [] + var n : int = _map_types[c].default_count for i in n: maps.append(HT_Map.new(i)) _maps[c] = maps @@ -323,7 +323,7 @@ func resize(p_res: int, stretch := true, anchor := Vector2(-1, -1)): _update_all_vertical_bounds() - emit_signal("resolution_changed") + resolution_changed.emit() # TODO Can't hint it, the return is a nullable Color @@ -1702,7 +1702,7 @@ static func encode_height_to_rgb8_unorm(h: float) -> Color: return Color(r, g, b, 255.0) / 255.0 -static func convert_heightmap_to_float(src: Image, logger) -> Image: +static func convert_heightmap_to_float(src: Image, logger: HT_Logger.HT_LoggerBase) -> Image: var src_format := src.get_format() if src_format == Image.FORMAT_RH: From da5ea90fa97fc62e4767f94ede2e152f2c5ef3cb Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 21:09:27 +0000 Subject: [PATCH 82/94] Unused --- addons/zylann.hterrain/hterrain_data.gd | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index f02e2ed9..52dcd32e 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -8,7 +8,6 @@ extends Resource const HT_Grid = preload("./util/grid.gd") const HT_Util = preload("./util/util.gd") const HT_Errors = preload("./util/errors.gd") -const HT_NativeFactory = preload("./native/factory.gd") const HT_Logger = preload("./util/logger.gd") const HT_ImageFileCache = preload("./util/image_file_cache.gd") const HT_XYZFormat = preload("./util/xyz_format.gd") @@ -180,7 +179,6 @@ var _maps := [[]] var _chunked_vertical_bounds := Image.new() var _locked := false -var _image_utils = HT_NativeFactory.get_image_utils() var _edit_disable_apply_undo := false var _logger := HT_Logger.get_for(self) From 6c07ebd77dce1ab3f4f083913e53d1dbf8fd3ce4 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 21:25:14 +0000 Subject: [PATCH 83/94] Actually don't do the unref hack... it causes issues in debug builds. Something leaks then, no idea what though, the refcount doesnt seem to change between before starting the thread and within the thread. --- addons/zylann.hterrain/util/image_file_cache.gd | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/zylann.hterrain/util/image_file_cache.gd b/addons/zylann.hterrain/util/image_file_cache.gd index 0dd63c50..e39e4cd7 100644 --- a/addons/zylann.hterrain/util/image_file_cache.gd +++ b/addons/zylann.hterrain/util/image_file_cache.gd @@ -219,10 +219,17 @@ func _save_thread_func(): # If that workaround explodes one day, another way could be to use an intermediary instance # extending Object, and run a function on that instead. # - # I added this in Godot 3, and it seems to still be relevant in Godot 4... + # I added this in Godot 3, and it seems to still be relevant in Godot 4 because if I don't + # do it, objects are leaking. # - if USE_THREAD: - unreference() + # BUT it seems to end up triggering a crash in debug Godot builds due to unrefing RefCounted + # with refcount == 0, so I guess it's wrong now? + # So basically, either I do it and I risk a crash, + # or I don't do it and then it causes a leak... + # TODO Make this shit use `Object` + # + # if USE_THREAD: + # unreference() while _save_thread_running: _save_queue_mutex.lock() From 4026bb2f070f4a7610c2cb47b322988350fa9c4a Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 22:02:42 +0000 Subject: [PATCH 84/94] Fix globalmap baking --- addons/zylann.hterrain/tools/globalmap_baker.gd | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/addons/zylann.hterrain/tools/globalmap_baker.gd b/addons/zylann.hterrain/tools/globalmap_baker.gd index 7ed08499..8fd92ac1 100644 --- a/addons/zylann.hterrain/tools/globalmap_baker.gd +++ b/addons/zylann.hterrain/tools/globalmap_baker.gd @@ -127,8 +127,8 @@ func _report_progress(): func _setup_pass(sector: Vector2): # Note: we implicitely take off-by-one pixels into account - var origin = sector * _viewport_size - var center = origin + 0.5 * _viewport.size + var origin := sector * _viewport_size + var center := origin + 0.5 * Vector2(_viewport.size) # The heightmap is left empty, so will default to white, which is a height of 1. # The camera must be placed above the terrain to see it. _camera.position = Vector3(center.x, 2.0, center.y) @@ -138,9 +138,6 @@ func _setup_pass(sector: Vector2): func _grab_image(sector: Vector2): var tex := _viewport.get_texture() var src := tex.get_image() - # TODO Optimize: In Godot 3 viewports could render flipped, but in Godot 4 it was removed... - # so we have to flip on the CPU - src.flip_y() assert(_terrain != null) var data := _terrain.get_data() From baeaba83345e1a5017587dd235749df5a528ef66 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Sat, 25 Mar 2023 22:26:47 +0000 Subject: [PATCH 85/94] Fix import dialog file dialog was not working --- .../tools/inspector/inspector.gd | 20 ++++++++++------ .../tools/inspector/inspector.tscn | 23 ++++++------------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/addons/zylann.hterrain/tools/inspector/inspector.gd b/addons/zylann.hterrain/tools/inspector/inspector.gd index 23e47144..57c4ed0e 100644 --- a/addons/zylann.hterrain/tools/inspector/inspector.gd +++ b/addons/zylann.hterrain/tools/inspector/inspector.gd @@ -431,18 +431,24 @@ func _open_file_dialog(filters: Array, callback: Callable, access: int): _file_dialog.clear_filters() for filter in filters: _file_dialog.add_filter(filter) - _file_dialog.popup_hide.connect(call_deferred.bind("_on_file_dialog_close"), CONNECT_ONE_SHOT) + # Can't just use one-shot signals because the dialog could be closed without choosing a file... +# if not _file_dialog.file_selected.is_connected(callback): +# _file_dialog.file_selected.connect(callback, Object.CONNECT_ONE_SHOT) + _file_dialog.visibility_changed.connect( + call_deferred.bind("_on_file_dialog_visibility_changed"), CONNECT_ONE_SHOT) _file_dialog.file_selected.connect(callback) + _file_dialog.popup_centered_ratio(0.7) -func _on_file_dialog_close(): - # Disconnect listeners automatically, - # so we can re-use the same dialog with different listeners - var cons = _file_dialog.get_signal_connection_list("file_selected") - for con in cons: - _file_dialog.file_selected.disconnect(con.callable) +func _on_file_dialog_visibility_changed(): + if _file_dialog.visible == false: + # Disconnect listeners automatically, + # so we can re-use the same dialog with different listeners + var cons = _file_dialog.get_signal_connection_list("file_selected") + for con in cons: + _file_dialog.file_selected.disconnect(con.callable) func _on_texture_selected(path: String, key): diff --git a/addons/zylann.hterrain/tools/inspector/inspector.tscn b/addons/zylann.hterrain/tools/inspector/inspector.tscn index 11de488f..4bd1395a 100644 --- a/addons/zylann.hterrain/tools/inspector/inspector.tscn +++ b/addons/zylann.hterrain/tools/inspector/inspector.tscn @@ -1,24 +1,15 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://dfjip6c4olemn"] -[ext_resource path="res://addons/zylann.hterrain/tools/inspector/inspector.gd" type="Script" id=1] +[ext_resource type="Script" path="res://addons/zylann.hterrain/tools/inspector/inspector.gd" id="1"] [node name="Inspector" type="VBoxContainer"] -margin_right = 348.0 -margin_bottom = 383.0 -script = ExtResource( 1 ) +script = ExtResource("1") [node name="GridContainer" type="GridContainer" parent="."] -margin_right = 348.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 8 +layout_mode = 2 columns = 2 [node name="OpenFileDialog" type="FileDialog" parent="."] -margin_left = 261.0 -margin_top = 150.0 -margin_right = 710.0 -margin_bottom = 426.0 -rect_min_size = Vector2( 400, 300 ) -window_title = "Open a File" -resizable = true -mode = 0 +title = "Open a File" +ok_button_text = "Open" +file_mode = 0 From 5273707cab9d179dcae97000c59cab6f6645744e Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 30 May 2023 00:27:52 +0100 Subject: [PATCH 86/94] Fix generator Apply not working in Compatibility renderer --- .../zylann.hterrain/tools/generator/generator_dialog.gd | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 78e82456..8216f231 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -471,11 +471,16 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): var dst := data.get_image(info.maptype) assert(dst != null) - #assert(image.get_format() == Image.FORMAT_RGB8 or image.get_format() == Image.FORMAT_RGBA8) # print("Tile ", info.sector) # image.save_png(str("debug_generator_tile_", # info.sector.x, "_", info.sector.y, "_map", info.maptype, ".png")) -# image.convert(dst.get_format()) + + # Converting in case Viewport texture isn't the format we expect for this map. + # Note, in Godot 4 it seems the chosen renderer also influences what you get. + # Forward+ non-transparent viewport gives RGB8, but Compatibility gives RGBA8. + # I don't know if it's expected or is a bug... + if image.get_format() != dst.get_format(): + image.convert(dst.get_format()) dst.blit_rect(image, \ Rect2i(0, 0, image.get_width(), image.get_height()), \ From 778889bb7157f3a97ed644634dce9996d1fa144f Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 1 Jun 2023 19:52:32 +0100 Subject: [PATCH 87/94] Fix signal connected multiple times in some file dialogs --- addons/zylann.hterrain/tools/inspector/inspector.gd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/zylann.hterrain/tools/inspector/inspector.gd b/addons/zylann.hterrain/tools/inspector/inspector.gd index 57c4ed0e..6039cee0 100644 --- a/addons/zylann.hterrain/tools/inspector/inspector.gd +++ b/addons/zylann.hterrain/tools/inspector/inspector.gd @@ -63,8 +63,10 @@ var _editors := {} @onready var _file_dialog = get_node("OpenFileDialog") +func _ready(): + _file_dialog.visibility_changed.connect( + call_deferred.bind("_on_file_dialog_visibility_changed")) # Test -#func _ready(): # set_prototype({ # "seed": { # "type": TYPE_INT, @@ -435,8 +437,6 @@ func _open_file_dialog(filters: Array, callback: Callable, access: int): # Can't just use one-shot signals because the dialog could be closed without choosing a file... # if not _file_dialog.file_selected.is_connected(callback): # _file_dialog.file_selected.connect(callback, Object.CONNECT_ONE_SHOT) - _file_dialog.visibility_changed.connect( - call_deferred.bind("_on_file_dialog_visibility_changed"), CONNECT_ONE_SHOT) _file_dialog.file_selected.connect(callback) _file_dialog.popup_centered_ratio(0.7) From e49ac9a8e6a9cf41667c6722d663cd6370026df5 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 14 Jun 2023 22:39:26 +0100 Subject: [PATCH 88/94] Use RF instead of RGB8 for heightmaps --- addons/zylann.hterrain/hterrain_data.gd | 232 +++++++++++++----- addons/zylann.hterrain/shaders/array.gdshader | 4 +- .../zylann.hterrain/shaders/detail.gdshader | 4 +- .../shaders/include/heightmap.gdshaderinc | 66 +++++ .../zylann.hterrain/shaders/lookdev.gdshader | 4 +- .../zylann.hterrain/shaders/low_poly.gdshader | 4 +- .../shaders/multisplat16.gdshader | 4 +- .../shaders/multisplat16_lite.gdshader | 4 +- .../zylann.hterrain/shaders/simple4.gdshader | 4 +- .../shaders/simple4_lite.gdshader | 4 +- .../tools/brush/decal.gdshader | 4 +- .../tools/brush/no_blend_rf.gdshader | 9 + addons/zylann.hterrain/tools/brush/painter.gd | 36 ++- .../tools/brush/shaders/color.gdshader | 4 +- .../tools/brush/shaders/erode.gdshader | 6 +- .../tools/brush/shaders/flatten.gdshader | 6 +- .../tools/brush/shaders/level.gdshader | 6 +- .../tools/brush/shaders/raise.gdshader | 6 +- .../tools/brush/shaders/smooth.gdshader | 6 +- .../tools/brush/shaders/splat16.gdshader | 4 +- .../tools/brush/shaders/splat4.gdshader | 4 +- .../tools/bump2normal_tex.gdshader | 4 +- .../tools/exporter/export_image_dialog.gd | 26 +- .../tools/generator/generator_dialog.gd | 13 +- .../generator/shaders/bump2normal.gdshader | 16 +- .../tools/generator/shaders/erode.gdshader | 22 +- .../generator/shaders/perlin_noise.gdshader | 8 +- .../tools/generator/texture_generator.gd | 132 +++++++--- 28 files changed, 463 insertions(+), 179 deletions(-) create mode 100644 addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc create mode 100644 addons/zylann.hterrain/tools/brush/no_blend_rf.gdshader diff --git a/addons/zylann.hterrain/hterrain_data.gd b/addons/zylann.hterrain/hterrain_data.gd index 52dcd32e..74597f5f 100644 --- a/addons/zylann.hterrain/hterrain_data.gd +++ b/addons/zylann.hterrain/hterrain_data.gd @@ -30,13 +30,10 @@ const _map_types = { shader_param_name = "u_terrain_heightmap", filter = true, mipmaps = false, - texture_format = Image.FORMAT_RGB8, - # Should have been encode_height_to_rgb8_unorm(0.0), but Godot 4 doesn't take static - # function results in constant dictionaries... also beware of not taking this constant - # by printing a Color directly, Godot rounds it. Instead print components separately. - default_fill = Color(0, 0, 0.50196081399918, 1), + texture_format = Image.FORMAT_RF, + default_fill = Color(0, 0, 0, 1), default_count = 1, - can_be_saved_as_png = true, + can_be_saved_as_png = false, authored = true, srgb = false }, @@ -45,6 +42,7 @@ const _map_types = { shader_param_name = "u_terrain_normalmap", filter = true, mipmaps = false, + # TODO RGB8 is a lie, we should use RGBA8 and pack something in A I guess texture_format = Image.FORMAT_RGB8, default_fill = Color(0.5, 0.5, 1.0), default_count = 1, @@ -310,6 +308,7 @@ func resize(p_res: int, stretch := true, anchor := Vector2(-1, -1)): float_heightmap.get_height(), im.has_mipmaps(), im.get_format()) convert_float_heightmap_to_rgb8(float_heightmap, im) else: + # Assuming float or single-component fixed-point im.resize(_resolution, _resolution) else: var fill_color = _get_map_default_fill_color(channel, index) @@ -349,11 +348,14 @@ func get_height_at(x: int, y: int) -> float: # Height data must be loaded in RAM var im := get_image(CHANNEL_HEIGHT) assert(im != null) - # RH, RF -# var h := HT_Util.get_pixel_clamped(im, x, y).r - # RGB8 - var h := decode_height_from_rgb8_unorm(HT_Util.get_pixel_clamped(im, x, y)) - return h; + match im.get_format(): + Image.FORMAT_RF: + return HT_Util.get_pixel_clamped(im, x, y).r + Image.FORMAT_RGB8: + return decode_height_from_rgb8_unorm(HT_Util.get_pixel_clamped(im, x, y)) + _: + _logger.error(str("Invalid heigthmap format ", im.get_format())) + return 0.0 # Gets the height at the given floating-point cell position. @@ -363,7 +365,8 @@ func get_interpolated_height_at(pos: Vector3) -> float: # Height data must be loaded in RAM var im := get_image(CHANNEL_HEIGHT) assert(im != null) - assert(im.get_format() == Image.FORMAT_RGB8) + var map_type = _map_types[CHANNEL_HEIGHT] + assert(im.get_format() == map_type.texture_format) # The function takes a Vector3 for convenience so it's easier to use in 3D scripting var x0 := int(floorf(pos.x)) @@ -371,22 +374,37 @@ func get_interpolated_height_at(pos: Vector3) -> float: var xf := pos.x - x0 var yf := pos.z - y0 - - var c00 := HT_Util.get_pixel_clamped(im, x0, y0) - var c10 := HT_Util.get_pixel_clamped(im, x0 + 1, y0) - var c01 := HT_Util.get_pixel_clamped(im, x0, y0 + 1) - var c11 := HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1) - var h00 := decode_height_from_rgb8_unorm(c00) - var h10 := decode_height_from_rgb8_unorm(c10) - var h01 := decode_height_from_rgb8_unorm(c01) - var h11 := decode_height_from_rgb8_unorm(c11) + var h00 : float + var h10 : float + var h01 : float + var h11 : float + + match im.get_format(): + Image.FORMAT_RF: + h00 = HT_Util.get_pixel_clamped(im, x0, y0).r + h10 = HT_Util.get_pixel_clamped(im, x0 + 1, y0).r + h01 = HT_Util.get_pixel_clamped(im, x0, y0 + 1).r + h11 = HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1).r + + Image.FORMAT_RGB8: + var c00 := HT_Util.get_pixel_clamped(im, x0, y0) + var c10 := HT_Util.get_pixel_clamped(im, x0 + 1, y0) + var c01 := HT_Util.get_pixel_clamped(im, x0, y0 + 1) + var c11 := HT_Util.get_pixel_clamped(im, x0 + 1, y0 + 1) + + h00 = decode_height_from_rgb8_unorm(c00) + h10 = decode_height_from_rgb8_unorm(c10) + h01 = decode_height_from_rgb8_unorm(c01) + h11 = decode_height_from_rgb8_unorm(c11) + + _: + _logger.error(str("Invalid heightmap format ", im.get_format())) + return 0.0 # Bilinear filter var h := lerpf(lerpf(h00, h10, xf), lerpf(h01, h11, xf), yf) - - return h; - + return h # Gets all heights within the given rectangle in cells. # This height is raw and doesn't account for scaling of the terrain node. @@ -425,16 +443,20 @@ func get_heights_region(x0: int, y0: int, w: int, h: int) -> PackedFloat32Array: i += 1 else: - _logger.error("Unknown heightmap format!") + _logger.error(str("Unknown heightmap format! ", im.get_format())) return heights -# Gets all heights. +# Gets all heights as an array indexed as [x + y * width]. # This height is raw and doesn't account for scaling of the terrain node. -# Data is returned as a PackedFloat32Array. func get_all_heights() -> PackedFloat32Array: - return get_heights_region(0, 0, _resolution, _resolution) + var im = get_image(CHANNEL_HEIGHT) + assert(im != null) + if im.get_format() == Image.FORMAT_RF: + return im.get_data().to_float32_array() + else: + return get_heights_region(0, 0, _resolution, _resolution) # Call this function after you end modifying a map. @@ -875,9 +897,16 @@ func _update_vertical_bounds(origin_in_cells_x: int, origin_in_cells_y: int, \ func _compute_vertical_bounds_at( origin_x: int, origin_y: int, size_x: int, size_y: int) -> Vector2: - var heights = get_image(CHANNEL_HEIGHT) + var heights := get_image(CHANNEL_HEIGHT) assert(heights != null) - return _get_heights_range_rgb8(heights, Rect2i(origin_x, origin_y, size_x, size_y)) + match heights.get_format(): + Image.FORMAT_RF: + return _get_heights_range_f(heights, Rect2i(origin_x, origin_y, size_x, size_y)) + Image.FORMAT_RGB8: + return _get_heights_range_rgb8(heights, Rect2i(origin_x, origin_y, size_x, size_y)) + _: + _logger.error(str("Unknown heightmap format ", heights.get_format())) + return Vector2() static func _get_heights_range_rgb8(im: Image, rect: Rect2i) -> Vector2: @@ -901,6 +930,27 @@ static func _get_heights_range_rgb8(im: Image, rect: Rect2i) -> Vector2: return Vector2(min_height, max_height) +static func _get_heights_range_f(im: Image, rect: Rect2i) -> Vector2: + assert(im.get_format() == Image.FORMAT_RF) + + rect = rect.intersection(Rect2i(0, 0, im.get_width(), im.get_height())) + var min_x := rect.position.x + var min_y := rect.position.y + var max_x := min_x + rect.size.x + var max_y := min_y + rect.size.y + + var min_height := im.get_pixel(min_x, min_y).r + var max_height := min_height + + for y in range(min_y, max_y): + for x in range(min_x, max_x): + var h := im.get_pixel(x, y).r + min_height = minf(h, min_height) + max_height = maxf(h, max_height) + + return Vector2(min_height, max_height) + + func save_data(data_dir: String) -> bool: _logger.debug("Saving terrain data...") @@ -1095,9 +1145,17 @@ func _save_map(dir_path: String, map_type: int, index: int) -> bool: var fpath := dir_path.path_join(_get_map_filename(map_type, index)) + return _save_map_image(fpath, map_type, im) + + +func _save_map_image(fpath: String, map_type: int, im: Image) -> bool: if _channel_can_be_saved_as_png(map_type): fpath += ".png" - im.save_png(fpath) + var err := im.save_png(fpath) + if err != OK: + _logger.error("Could not save '{0}', error {1}" \ + .format([fpath, HT_Errors.get_message(err)])) + return false _try_write_default_import_options(fpath, map_type, _logger) else: @@ -1197,8 +1255,23 @@ func _load_map(dir: String, map_type: int, index: int) -> bool: fpath += ".res" var tex = load(fpath) - + var must_load_image_in_editor := true + + # Short-term compatibility with RGB8 encoding from the godot4 branch + if Engine.is_editor_hint() and tex == null and map_type == CHANNEL_HEIGHT: + var legacy_fpath := fpath.get_basename() + ".png" + var temp = load(legacy_fpath) + if temp != null: + if temp is Texture2D: + temp = temp.get_image() + if temp is Image: + if temp.get_format() == Image.FORMAT_RGB8: + _logger.warn(str( + "Found a heightmap using legacy RGB8 format. It will be converted to RF. ", + "You may want to remove the old file: {0}").format([fpath])) + tex = convert_heightmap_to_float(temp, _logger) + _save_map_image(fpath.get_basename(), map_type, tex) if tex != null and tex is Image: # The texture is imported as Image, @@ -1308,14 +1381,21 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo _logger.debug("Converting to internal format...") # Convert to internal format with range scaling - for y in width: - for x in height: - var gs := src_image.get_pixel(x, y).r - var h := min_y + hrange * gs - # RH, RF -# im.set_pixel(x, y, Color(h, 0, 0)) - # RGB8 - im.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) + match im.get_format(): + Image.FORMAT_RF: + for y in width: + for x in height: + var gs := src_image.get_pixel(x, y).r + var h := min_y + hrange * gs + im.set_pixel(x, y, Color(h, h, h)) + Image.FORMAT_RGB8: + for y in width: + for x in height: + var gs := src_image.get_pixel(x, y).r + var h := min_y + hrange * gs + im.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) + _: + _logger.error(str("Invalid heightmap format ", im.get_format())) elif ext == "exr": var src_image := Image.load_from_file(fpath) @@ -1337,16 +1417,20 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo _logger.debug("Converting to internal format...") - # RH, RF - # See https://github.com/Zylann/godot_heightmap_plugin/issues/34 - # Godot can load EXR but it always makes them have at least 3-channels. - # Heightmaps need only one, so we have to get rid of 2. -# var height_format = _map_types[CHANNEL_HEIGHT].texture_format -# src_image.convert(height_format) -# im.blit_rect(src_image, Rect2i(0, 0, res, res), Vector2i()) - - # RGB8 - convert_float_heightmap_to_rgb8(src_image, im) + match im.get_format(): + Image.FORMAT_RF: + # See https://github.com/Zylann/godot_heightmap_plugin/issues/34 + # Godot can load EXR but it always makes them have at least 3-channels. + # Heightmaps need only one, so we have to get rid of 2. + var height_format = _map_types[CHANNEL_HEIGHT].texture_format + src_image.convert(height_format) + im.blit_rect(src_image, Rect2i(0, 0, res, res), Vector2i()) + + Image.FORMAT_RGB8: + convert_float_heightmap_to_rgb8(src_image, im) + + _: + _logger.error(str("Invalid heightmap format ", im.get_format())) elif ext == "raw": # RAW files don't contain size, so we have to deduce it from 16-bit size. @@ -1396,10 +1480,14 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo for x in rw: var gs := float(f.get_16()) / 65535.0 h = min_y + hrange * float(gs) - # RH, RF -# im.set_pixel(x, y, Color(h, 0, 0)) - # RGB8 - im.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) + match im.get_format(): + Image.FORMAT_RF: + im.set_pixel(x, y, Color(h, 0, 0)) + Image.FORMAT_RGB8: + im.set_pixel(x, y, encode_height_to_rgb8_unorm(h)) + _: + _logger.error(str("Invalid heightmap format ", im.get_format())) + return false # Skip next pixels if the file is bigger than the accepted resolution for x in range(rw, file_res): @@ -1435,7 +1523,13 @@ func _import_heightmap(fpath: String, min_y: float, max_y: float, big_endian: bo # and we are using Z to map the Y axis of the heightmap image. float_heightmap.flip_y() - convert_float_heightmap_to_rgb8(float_heightmap, im) + match im.get_format(): + Image.FORMAT_RF: + im.blit_rect(float_heightmap, Rect2i(0, 0, res, res), Vector2i()) + Image.FORMAT_RGB8: + convert_float_heightmap_to_rgb8(float_heightmap, im) + _: + _logger.error(str("Invalid heightmap format ", im.get_format())) # Note: when importing maps with non-compliant sizes and flipping, # the result might not be aligned to global coordinates. @@ -1537,18 +1631,16 @@ class HT_CellRaycastContext: static func _intersect_cell(heightmap: Image, cx: int, cz: int, begin_pos: Vector3, dir: Vector3, decode_func : Callable): - - assert(heightmap.get_format() == Image.FORMAT_RGB8) var c00 := HT_Util.get_pixel_clamped(heightmap, cx, cz) var c10 := HT_Util.get_pixel_clamped(heightmap, cx + 1, cz) var c01 := HT_Util.get_pixel_clamped(heightmap, cx, cz + 1) var c11 := HT_Util.get_pixel_clamped(heightmap, cx + 1, cz + 1) - var h00 := decode_func.call(c00) - var h10 := decode_func.call(c10) - var h01 := decode_func.call(c01) - var h11 := decode_func.call(c11) + var h00 : float = decode_func.call(c00) + var h10 : float = decode_func.call(c10) + var h01 : float = decode_func.call(c01) + var h11 : float = decode_func.call(c11) var p00 := Vector3(cx, h00, cz) var p10 := Vector3(cx + 1, h10, cz) @@ -1613,7 +1705,16 @@ func cell_raycast(ray_origin: Vector3, ray_direction: Vector3, max_distance: flo ctx.heightmap = heightmap ctx.cell_param_2d_to_3d = max_distance / max_distance_2d ctx.broad_param_2d_to_3d = ctx.cell_param_2d_to_3d * VERTICAL_BOUNDS_CHUNK_SIZE - ctx.decode_height_func = decode_height_from_rgb8_unorm + + match heightmap.get_format(): + Image.FORMAT_RF: + ctx.decode_height_func = decode_height_from_f + Image.FORMAT_RGB8: + ctx.decode_height_func = decode_height_from_rgb8_unorm + _: + _logger.error(str("Invalid heightmap format ", heightmap.get_format())) + return null + #ctx.dbg = dbg # Broad phase through cached vertical bound chunks @@ -1681,11 +1782,18 @@ static func get_map_shader_param_name(map_type: int, index: int) -> String: # return null +static func decode_height_from_f(c: Color) -> float: + return c.r + + const _V2_UNIT_STEPS = 1024.0 const _V2_MIN = -8192.0 const _V2_MAX = 8191.0 const _V2_DF = 255.0 / _V2_UNIT_STEPS +# This RGB8 encoding implementation is specific to this plugin. +# It was used in the port to Godot 4.0 for a time, until it was found float +# textures could be used. static func decode_height_from_rgb8_unorm(c: Color) -> float: return (c.r * 0.25 + c.g * 64.0 + c.b * 16384.0) * (4.0 * _V2_DF) + _V2_MIN diff --git a/addons/zylann.hterrain/shaders/array.gdshader b/addons/zylann.hterrain/shaders/array.gdshader index 4f7b9210..fbbac137 100644 --- a/addons/zylann.hterrain/shaders/array.gdshader +++ b/addons/zylann.hterrain/shaders/array.gdshader @@ -1,6 +1,6 @@ shader_type spatial; -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -66,7 +66,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/detail.gdshader b/addons/zylann.hterrain/shaders/detail.gdshader index 386f0279..dbd14226 100644 --- a/addons/zylann.hterrain/shaders/detail.gdshader +++ b/addons/zylann.hterrain/shaders/detail.gdshader @@ -1,7 +1,7 @@ shader_type spatial; render_mode cull_disabled; -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_detailmap; @@ -45,7 +45,7 @@ vec3 get_ambient_wind_displacement(vec2 uv, float hash) { } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } void vertex() { diff --git a/addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc b/addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc new file mode 100644 index 00000000..c023e523 --- /dev/null +++ b/addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc @@ -0,0 +1,66 @@ + +// Use functions from this file everywhere a heightmap is used, +// so it is easy to track and change the format + +float sample_heightmap(sampler2D spl, vec2 pos) { + // RF + return texture(spl, pos).r; +} + +vec4 encode_height_to_viewport(float h) { + //return vec4(encode_height_to_rgb8_unorm(h), 1.0); + + // Encode regular floats into an assumed RGBA8 output color. + // This is used because Godot 4.0 doesn't support RF viewports, + // and the irony is, even if float viewports get supported, it's likely it will end up RGBAF, + // which is wasting bandwidth because we are only interested in R... + uint u = floatBitsToUint(h); + return vec4( + float((u >> 0u) & 255u), + float((u >> 8u) & 255u), + float((u >> 16u) & 255u), + float((u >> 24u) & 255u) + ) / vec4(255.0); +} + +float decode_height_from_viewport(vec4 c) { + uint u = uint(c.r * 255.0) + | (uint(c.g * 255.0) << 8u) + | (uint(c.b * 255.0) << 16u) + | (uint(c.a * 255.0) << 24u); + return uintBitsToFloat(u); +} + +float sample_height_from_viewport(sampler2D screen, vec2 uv) { + ivec2 ts = textureSize(screen, 0); + vec2 norm_to_px = vec2(ts); + + // Convert to pixels and apply a small offset so we interpolate from pixel centers + vec2 uv_px_f = uv * norm_to_px - vec2(0.5); + + ivec2 uv_px = ivec2(uv_px_f); + + // Get interpolation pixel positions + ivec2 p00 = uv_px; + ivec2 p10 = uv_px + ivec2(1, 0); + ivec2 p01 = uv_px + ivec2(0, 1); + ivec2 p11 = uv_px + ivec2(1, 1); + + // Get pixels + vec4 c00 = texelFetch(screen, p00, 0); + vec4 c10 = texelFetch(screen, p10, 0); + vec4 c01 = texelFetch(screen, p01, 0); + vec4 c11 = texelFetch(screen, p11, 0); + + // Decode heights + float h00 = decode_height_from_viewport(c00); + float h10 = decode_height_from_viewport(c10); + float h01 = decode_height_from_viewport(c01); + float h11 = decode_height_from_viewport(c11); + + // Linear filter + vec2 f = fract(uv_px_f); + float h = mix(mix(h00, h10, f.x), mix(h01, h11, f.x), f.y); + + return h; +} diff --git a/addons/zylann.hterrain/shaders/lookdev.gdshader b/addons/zylann.hterrain/shaders/lookdev.gdshader index 5a9c8a0c..fede393c 100644 --- a/addons/zylann.hterrain/shaders/lookdev.gdshader +++ b/addons/zylann.hterrain/shaders/lookdev.gdshader @@ -2,7 +2,7 @@ shader_type spatial; // Development shader used to debug or help authoring. -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -36,7 +36,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/low_poly.gdshader b/addons/zylann.hterrain/shaders/low_poly.gdshader index 1d31857b..6c98104e 100644 --- a/addons/zylann.hterrain/shaders/low_poly.gdshader +++ b/addons/zylann.hterrain/shaders/low_poly.gdshader @@ -2,7 +2,7 @@ shader_type spatial; // This is a very simple shader for a low-poly coloured visual, without textures -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -33,7 +33,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; // Putting this in vertex saves 2 fetches from the fragment shader, diff --git a/addons/zylann.hterrain/shaders/multisplat16.gdshader b/addons/zylann.hterrain/shaders/multisplat16.gdshader index f97ef19d..6e080520 100644 --- a/addons/zylann.hterrain/shaders/multisplat16.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16.gdshader @@ -4,7 +4,7 @@ shader_type spatial; // This shader uses a texture array with multiple splatmaps, allowing up to 16 textures. // Only the 4 textures having highest blending weight are sampled. -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -226,7 +226,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader index 9c2fa4be..b667496e 100644 --- a/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader +++ b/addons/zylann.hterrain/shaders/multisplat16_lite.gdshader @@ -4,7 +4,7 @@ shader_type spatial; // This shader uses a texture array with multiple splatmaps, allowing up to 16 textures. // Only the 4 textures having highest blending weight are sampled. -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -165,7 +165,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/simple4.gdshader b/addons/zylann.hterrain/shaders/simple4.gdshader index 05a73f0f..6c28b77c 100644 --- a/addons/zylann.hterrain/shaders/simple4.gdshader +++ b/addons/zylann.hterrain/shaders/simple4.gdshader @@ -4,7 +4,7 @@ shader_type spatial; // it should be preferred for high-end graphics cards. // For less features but lower-end targets, see the lite version. -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -165,7 +165,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; wpos.y = h; diff --git a/addons/zylann.hterrain/shaders/simple4_lite.gdshader b/addons/zylann.hterrain/shaders/simple4_lite.gdshader index ca27dce5..dcd660cc 100644 --- a/addons/zylann.hterrain/shaders/simple4_lite.gdshader +++ b/addons/zylann.hterrain/shaders/simple4_lite.gdshader @@ -3,7 +3,7 @@ shader_type spatial; // This is a shader with less textures, in case the main one doesn't run on your GPU. // It's mostly a big copy/paste, because Godot doesn't support #include or #ifdef... -#include "include/heightmap_rgb8_encoding.gdshaderinc" +#include "include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform sampler2D u_terrain_normalmap; @@ -115,7 +115,7 @@ void vertex() { UV = cell_coords / vec2(textureSize(u_terrain_heightmap, 0)); // Height displacement - float h = decode_height_from_rgb8_unorm(texture(u_terrain_heightmap, UV).rgb); + float h = sample_heightmap(u_terrain_heightmap, UV); VERTEX.y = h; v_ground_uv = vec3(cell_coords.x, h * MODEL_MATRIX[1][1], cell_coords.y) / u_ground_uv_scale; diff --git a/addons/zylann.hterrain/tools/brush/decal.gdshader b/addons/zylann.hterrain/tools/brush/decal.gdshader index 451c19a2..b56f43a8 100644 --- a/addons/zylann.hterrain/tools/brush/decal.gdshader +++ b/addons/zylann.hterrain/tools/brush/decal.gdshader @@ -1,14 +1,14 @@ shader_type spatial; render_mode unshaded;//, depth_test_disable; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_terrain_heightmap; uniform mat4 u_terrain_inverse_transform; uniform mat3 u_terrain_normal_basis; float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } void vertex() { diff --git a/addons/zylann.hterrain/tools/brush/no_blend_rf.gdshader b/addons/zylann.hterrain/tools/brush/no_blend_rf.gdshader new file mode 100644 index 00000000..d0460ded --- /dev/null +++ b/addons/zylann.hterrain/tools/brush/no_blend_rf.gdshader @@ -0,0 +1,9 @@ +shader_type canvas_item; +render_mode blend_disabled; + +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" + +void fragment() { + float h = sample_heightmap(TEXTURE, UV); + COLOR = encode_height_to_viewport(h); +} diff --git a/addons/zylann.hterrain/tools/brush/painter.gd b/addons/zylann.hterrain/tools/brush/painter.gd index 6f3929ab..fa4be986 100644 --- a/addons/zylann.hterrain/tools/brush/painter.gd +++ b/addons/zylann.hterrain/tools/brush/painter.gd @@ -14,6 +14,7 @@ extends Node const HT_Logger = preload("../../util/logger.gd") const HT_Util = preload("../../util/util.gd") const HT_NoBlendShader = preload("./no_blend.gdshader") +const HT_NoBlendRFShader = preload("./no_blend_rf.gdshader") const UNDO_CHUNK_SIZE = 64 @@ -71,6 +72,7 @@ var _brush_opacity := 1.0 var _brush_texture : Texture var _last_brush_position := Vector2() var _brush_material := ShaderMaterial.new() +var _no_blend_material : ShaderMaterial var _image : Image var _texture : ImageTexture var _cmd_paint := false @@ -88,17 +90,18 @@ func _init(): _viewport.render_target_update_mode = SubViewport.UPDATE_ONCE _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE #_viewport.hdr = false + # Require 4 components (RGBA) _viewport.transparent_bg = true # Apparently HDR doesn't work if this is set to 2D... so let's waste a depth buffer :/ #_viewport.usage = Viewport.USAGE_2D #_viewport.keep_3d_linear # There is no "blend_disabled" option on standard CanvasItemMaterial... - var no_blend_material := ShaderMaterial.new() - no_blend_material.shader = HT_NoBlendShader + _no_blend_material = ShaderMaterial.new() + _no_blend_material.shader = HT_NoBlendShader _viewport_bg_sprite = Sprite2D.new() _viewport_bg_sprite.centered = false - _viewport_bg_sprite.material = no_blend_material + _viewport_bg_sprite.material = _no_blend_material _viewport.add_child(_viewport_bg_sprite) _viewport_brush_sprite = Sprite2D.new() @@ -122,11 +125,18 @@ func set_image(image: Image, texture: ImageTexture): _viewport_bg_sprite.texture = _texture _brush_material.set_shader_parameter(SHADER_PARAM_SRC_TEXTURE, _texture) if image != null: + if image.get_format() == Image.FORMAT_RF: + # In case of RF all shaders must encode their fragment outputs in RGBA8, + # including the unmodified background, as Godot 4.0 does not support RF viewports + _no_blend_material.shader = HT_NoBlendRFShader + else: + _no_blend_material.shader = HT_NoBlendShader # TODO HDR is required in order to paint heightmaps. # Seems Godot 4.0 does not support it, so we have to wait for Godot 4.1... #_viewport.hdr = image.get_format() in _hdr_formats - if image.get_format() in _hdr_formats: - push_error("Godot 4.0 does not support HDR viewports for GPU-editing heightmaps!") + if (image.get_format() in _hdr_formats) and image.get_format() != Image.FORMAT_RF: + push_error("Godot 4.0 does not support HDR viewports for GPU-editing heightmaps! " + + "Only RF is supported using a bit packing hack.") #print("PAINTER VIEWPORT HDR: ", _viewport.hdr) @@ -261,8 +271,16 @@ func _process(delta: float): _pending_paint_render = false #print("Paint result at frame ", Engine.get_frames_drawn()) - var data := _viewport.get_texture().get_image() - data.convert(_image.get_format()) + var viewport_image := _viewport.get_texture().get_image() + + if _image.get_format() == Image.FORMAT_RF: + # Reinterpret RGBA8 as RF. This assumes painting shaders encode the output properly. + assert(viewport_image.get_format() == Image.FORMAT_RGBA8) + viewport_image = Image.create_from_data( + viewport_image.get_width(), viewport_image.get_height(), false, Image.FORMAT_RF, + viewport_image.get_data()) + else: + viewport_image.convert(_image.get_format()) var brush_pos := _last_brush_position @@ -276,8 +294,8 @@ func _process(delta: float): if src_w != 0 and src_h != 0: _mark_modified_chunks(dst_x, dst_y, src_w, src_h) - HT_Util.update_texture_partial( - _texture, data, Rect2i(src_x, src_y, src_w, src_h), Vector2i(dst_x, dst_y)) + HT_Util.update_texture_partial(_texture, viewport_image, + Rect2i(src_x, src_y, src_w, src_h), Vector2i(dst_x, dst_y)) texture_region_changed.emit(Rect2(dst_x, dst_y, src_w, src_h)) # Input is handled just before process, so we still have to wait till next frame diff --git a/addons/zylann.hterrain/tools/brush/shaders/color.gdshader b/addons/zylann.hterrain/tools/brush/shaders/color.gdshader index b55cd698..eec65f5e 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/color.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/color.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -17,7 +17,7 @@ vec2 get_src_uv(vec2 screen_uv) { } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } vec3 get_normal(sampler2D heightmap, vec2 pos) { diff --git a/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader index ff8983f4..30758b38 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader @@ -1,6 +1,6 @@ shader_type canvas_item; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -17,7 +17,7 @@ vec2 get_src_uv(vec2 screen_uv) { // } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } float erode(sampler2D heightmap, vec2 uv, vec2 pixel_size, float weight) { @@ -59,5 +59,5 @@ void fragment() { vec2 src_pixel_size = 1.0 / vec2(textureSize(u_src_texture, 0)); float ph = erode(u_src_texture, get_src_uv(SCREEN_UV), src_pixel_size, brush_value); //ph += brush_value * 0.35; - COLOR = vec4(encode_height_to_rgb8_unorm(ph), 1.0); + COLOR = encode_height_to_viewport(ph); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader b/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader index 0690abe9..c51f03ae 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/flatten.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -16,7 +16,7 @@ vec2 get_src_uv(vec2 screen_uv) { void fragment() { float brush_value = u_opacity * texture(TEXTURE, UV).r; - float src_h = decode_height_from_rgb8_unorm(texture(u_src_texture, get_src_uv(SCREEN_UV)).rgb); + float src_h = sample_heightmap(u_src_texture, get_src_uv(SCREEN_UV)); float h = mix(src_h, u_flatten_value, brush_value); - COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); + COLOR = encode_height_to_viewport(h); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/level.gdshader b/addons/zylann.hterrain/tools/brush/shaders/level.gdshader index 0fc3da5e..4721b430 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/level.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/level.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -14,7 +14,7 @@ vec2 get_src_uv(vec2 screen_uv) { } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } // TODO Could actually level to whatever height the brush was at the beginning of the stroke? @@ -41,5 +41,5 @@ void fragment() { // TODO I have no idea if this will check out float src_h = get_height(u_src_texture, get_src_uv(SCREEN_UV)); float h = mix(src_h, dst_h, brush_value); - COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); + COLOR = encode_height_to_viewport(h); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader b/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader index 506952c4..10ee9827 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/raise.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -16,7 +16,7 @@ vec2 get_src_uv(vec2 screen_uv) { void fragment() { float brush_value = u_factor * u_opacity * texture(TEXTURE, UV).r; - float src_h = decode_height_from_rgb8_unorm(texture(u_src_texture, get_src_uv(SCREEN_UV)).rgb); + float src_h = sample_heightmap(u_src_texture, get_src_uv(SCREEN_UV)); float h = src_h + brush_value; - COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); + COLOR = encode_height_to_viewport(h); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader b/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader index 7c75933e..27123e48 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/smooth.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -14,7 +14,7 @@ vec2 get_src_uv(vec2 screen_uv) { } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } void fragment() { @@ -30,5 +30,5 @@ void fragment() { float src_h = get_height(u_src_texture, src_uv); float dst_h = (src_h + src_nx + src_px + src_ny + src_py) * 0.2; float h = mix(src_h, dst_h, brush_value); - COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); + COLOR = encode_height_to_viewport(h); } diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader b/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader index d19c4031..68ebaa8e 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/splat16.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -24,7 +24,7 @@ float sum(vec4 v) { } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } vec3 get_normal(sampler2D heightmap, vec2 pos) { diff --git a/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader b/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader index ef61d9e4..1291dbd4 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/splat4.gdshader @@ -1,7 +1,7 @@ shader_type canvas_item; render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform sampler2D u_src_texture; uniform vec4 u_src_rect; @@ -18,7 +18,7 @@ vec2 get_src_uv(vec2 screen_uv) { } float get_height(sampler2D heightmap, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(heightmap, uv).rgb); + return sample_heightmap(heightmap, uv); } vec3 get_normal(sampler2D heightmap, vec2 pos) { diff --git a/addons/zylann.hterrain/tools/bump2normal_tex.gdshader b/addons/zylann.hterrain/tools/bump2normal_tex.gdshader index 0d96cfcd..b0c97da1 100644 --- a/addons/zylann.hterrain/tools/bump2normal_tex.gdshader +++ b/addons/zylann.hterrain/tools/bump2normal_tex.gdshader @@ -1,13 +1,13 @@ shader_type canvas_item; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" vec4 pack_normal(vec3 n) { return vec4((0.5 * (n + 1.0)).xzy, 1.0); } float get_height(sampler2D tex, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(tex, uv).rgb); + return sample_heightmap(tex, uv); } void fragment() { diff --git a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd index 042d48a5..b9890992 100644 --- a/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd +++ b/addons/zylann.hterrain/tools/exporter/export_image_dialog.gd @@ -8,10 +8,12 @@ const HT_Util = preload("../../util/util.gd") const HT_Logger = preload("../../util/logger.gd") const FORMAT_RH = 0 -const FORMAT_R16 = 1 -const FORMAT_PNG8 = 2 -const FORMAT_EXRH = 3 -const FORMAT_COUNT = 4 +const FORMAT_RF = 1 +const FORMAT_R16 = 2 +const FORMAT_PNG8 = 3 +const FORMAT_EXRH = 4 +const FORMAT_EXRF = 5 +const FORMAT_COUNT = 6 @onready var _output_path_line_edit := $VB/Grid/OutputPath/HeightmapPathLineEdit as LineEdit @onready var _format_selector := $VB/Grid/FormatSelector as OptionButton @@ -38,14 +40,18 @@ func _ready(): _format_extensions.resize(FORMAT_COUNT) _format_names[FORMAT_RH] = "16-bit RAW float" + _format_names[FORMAT_RF] = "32-bit RAW float" _format_names[FORMAT_R16] = "16-bit RAW unsigned" - _format_names[FORMAT_PNG8] = "8-bit PNG" + _format_names[FORMAT_PNG8] = "8-bit PNG greyscale" _format_names[FORMAT_EXRH] = "16-bit float greyscale EXR" + _format_names[FORMAT_EXRF] = "32-bit float greyscale EXR" _format_extensions[FORMAT_RH] = "raw" + _format_extensions[FORMAT_RF] = "raw" _format_extensions[FORMAT_R16] = "raw" _format_extensions[FORMAT_PNG8] = "png" _format_extensions[FORMAT_EXRH] = "exr" + _format_extensions[FORMAT_EXRF] = "exr" if not HT_Util.is_in_edited_scene(self): for i in len(_format_names): @@ -126,8 +132,11 @@ func _export() -> bool: elif format == FORMAT_EXRH: float_heightmap.convert(Image.FORMAT_RH) save_error = float_heightmap.save_exr(fpath, true) - - else: + + elif format == FORMAT_EXRF: + save_error = float_heightmap.save_exr(fpath, true) + + else: # RAW var f := FileAccess.open(fpath, FileAccess.WRITE) if f == null: var err := FileAccess.get_open_error() @@ -138,6 +147,9 @@ func _export() -> bool: float_heightmap.convert(Image.FORMAT_RH) f.store_buffer(float_heightmap.get_data()) + elif format == FORMAT_RF: + f.store_buffer(float_heightmap.get_data()) + elif format == FORMAT_R16: var hscale := 65535.0 / (height_max - height_min) for y in float_heightmap.get_height(): diff --git a/addons/zylann.hterrain/tools/generator/generator_dialog.gd b/addons/zylann.hterrain/tools/generator/generator_dialog.gd index 8216f231..bbb70698 100644 --- a/addons/zylann.hterrain/tools/generator/generator_dialog.gd +++ b/addons/zylann.hterrain/tools/generator/generator_dialog.gd @@ -446,6 +446,15 @@ func _on_TextureGenerator_progress_reported(info: Dictionary): func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): + # TODO We should check the terrain's image format, + # but that would prevent from testing in isolation... + if info.maptype == HTerrainData.CHANNEL_HEIGHT: + # Hack to workaround Godot 4.0 not supporting RF viewports. Heights are packed as floats + # into RGBA8 components. + assert(image.get_format() == Image.FORMAT_RGBA8) + image = Image.create_from_data(image.get_width(), image.get_height(), false, + Image.FORMAT_RF, image.get_data()) + if not _applying: # Update preview # TODO Improve TextureGenerator so we can get a ViewportTexture per output? @@ -470,7 +479,6 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): assert(data != null) var dst := data.get_image(info.maptype) assert(dst != null) - # print("Tile ", info.sector) # image.save_png(str("debug_generator_tile_", # info.sector.x, "_", info.sector.y, "_map", info.maptype, ".png")) @@ -479,6 +487,9 @@ func _on_TextureGenerator_output_generated(image: Image, info: Dictionary): # Note, in Godot 4 it seems the chosen renderer also influences what you get. # Forward+ non-transparent viewport gives RGB8, but Compatibility gives RGBA8. # I don't know if it's expected or is a bug... + # Also, since RF heightmaps we use RGBA8 so we can pack floats in pixels, because + # Godot 4.0 does not support RF viewports. But that also means the same viewport may be + # re-used for other maps that don't need to be RGBA8. if image.get_format() != dst.get_format(): image.convert(dst.get_format()) diff --git a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader index ce33a351..7dd9714d 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/bump2normal.gdshader @@ -1,24 +1,26 @@ shader_type canvas_item; +render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" -uniform sampler2D u_screen_texture : hint_screen_texture; +//uniform sampler2D u_screen_texture : hint_screen_texture; +uniform sampler2D u_previous_pass; vec4 pack_normal(vec3 n) { return vec4((0.5 * (n + 1.0)).xzy, 1.0); } float get_height(sampler2D tex, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(tex, uv).rgb); + return sample_height_from_viewport(tex, uv); } void fragment() { vec2 uv = SCREEN_UV; vec2 ps = SCREEN_PIXEL_SIZE; - float left = get_height(u_screen_texture, uv + vec2(-ps.x, 0)); - float right = get_height(u_screen_texture, uv + vec2(ps.x, 0)); - float back = get_height(u_screen_texture, uv + vec2(0, -ps.y)); - float fore = get_height(u_screen_texture, uv + vec2(0, ps.y)); + float left = get_height(u_previous_pass, uv + vec2(-ps.x, 0)); + float right = get_height(u_previous_pass, uv + vec2(ps.x, 0)); + float back = get_height(u_previous_pass, uv + vec2(0, -ps.y)); + float fore = get_height(u_previous_pass, uv + vec2(0, ps.y)); vec3 n = normalize(vec3(left - right, 2.0, fore - back)); COLOR = pack_normal(n); } diff --git a/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader b/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader index 1b196c66..6f45e1c6 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/erode.gdshader @@ -1,16 +1,18 @@ shader_type canvas_item; +render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform vec2 u_slope_up = vec2(0, 0); uniform float u_slope_factor = 1.0; uniform bool u_slope_invert = false; uniform float u_weight = 0.5; uniform float u_dilation = 0.0; -uniform sampler2D u_screen_texture : hint_screen_texture; +//uniform sampler2D u_screen_texture : hint_screen_texture; +uniform sampler2D u_previous_pass; float get_height(sampler2D tex, vec2 uv) { - return decode_height_from_rgb8_unorm(texture(tex, uv).rgb); + return sample_height_from_viewport(tex, uv); } void fragment() { @@ -21,7 +23,7 @@ void fragment() { vec2 eps = SCREEN_PIXEL_SIZE / (0.99 * r); vec2 uv = SCREEN_UV; - float h = get_height(u_screen_texture, uv); + float h = get_height(u_previous_pass, uv); float eh = h; float dh = h; @@ -30,7 +32,7 @@ void fragment() { for (float x = -r; x <= r; ++x) { vec2 p = vec2(float(x), float(y)); - float nh = get_height(u_screen_texture, uv + p * eps); + float nh = get_height(u_previous_pass, uv + p * eps); float s = max(length(p) - r, 0); eh = min(eh, nh + s); @@ -48,10 +50,10 @@ void fragment() { if (u_slope_factor > 0.0) { vec2 ps = SCREEN_PIXEL_SIZE; - float left = get_height(u_screen_texture, uv + vec2(-ps.x, 0.0)); - float right = get_height(u_screen_texture, uv + vec2(ps.x, 0.0)); - float top = get_height(u_screen_texture, uv + vec2(0.0, ps.y)); - float bottom = get_height(u_screen_texture, uv + vec2(0.0, -ps.y)); + float left = get_height(u_previous_pass, uv + vec2(-ps.x, 0.0)); + float right = get_height(u_previous_pass, uv + vec2(ps.x, 0.0)); + float top = get_height(u_previous_pass, uv + vec2(0.0, ps.y)); + float bottom = get_height(u_previous_pass, uv + vec2(0.0, -ps.y)); vec3 normal = normalize(vec3(left - right, ps.x + ps.y, bottom - top)); vec3 up = normalize(vec3(u_slope_up.x, 1.0, u_slope_up.y)); @@ -70,5 +72,5 @@ void fragment() { //eh = 0.5 * (eh + texture(SCREEN_TEXTURE, uv + mp * ps * k).r); //eh = mix(h, eh, (1.0 - h) / r); - COLOR = vec4(encode_height_to_rgb8_unorm(ph), 1.0); + COLOR = encode_height_to_viewport(ph); } diff --git a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader index 25fbb45f..7609f7c7 100644 --- a/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader +++ b/addons/zylann.hterrain/tools/generator/shaders/perlin_noise.gdshader @@ -1,6 +1,8 @@ shader_type canvas_item; +// Required only because we use all 4 channels to encode floats into RGBA8 +render_mode blend_disabled; -#include "res://addons/zylann.hterrain/shaders/include/heightmap_rgb8_encoding.gdshaderinc" +#include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" uniform vec2 u_offset; uniform float u_scale = 0.02; @@ -189,7 +191,7 @@ float get_height(vec2 pos) { // Additive heightmap { vec2 uv = pos / u_terrain_size; - float ah = decode_height_from_rgb8_unorm(texture(u_additive_heightmap, uv).rgb); + float ah = sample_heightmap(u_additive_heightmap, uv); h += u_additive_heightmap_factor * ah; } @@ -205,5 +207,5 @@ void fragment() { float h = get_height(uv_tile * u_tile_size); - COLOR = vec4(encode_height_to_rgb8_unorm(h), 1.0); + COLOR = encode_height_to_viewport(h); } diff --git a/addons/zylann.hterrain/tools/generator/texture_generator.gd b/addons/zylann.hterrain/tools/generator/texture_generator.gd index bf7544db..0caaf7c6 100644 --- a/addons/zylann.hterrain/tools/generator/texture_generator.gd +++ b/addons/zylann.hterrain/tools/generator/texture_generator.gd @@ -17,11 +17,20 @@ signal output_generated(image, metadata) # Emitted when all passes are complete signal completed +class HT_TextureGeneratorViewport: + var viewport : SubViewport + var ci : TextureRect + var _passes := [] var _resolution := Vector2i(512, 512) var _output_padding := [0, 0, 0, 0] -var _viewport : SubViewport = null -var _ci : TextureRect = null + +# Since Godot 4.0, we use ping-pong viewports because `hint_screen_texture` always returns `1.0` +# for transparent pixels, which is wrong, but sadly appears to be intented... +# https://github.com/godotengine/godot/issues/78207 +var _viewports : Array[HT_TextureGeneratorViewport] = [null, null] +var _viewport_index := 0 + var _dummy_texture : Texture2D var _running := false var _rerun := false @@ -37,24 +46,29 @@ var _logger = HT_Logger.get_for(self) func _ready(): - assert(_viewport == null) - assert(_ci == null) - - _viewport = SubViewport.new() - # We render with 2D shaders, but we don't want the parent world to interfere - _viewport.own_world_3d = true - _viewport.world_3d = World3D.new() - _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED - add_child(_viewport) - _dummy_texture = load(DUMMY_TEXTURE_PATH) if _dummy_texture == null: _logger.error(str("Failed to load dummy texture ", DUMMY_TEXTURE_PATH)) - - _ci = TextureRect.new() - _ci.stretch_mode = TextureRect.STRETCH_SCALE - _ci.texture = _dummy_texture - _viewport.add_child(_ci) + + for viewport_index in len(_viewports): + var viewport = SubViewport.new() + # We render with 2D shaders, but we don't want the parent world to interfere + viewport.own_world_3d = true + viewport.world_3d = World3D.new() + viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED + # Require RGBA8 so we can pack heightmap floats into pixels + viewport.transparent_bg = true + add_child(viewport) + + var ci := TextureRect.new() + ci.stretch_mode = TextureRect.STRETCH_SCALE + ci.texture = _dummy_texture + viewport.add_child(ci) + + var vp := HT_TextureGeneratorViewport.new() + vp.viewport = viewport + vp.ci = ci + _viewports[viewport_index] = vp _shader_material = ShaderMaterial.new() @@ -110,8 +124,9 @@ func run(): _rerun = true return - assert(_viewport != null) - assert(_ci != null) + for vp in _viewports: + assert(vp.viewport != null) + assert(vp.ci != null) # Copy passes var passes := [] @@ -133,12 +148,28 @@ func run(): # _uv_offset = Vector2( \ # float(largest_padding) / padded_size.x, # float(largest_padding) / padded_size.y) - - _ci.size = padded_size - - _viewport.size = padded_size - _viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS - _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE + + for vp in _viewports: + vp.ci.size = padded_size + vp.viewport.size = padded_size + + # First viewport index doesn't matter. + # Maybe one issue of resetting it to zero would be that the previous run + # could have ended with the same viewport that will be sent as a texture as + # one of the uniforms of the shader material, which causes an error in the + # renderer because it's not allowed to use a viewport texture while + # rendering on the same viewport +# _viewport_index = 0 + + var first_vp := _viewports[_viewport_index] + first_vp.viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE + # I don't trust `UPDATE_ONCE`, it also doesn't reset so we never know if it actually works... + # https://github.com/godotengine/godot/issues/33351 + first_vp.viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + + for vp in _viewports: + if vp != first_vp: + vp.viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED _running_pass_index = 0 _running_iteration = 0 @@ -151,10 +182,13 @@ func _process(delta: float): if not is_processing(): return + var prev_vpi := 0 if _viewport_index == 1 else 1 + var prev_vp := _viewports[prev_vpi] + if _running_pass_index > 0: var prev_pass : HT_TextureGeneratorPass = _running_passes[_running_pass_index - 1] if prev_pass.output: - _create_output_image(prev_pass.metadata) + _create_output_image(prev_pass.metadata, prev_vp) if _running_pass_index >= len(_running_passes): _running = false @@ -168,14 +202,22 @@ func _process(delta: float): _rerun = false run() else: - _viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED + # Done + for vp in _viewports: + vp.viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED set_process(false) return var p : HT_TextureGeneratorPass = _running_passes[_running_pass_index] + var vp := _viewports[_viewport_index] + vp.viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS + prev_vp.viewport.render_target_update_mode = SubViewport.UPDATE_DISABLED + if _running_iteration == 0: - _setup_pass(p) + _setup_pass(p, vp) + + _setup_iteration(vp, prev_vp) _report_progress(_running_passes, _running_pass_index, _running_iteration) # Wait one frame for render, and this for EVERY iteration and every pass, @@ -186,27 +228,31 @@ func _process(delta: float): _running_iteration = 0 _running_pass_index += 1 + # Swap viewport for next pass + _viewport_index = (_viewport_index + 1) % 2 + # The viewport should render after the tree was processed -func _setup_pass(p: HT_TextureGeneratorPass): +# Called at the beginning of each pass +func _setup_pass(p: HT_TextureGeneratorPass, vp: HT_TextureGeneratorViewport): if p.texture != null: - _ci.texture = p.texture + vp.ci.texture = p.texture else: - _ci.texture = _dummy_texture + vp.ci.texture = _dummy_texture if p.shader != null: if _shader_material == null: _shader_material = ShaderMaterial.new() _shader_material.shader = p.shader - _ci.material = _shader_material + vp.ci.material = _shader_material if p.params != null: for param_name in p.params: _shader_material.set_shader_parameter(param_name, p.params[param_name]) - var vp_size_f := Vector2(_viewport.size) + var vp_size_f := Vector2(vp.viewport.size) var res_f := Vector2(_resolution) var scale_ndc := vp_size_f / res_f var pad_offset_ndc := ((vp_size_f - res_f) / 2.0) / vp_size_f @@ -219,20 +265,28 @@ func _setup_pass(p: HT_TextureGeneratorPass): if p.params == null or not p.params.has("u_uv_scale"): _shader_material.set_shader_parameter("u_uv_scale", scale_ndc) - + if p.params == null or not p.params.has("u_uv_offset"): _shader_material.set_shader_parameter("u_uv_offset", offset_ndc) - + else: - _ci.material = null + vp.ci.material = null if p.clear: - _viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE + vp.viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE + + +# Called for every iteration of every pass +func _setup_iteration(vp: HT_TextureGeneratorViewport, prev_vp: HT_TextureGeneratorViewport): + assert(vp != prev_vp) + if _shader_material != null: + _shader_material.set_shader_parameter("u_previous_pass", prev_vp.viewport.get_texture()) -func _create_output_image(metadata): - var tex := _viewport.get_texture() +func _create_output_image(metadata, vp: HT_TextureGeneratorViewport): + var tex := vp.viewport.get_texture() var src := tex.get_image() +# src.save_png(str("ddd_tgen_output", metadata.maptype, ".png")) # Pick the center of the image var subrect := Rect2i( \ From 65f7ca453d5fc70a2b186933a1d1b984ba8eb886 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 28 Jun 2023 18:46:02 +0100 Subject: [PATCH 89/94] Fix erosion brush --- addons/zylann.hterrain/tools/brush/shaders/erode.gdshader | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader index 30758b38..669f4d7c 100644 --- a/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader +++ b/addons/zylann.hterrain/tools/brush/shaders/erode.gdshader @@ -1,4 +1,5 @@ shader_type canvas_item; +render_mode blend_disabled; #include "res://addons/zylann.hterrain/shaders/include/heightmap.gdshaderinc" From ab896eb91d037617a46f1b5a38c6b1298d001225 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 28 Jun 2023 18:46:23 +0100 Subject: [PATCH 90/94] Update doc about heightmap channel --- addons/zylann.hterrain/doc/docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/doc/docs/index.md b/addons/zylann.hterrain/doc/docs/index.md index ba4e4d80..edde4cac 100644 --- a/addons/zylann.hterrain/doc/docs/index.md +++ b/addons/zylann.hterrain/doc/docs/index.md @@ -770,7 +770,7 @@ A list of `uniform` parameters are recognized, some of which are required for he Parameter name | Type | Format | Description ------------------------------------|------------------|---------|-------------- -`u_terrain_heightmap` | `sampler2D` | `RH` | The heightmap, a half-precision float texture which can be sampled in the red channel. Like the other following maps, you have to access it using cell coordinates, which can be computed as seen in the built-in shader. +`u_terrain_heightmap` | `sampler2D` | `RH` | The heightmap, a 32-bit float texture which can be sampled in the red channel. Like the other following maps, you have to access it using cell coordinates, which can be computed as seen in the built-in shader. `u_terrain_normalmap` | `sampler2D` | `RGB8` | The precalculated normalmap of the terrain, which you can use instead of computing it from the heightmap `u_terrain_colormap` | `sampler2D` | `RGBA8` | The color map, which is the one modified by the color brush. The alpha channel is used for holes. `u_terrain_splatmap` | `sampler2D` | `RGBA8` | The classic 4-component splatmap, where each channel determines the weight of a given texture. The sum of each channel across all splatmaps must be 1.0. From 40aa772c3422bed79ebd28f329526ba1c7c30ed4 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Wed, 28 Jun 2023 21:19:22 +0100 Subject: [PATCH 91/94] Change shape list to be usable without cycling, made cycling opt-in --- addons/zylann.hterrain/tools/brush/brush.gd | 28 +++++++++++++++++-- .../tools/brush/brush_editor.gd | 16 +++++++++-- .../settings_dialog/brush_settings_dialog.gd | 9 ++++++ .../brush_settings_dialog.tscn | 5 ++++ 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/addons/zylann.hterrain/tools/brush/brush.gd b/addons/zylann.hterrain/tools/brush/brush.gd index 678e10c3..73d447fb 100644 --- a/addons/zylann.hterrain/tools/brush/brush.gd +++ b/addons/zylann.hterrain/tools/brush/brush.gd @@ -17,6 +17,7 @@ const MAX_SIZE = 4000 signal size_changed(new_size) signal shapes_changed +signal shape_index_changed var _size := 32 var _opacity := 1.0 @@ -31,6 +32,7 @@ var _frequency_time_ms := 0 var _shapes : Array[Texture2D] = [] var _shape_index := 0 +var _shape_cycling_enabled := false var _prev_position := Vector2(-999, -999) var _prev_time_ms := 0 @@ -124,6 +126,25 @@ func get_shape(i: int) -> Texture2D: return _shapes[i] +func get_shape_index() -> int: + return _shape_index + + +func set_shape_index(i: int): + assert(i >= 0) + assert(i < len(_shapes)) + _shape_index = i + shape_index_changed.emit() + + +func set_shape_cycling_enabled(enable: bool): + _shape_cycling_enabled = enable + + +func is_shape_cycling_enabled() -> bool: + return _shape_cycling_enabled + + static func load_shape_from_image_file(fpath: String, logger, retries := 1) -> Texture2D: var im := Image.new() var err := im.load(fpath) @@ -180,9 +201,10 @@ func configure_paint_input(painters: Array[HT_Painter], position: Vector2, press #painter.paint_input(position) - _shape_index += 1 - if _shape_index >= len(_shapes): - _shape_index = 0 + if _shape_cycling_enabled: + _shape_index += 1 + if _shape_index >= len(_shapes): + _shape_index = 0 return true diff --git a/addons/zylann.hterrain/tools/brush/brush_editor.gd b/addons/zylann.hterrain/tools/brush/brush_editor.gd index c45943ef..1e645a34 100644 --- a/addons/zylann.hterrain/tools/brush/brush_editor.gd +++ b/addons/zylann.hterrain/tools/brush/brush_editor.gd @@ -101,6 +101,7 @@ func set_terrain_painter(terrain_painter: HT_TerrainPainter): if _terrain_painter != null: _terrain_painter.flatten_height_changed.disconnect(_on_flatten_height_changed) _terrain_painter.get_brush().shapes_changed.disconnect(_on_brush_shapes_changed) + _terrain_painter.get_brush().shape_index_changed.disconnect(_on_brush_shape_index_changed) _terrain_painter = terrain_painter @@ -130,10 +131,11 @@ func set_terrain_painter(terrain_painter: HT_TerrainPainter): var default_shape_fpath := HT_Brush.DEFAULT_BRUSH_TEXTURE_PATH var default_shape := HT_Brush.load_shape_from_image_file(default_shape_fpath, _logger) brush.set_shapes([default_shape]) - _shape_texture_rect.texture = brush.get_shape(0) + _update_shape_preview() _terrain_painter.flatten_height_changed.connect(_on_flatten_height_changed) brush.shapes_changed.connect(_on_brush_shapes_changed) + brush.shape_index_changed.connect(_on_brush_shape_index_changed) func _on_flatten_height_changed(): @@ -142,7 +144,17 @@ func _on_flatten_height_changed(): func _on_brush_shapes_changed(): - _shape_texture_rect.texture = _terrain_painter.get_brush().get_shape(0) + _update_shape_preview() + + +func _on_brush_shape_index_changed(): + _update_shape_preview() + + +func _update_shape_preview(): + var brush := _terrain_painter.get_brush() + var i := brush.get_shape_index() + _shape_texture_rect.texture = brush.get_shape(i) func set_display_mode(mode: int): diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd index c2ed4763..b12c44ac 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd @@ -22,6 +22,7 @@ const HT_Scratchpad = preload("./preview_scratchpad.gd") @onready var _frequency_distance_slider : HT_SpinSlider = $VB/HB/VB2/Settings/FrequencyDistance @onready var _frequency_time_slider : HT_SpinSlider = $VB/HB/VB2/Settings/FrequencyTime @onready var _random_rotation_checkbox : CheckBox = $VB/HB/VB2/Settings/RandomRotation +@onready var _shape_cycling_checkbox : CheckBox = $VB/HB/VB2/Settings/ShapeCycling var _brush : HT_Brush # This is a `EditorFileDialog`, @@ -196,6 +197,7 @@ func _update_controls_from_brush(): _frequency_time_slider.set_value( 1000.0 / maxf(0.1, float(brush.get_frequency_time_ms())), false) _random_rotation_checkbox.button_pressed = brush.is_random_rotation_enabled() + _shape_cycling_checkbox.button_pressed = brush.is_shape_cycling_enabled() func _on_ClearScratchpad_pressed(): @@ -246,6 +248,11 @@ func _on_RandomRotation_toggled(button_pressed: bool): brush.set_random_rotation_enabled(button_pressed) +func _on_shape_cycling_toggled(button_pressed: bool): + for brush in _get_brushes(): + brush.set_shape_cycling_enabled(button_pressed) + + func _get_brushes() -> Array[HT_Brush]: if _brush != null: # We edit both the preview brush and the terrain brush @@ -257,6 +264,7 @@ func _get_brushes() -> Array[HT_Brush]: func _on_ShapeList_item_selected(index): _update_shape_list_buttons() + _brush.set_shape_index(index) func _update_shape_list_buttons(): @@ -268,3 +276,4 @@ func _update_shape_list_buttons(): func _on_shape_list_empty_clicked(at_position, mouse_button_index): _update_shape_list_buttons() + diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn index 250aa813..7d7e07db 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.tscn @@ -138,6 +138,10 @@ greater_max_value = 4000.0 layout_mode = 2 text = "Random rotation" +[node name="ShapeCycling" type="CheckBox" parent="VB/HB/VB2/Settings"] +layout_mode = 2 +text = "Shape cycling" + [node name="HSeparator" type="HSeparator" parent="VB/HB/VB2/Settings"] visible = false layout_mode = 2 @@ -203,4 +207,5 @@ text = "Clear" [connection signal="value_changed" from="VB/HB/VB2/Settings/FrequencyTime" to="." method="_on_FrequencyTime_value_changed"] [connection signal="value_changed" from="VB/HB/VB2/Settings/FrequencyDistance" to="." method="_on_FrequencyDistance_value_changed"] [connection signal="toggled" from="VB/HB/VB2/Settings/RandomRotation" to="." method="_on_RandomRotation_toggled"] +[connection signal="toggled" from="VB/HB/VB2/Settings/ShapeCycling" to="." method="_on_shape_cycling_toggled"] [connection signal="pressed" from="VB/HB/VB3/ClearScratchpad" to="." method="_on_ClearScratchpad_pressed"] From 76cfe9769acd54506df159f4fc5fb51d6be12e55 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Mon, 3 Jul 2023 22:52:13 +0100 Subject: [PATCH 92/94] Fixed brush testing scratchpad not following selected shape item in list --- .../tools/brush/settings_dialog/brush_settings_dialog.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd index b12c44ac..71f81d11 100644 --- a/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd +++ b/addons/zylann.hterrain/tools/brush/settings_dialog/brush_settings_dialog.gd @@ -264,7 +264,8 @@ func _get_brushes() -> Array[HT_Brush]: func _on_ShapeList_item_selected(index): _update_shape_list_buttons() - _brush.set_shape_index(index) + for brush in _get_brushes(): + brush.set_shape_index(index) func _update_shape_list_buttons(): From dacdb4ce664d1d61e62324f91694a812c8d7d299 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Thu, 6 Jul 2023 21:29:51 +0100 Subject: [PATCH 93/94] Fix compatibility breakage introduced by Godot 4.1 This also means the plugin no longer works in 4.0, unless you revert this specific change. --- addons/zylann.hterrain/tools/preview_generator.gd | 4 ++-- project.godot | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/zylann.hterrain/tools/preview_generator.gd b/addons/zylann.hterrain/tools/preview_generator.gd index 38b8ebf9..4b6e3db1 100644 --- a/addons/zylann.hterrain/tools/preview_generator.gd +++ b/addons/zylann.hterrain/tools/preview_generator.gd @@ -8,7 +8,7 @@ const HT_Logger = preload("../util/logger.gd") var _logger = HT_Logger.get_for(self) -func _generate(res: Resource, size: Vector2i) -> Texture2D: +func _generate(res: Resource, size: Vector2i, metadata: Dictionary) -> Texture2D: if res == null or not (res is HTerrainData): return null var normalmap = res.get_image(HTerrainData.CHANNEL_NORMAL) @@ -17,7 +17,7 @@ func _generate(res: Resource, size: Vector2i) -> Texture2D: return _generate_internal(normalmap, size) -func _generate_from_path(path: String, size: Vector2i) -> Texture2D: +func _generate_from_path(path: String, size: Vector2i, metadata: Dictionary) -> Texture2D: if not path.ends_with("." + HTerrainData.META_EXTENSION): return null var data_dir := path.get_base_dir() diff --git a/project.godot b/project.godot index c820d46e..09e4acd3 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Heightmap Terrain" -config/features=PackedStringArray("4.0") +config/features=PackedStringArray("4.1") config/icon="res://icon.png" name="Heightmap GDNative" icon="res://icon.png" From 3270d32c51d6628235017159e9848652b109b164 Mon Sep 17 00:00:00 2001 From: Marc Gilleron Date: Tue, 18 Jul 2023 21:51:49 +0100 Subject: [PATCH 94/94] Update version, changelog and readme --- CHANGELOG.md | 10 ++++++++-- README.md | 6 +++--- addons/zylann.hterrain/LICENSE.md | 2 +- addons/zylann.hterrain/doc/docs/index.md | 7 +++++-- addons/zylann.hterrain/plugin.cfg | 2 +- addons/zylann.hterrain/tools/about/about_dialog.tscn | 2 +- 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43559bc7..d5615738 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,14 +5,20 @@ This is a high-level changelog for each released versions of the plugin. For a more detailed list of past and incoming changes, see the commit history. -1.6.2 (dev) ------------- +1.7 +------ + +This version requires Godot 4.1. +- Ported the plugin to Godot 4.1 +- Heightmaps now use 32-bit floats instead of 16-bit floats +- Changed some APIs to use `Vector2i` - Added `cast_shadow` setting to `HTerrain` - Added `cast_shadow` setting to `HTerrainDetailLayer` - Added slope limit slider to detail density painting - Exposed `roughness` in detail layer shader (but reflections may be off due to the normals hack) - Allow decimal values in `min_height` and `max_height` when importing a heightmap +- Changed shape list in brush settings so it can be used as a regular palette when cycling is off - Fixed terrain not functional when using a 32-bit version of Godot (The GDNative library is only maintained for 64-bit) - Fixed TextureSet editor logging errors when selecting slots with textures using color codes instead of image files - Fixed texture list becoming empty when selecting another terrain sharing the same TextureSet diff --git a/README.md b/README.md index ec5578e4..8823845b 100644 --- a/README.md +++ b/README.md @@ -3,17 +3,17 @@ HeightMap terrain plugin for Godot Engine ![Editor screenshot](https://user-images.githubusercontent.com/1311555/49705861-a5275380-fc19-11e8-8338-9ad364d2db8d.png) -Heightmap-based terrain for Godot 3.3.x, 3.4.x and 3.5.x. +Heightmap-based terrain for Godot 4.1. It supports texture painting, colouring, holes, level of detail and grass, while still targetting the Godot API. -**Note:** The current Godot `master` branch isn't supported yet. Use Godot 3.3.x or higher if you want to use this plugin. - This repository holds the latest development version, which means it has the latest features but can also have bugs. For a "stable" version, use the asset library or download from a commit tagged with a version. The `master` branch is the latest development version, and may have bugs. Some major features can also be in other branches until they are done. For release versions, check the Git branches named after those versions, like `0.10`. To get the last version that supported Godot 3.0.6, checkout [branch `0.10`](https://github.com/Zylann/godot_heightmap_plugin/tree/0.10). +To get the last version that supported Godot 3.x, checkout [branch `godot3`](https://github.com/Zylann/godot_heightmap_plugin/tree/godot3) + Installation -------------- diff --git a/addons/zylann.hterrain/LICENSE.md b/addons/zylann.hterrain/LICENSE.md index fe7c3f87..a71a9548 100644 --- a/addons/zylann.hterrain/LICENSE.md +++ b/addons/zylann.hterrain/LICENSE.md @@ -1,7 +1,7 @@ HeightMap terrain for Godot Engine ------------------------------------ -Copyright (c) 2016-2020 Marc Gilleron +Copyright (c) 2016-2023 Marc Gilleron Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/addons/zylann.hterrain/doc/docs/index.md b/addons/zylann.hterrain/doc/docs/index.md index edde4cac..a6ce16ba 100644 --- a/addons/zylann.hterrain/doc/docs/index.md +++ b/addons/zylann.hterrain/doc/docs/index.md @@ -22,7 +22,9 @@ This written doc should be the most up to date and precise information, but vide ### How to install -You will need to use Godot 3.1 or later. It is best to use latest stable 3.x version (Godot 4 is not supported yet). +You will need to use Godot 4.1 or later. + +To get the last version that supported Godot 3.x, checkout the `godot3` branch in the Git repository. #### Automatically @@ -127,7 +129,6 @@ As you sculpt, the plugin automatically recomputes normals of the terrain, and s You can enable or disable collisions by checking the `Collisions enabled` property in the inspector. Heightmap-based terrains usually implement collisions directly using the heightmap, which saves a lot of computations compared to a classic mesh collider. -This plugin depends on the **Bullet Physics** integration in Godot, which does have a height-field collider. **Godot Physics** does not support it until version 3.4, so if you use an older version, you may want to make sure Bullet is enabled in your project settings: ![Screenshot of the option to choose physics engines in project settings](images/choose_bullet_physics.png) @@ -135,6 +136,8 @@ Some editor tools rely on colliders to work, such as snapping to ground or plugi ![Screenshot of the menu to update the collider](images/update_editor_collider.png) +Note: if you use Godot 3.3, you need to make sure to use the Bullet physics engine in your project settings. + #### Known issues diff --git a/addons/zylann.hterrain/plugin.cfg b/addons/zylann.hterrain/plugin.cfg index fe1c7193..49e070c9 100644 --- a/addons/zylann.hterrain/plugin.cfg +++ b/addons/zylann.hterrain/plugin.cfg @@ -3,5 +3,5 @@ name="Heightmap Terrain" description="Heightmap-based terrain" author="Marc Gilleron" -version="1.7.0 dev" +version="1.7.0" script="tools/plugin.gd" diff --git a/addons/zylann.hterrain/tools/about/about_dialog.tscn b/addons/zylann.hterrain/tools/about/about_dialog.tscn index a958b3e6..efeda7aa 100644 --- a/addons/zylann.hterrain/tools/about/about_dialog.tscn +++ b/addons/zylann.hterrain/tools/about/about_dialog.tscn @@ -71,7 +71,7 @@ script = ExtResource("3") [node name="License" type="RichTextLabel" parent="VB/HB2/TC"] visible = false layout_mode = 2 -text = "Copyright (c) 2016-2020 Marc Gilleron +text = "Copyright (c) 2016-2023 Marc Gilleron Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: